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.