¡Hola! Me parece que andas usando un bloqueador de anuncios =( ¿Nos desbloqueas? ¿Por qué?
F13

Funcion 13

Configurando el cliente no-ip en tu Raspberry Pi

Hace ya un par de meses que me hice con una Raspberry Pi para cacharrear un poco. Tengo pensado hacer proyectos de domótica y/o algunas otras cosas así que quería algo sencillo que siempre estuviera en línea y conectado a la red.

La Raspberry Pi es sin duda una máquina limitada pero versátil en estos casos y nada más recibirla le instalé OSMC (antiguo Kodi) y la conecté al televisor.

Durante meses así ha estado, cogiendo polvo.

El otro día, no obstante, se me ocurrió darle un uso para comenzar a controlar algo de la casa de manera externa. Pero claro, no sabía bien cómo acceder a la raspberry desde fuera de mi red local.

¡No-ip al rescate!

No-ip es un servicio pensado para aquellos que no tenemos IP estática (lo cual es lo habitual en un entorno doméstico) ya que crea una DNS pública que apunta a nuestra IP y, por medio de un cliente, actualiza la IP cuando esta cambia.

¡Así que esta parece la solución ideal! Con no-ip tenemos un dominio de los gratuitos que nos ofrecen, que apunta directamente a la IP de nuestra casa y, si esta cambiara, la Raspberry se encargaría de actualizar la IP a la nueva.

Veamos cómo hacerlo.

Alta en no-ip

Antes de empezar a cacharrear, tenemos que ir a la página de no-ip y registrarnos, haciendo click en Sign Up.

Los datos que nos piden son bastante sencillos y, al terminar de rellenarlos, haz click en Free Sign Up (o paga si quieres). Yo os recomiendo hacer click en "Create my hostname later" para crear el nombre del dominio luego ya que en el formulario solo te dejan elegir uno y aparece more pero no te deja elegir más.

Una vez registrados y hayamos confirmado el correo de confirmación, vamos al panel de control y hagamos click en Add a Host.

Aquí podemos elegir ya el nombre por el que queramos acceder a nuestra red, por ejemplo: funcion13.sytes.net. El Host Type que tenemos que escoger es el que dice Port 80 Redirect y tenemos que poner la IP externa de nuestra casa (u oficina). Si no sabes cómo averiguarla te recomiendo que vayas a alguna web que te lo diga. En el puerto, por defecto es el 8080 y lamentablemente no nos deja usar el puerto 80 que es el HTTP por defecto. Usa el puerto en el que levantes tu servidor.

Hasta aquí por ahora.

Instalando el cliente en la Raspberry

Una vez hayamos entrado por SSH en nuestra Raspberry (recordad que podemos hacer para entrar sin clave ssh) seguiremos estos pasos:

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

Lo que hemos hecho hasta ahora es:

  1. Irnos al directorio /tmp/ (de temporales).
  2. Nos descargamos el cliente para Linux.
  3. Lo descomprimimos.

Una vez descomprimido tenemos que entrar en el directorio que crea la descompresión, en mi caso es noip-2.1.9-1 pero la versión puede variar.

$ cd noip-2.1.9-1

Ahora vamos a instalarlo:

$ make
$ sudo make install
Si os aparece algo como `-bash: make: command not found` (como a mi me ocurrió) es porque vuestra versión de Linux no viene con paquetes para compilar, de manera que tenéis que instalar estos paquetes para compilar:
$ sudo apt-get install build-essential
Y volver a repetir lo anterior

Al ejecutar el comando make install, nos pedirá un correo y una contraseña y deberemos usar aquellos que usamos al registrarnos.

Y hasta aquí hemos llegado. En este momento, tendríamos instalado nuestro cliente no-ip para que actualice la DNS de no-ip con nuestra IP de casa, de manera que el nombre que escogimos antes, siempre apunte al lugar correcto.

Nos quedan dos pequeños pasos más.

Iniciando programas al reiniciar la Raspberry

Con lo que hemos hecho hasta ahora, el programa se queda funcionando pero si por lo que sea apagamos la raspberry (o se nos va la luz), el programa deja de ejecutarse.

Hay una miríada de formas de ejecutar comandos al iniciarse Linux pero mi favorito es el crear un script en /etc/init.d/ y registrarlo usando update-rc.d. De esta forma la aplicación se inicia/para cuando el sistema arranca o se apaga.

Vamos allá.

Creemos un script en /etc/init.d

$ sudo nano /etc/init.d/noip

Dentro peguemos esto:

#! /bin/sh
# /etc/init.d/noip 

### BEGIN INIT INFO
# Provides:          noip
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Sencillo programa para iniciar programa al inicio.
# Description:       Un sencillo script que iniciará / parará un programa al arrancar / apagar.
### END INIT INFO

# Funciones específicas del sistema.
case "$1" in  
  start)
    echo "Iniciando noip"
    # Ejecutamos la aplicación
    /usr/local/bin/noip2
    ;;
  stop)
    echo "Parando noip"
    # Matamos la aplicación que queremos parar
    killall noip2
    ;;
  *)
    echo "Uso: /etc/init.d/noip {start|stop}"
    exit 1
    ;;
esac

exit 0  
Atención - Es importante probar este script primero para asegurarnos de que funciona y de que no hace falta presionar ninguna otra tecla ya que si no podría quedarse colgado en un reinicio esperando a que un usuario (que no está ahí) haga algo.

Ahora hagamos que el script se pueda ejecutar:

$ sudo chmod 755 /etc/init.d/noip

Prueba que el programa se inicia:

$ sudo /etc/init.d/noip start

Y que se para:

$ sudo /etc/init.d/noip stop

Si todo ha ido bien, tenemos que registrar el script para que se ejecute al arranque y al apagado. Ejecuta lo siguiente:

$ sudo update-rc.d noip defaults

Y ya está, nuestro script se ejecutará al iniciarse la Raspberry y en el momento en que se vaya a apagar (de manera controlada).

Si tienes curiosidad por todos los comentarios que hemos puesto al inicio del script, es simplemente algo para hacer que el script cumpla con LSB. Si quieres leer algo más sobre el tema (en inglés) te recomiendo que le eches un ojo a https://wiki.debian.org/LSBInitScripts.

Si alguna vez quieres borrar para que el script se ejecute al inicio/fin, ejecuta este comando:

$ sudo update-rc.d -f noip remove

Configurando el router

Ahora ya está todo casi listo. Lo último que nos queda es decirle al router, quién tiene que responder cuando reciba una llamada por el puerto que configuramos en no-ip.

Esto es algo específico de cada Router así que no puedo poner instrucciones exactas pero normalmente está en la sección "Port Forwarding". Tenemos que indicar el puerto que recibe la petición (el que pusimos en no-ip), la IP que va a atender la petición (la de la Raspberry) y el puerto dentro de la Raspberry que atenderá la petición.

Y hasta aquí nuestro pequeño tutorial. Espero que os sea de interés.

Programador Front-end en First + Third y Potato. Trabajando con JavaScript y HTML5 desde el corazón de Sevilla.

Comentarios ¡Únete a la conversación!