====== Dynamic DNS con DHCP ====== La presente configurazione funziona su una Debian Bookworm 12 con **bind 9.18.24** e **isc-dhcp-server 4.4.3**. ===== Configurazione del server DNS ===== Il server DNS (bind9) deve essere configurato per **accettare le modifiche alla zona** tramite chiave di autenticazione [[wp>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; }; ===== Test modifica dinamica ===== 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. ===== Configurazione del server DHCP ===== 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"; } } ===== Modificare manualmente il file di zona ===== :!: **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