Server DNS: come crearlo nella propria rete locale

Creare un server DNS in LAN e usare record personalizzati per risolvere indirizzi raggiungibili in locale. Come installare e configurare Dnsmasq su Ubuntu Server.

I server DNS permettono la risoluzione dei nomi a dominio ovvero consentono di stabilire a quale indirizzo IP pubblico corrispondono www.google.it, www.ilsoftware.it e così via.
Dell’importanza dei server DNS e del funzionamento di nslookup abbiamo parlato in un altro articolo: l’indirizzo mnemonico consente di ricordare facilmente come si raggiunge un sito ma ad esso deve corrispondere un indirizzo IP sul quale è in ascolto il server web.

Come creare un server DNS per la propria rete locale

Creare un server DNS all’interno della LAN può essere utile per molteplici finalità.
Se si avesse l’esigenza di creare una corrispondenza tra un indirizzo IP locale e un indirizzo mnemonico si può modificare la configurazione del server DNS locale.
Si supponga che all’indirizzo 192.168.1.100 risponda un’applicazione web installata su un server fisico o in una macchina virtuale.
Configurando un server DNS locale è possibile creare ad esempio un’associazione 192.168.1.100 intranet.lan: digitando intranet.lan nella barra degli indirizzi su qualunque client collegato in rete locale si raggiungerà l’applicazione web.

Per allestire il server DNS in LAN usiamo una macchina Ubuntu Server 20.04 e installiamo Dnsmasq, un noto software che integra funzionalità di caching DNS, server DHCP e molto altro.

Prima di installare Dnsmasq è bene aggiornare Ubuntu Server con il seguente comando:

sudo apt update && sudo apt upgrade -y

Come secondo passo è fondamentale assegnare alla macchina Ubuntu Server un indirizzo IP statico. In primis si deve digitare quanto segue e verificare che il file di configurazione contenga network: {config: disabled}:

sudo nano /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg

Nel caso in cui network: {config: disabled} non fosse presente si deve modificare il file di configurazione e aggiungere tale stringa.
Per salvare il file e uscire dall’editor di testo base premere CTRL+O quindi CTRL+X.

Con il comando ip addr show si leggerà l’indirizzo IP privato correntemente assegnato al sistema Ubuntu Server.

La presenza dell’indicazione dynamic sta a confermare che l’indirizzo IP privato è stato assegnato in maniera dinamica dal DHCP, di solito dal router o dall’access point.

In Ubuntu Server la configurazione di rete è controllata e gestita dall’utilità netplan. Digitando ls /etc/netplan si accede al nome del file di configurazione di netplan.
Con il comando seguente di solito si ha la possibilità di modificarlo direttamente:

sudo nano /etc/netplan/00-installer-config.yaml

Nel file di configurazione si può scrivere quanto segue:

network:
  ethernets:
    enp0s3:
        addresses: [192.168.1.151/24]
        gateway4: 192.168.1.1
        nameservers:
            addresses: [8.8.4.4, 8.8.8.8]
  version: 2

L’indirizzo 192.168.1.151 va sostituito con l’IP privato da assegnare in modo statico al server Ubuntu: esso contraddistinguerà anche il server DNS locale. L’IP va scelto nell’intervallo di indirizzi che non viene automaticamente assegnato dal DHCP.
L’indirizzo del gateway (che di solito coincide con quello del router) va sostituito di conseguenza.
Gli indirizzi 8.8.4.4 e 8.8.8.8 vanno sostituiti con un DNS pubblico raggiungibile attraverso la rete Internet: nell’esempio abbiamo usato i server DNS Google.

Per applicare la configurazione e assegnare l’IP statico definito in precedenza si deve digitare il comando seguente:

sudo netplan apply

Con il comando ip addr show ci si può accertare che la nuova configurazione sia stata applicata. L’indicazione dynamic risulterà scomparsa.

Dal momento che il servizio di sistema systemd-resolve è in ascolto sulla porta 53, prima di usare Dnsmasq è necessario disabilitarlo:

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo rm /etc/resolv.conf
echo nameserver 8.8.8.8 | sudo tee /etc/resolv.conf

È giunto il momento di installare Dnsmasq con il comando che segue:

sudo apt install dnsmasq -y

Al termine dell’installazione si deve digitare il comando che permette di accedere alla configurazione di Dnsmasq:

sudo nano /etc/dnsmasq.conf

I simboli del cancelletto posti all’inizio delle seguenti due righe devono essere rimossi:

#domain-needed
#bogus-priv

In questo modo le denominazioni locali (ad esempio sitoweb) che non hanno alcun TLD specificato non saranno mai inoltrate al DNS gestito da terze parti (ad esempio ai DNS Google).
Inoltre, con il secondo parametro di configurazione, gli indirizzi IP privati non saranno esposti al gestore del server DNS remoto.

Scorrendo il file fino in fondo si deve aggiungere quanto segue:

server=8.8.8.8
server=8.8.4.4
cache-size=1000

In questo modo si configurano i server di Google come DNS di riferimento e si chiede a Dnsmasq di conservare una cache locale formata da un numero massimo di 1.000 elementi. In questo modo si velocizzerà la risoluzione dei nomi a dominio più richiesti dai client collegati in rete locale.

Infine con il comando sudo nano /etc/hosts si possono aggiungere nuove corrispondenze.
Ad esempio digitando quanto segue tutte le richieste provenienti dai client e indirizzate a intranet.lan saranno girate al sistema che risponde all’IP privato 192.168.1.100:

192.168.1.100 intranet.lan

Senza modificare i file HOSTS sui singoli sistemi collegati in rete locale è possibile risolvere correttamente le richieste di risoluzione dei nomi a dominio che non sono conosciuti ai DNS pubblici.

Come ultimo passo basta digitare quanto segue per riavviare Dnsmasq e verificarne lo stato:

sudo service dnsmasq restart
sudo service dnsmasq status

Sostituendo l’indirizzo IP pubblico impostato a livello di router o comunque di server DHCP con l’indirizzo privato del DNS locale, tutti i dispositivi della LAN useranno Dnsmasq per risolvere i nomi a dominio.

Affinché i client inizino a utilizzare il server DNS locale è necessario riavviare i dispositivi oppure, nel caso di Windows, digitare i comandi ipconfig /release e ipconfig /renew dal prompt aperto con i diritti di amministratore.
Con il comando ipconfig /all si può verificare che il client Windows sta usando come server DNS proprio quello locale.

Digitando nslookup intranet.lan nell’esempio si otterrà la risposta corretta dal DNS locale.

Come si vede nell’immagine Dnsmasq ha informato il client che l’indirizzo intranet.lan punta all’IP 192.168.1.100.

Ti consigliamo anche

Link copiato negli appunti