Accediendo a nuestro Raspberry Pi desde internet con No-IP

rpi-noipContinuando con mi anterior post, voy a explicar el proceso que debemos seguir para poder conectarnos a nuestro servidor de Mumble en el Raspberry PI desde fuera de nuestra red local. Para ello vamos a tener que hacer un par de cosas:

  1. Abrir un puerto en el router para poder acceder al servidor
  2. Instalar No-IP para solucionar el problema de la IP dinámica

Abrir puertos

Esta sección es una breve explicación de cómo funcionan un par de cosas. Si quieres pasar a la acción puedes ir directamente a Creando un dominio en No-IP.

Sin entrar en detalles, en nuestra casa tenemos una red interna que la forman el router y los ordenadores conectados al router (por cable o wifi). En esta red los equipos que tengamos conectados tienen direcciones del estilo 192.168.1.12. Por otro lado, de cara a Intenné, sólo tenemos una dirección del estilo 81.82.83.84, que es la dirección del router. Entonces, si yo quiero conectarme a mi casa, pongo la dirección 81.82.83.84 y listo.

Diagrama sin nombrePero hay un problema. Yo quiero conectarme al servidor de Mumble que tiene mi Raspberry Pi (RPi a partir de ahora), pero en esa dirección 81.82.83.84 el único que me responde es el router, y no entiende de servidores Mumble. Entonces tengo dos opciones, o bien redirigir todo lo que llegue a mi router al RPi o bien redirigir únicamente el tráfico que llega hasta un puerto a mi servidor, lo tiene algo más de sentido.

Lo de los puertos es un modo sencillo de utilizar una única dirección IP para varias cosas, para dar varios servicios. Un servicio puede ser nuestro servidor de Mumble, que utiliza por defecto el puerto 64738, así que si yo me conecto a la dirección 81.82.83.84 y al puerto 64738, normalmente voy a esperar que ahí me de servicio un servidor Mumble y pueda hablar con mis amigos.

Entonces lo que tengo que decirle al router es “oye, todas las conexiones que te lleguen a este puerto me las mandas al RPi”, o traducido a nuestra red, “todo lo que te llegue a 81.82.83.84:64738 desde ¡Intenné! me lo mandas a 192.168.1.12:64738“. La nomenclatura como se puede observar es dirección:puerto.

Como cada router es de su padre y de su madre, no me voy a meter en cómo abrirlos. Tenéis una lista muy buena en PortForward que os explica con fotos y todo cómo abrir el puerto en vuestro modelo de router (el modelo y marca lo tendréis en una pegatina debajo de vuestro router). Sólo tenéis que seleccionar la marca, el modelo y seguir las fotitos. Como ya he dicho, tenéis que abrir el puerto 64738 para Mumble.

No-IP

Ahora ya podemos conectarnos a nuestro servidor, pero tenemos otro problema: la IP dinámica. Por norma general, cuando apaguemos el router nuestro operador nos va a asignar una dirección IP distinta cuando lo volvamos a encender, por lo que tendremos que estar mirando constantemente cuál es nuestra dirección IP de cara a internet para poder conectarnos a nuestro RPi. Este problema lo podemos solucionar de forma muy sencilla con No-IP.

¿Qué es No-IP? Entre otras cosas, un servicio de DNS dinámico, es decir, que ellos te van a dar un nombre de dominio, como puede ser mimumble.no-ip.org, y tu desde ese dominio te vas a poder conectar a tu servidor sin tener que preocuparte de cual sea su dirección en ese momento: No-IP se va a encargar de mantener actualizada la dirección IP pública de tu Raspberry Pi automáticamente y tu vas a poder acceder a ella con un bonito y cómodo dominio. Mola ¿no?. Hay varios servicios de este estilo, he elegido No-IP porque lo conocía y ofrecen un buen servicio gratuíto.

El funcionamiento de No-IP es sencillo. Nuestro Raspberry Pi va a tener instalado un cliente de no-ip que va a informar cada cierto tiempo a los servidores de No-IP cual es su dirección IP pública y de este modo No-IP va a conocer en todo momento la dirección de nuestro servidor. Si apagamos el router y nuestra dirección cambia sólo hay que esperar a que nuestro RPi informe a No-IP de cuál es nuestra nueva dirección.

no-ip1Ahora cuando nos queramos conectar a nuestro servidor desde un ordenador fuera de nuestra casa, vamos a conectarnos al dominio que hemos creado en No-IP: mimumble.no-ip.org. Cuando pidamos conectarnos a ese dominio, la petición llegará a los servidores de No-IP, éstos buscarán cual es la última dirección que nuestro RPi les ha comunicado, y se la devolverán al cliente. La conversación vendría a ser algo así:

**Llamando a No-IP**
– Hola, quiero conectarme a mimumble.no-ip.org
+ De acuerdo, déjeme buscar un momento… ajá, la última dirección que tenemos para ese dominio es 85.86.87.88

no-ip2Finalmente el ordenador utilizará esa dirección para conectarse al Raspberry Pi que tenemos en casa. Por supuesto todo este proceso es transparente al usuario, no nos vamos a enterar de qué está pasando, sólo nos vamos a conectar tranquilamente a nuestro dominio.

no-ip3

Creando un dominio en No-IP

Para poner todo esto en marcha en primer lugar tenemos que crearnos una cuenta en www.noip.com. Hecho esto, accedemos a la cuenta y nos vamos al apartado “Hosts / Redirects”.

instrucciones1Aquí aparecerán todos los dominios que tenemos creados en nuestra cuenta. Pulsamos en el botón inferior que dice “Add A Hosts” para añadir uno nuevo.

instrucciones2En la pantalla que nos aparece podemos configurar varias cosas como el nombre de nuestro dominio, la extensión que va a tener (hay un puñado de ellas gratuitas, en nuestro caso será no-ip.org), el tipo de host que queremos, nuestra dirección IP actual (para que se cree apuntando a una por defecto), etc… Lo rellenamos, pulsamos en “Add Host” y ¡voilá! ya tenemos listo nuestro dominio.

instrucciones3Comentar que aunque No-IP provea este servicio gratuito, tenemos que renovar el dominio cada 30 días y tenemos un límite de 3 dominios. Por el módico precio de 20$ al año (menos de 20€ al cambio, ni 1,6€ al mes) puedes tener 25 dominios y te ahorras la molestia de andar renovándolos cada mes. Échale un ojo a la lista de precios si te interesa.

Instalando No-IP en nuestro Raspberry Pi

Una vez tenemos nuestro dominio creado, vamos a instalar el cliente de no-ip en nuestro Raspberry Pi. Como raspbian no tiene un paquete para noip lo tenemos que descargar e instalar a mano. Vamos a ello.

En primer lugar creamos una carpeta para no llenar todo de archivos

mkdir noip
cd noip

Ahora nos descargamos noip

wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz

Descomprimimos el archivo usando el siempre tan extraño comando tar

tar vzxf noip-duc-linux.tar.gz

Y entramos a la carpeta que acabamos de descomprimir (adapta el número de versión al tuyo)

cd noip-2.1.9-1

Y lo instalamos, instalando previamente el paquete build-essential si no lo tenemos

sudo apt-get install build-essential
make 
sudo make install

Tras ejecutar el último comando nos va a pedir una serie de cosas:

  1. Nuestro email de la cuenta de noip.com
  2. La contraseña de la cuenta de noip.com
  3. Si queremos sincronizar todos los dominios que tenemos en esta cuenta: NO.
  4. Si queremos actualizar el dominio N de nuestra cuenta (le decimos que si escribiendo Y, en el dominio correspondiente, el resto N).
  5. El tiempo de refresco, en minutos, del dominio (cada cuanto tiempo le vamos a decir a noip.com cual es nuestra IP). 30 minutos parece razonable.
  6. Si queremos ejecutar algún comando cuando se realice el refresco, en nuestro caso NO.

Y con eso ya estaría instalado. He aquí un ejemplo sincronizando únicamente el dominio mimumble.no-ip.org que acabamos de crear:

pi@raspbmc:~/noip/noip-2.1.9-1$ sudo make install
if [ ! -d /usr/local/bin ]; then mkdir -p /usr/local/bin;fi
if [ ! -d /usr/local/etc ]; then mkdir -p /usr/local/etc;fi
cp noip2 /usr/local/bin/noip2
/usr/local/bin/noip2 -C -c /tmp/no-ip2.conf

Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com  mipedazodemail@unemail.com
Please enter the password for user 'mipedazodemail@unemail.com'  *****************

3 hosts are registered to this account.
Do you wish to have them all updated?[N] (y/N)  n
Do you wish to have host [estoesundominio.ddns.net] updated?[N] (y/N)  n
Do you wish to have host [yotrodominiomas.no-ip.org] updated?[N] (y/N)  n
Do you wish to have host [mimumble.no-ip.org] updated?[N] (y/N)  y
Please enter an update interval:[30]  30
Do you wish to run something at successful update?[N] (y/N)  n

New configuration file '/tmp/no-ip2.conf' created.

mv /tmp/no-ip2.conf /usr/local/etc/no-ip2.conf

Y con esto ya podemos arrancar no-ip ejecutando el comando

sudo /usr/local/bin/noip2

Lo malo de ejecutarlo con ese comando, es que cada vez que arranquemos lo vamos a tener que ejecutar a mano, y eso es para noobs. Vamos a hacer que se ejecute automáticamente cuando arranque el sistema. Para ello tenemos que añadir al archivo /etc/rc.local la línea /usr/local/bin/noip2.

sudo nano /etc/rc.local

Añadimos la línea antes del “exit 0” que aparece por defecto, pulsamos Ctrl+X para salir, pulamos Y para decirle que sí queremos guardar los cambios, le damos a Enter y listo. El archivo debería quedar más o menos así

Captura¡Y ya está!

Si queremos comprobar que funciona, reiniciamos el Rapsberry Pi (sudo reboot) y al volver arrancar comprobamos que noip2 esté arrancado mediante el comando

ps aux | grep noip2

Y deberíamos obtener la siguiente salida

pi@raspbmc:~$ ps aux | grep noip2
nobody     609  0.0  0.5   2228   812 ?        Ss   17:46   0:00 /usr/local/bin/noip2
pi        1382  0.0  0.4   1980   616 pts/0    S+   17:48   0:00 grep noip2

Espero que os sirva de ayuda. Cualquier duda dejadme un comentario y os intento echar una mano.

Anuncios

9 comentarios en “Accediendo a nuestro Raspberry Pi desde internet con No-IP

  1. GRACIAS un gran tutorial. una pregunta he hecho todo lo indicado, quiero acceder al web server de mi Rpi, remotamente, a traves del no-ip dns pero NO me ingresa y solo me aparece el Timeout. La raspberry tiene internet con un modem GSM, y con este hago el registro en la tarjeta….

    que mas debo configurar?, he intentando varias cosas con apache tambien pero no me muestra la web remotamente. localmente todo funcion y se ve el browser.

    agradezco tu ayuda.

  2. Hola Felipe,

    Primero de todo asegurate de que puedes “ver” desde internet el Raspberry Pi, con un ping debería funcionar. Abre una consola y pon:

    ping midominio.no-ip.org

    Y si el ping responde correctamente, entonces ya tienes que pasar a mirar propiedades de tu servidor web para ver que puede estar pasando.

  3. Hola me podrias hechar una mano, esque hecho el tutorial tal y como explicas y no ay manera de entrar en mi raspberry, me dice que la raspberry me rechaza cuando intento entrar.
    E creado el host no-ip y e abierto todos los puertos de mi direccion ip de la raspberry porque me estaba volviendo loco y aun asi no consigo acceder a ella.
    Alguna idea y es posible que haya algun programa para evitar tener que hacer todo esto ya que no e conseguido nada por ahora y llevo mas de un mes intentandolo y no encuentro el fallo.
    Un saludo y muchas gracias.

  4. Hola Pedro,

    Igual que le he comentado a Felipe, lo primero de todo es asegurarte de que puedes ver la raspberry desde internet haciendo un ping a tu dominio en No-IP:

    ping midominio.no-ip.org

    Si eso falla, revisa si la dirección IP de la raspberry en tu red local es la misma que has puesto al redirigir los puertos.

    • Buenas tardes Davity, el ping me funciona perfectamente pero no consigo conectarme desde otra red.
      Porque instale tambien el vnc para poder conectarme desde la misma red y no ai problemas pero en cuanto intento conectarme desde una que no sea mi red local no lo consigo se queda pensando, pero cuando lleva un tiempo me dice que me niega la entrada o que tiene un conflicto con el ordenador.
      Estoy intentando entrar tanto desde un portatil como VNC Viewer, como desde un telefono android.
      Pero no se conecta.
      Muchas gracias.

      • Hola Pedro,

        Si puedes ver la raspberry desde internet a través de No-IP y conectarte desde la red local, la siguiente cosa a mirar es que tengas los puertos de tu router abiertos.
        Desconozco que servidor de VNC estás usando, pero TightVNC y RealVNC por ejemplo usan los puertos 5900 y 5800 por defecto, así que deberías redirigirlos a tu raspberry.

        En http://portforward.com tienes guías para como hacer esto con un buen puñado de routes.

  5. Buenas,

    Tengo un problemilla, he seguido las instrucciones y no me funciona, o bueno, me funciona a medias.
    Tengo funcionando el comando noip2 correctamente, y se ejecuta al inicio, pero, si se lanza al inicio no consigo que me actualice la ip, solo lo hace cuando lo ejecuto a mano, ¿cual puede ser la razon?

    Muchas gracias.

    • Hola Antonio,

      Comprueba en los logs si te está dando algún error, ya que me dices que el proceso está funcionando correctamente. Si a la primera no actualiza, al cabo de los 30 minutos por defecto debería funcionar.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s