La presente configurazione funziona su una Debian Bookworm 12 con bind 9.18.24 e isc-dhcp-server 4.4.3.
Il server DNS (bind9) deve essere configurato per accettare le modifiche alla zona tramite chiave di autenticazione TSIG. Anzitutto si crea una chiave TSIG dandole il nome della zona (il nome serve solo a identificare successivamente la chiave):
tsig-keygen -a hmac-md5 lan.rigacci.org > /etc/bind/lan.rigacci.org.key chmod 640 /etc/bind/lan.rigacci.org.key
La chiave avrà un contenuto random codificato base64:
key "lan.rigacci.org" { algorithm hmac-md5; secret "ZJu34t3AgaWXfmRSkjpqhA=="; };
Il file con la chiave deve essere incluso nella configurazione di bind e nella sezione relativa alla zona si dichiara che sono consentite le modifiche a chi è in possesso della chiave:
include "/etc/bind/lan.rigacci.org.key"; zone "lan.rigacci.org" { type master; file "lan.rigacci.org"; allow-transfer { 192.168.3.1; }; allow-update { key "lan.rigacci.org"; }; max-journal-size 150k; };
Con il comando nsupdate
è possibile inviare una richiesta di aggiornamento con dei comandi interattivi. In questo esempio vengono aggiunti un record di tipo A e uno di tipo PTR:
nsupdate -v -d > server 192.168.3.1 > key lan.rigacci.org ZJu34t3AgaWXfmRSkjpqhA== > zone lan.rigacci.org > update add test.lan.rigacci.org. 3600 A 192.168.3.123 > update add 123.3.168.192.in-addr.arpa 600 IN PTR test.lan.rigacci.org. > show > send
In alternativa al comando interattivo key è possibile specificare un file sulla riga di comando con l'opzione -k /etc/bind/lan.rigacci.org.key.
Oltre al comando add è opportuno utilizzare il comando del per rimuovere i nomi non più necessari dalla zona.
In /etc/dhcp/dhcpd.conf
, sezione principale, si aggiunge tutto il necessario riguardo al DDNS:
ddns-updates on; ddns-update-style interim; ddns-domainname "lan.rigacci.org"; update-static-leases on; update-optimization false;
Nel caso specifico si vuole annunciare al DNS anche gli host che hanno un indirizzo IP fisso (update-static-leases
). Il parametro update-optimization
- se impostato a true - evita che venga chiesto un aggiornamento della zona per ogni rinnovo del lease DHCP.
Nella sezione subnet
dello stesso file - oltre alle normali configurazioni - si aggiunge il necessario per comunicare con il server DNS. La password è una stringa codificata in base64.
subnet 192.168.3.0 netmask 255.255.255.0 { key lan.rigacci.org { algorithm hmac-md5; secret "ZJu34t3AgaWXfmRSkjpqhA==" }; zone lan.rigacci.org. { primary 192.168.2.2; key lan.rigacci.org; } zone 3.168.192.in-addr.arpa. { primary 192.168.2.2; key lan.rigacci.org; } }
Infine nella sezione group
si dichiara quale nome registrare al momento del lease. Questo è un esempio per un host con IP fisso:
group { host squeeze { hardware ethernet 52:54:00:00:03:70; fixed-address 192.168.3.70; ddns-hostname "squeeze"; } }
ATTENZIONE: Non si deve modificare manualmente un file di zona mentre è soggetto ad aggiornamenti dinamici.
Prima si deve bloccare gli aggiornamenti con il comando rndc freeze
. In questo esempio private è il nome della view in cui si trova la zona:
rndc freeze lan.rigacci.org IN private
Dopo aver modificato manualmente il file (e aggiornato il numero seriale), non è necessario fare il reload di BIND, basta “scongelare” la zona:
rndc unfreeze lan.rigacci.org IN private