Il DNS (Domain Name System) è un sistema in cui tutti i nomi di dominio dei server sono organizzati secondo una gerarchia specifica. Perché ne abbiamo bisogno? Immagina di dover connetterti a un dispositivo con l’indirizzo IP 91.206.179.207. Potresti inserire questo indirizzo nella riga di comando per ottenere le informazioni necessarie, ma ricordare molte combinazioni numeriche di questo tipo è molto difficile. Per questo motivo sono stati creati server speciali per convertire i nomi di dominio in indirizzi IP. Così, ad esempio, quando inserisci hostman.com nella barra di ricerca del browser, i dati della richiesta vengono inviati a un server DNS, che cerca una corrispondenza nel proprio database. Il server DNS invia quindi l’indirizzo IP necessario al tuo dispositivo e solo allora il browser accede direttamente alla risorsa.
Configurare un DNS proprio consente una configurazione del sistema più flessibile e precisa ed evita la dipendenza da terze parti. In questo articolo vedremo come configurare il DNS utilizzando il nameserver BIND su Ubuntu.
Zona: Una parte della gerarchia DNS ospitata su un server DNS. Definisce i confini entro i quali un server o un gruppo di server è responsabile.
Server root: Server DNS che contengono informazioni sui domini di primo livello (.ru, .com, ecc.).
Dominio: Una parte nominata della gerarchia DNS, un nodo specifico che può includere altri nodi. Gli indirizzi DNS si leggono da destra a sinistra e iniziano con un punto, con i domini separati anch’essi da punti. Ad esempio, il dominio poddomen.domen.ru va letto come .ru.domen.poddomen. Di solito, il nome di dominio riflette la struttura della gerarchia DNS, ma il punto finale viene omesso.
FQDN (Fully Qualified Domain Name): Nome di dominio completo che include i nomi di tutti i domini padre.
Record di risorsa (Resource Record): Un’unità di memorizzazione delle informazioni, ovvero un record che collega un nome a informazioni di servizio. È composto da:
Nome (NAME): Il nome o l’indirizzo IP proprietario della zona
Time to Live (TTL): Il tempo durante il quale un record viene conservato nella cache DNS prima di essere eliminato
Classe (CLASS): Tipo di rete, di solito IN (Internet)
Tipo (TYPE): Lo scopo del record
Dati (DATA): Informazioni aggiuntive
Record A: Associa un nome host a un indirizzo IPv4. Ogni interfaccia di rete può avere un solo record A.
website.com. 520 IN A 91.206.179.207
Record AAAA: Uguale al record A, ma per IPv6.
CNAME: Record di nome canonico, un alias di un nome reale utilizzato per il reindirizzamento.
MX: Specifica gli host di posta per il dominio. Il campo NAME contiene il dominio di destinazione e il campo DATA contiene la priorità e l’host che riceve la posta.
website.com. 17790 IN MX 10 mx.website.com.
website.com. 17790 IN MX 20 mx2.website.com.
NS: Indica il server DNS che gestisce il dominio.
PTR: Associa un indirizzo IP a un nome di dominio, necessario per la risoluzione inversa.
SOA: Descrive le impostazioni principali della zona.
SRV: Contiene gli indirizzi dei server che forniscono servizi interni al dominio, come Jabber.
Per seguire le istruzioni di questo articolo, sono necessari almeno due server Ubuntu nello stesso data center. Qualsiasi di questi server può essere ordinato da Hostman.
Utilizzeremo due server Ubuntu 20.04 come server DNS primario e secondario, rispettivamente ns1 e ns2. Inoltre, ci saranno server aggiuntivi che utilizzeranno i server configurati.
È necessario disporre dei privilegi di superutente su ciascun server.
Useremo bind9 come server DNS. Installare il pacchetto bind9 dal repository Linux:
sudo apt update && sudo apt upgrade -y
sudo apt install bind9
Si consiglia inoltre di installare strumenti di monitoraggio di rete:
sudo apt install dnsutils
Dopo l’installazione, avviare il servizio bind9:
sudo service bind9 start
Il file di configurazione principale del server è /etc/bind/named.conf. Descrive le impostazioni generali ed è solitamente suddiviso in più file per comodità.
Questo file contiene i parametri generali del server:
options {
dnssec-validation auto;
auth-nxdomain no;
directory "/var/cache/bind";
recursion no; # disabilita le query ricorsive verso il nameserver
listen-on {
172.16.0.0/16;
127.0.0.0/8;
};
forwarders {
172.16.0.1;
8.8.8.8;
};
};
Per verificare che tutto sia stato inserito correttamente, utilizzare l’utilità named-checkconf:
sudo named-checkconf
Se non ci sono errori, il server BIND inizierà a funzionare.
Il server DNS primario memorizza la copia principale del file di zona. Tutte le zone saranno archiviate nella directory /etc/bind/master-zones. Creare la directory:
sudo mkdir /etc/bind/master-zones
Creare un file per descrivere la zona:
sudo touch /etc/bind/master-zones/test.example.com.local.zone
Aggiungere quindi i record SOA, NS e A:
$ttl 3600
$ORIGIN test.example.com.
test.example.com. IN SOA (
ns.test.example.com.
abuse.test.example.com.
2022041201
10800
1200
604800
3600 )
@ IN NS ns.test.example.com.
@ IN NS ns2.test.example.com.
@ IN A 172.16.101.3
ns IN A 172.16.0.5
ns2 IN A 172.16.0.6
Eseguire quindi il controllo con l’utilità named-checkzone:
sudo named-checkzone test.example.com. /etc/bind/master-zones/test.example.com.local.zone
Questo è un altro file incluso nella configurazione principale del server. In esso specifichiamo le zone locali:
zone "test.example.com." {
type master;
file "/etc/bind/master-zones/test.example.com.local.zone";
};
Dopo aver inserito i dati necessari, verificare la configurazione e riavviare bind9 (l’opzione -z controlla i file di zona):
sudo named-checkconf
sudo named-checkconf -z
sudo service bind9 restart
sudo service bind9 status
Le view consentono una gestione flessibile della risoluzione dei nomi da diverse sottoreti. Specificare nel file /etc/bind/named.conf:
include "/etc/bind/named.conf.options";
acl "local" { 172.16.0.0/16; };
view "local" {
include "/etc/bind/named.conf.local";
match-clients { local; };
};
Riavviare bind9:
sudo service bind9 restart
Dopo il riavvio del server, è possibile richiedere il record SOA del server 172.16.0.5 da un altro computer della rete locale:
dig @172.16.0.5 -t SOA test.example.com
A questo punto, la configurazione del server DNS primario è completa.
In questa guida abbiamo configurato il DNS su un server Ubuntu utilizzando il pacchetto bind9. Dopo aver seguito tutti i passaggi, i due server DNS configurati possono essere utilizzati per la risoluzione dei nomi nella rete. Per utilizzare i server DNS personalizzati, configurare gli altri server affinché utilizzino 172.16.0.5 e 172.16.0.6 come server DNS.
Questa configurazione può fungere da base per ulteriori miglioramenti, come la configurazione di un server di posta elettronica.