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:
cd /tmp/
wget -O ddclient-3.9.1.tar.gz https://github.com/ddclient/ddclient/archive/v3.9.1.tar.gz
sudo mkdir /etc/ddclient
sudo cp /tmp/ddclient-3.9.1/sample-etc_ddclient.conf /etc/ddclient/ddclient.conf
sudo cp /tmp/ddclient-3.9.1/ddclient /usr/sbin/ddclient
sudo cp /tmp/ddclient-3.9.1/sample-etc_rc.d_init.d_ddclient.ubuntu /etc/init.d/ddclient
sudo nano /etc/ddclient/ddclient.conf
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:
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) …
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.
sudo chmod +x /etc/init.d/ddclient
sudo nano /etc/init.d/ddclient
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
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
SUCCESS: updating rafamerino: good: IP address set to 85.121.123.49
FATAL: Cannot create file ‘/var/cache/ddclient/ddclient.cache’. (No such file or directory)
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:
sudo mkdir -p /var/cache/ddclient/
sudo touch /var/cache/ddclient/ddclient.cache
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:
sudo update-rc.d ddclient defaults
sudo /etc/init.d/ddclient start
[ ok ] Starting ddclient (via systemctl): ddclient.service.
Comprobamos que está ejecutado, mirando en los procesos:
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
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: