Buscar este blog

domingo, 28 de enero de 2018

QNAP y DuckDNS

DuckDNS es un servidor DNS que nos permite actualizar de forma gratuita un nombre de dominio que está asociado a una IP dinámica, es decir, a una IP que puede cambiar en cualquier momento. Esto es útil para poder acceder a nuestro servidor en casa mediante una URL del tipo: mamama@duckdns.org


QNAP es una marca de dispositivos NAS que utilizan un sistema operativo propio que permite gestionar el NAS desde un entorno web de una forma muy fácil. Entre las facilidades de QNAP está el servicio de DNS dinámico, pero entre los servidores configurados que tiene no se encuentra DuckDNS.






Vamos a ver como podemos trabajar con DuckDNS desde QNAP. En primer lugar vamos al sitio https://www.duckdns.org/

Ceamos una cuenta gratuita y añadimos un dominio. En este ejemplo el dominio se llama "mamama". Se puede observar la IP de nuestro router que queda asociada a la URL: mamama.duckdns.org




Pasamos a trabajar con el servidor NAS de QNAP. La idea es la siguiente, vamos a crear un programa que se ejecutara de forma automática todos los días a las 6:31. Este programa lo que hace es comunicar al servidor DuckDNS nuestra IP actual. ¡Al lío!:

Nos conectamos vía ssh con el QNAP, por ejemplo:

$ ssh 192.168.33.1 -l admin

Una vez dentro, vamos al espacio de almacenamiento (recuerda estamos en un sistema embembido que pierde los cambios al estar en RAM). Por ejemplo puede ser algo como:

# cd /share/HDA_DATA



Creamos el siguiente programa usando el editor "vi":

# vi DuckDNS.sh



El programa sería el siguiente:
#!/bin/sh

echo url="https://www.duckdns.org/update?domains=mamama&token=a1fe440e-345e-4555-b368-123ad93c21&ip=" | curl -o /share/HDA_DATA/DuckDNS.log -K -





ATENCIÓN:
  • La línea que empieza con "echo url...." va todo en una línea hasta el final que es un simple guión (-).
  • Tendrás que poner tu propio nombre de dominio (en el ejemplo está puesto "mamama").
  •  Tendrás que poner tu propio "token", el cual lo obtienes en tu página de DuckDNS (en el ejemplo: a1fe440e-345e-4555-b368-123ad93c21)
  •  Tendrás que elegir tu propia ruta para el archivo DuckDNS.log, el cual almacena el resultado de la operación realizada de actualización de IP. En el ejemplo está en la misma ruta del programa, en /share/HDA_DATA

Probamos a ejecutar el programa, pero antes le damos los permisos de ejecución:

# chmod 770 DuckDNS.sh  

Probamos el programa:

# ./DuckDNS.sh

Si no hay errores se creó un fichero de nombre DuckDNS.log. Se comprueba el contenido:

# cat DuckDNS.log

Si todo fue bien aparece simplemente escrito "OK". “KO” si algo fue mal.

Ahora lo que tenemos que hacer es que este programa se ejecuta de forma automática cada cierto tiempo, para eso tenemos "crontab", un programa típico de sistemas GNU/Linux que permite automatizar tareas en base a un fichero de texto que contiene las tareas a ejecutar.

En el caso de QNAP, para editar el fichero con las tareas hay que editar el fichero "crontab":

# vi /etc/config/crontab

Añadimos la siguiente línea al final del fichero y guardamos los cambios:
31 6 * * * /share/HDA_DATA/DuckDNS.sh 2>/dev/null

Esta línea tiene el siguiente significado:
Ejecutar el programa:  /share/HDA_DATA/DuckDNS.sh     a las  06:31 todos los días.

Si no quieres editar el fichero con "vi" puedes hacer esto que es equivalente (escrito en una sola línea):

# echo "31 6 * * * /share/HDA_DATA/DuckDNS.sh 2>/dev/null" >> /etc/config/crontab


Comentar que las tareas "cron" tienen 5 campos (un número o un asterisco) seguidos del comando a ejecutar. Algo como esto:

* * * * * /bin/ejecutar/script.sh

Los 5 asteriscos pueden quedarse así o cambiarse por números:

De izquierda a derecha, los asteriscos representan campos temporales:

1. Minutos (0 al 59).
2. Horas (0 a 23).
3. Día del mes (1 al 31)
4. Mes (1 al 12).
5. Día de la semana (0 a 6, siendo 0 el domingo).

Si en el comando hay asteriscos, significa que ese limite temporal se tiene en cuenta en todo su rango de valores. Por ejemplo:

* 2 * * * /mi_script 

Se ejecutaría cada minuto de las 2 de la mañana, es decir 60 veces entre las 2 y las 3 de la mañana.

En mi caso ya está todo listo, pero si pasase que si un día reinicias el QNAP y se pierde la programación establecida, deberías volver a crearla y realizar los siguientes pasos para que los cambios queden grabados:
# crontab /etc/config/crontab

# /etc/init.d/crond.sh restart

RIZANDO EL RIZO 😲
En el ejemplo, el programa se ejecuta a diario a las 6:31, por lo tanto todos los días a esa hora el disco de nuestro QNAP se pone en funcionamiento (spinning up) para que se proceda a la lectura del programa. Si no quieres que tu disco "sufra ese desgaste", la mejor solución es conectar una memoria USB que no utilices y meter ahí el programa. Podría quedar de la siguiente forma, suponiendo que QNAP ha reconocido el USB como "/share/USBDisk1":

#!/bin/sh

echo url="https://www.duckdns.org/update?domains=mamama&token=a1fe440e-345e-4555-b368-123ad93c21&ip=" | curl -o /share/USBDisk1/DuckDNS.log -K -



Por otra parte el crontab tendría la siguiente línea:

31 6 * * * /share/USBDisk1/DuckDNS.sh 2>/dev/null


No hay comentarios:

Publicar un comentario