Manual de configuración DynDNS / NoIP (o similar) para Raspbian + DNSomatic

Si vas a utilizar una Raspberry Pi con Raspbian (o algún sistema «Debian based«) como servidor casero y necesitas tener accesible tu ip desde el exterior, pero no tienes IP estática, la mejor solución es utilizar alguno de los múltiples servicios de resolución IP (dinámica) a nombre de (sub)dominio.

Lo recomendable es no confiar la resolución a un solo servicio, y es aquí donde entra DNS-O-Matic, el cual hace de puente entre tu servidor  y los múltiples servicios de DNS dinámico (hn.org, ddns.org, no-ip.com, etc…). Si bien hay múltiples clientes válidos para actualizar contra ellos, no todos lo hacen correctamente con varios servicios a la vez.

Requisitos

.- Una cuenta en DNS-O-Matic
.- Una raspberry Pi, modelo al gusto
.- Raspbian (o sistema debian) instalado en la RPi
.- Una o varias cuentas de cliente en algún servicio de dyndns compatible con DNS-O-Matic

Instalar y configurar ddclient en debian

En nuestro caso, usaremos el cliente «ddclient» que recomienda la propia web de DNS-O-Matic.
Descargamos la última versión desde github, descomprimimos, creamos directorio específico, copiamos el ejecutable ddclient, el script de arranque y la configuración del fichero descargado:

[simterm]
##yellow## # cd /tmp/
##yellow## # wget -O ddclient-3.9.1.tar.gz https://github.com/ddclient/ddclient/archive/v3.9.1.tar.gz
##yellow## # sudo mkdir /etc/ddclient
##yellow## # sudo cp /tmp/ddclient-3.9.1/sample-etc_ddclient.conf /etc/ddclient/ddclient.conf
##yellow## # sudo cp /tmp/ddclient-3.9.1/ddclient /usr/sbin/ddclient
##yellow## # sudo cp /tmp/ddclient-3.9.1/sample-etc_rc.d_init.d_ddclient.ubuntu /etc/init.d/ddclient
##yellow## # sudo nano /etc/ddclient/ddclient.conf
[/simterm]

Editamos el fichero a nuestro gusto. Los únicos cambios que yo he hecho es subir el daemon a 900 segundos (actualizar cada 15 mins) y comentar las líneas de mail para que no envíe correos.

daemon=900 # check every X seconds
syslog=yes # log update msgs to syslog
#mail=root # mail all msgs to root
#mail-failure=root # mail failed update msgs to root
pid=/var/run/ddclient.pid # record PID in file.
ssl=yes # use ssl-support. Works with

Nota: Si quieres que sendmail te envíe correos al actualizar y/o al tener errores, tendrías que instalar y configurar sendmail o algún sistema similar de envío de correos en tu Raspbian.

Nos vamos al final del archivo esto, y añadimos esto, para que actualice con DNS-O-Matic. Cambia lo que está en negrita por los datos de tu cuenta:

##
## DNS-O-Matic account-configuration >>> NO UTILIZAR, LO DEJO SOLO CON FINES HISTÓRICOS
##
use=web, web=myip.dnsomatic.com
server=updates.dnsomatic.com, \
protocol=dyndns2, \
[email protected], \
password=TuClave \
all.dnsomatic.com

Instalamos los paquetes que ddclient necesita para funcionar:

[simterm]
##yellow## # sudo apt install libio-socket-ssl-perl libdata-validate-ip-perl -y
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following NEW packages will be installed:
libio-socket-ssl-perl libnet-ssleay-perl perl-openssl-defaults libdata-validate-ip-perl libmath-base85-perl libmath-bigint-perl libnet-ipv6addr-perl libnet-netmask-perl libnetaddr-ip-perl libnetwork-ipv4addr-perl
0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
Need to get 846 kB of archives.
After this operation, 1748 kB of additional disk space will be used.
Get:1 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf perl-openssl-defaults armhf 3 [6782 B]
Get:2 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libnet-ssleay-perl armhf 1.85-2+b1 [286 kB]
Get:3 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libio-socket-ssl-perl all 2.060-3 [207 kB]
Get:4 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libmath-base85-perl all 0.4+dfsg-1 [7048 B]
Get:5 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libmath-bigint-perl all 1.999816-1 [154 kB]
Get:6 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libnetwork-ipv4addr-perl all 0.10.ds-3 [13.5 kB]
Get:7 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libnet-ipv6addr-perl all 0.96-1 [20.6 kB]
Get:8 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libnet-netmask-perl all 1.9104-1 [29.5 kB]
Get:9 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libnetaddr-ip-perl armhf 4.079+dfsg-1+b3 [102 kB]
Get:10 http://mirror.sjc02.svwh.net/raspbian/raspbian buster/main armhf libdata-validate-ip-perl all 0.27-1 [18.4 kB]
Setting up perl-openssl-defaults:armhf (3) …
Setting up libnet-ssleay-perl (1.85-2+b1) …
Setting up libio-socket-ssl-perl (2.060-3) …
Setting up libmath-bigint-perl (1.999816-1) …
Setting up libmath-base85-perl (0.4+dfsg-1) …
Setting up libnet-netmask-perl (1.9104-1) …
Setting up libnetaddr-ip-perl (4.079+dfsg-1+b3) …
Setting up libnetwork-ipv4addr-perl (0.10.ds-3) …
Setting up libnet-ipv6addr-perl (0.96-1) …
Setting up libdata-validate-ip-perl (0.27-1) …
[/simterm]

Ahora haremos ejecutable el script de arranque y lo editaremos para hacerlo coincidir con los segundos de actualización con los que hemos puesto en el fichero de configuración (si no, a veces se puede dar un comportamiento errático). Cambiaremos los segundos del apartado DELAY.

[simterm]
##yellow## # sudo chmod +x /etc/init.d/ddclient
##yellow## # sudo nano /etc/init.d/ddclient
[/simterm]

 start)
 log_begin_msg "Starting ddclient..."
 DELAY=`grep -v '^\s*#' $CONF | grep -i -m 1 "daemon" | awk -F '=' '{print $2}'`
 if [ -z "$DELAY" ] ; then
 DELAY="-daemon 900"

Hacemos una prueba en modo debug para comprobar que todo funciona OK

[simterm]
##yellow## # sudo ddclient -daemon=0 -verbose -noquiet
CONNECT: myip.dnsomatic.com
CONNECTED: using HTTP
SENDING: GET / HTTP/1.0
SENDING: Host: myip.dnsomatic.com
SENDING: User-Agent: ddclient/3.9.1
SENDING: Connection: close
RECEIVE: HTTP/1.1 200 OK
RECEIVE: Server: nginx
RECEIVE: 85.121.123.49
INFO: forcing updating rafamerino because no cached entry exists.
INFO: setting IP address to 85.121.123.49 for rafamerino
UPDATE: updating rafamerino
CONNECT: updates.opendns.com
CONNECTED: using SSL
SENDING: GET /nic/update?system=dyndns&hostname=rafamerino&myip=85.121.123.49 HTTP/1.0
SENDING: Host: updates.opendns.com
SENDING: Authorization: Basic Y29ycmVHyKhNiFtZXJpbm8uY29tOkFsYmFjZXRlMTk4IQ==
SENDING: User-Agent: ddclient/3.9.1
SENDING: Connection: close
RECEIVE: HTTP/1.0 200 OK
RECEIVE: date: Sun, 10 Jan 2021 21:08:04 GMT
RECEIVE: server: opendns
RECEIVE: good 85.121.123.49
##green## SUCCESS: updating rafamerino: good: IP address set to 85.121.123.49
##red## FATAL: Cannot create file ‘/var/cache/ddclient/ddclient.cache’. (No such file or directory)[/simterm]

Si todo está bien configurado, veremos un SUCESS. En caso contrario, debemos leer detenidamente los mensajes de error. Si no sabes interpretarlo, ponlo en los comentarios y lo resolvemos entre todos.

Si además del SUCESS, te aparece una línea de FATAL indicando que no ha podido crear el fichero de caché, lo haremos manualmente nosotros:

[simterm]
##yellow## # sudo mkdir -p /var/cache/ddclient/
##yellow## # sudo touch /var/cache/ddclient/ddclient.cache
[/simterm]

Actualizamos el script de arranque para que se ejecute al inicio y lanzamos manualmente el script para que se quede activo sin tener que reiniciar la Raspberry:

[simterm]
##yellow## # sudo update-rc.d ddclient defaults
##yellow## # sudo /etc/init.d/ddclient start
[ ok ] Starting ddclient (via systemctl): ddclient.service.
[/simterm]

Comprobamos que está ejecutado, mirando en los procesos:

[simterm]
root 26095 0.2 0.1 20164 15428 ? S 22:19 0:00 ddclient – sleeping for 850 seconds
root 26138 0.0 0.0 4548 540 pts/0 S+ 22:20 0:00 grep ddclient
[/simterm]

En cuanto al servicio DNS-O-Matic, recomiendo tener al menos un par de servicios suscritos, ya que si falla alguno, siempre podremos probar con otros hostnames:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *