Questo articolo spiega, passo per passo, come aggiungere una nuova zona DNS in BIND 9, il server DNS più diffuso sui sistemi Unix/Linux. Vedremo come dichiarare la zona nei file di configurazione, come creare il file di zona e come verificare che tutto funzioni correttamente.
Scenario di esempio
Supponiamo di voler gestire il dominio example.com come zona master sul nostro server BIND. Il server ha indirizzo IP 192.168.1.10 sulla rete interna.
Prerequisiti
- Un server Linux con BIND 9 già installato.
- Accesso root o sudo.
- Conoscenze di base di DNS (record A, AAAA, CNAME, MX, ecc.).
I percorsi dei file possono variare a seconda della distribuzione. Gli esempi seguenti
usano i percorsi tipici di Debian/Ubuntu (/etc/bind) e Red Hat/CentOS/Rocky
(/etc/named o /var/named).
1. Verificare l'installazione di BIND
Su Debian/Ubuntu:
sudo apt update
sudo apt install bind9 bind9utils
Su Red Hat / CentOS / Rocky / AlmaLinux:
sudo dnf install bind bind-utils
Verifica che il servizio sia attivo:
sudo systemctl status bind9 # Debian/Ubuntu
sudo systemctl status named # RHEL-based
2. Scegliere dove dichiarare la zona
Di solito la dichiarazione delle zone si trova in uno di questi file:
/etc/bind/named.conf.local(Debian/Ubuntu)/etc/named.confo file inclusi (RHEL-based)
L'idea è aggiungere un blocco zone che dica a BIND come gestire
la nuova zona (master, slave, file di zona, ecc.).
3. Dichiarare la nuova zona in BIND
3.1 Esempio per Debian/Ubuntu
Modifica il file /etc/bind/named.conf.local:
sudo nano /etc/bind/named.conf.local
Aggiungi questo blocco:
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-transfer { none; };
};
Spiegazione rapida:
zone "example.com": nome della zona (il dominio).type master: questo server è autoritativo e master per la zona.file "/etc/bind/db.example.com": percorso del file di zona.allow-transfer { none; };: disabilita i trasferimenti di zona, a meno che tu non abbia dei secondary.
3.2 Esempio per RHEL-based
Modifica il file /etc/named.conf (o un file incluso, come /etc/named/named.conf.local):
sudo nano /etc/named.conf
Aggiungi un blocco analogo, cambiando solo il percorso del file di zona:
zone "example.com" IN {
type master;
file "db.example.com";
allow-transfer { none; };
};
Su molte distribuzioni RHEL-based, i file di zona stanno in /var/named,
quindi la direttiva file usa un percorso relativo alla directory
/var/named.
4. Creare il file di zona
4.1 File di zona per example.com (Debian/Ubuntu)
Crea il file di zona partendo da un modello o da zero:
sudo cp /etc/bind/db.local /etc/bind/db.example.com
sudo nano /etc/bind/db.example.com
Esempio di contenuto completo:
$TTL 3600
@ IN SOA ns1.example.com. hostmaster.example.com. (
2025112101 ; Serial
3600 ; Refresh
900 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS ns1.example.com.
ns1 IN A 192.168.1.10
; Record per il sito web
@ IN A 192.168.1.20
www IN CNAME @
; Record mail
@ IN MX 10 mail.example.com.
mail IN A 192.168.1.30
Dettagli importanti:
- $TTL 3600: TTL predefinito (1 ora).
-
SOA: contiene l'authority per la zona:
ns1.example.com.: nameserver primario.hostmaster.example.com.: email dell'amministratore (sostituisci la chiocciola con un punto).2025112101: seriale della zona, di solito in formato YYYYMMDDnn.
- NS: definisce il nameserver autoritativo per la zona.
- Record A e CNAME: puntano i nomi host agli indirizzi IP.
- MX: definisce il mail exchanger per il dominio.
4.2 File di zona per example.com (RHEL-based)
Crea il file in /var/named:
sudo nano /var/named/db.example.com
Il contenuto può essere identico a quello visto sopra. Assicurati solo che proprietario e permessi siano corretti, ad esempio:
sudo chown root:named /var/named/db.example.com
sudo chmod 640 /var/named/db.example.com
5. Controllare la sintassi
Prima di ricaricare BIND, è fondamentale controllare la configurazione.
5.1 Controllo del file di configurazione
sudo named-checkconf
Se il comando non produce output, la configurazione di base non presenta errori sintattici.
5.2 Controllo della zona
sudo named-checkzone example.com /etc/bind/db.example.com # Debian/Ubuntu
sudo named-checkzone example.com /var/named/db.example.com # RHEL-based
Dovresti vedere un output che indica il loaded serial e una conferma del tipo
OK.
6. Ricaricare il servizio BIND
Se tutto è andato bene, puoi ricaricare la configurazione.
Debian/Ubuntu:
sudo systemctl reload bind9
RHEL-based:
sudo systemctl reload named
In alternativa, se reload non è disponibile, puoi riavviare il servizio:
sudo systemctl restart bind9 # Debian/Ubuntu
sudo systemctl restart named # RHEL-based
7. Testare la nuova zona
Usa dig per interrogare il nameserver e verificare che la zona risponda.
7.1 Verifica del record SOA
dig @192.168.1.10 example.com SOA
7.2 Verifica di un record A
dig @192.168.1.10 example.com A
dig @192.168.1.10 www.example.com A
7.3 Verifica del record MX
dig @192.168.1.10 example.com MX
Se le risposte coincidono con quanto definito nel file di zona, la configurazione della nuova zona DNS è completa.
8. Aggiungere anche la zona di reverse (opzionale ma consigliato)
Per una configurazione più completa, è buona pratica configurare anche la reverse zone, che consente di tradurre IP in nomi (record PTR).
Per la rete 192.168.1.0/24, la zona di reverse corrispondente è 1.168.192.in-addr.arpa.
8.1 Dichiarare la zona di reverse
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
};
8.2 Creare il file di zona di reverse
sudo cp /etc/bind/db.127 /etc/bind/db.192.168.1
sudo nano /etc/bind/db.192.168.1
Esempio di contenuto:
$TTL 3600
@ IN SOA ns1.example.com. hostmaster.example.com. (
2025112101 ; Serial
3600 ; Refresh
900 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS ns1.example.com.
10 IN PTR ns1.example.com.
20 IN PTR example.com.
30 IN PTR mail.example.com.
Anche qui, controlla la sintassi:
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1
E ricarica il servizio come visto in precedenza.
9. Buone pratiche nella gestione delle zone
- Seriale della zona: aumenta sempre il valore seriale nel record SOA quando modifichi la zona, altrimenti i secondary DNS non sapranno che esiste una nuova versione.
- TTL adeguati: in ambienti di test puoi usare TTL più bassi (ad esempio 300 secondi) per propagare più rapidamente le modifiche; in produzione usa valori più alti per ridurre il carico.
- Backup dei file di zona: conserva copie regolari dei file di zona e dei file di configurazione.
-
Controlli periodici: usa
named-checkzonedopo ogni modifica importante per evitare errori sintattici difficili da diagnosticare. - Permessi corretti: assicurati che BIND possa leggere i file di zona, ma che non siano scrivibili da utenti non autorizzati.
Conclusione
Aggiungere una nuova zona DNS in BIND richiede pochi passi chiari: dichiarare la zona nel file di configurazione,
creare il file di zona con i record corretti, verificare la sintassi e ricaricare il servizio. Seguendo la procedura
descritta in questo articolo e utilizzando gli strumenti di verifica come named-checkconf e
named-checkzone, puoi ridurre al minimo gli errori e gestire in modo affidabile la tua infrastruttura DNS.