Table of Contents

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