Stefano’s notebook

my technical writings

Homemade Dynamic DNS

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.

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