====== 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