Abrir el servidor de la Raspberry a Internet

Objetivos

  • Configurar nuestro router para poder acceder al servidor de la Raspberry desde Internet.
  • Activar y configurar el servicio de DDNS.
  • Poner contraseña a la página para subir datos al servidor. 
  •  

    Material requerido.

    Vista lateral  Una Raspberry Pi 3, aunque valen la 2 y la 1

    vista frontal
    Una micro SD de al menos 4Gb y preferiblemente de 8Gb, 16 Gb o 32 Gb.
    Vista lateral Una fuente de alimentación externa tipo teléfono móvil con micro USB
    video para raspberry pi 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:

    reenvío de puertos

    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.

    ¡Accede al contenido!

     

    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.

    dns dinámico

     

    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.

    dynamic dns

    La otra opción es instalar ddclient. Para ello ejecutamos la siguiente instrucción:

    sudo apt-get install ddclient

    ¡Accede al contenido!

    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.

    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».

    proveedor ddns

    Entonces nos preguntará por el protocolo y escogeremos «dynds2».

    protocolo

    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».

    interfaz

    Y ya por últimos nos pedirá el nombre del dominio que hemos creado.

    dominio

    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."; 
    
     }
    
    ?>

    ¡Accede al contenido!

    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:

    servidor raspberry

    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.

    servidor raspberry

     

    Resumen de la sesión

     

    En esta sesión hemos aprendido varias cosas importantes: 

  • Hemos configurado nuestro router para acceder al servidor de la Raspberry a través de Internet.
  • Hemos configurado el servicio de DDNS.
  • Hemos puesto una pequeña medida de seguridad en forma de contraseña a la página para subir datos al servidor.[/three-fourth][margin value=»5″ /]
  •    

    Deja una respuesta