homemade dynamic dns

Tags:

Vediamo come "costruirci" in casa un servizio tipo no-ip o dyndns usando usando nsupdate e le chiavi dns

Iniziamo generando la chiave che useremo per l'aggiornamento:

$ dnssec-keygen -a HMAC-MD5 -b 512 -n USER stefano.dyna.gnustile.net.
Kstefano.dyna.gnustile.net.+157+09585

Verranno create 2 chiavi, una pubblica (da usare sul server) e una privata.

Il comando da lanciare, per aggiornare il dns sarà

$ nsupdate -k Kstefano.dyna.gnustile.net.+157+09585.private -v file.diffs

dove file.diffs conterrà

server ns1.gnustile.net
zone dyna.gnustile.net
update delete stefano-local.dyna.gnustile.net. A
update add stefano-local.dyna.gnustile.net. 86400 A 141.x.y.z
show
send

Nel server, creiamo il file /etc/bind/keys.conf, che includeremo da named.conf con

include "keys.conf";

con il contenuto

key stefano.dyna.gnustile.net. {
  algorithm HMAC-MD5;
  secret "YrVW9yP6gNMA7VbcU/r2mSIwYnFj/XkCDd6QuqOHE26/ipnrPy+eXrKrUyaFhB2XWNdVLUX7QCUkfhg4zN5YiA==";
};

recuperando ovviamente il secret dalla nostra chiave pubblica.

modifichiamo quindi la definizione della nostra zona in

zone  "dyna.gnustile.net" {
        type master;
        file  "dyna.gnustile.net.zone";
        allow-update {
                key stefano.dyna.gnustile.net.;
        };
};

volendo possiamo anche dare un accesso parziale alla zona, con

zone  "dyna.gnustile.net" {
        type master;
        file  "dyna.gnustile.net.zone";
        update-policy {
           grant user123.dyna.gnustile.net. name user123.dyna.gnustile.net. A TXT;
           grant stefano.dyna.gnustile.net. subdomain dyna.gnustile.net. ANY;
        };
};

in generale, la sintassi di grant è

grant <key> <type> <zone> <record-types>;

Attenzione! una volta che le modifiche dinamiche avranno effetto, verrà creato il file dyna.gnustile.net.zone.jnl.
Se volessimo fare qualche modifica al nostro file di zona, sarà necessario interrompere gli aggiornamenti con

$ rndc freeze $ZONE

modificare il file, controllarlo con named-checkzone e poi lanciare

rndc thaw $ZONE