bclose

Abrir el servidor de la Raspberry a Internet

Acceder al servidor desde cualquier parte con 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 8Gb16 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.

 

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

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

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.

(6) Comments

  • Saludos…. Como siempre, muy bueno.

    Hace unos días hice un tutorial para crear nuestro propio servicio tipo no-ip, y así no dependemos de terceros.

    Si alguno le interesa chujalt.com/2/Hilo-Aporte-Saber-nuestra-IP-publica-Servicio-tipo-no-ip-o-DynDNS

    Saludos

    • Gracias por el aporte.

    • Gracias por las molestias y el tutorial. Me surge una pregunta: si también en este caso hace falta un servidor de Internet, ¿no se sigue dependiendo de terceros?

    • Gerard

    Saludos y felicidades por los tutoriales, que son fantásticos.
    No consigo redireccionar el puerto hacia la raspi. Sigo los pasos pero cuando me conecto a mi ip pública o a la dirección de no-ip me muestra la web de configuración de mi router… Supongo que este esta ocupando el puerto 80.
    Como puedo solucionarlo? Mi router es un ZTE H218N.
    Gracias!!

    • Hola Gerard, por lo que leo por ahí, los routers de Jazztel no dejan entrar por ip pública desde un ordenador en red local. Prueba a ver desde un ordenador externo y nos dices. Un saludo.

      • Correcto. No logré entrar por local de ninguna forma, así que desactivé la wifi del teléfono, probé por 3G y tachán! Estaba a punto de volverme loco…
        Aún así, configuré apache para que saliera por el puerto 8080 y luego redireccioné a través del router.
        Saludos y gracias por responder!

Give a Reply

WordPress Anti-Spam by WP-SpamShield