Objetivos
Material requerido.
Una Raspberry Pi 3, aunque valen la 2 y la 1 | |
Una micro SD de al menos 4Gb y preferiblemente de 8Gb, 16 Gb o 32 Gb. | |
Una fuente de alimentación externa tipo teléfono móvil con micro USB | |
Un cable HDMI |
PORT FORWARDING
Hasta ahora sólo podemos acceder a nuestro servidor desde la red local, es decir desde cualquier dispositivo que esté conectado a la misma red que la Raspi. Si queremos acceder a ella desde el exterior a través de Internet vamos a tener que hacer algunas cosas más. Lo primero tendremos que abrir el puerto correspondiente de nuestro router para permitir acceder al mismo desde el exterior y redirigir las conexiones entrantes hacia la IP que le hemos asignado a la Raspberry. Cada router es un poco de su padre y de su madre, así que tendréis que mirar cómo se hace en el vuestro, pero como ejemplo ponemos el que utilizamos nosotros, que es un Technicolor de Euskaltel.
Para acceder a él tenemos que escribir en el navegador 192.168.0.1. Se nos abrirá una pantalla en la que nos pedirá usuario y contraseña. Tras introducirla podremos acceder a los parámetros del router. Tenemos que acceder al Port Forwarding o Reenvío de Puertos, que en nuestro caso está dentro de las opciones avanzadas. Ahí pulsamos en «Crear IPv4».
En la dirección IP local pondremos la de nuestra Raspberry, y como puerto el 80, y en la IP externa hay que poner la IP a la que autorizamos a entrar en la Raspberry. Nosotros vamos a poner 0.0.0.0, que da permiso a todas. Como puerto seleccionaremos también el 80. Tendremos algo como esto:
Para probar que funcione buscar en Google «my ip», y el primer resultado os dará vuestra IP. Si escribís ahora esa IP en un navegador, tanto desde dentro de nuestra red local como desde fuera, accederéis al servidor de la Raspberry. Podéis probar a entrar en cualquier otra de las páginas que hemos creado con PHP.
DNS DINÁMICO
Tener que acceder a nuestro servidor utilizando la IP no es lo más adecuado, sobre todo si tenemos en cuenta que cada vez que nuestro router pierda la conexión, por ejemplo al reiniciarlo, nuestra IP pública puede cambiar, ya que nuestro proveedor de internet nis asigna una diferente cada vez que nos conectamos. Para que esto no ocurra utilizaremos lo que se llama DDNS o DNS Dinámico. Esta función nos permite asociar el nombre de un dominio a nuestra IP.
Hay varias páginas que nos permiten tener un dominio personalizado aún cuando teniendo una IP dinámica. En nuestro caso hemos usado www.noip.com, que aunque tiene servicios de pago, también ofrece gratuitos con ciertas limitaciones. Para lo que nosotros la vamos a usar, la única molestia será que expira cada 30 días y tendremos que entrar a renovarlo unos días antes.
No tenéis más que registraros en ella o en cualquier otra y seguir las indicaciones. Y ahora probad a escribir la dirección en el navegador en vez de la IP que hemos estado usando. Deberíais poder acceder a las páginas que hemos creado.
Ahora nos queda conseguir que si nuestra IP pública cambia, el dominio que hemos registrado apunte hacia la nueva IP que se nos asigne. Para ello tenemos dos opciones, entrar en la configuración del router o instalar una aplicación en la Raspberry llamada ddclient que está disponible en el repositorio de Raspbian.
Si lo hacéis desde el router, tenéis que acceder a la categoría «Network» y allí a DDNS. Desde ahí podéis elegir el servicio de DDNS en el que os hayáis registrado (en nuestro caso www.noIP.com) y os pedirá usuario y contraseña con el que os hayáis registrado en la página y el nombre del dominio que hayáis escogido.
La otra opción es instalar ddclient. Para ello ejecutamos la siguiente instrucción:
sudo apt-get install ddclient
Nos guiará un asistente durante la instalación.Cuando nos pregunte si queremos ejecutar el cliente cuando establezca una conexión PPP le diremos que no, y a continuación que sí lo queremos ejecutar como daemon.
En la siguiente pantalla nos pedirá el proveedor de DNS dinámico, pulsaremos «Otro» y pondremos el sitio en el que lo hayamos hecho, por ejemplo «www.noip.com».
Entonces nos preguntará por el protocolo y escogeremos «dynds2».
A continuación no preguntará por el interfaz de red, si la tenemos con cable de ethernet pondremos «eth0» y si lo tenemos por WiFi «wlan0».
Y ya por últimos nos pedirá el nombre del dominio que hemos creado.
Una vez terminado reiniciamos la Raspi. Y si en algún momento necesitáis reconfigurarlo, podéis hacerlo con la instrucción:
sudo dpkg-reconfigure ddclient
AÑADIR UN POCO DE SEGURIDAD A LA PÁGINA PARA SUBIR DATOS
Ahora que cualquiera puede entrar en nuestro servidor, tenemos el problema de que alguien puede conectarse sin querer (aunque es bastante difícil) a la página que creamos en su momento para subir datos y mandarnos datos que no queremos. Así que vamos a implementar una memdida de seguridad (un poco flojilla) en la que para poder enviar datos a la base de dattos tendremos que enviar también un password que hayamos predefinido anteriormente. Para ello tenemos que editar el fichero que hicimos en su momento:
sudo nano /var/www/html/dht11.php
Y le añadiremos una estructura de tipo if de esta forma:
<?php $password= "1234"; // dht11.php //Importamos la configuracion require("config.php"); if ($_GET['pass'] == $password) { // Leemos los valores que nos llegan por GET $Temperatura = mysqli_real_escape_string($con, $_GET['Temperatura']); $Humedad = mysqli_real_escape_string($con, $_GET['Humedad']); // Esta es la instruccion para insertar los valores $query = "INSERT INTO Valores(Temperatura, Humedad) VALUES('$Temperatura','$Humedad')"; // Ejecutamos la instruccion mysqli_query($con, $query); mysqli_close($con); echo "Página para subir los datos<br />"; echo "<br />Temperatura = $Temperatura ºC<br />"; echo "<br />Humedad = $Humedad %<br />"; } else { echo "Acceso bloqueado. Necesitas la contraseña para acceder a la base de datos."; } ?>
Como veis le hemos puesto un password muy tonto «1234», pero vamos a comprobar como funciona. Si tratamos de acceder a la página sin él tendríamos que ver un mensaje avisándonos de que no podemos acceder a ella sin la contraseña, y por lo tanto no se enviarán los datos a la tabla de la base de datos que tenemos creada:
Así que para acceder a él tenemos que pasarle primero la contraseña, a la que hemos declarado como «pass», de la misma forma que pasamos los valores de temperatura y humedad. Ahora sí, veréis la pantalla correctamente, y si accedéis a la base de datos en PHPMyAdmin, podréis comprobar que se han subido los datos a la tabla.
Resumen de la sesión
En esta sesión hemos aprendido varias cosas importantes: