Crea el teu propi DNS dinàmic amb #Bind9

Hi ha diversos proveïdors de serveis #DDNS que ens permeten poder accedir remotament a la nostre Raspberry on hi podem tenir instal·lats serveis com ara Nextcloud, Akkoma (servidor social fork de Pleroma) etc. Això és possible gràcies a que aquests proveïdors de DDNS apunten a la IP pública de la Raspberry quan escrivim en el navegador el domini que hi hem escollit. Sempre és millor no dependre de tercers així que aquest és el motiu per el que escric aquesta entrada.

requisits

Ens cal tenir registrat un domini propi i que el registrador del domini ens permeti fer delegació de DNS. També ens cal tenir el nostre propi servidor DNS (Bind9), que gràcies a la delegació passarà a ser el servidor autoritari per el nostre domini.
Suposem que el nostre domini registrat és elnostredomini.cat i el subdomini que apuntarà a la Raspberry és raspberry.elnostredomini.cat.

dnssec

El més segur és que a casa tinguem IP dinàmica (si no és així aquest article no té sentit) per tant ens caldrà enviar-la periòdicament al nostre servidor #DNS Bind9. Entra en joc #dnssec. dnssec farà una connexió segura al nostre Bind9 i actualitzarà el registre del domini o subdomini que li diguem. El primer pas és crear la dnssec key:

ddns-confgen -s raspberry.elnostredomini.cat

Ens respondrà això:

To activate this key, place the following in named.conf, and in a separate keyfile on the system or systems from which nsupdate will be run: key “ddns-key.raspberry.elnostredomini.cat” { algorithm hmac-sha256; secret “lLeySmmWp2TrF0qSlSyblQOp7wTTNxWoDkFYUaTyGtk=”; };

Then, in the “zone” statement for the zone containing the name “raspberry.elnostredomini.cat”, place an “update-policy” statement like this one, adjusted as needed for your preferred permissions: update-policy { grant ddns-key.raspberry.elnostredomini.cat name raspberry.elnostredomini.cat ANY; };

After the keyfile has been placed, the following command will execute nsupdate using this key: nsupdate -k

Editem /etc/bind/named.conf.local i hi afegim la key:

... key “ddns-key.raspberry.elnostredomini.cat” { algorithm hmac-sha256; secret “lLeySmmWp2TrF0qSlSyblQOp7wTTNxWoDkFYUaTyGtk=”; };

zone “elnostredomini.cat” { type master; file “/var/lib/bind/db.elnostredomini.cat”; update-policy { grant ddns-key.elnostredomini.cat name elnostredomini.cat. ANY; }; }; ...

Reiniciem el servidor Bind9:

systemctl restart bind9

configurar el client

Ara hem de crear el fitxer que contingui la key generada, per exemple a /etc/ddnsupdate.key, on la hi posem:

key “ddns-key.raspberry.elnostredomini.cat” { algorithm hmac-sha256; secret “lLeySmmWp2TrF0qSlSyblQOp7wTTNxWoDkFYUaTyGtk=”; };

I també hem de crear el bash script que s'executarà periòdicament, enviant la IP pública al nostre servidor DNS Bind9, actualitzant si cal el registre del subdomini raspberry.elnostredomini.cat. Per exemple /usr/local/bin/ddnsupdate:

#!/bin/bash

MYIP=$(dig +short myip.opendns.com @resolver1.opendns.com)

KEY=/etc/ddnsupdate.key NS=ns1.elnostredomini.cat DOMAIN=raspberry.elnostredomini.cat. ZONE=elnostredomini.cat.

nsupdate -k $KEY -v << EOF server $NS zone $ZONE update delete $DOMAIN A update add $DOMAIN 30 A $MYIP send EOF

El fem executable:

chmod +x /usr/local/bin/ddnsupdate

Afegim una tasca cron perquè volem que l'script bash s'executi periòdicament:

crontab -e

i afegim la tasca en qüestió:

... */5 * * * * /usr/local/bin/ddnsupdate > /dev/null 2>&1 ...

Ja estem.