DNS Setup · 16 min read · Sep 08, 2025
Come impostare un risolutore DNS locale con Unbound su Ubuntu 22.04

Unbound è un software server DNS gratuito e open-source che può essere utilizzato per risolutori DNS validanti, ricorsivi e di caching. È un server DNS ricco di funzionalità che supporta DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), minimizzazione del nome della query, uso aggressivo della cache validata DNSSEC e supporto per zone autoritative. Unbound è focalizzato sulla privacy e sulla sicurezza del DNS, ma senza sacrificare la velocità e le prestazioni.
Unbound è sviluppato principalmente da NLnet Labs e distribuito sotto la licenza BSD, e supporta funzionalità moderne su standard aperti del server DNS. Unbound è stato rigorosamente auditato e può essere eseguito su Linux, BSD e macOS. Unbound è disponibile per la maggior parte di questi sistemi operativi e può essere installato tramite il gestore pacchetti del sistema.
In questo tutorial, installerai Unbound su un server Ubuntu 22.04 e lo configurerai come server DNS locale con alcune funzionalità abilitate, come DNSSEC, cache DNS, nomi di dominio locali e sottodomini, e anche DNS-over-TLS (DoT). Configurerai anche il logging di Unbound tramite Rsyslog e logrotate e imposterai una macchina client Ubuntu per verificare l’installazione di Unbound.
Requisiti
Per completare questo tutorial, devi avere i seguenti requisiti:
- Un server Ubuntu 22.04 - Questo esempio utilizza un server Ubuntu con il nome host ‘unbound-server‘ e l’indirizzo IP ‘192.168.5.100‘.
- Un utente non root con privilegi di amministratore sudo/root.
Questo è tutto. Sei ora pronto per procedere con l’installazione di Unbound.
Installazione del server DNS Unbound
Per impostazione predefinita, il repository di Ubuntu fornisce un pacchetto Unbound che puoi facilmente installare tramite APT. Prima di iniziare l’installazione di Unbound, emetti il seguente comando apt per aggiornare e aggiornare l’indice dei pacchetti di Ubuntu.
sudo apt updateOra controlla i dettagli del pacchetto unbound tramite il seguente comando.
sudo apt info unboundAl momento della scrittura di questo documento, il repository predefinito di Ubuntu fornisce Unbound 1.13.

Successivamente, installa Unbound utilizzando il seguente comando apt. Quando richiesto, inserisci y per confermare e premi INVIO per procedere.
sudo apt install unboundOutput:

Una volta installato Unbound, esegui il seguente comando systemctl per verificare il servizio Unbound.
sudo systemctl is-enabled unbound
sudo systemctl status unboundL’output ‘enabled‘ conferma che Unbound è abilitato e si avvierà automaticamente all’avvio del sistema. E l’output ‘active (running)‘ conferma che Unbound è in esecuzione.

Configurazione di Unbound come server DNS locale
La configurazione predefinita di Unbound si trova in ‘/etc/unbound/unbound.conf’. In questo passaggio, modificherai il file di configurazione principale di Unbound ‘/etc/unbound/unbound.conf’ tramite il tuo editor preferito.
Ora imparerai la configurazione di base di un server DNS Unbound, abilitando la cache DNS, configurando nomi di dominio locali e sottodomini, impostando Unbound come risolutore DNS con DoT (DNS-over-TLS) abilitato.
Configurazione di base
Apri il file di configurazione predefinito di Unbound ‘/etc/unbound/unbound.conf’ utilizzando il tuo editor preferito. Questo esempio utilizza nano per modificare il file di configurazione ‘/etc/unbound/unbound.conf’.
sudo nano /etc/unbound/unbound.confAggiungi le seguenti righe al file. La sezione ‘server‘ ti consente di impostare le configurazioni di base di Unbound. In questo esempio, eseguirai Unbound sull’indirizzo IP locale ‘192.168.5.100‘ con la porta predefinita 53. Inoltre, imposterai il logging ai messaggi Syslog e disabiliterai IPv6. Infine, configurerai Unbound per interrogare ricorsivamente qualsiasi nome host dai server DNS radice tramite il file ‘root-hints‘.
#Aggiunta del supporto DNS-Over-TLS
server:
use-syslog: yes
username: "unbound"
directory: "/etc/unbound"
tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt
do-ip6: no
interface: 192.168.5.100
port: 53
prefetch: yes
root-hints: /usr/share/dns/root.hints
harden-dnssec-stripped: yesParametri dettagliati:
- use-syslog: abilita il logging ai messaggi Syslog.
- username: esegui come utente unbound, che è l’utente predefinito.
- directory: la directory di lavoro predefinita per Unbound è la directory ‘/etc/unbound’.
- tls-cert-bundle: certificati utilizzati per autenticare le connessioni effettuate a monte. Su distribuzioni basate su Debian, il file cert si trova in ‘/etc/ssl/certs/ca-certificates.crt’.
- do-ip6: usa ‘yes‘ per eseguire Unbound con IPv6 o imposta ‘no‘ per disabilitare IPv6.
- interface: interfaccia di rete o indirizzo IP su cui Unbound verrà eseguito. Puoi usare un indirizzo IP o il nome dell’interfaccia come ‘eth0‘. Inoltre, puoi eseguire su una porta specifica aggiungendo un formato come ‘IP-ADDRESS@PORT‘.
- port: specifica la porta su cui Unbound verrà eseguito, e questa porta gestirà le connessioni dei client. La porta DNS predefinita è 53.
- prefetch: impostato su ‘yes‘ per abilitare il prefetching delle voci di cache dei messaggi quasi scaduti.
- root-hints: un file che contiene i dettagli del server DNS radice. Il file ‘/usr/share/dns/root.hints’ è fornito dal pacchetto ‘dns-root-data‘. E puoi anche scaricare il file root-hints da qui ‘ https://www.internic.net/domain/named.cache ‘.
- harden-dnssec-stripped: impostalo su ‘yes‘ per indurire contro la ricezione di dati dnssec-stripped.
Abilitare la cache DNS
Successivamente, aggiungi le seguenti righe per abilitare la query della cache DNS sulla tua installazione di Unbound.
cache-max-ttl: 14400
cache-min-ttl: 11000Parametri dettagliati:
- cache-max-ttl: TTL o Time To Live per RRSets e messaggi nella cache DNS. Il formato è in secondi.
- cache-min-ttl: tempo minimo di vita per la cache. Il predefinito è 0, ma puoi cambiarlo a tuo piacimento come ‘11000‘ secondi. Non impostarlo per più di 1 ora o avrai problemi a causa di dati obsoleti.
Privacy e sicurezza di Unbound
Ora puoi aggiungere le seguenti righe per impostare la privacy e la sicurezza di base per Unbound.
aggressive-nsec: yes
hide-identity: yes
hide-version: yes
use-caps-for-id: yesParametri dettagliati:
- aggressive-nsec: impostato su ‘yes‘ per abilitare NSEC aggressivo per utilizzare la catena NSEC DNSSEC per sintetizzare NXDOMAIN e altre negazioni. Controlla la pagina web IETF su ‘NSEC’ https://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html.
- hide-identity: impostato su yes per disabilitare le risposte dalle query bind riguardo id.server o hostname.bind.
- hide-version: impostato su yes per disabilitare le query version.server e version.bind.
- use-caps-for-id: impostato su yes per abilitare l’uso di ‘0x100-encoded‘ nella query per ostacolare i tentativi di spoofing.
Definire indirizzi privati e liste di controllo degli accessi (ACL)
Successivamente, devi definire l’indirizzo privato della tua rete e le ACL (liste di controllo degli accessi). Assicurati di cambiare la subnet locale nelle righe sottostanti con il tuo attuale ambiente di rete.
private-address: 192.168.0.0/16
private-address: 192.168.5.0/24
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
#controlla quali client sono autorizzati a effettuare query (ricorsive)
access-control: 127.0.0.1/32 allow_snoop
access-control: ::1 allow_snoop
access-control: 127.0.0.0/8 allow
access-control: 192.168.5.0/24 allowParametri dettagliati:
- private-address: definisci le subnet di rete private sulla tua infrastruttura. Solo i nomi ‘private-domain‘ e ‘local-data’ possono avere questi indirizzi privati.
- access-control: definisci il controllo degli accessi in cui i client sono autorizzati a effettuare query (ricorsive) al server Unbound. Il parametro ‘allow‘ abiliterà la ricorsione, mentre ‘allow_snoop‘ abiliterà sia la ricorsione che la non ricorsione.
Impostare un dominio locale
Dopo aver configurato l’indirizzo privato e le liste di controllo degli accessi, definirai la zona locale del tuo nome di dominio. Questo è molto utile, specialmente se hai più applicazioni auto-ospitate sulla tua rete locale. Puoi facilmente definire il tuo nome di dominio o sottodomini e puntarli a un indirizzo IP specifico.
Questo esempio creerà la zona per il dominio ‘home.lan‘ con il tipo ‘static‘, quindi creerai più sottodomini tramite il parametro ‘local-data‘. Ogni sottodominio sarà puntato a un indirizzo IP specifico, e creerai anche record PTR tramite il parametro ‘local-data-ptr‘.
# zona locale
local-zone: "home.lan." static
local-data: "firewall.home.lan. IN A 10.0.0.1"
local-data: "vault.home.lan. IN A 10.0.0.2"
local-data: "media.home.lan. IN A 10.0.0.3"
local-data: "docs.home.lan. IN A 10.0.0.4"
local-data: "wiki.home.lan. IN A 10.0.0.5"
local-data-ptr: "10.0.0.1 firewall.home.lan"
local-data-ptr: "10.0.0.2 vault.home.lan"
local-data-ptr: "10.0.0.3 media.home.lan"
local-data-ptr: "10.0.0.4 docs.home.lan"
local-data-ptr: "10.0.0.5 wiki.home.lan"Parametri dettagliati:
- local-zone: definisci il dominio locale qui.
- local-data: definisci il record A per i sottodomini e quale indirizzo IP locale sarà risolto.
- local-data-ptr: definisci il record ptr per i tuoi sottodomini.
Ottimizzazione delle prestazioni di Unbound
Aggiungi le seguenti righe per ottenere più prestazioni. Puoi regolare i parametri sottostanti con il tuo attuale ambiente.
num-threads: 4
msg-cache-slabs: 8
rrset-cache-slabs: 8
infra-cache-slabs: 8
key-cache-slabs: 8
rrset-cache-size: 256m
msg-cache-size: 128m
so-rcvbuf: 8mParametri dettagliati:
- num-threads: il numero di thread che verranno creati. Il valore dovrebbe corrispondere ai core della CPU del server.
- msg-cache-slabs: il numero di lastre da utilizzare per la cache dei messaggi. Impostalo su 8 per ottimizzare Unbound per utilizzare più memoria per la cache.
- rrset-cache-slabs: il numero di lastre da utilizzare per la cache RRset. Impostalo su 8 per ottimizzare Unbound per utilizzare più memoria per la cache RRSet.
- infra-cache-slabs: il numero di lastre da utilizzare per la cache delle infrastrutture. Impostalo su 8 per ottimizzare Unbound per utilizzare più memoria per la cache delle infrastrutture.
- key-cache-slabs: il numero di lastre da utilizzare per la cache delle chiavi. Impostalo su 8 per ottimizzare Unbound per utilizzare più memoria per la cache delle chiavi.
- rrset-cache-size: specifica la quantità di memoria per la cache RRSet. Questo esempio utilizza 256MB, mentre il predefinito è solo 4MB.
- msg-cache-size: specifica la quantità di memoria per la cache dei messaggi. Questo esempio utilizza 128MB, mentre il predefinito è solo 4MB.
- so-rcvbuf: imposta la dimensione del buffer per la porta DNS 53/udp su 8 MB. Sul sistema Ubuntu, devi anche impostare un valore più alto per il parametro del kernel ‘net.core.rmem_max‘.
Impostare Unbound come risolutore DNS con DNS-over-TLS (DoT)
Infine, aggiungi una nuova sezione ‘forward-zone’ per impostare Unbound come risolutore DNS per le tue reti locali. Questo esempio utilizza i server DNS Quad9 con DoT (DNS-over-TLS) abilitato.
forward-zone:
name: "."
forward-ssl-upstream: yes
## Aggiungi anche IBM IPv6 Quad9 su TLS
forward-addr: 9.9.9.9@853#dns.quad9.net
forward-addr: 149.112.112.112@853#dns.quad9.netParametri dettagliati:
- forward-zone: definisci la zona di inoltro per Unbound.
- name: impostato su “.” per inoltrare tutte le query DNS.
- forward-addr: utilizza un inoltratore specifico per inoltrare tutte le query DNS. Questo esempio utilizza Quad9 DNS con DNS-over-TLS (DoT) abilitato.
Salva e esci dal file ‘/etc/unbound/unbound.conf’ quando hai finito. Con il file di configurazione di Unbound modificato, puoi ora riavviare il servizio Unbound e applicare le modifiche.
Esegui il comando sottostante per controllare e verificare la configurazione di Unbound. Se tutto va bene, dovresti ricevere un output come ‘unbound-checkconf: no errors in /etc/unbound/unbound.conf‘.
sudo unbound-checkconfSuccessivamente, esegui il comando sottostante per aumentare il valore predefinito ‘net.core.rmem_max’ del tuo sistema tramite il file ‘/etc/sysctl.conf’. Quindi, applica le modifiche tramite il comando ‘sysctl‘.
echo "net.core.rmem_max= 8388608" >> /etc/sysctl.conf
sudo sysctl -pDopo di che, esegui il seguente comando systemctl per riavviare il servizio Unbound e applicare le modifiche.
sudo systemctl restart unboundCon questo, il servizio Unbound dovrebbe essere in esecuzione con la nuova configurazione sull’indirizzo IP 192.168.5.100 sulla porta 53.

Verifica l’elenco delle porte aperte sul tuo sistema tramite il comando ss sottostante.
ss -tulpnRiceverai un output simile a questo - La porta UDP DNS predefinita 53 è utilizzata dal servizio Unbound.

Ora che hai terminato le configurazioni di Unbound, imposterai il firewall UFW e aprirai la porta DNS predefinita 53.
Configurazione del firewall UFW
Su Ubuntu, il firewall predefinito installato è UFW. È installato, ma ancora inattivo. In questo passaggio, imposterai il firewall UFW e aprirai la porta UDP per Unbound.
Esegui il comando sottostante per aprire il servizio OpenSSH su UFW tramite il comando sottostante. Quindi, puoi aggiungere la porta DNS 53/udp al firewall UFW.
sudo ufw allow OpenSSH
sudo ufw allow 53/udpSuccessivamente, esegui il comando sottostante per avviare e abilitare il servizio firewall UFW. Quando richiesto, inserisci y per confermare e premi INVIO per procedere.
sudo ufw enableL’output ‘Il firewall è attivo e abilitato all’avvio del sistema‘ conferma che il firewall UFW è in esecuzione e abilitato, il che significa che il firewall UFW si avvierà automaticamente all’avvio del sistema.
Output:

Ora esegui il comando ufw sottostante per verificare lo stato del firewall UFW. Dovresti ricevere un output che lo stato di UFW è ‘attivo‘ con il servizio OpenSSH e la porta DNS 53/udp abilitati.
sudo ufw statusOutput:

Configurazione del log di Unbound tramite Rsyslog e Logrotate
Dopo aver configurato il firewall UFW, ora imposterai un file di log per Unbound tramite rsyslog e logrotate. Il servizio rsyslog creerà un file di log specifico per Unbound e logrotate ruoterà il file di log di Unbound in un certo tempo.
Esegui il comando sottostante per aggiungere una nuova configurazione Rsyslog ‘/etc/rsyslog.d/unbound.conf‘ per il servizio Unbound. Con questo, i log di Unbound saranno memorizzati in ‘/var/log/unbound.log‘.
cat <Successivamente, esegui il comando sottostante per aggiungere la configurazione di logrotate ‘/etc/logrotate.d/unbound‘ per il servizio Unbound. Questo creerà la rotazione dei log per il file di log di Unbound ‘/var/log/unbound.log‘ su base giornaliera.
cat <
Ora esegui il comando systemctl sottostante per riavviare i servizi Rsyslog e Logrotate. Questo applicherà le modifiche che hai apportato a entrambi i servizi.
sudo systemctl restart rsyslog logrotateInfine, puoi verificare il file di log riavviando il servizio Unbound utilizzando il comando sottostante.
Con questo, i messaggi generati dal servizio Unbound durante il processo di riavvio saranno memorizzati nel file di log ‘/var/log/unbound.log‘. Esegui il comando cat per mostrare il contenuto del file di log ‘/var/log/unbound.log‘.
sudo systemctl restart unbound
cat /var/log/unbound.logOutput:

Configurazione del risolutore DNS sul client
Per quanto riguarda il lato client, devi configurare il risolutore DNS e utilizzare Unbound come risolutore predefinito sul sistema client. Per la distribuzione Ubuntu, puoi utilizzare NetworkManager, il servizio systemd-resolved o impostare un file statico per ‘/etc/resolv.conf‘.
In questo passaggio, imparerai come configurare il risolutore DNS su Ubuntu Desktop e Ubuntu Server.
Per Ubuntu Desktop
Il servizio NetworkManager gestisce la rete predefinita per la versione Desktop di Ubuntu. Quindi puoi facilmente configurare il risolutore DNS tramite NetworkManager, che può essere fatto tramite GUI della riga di comando o modificando il file di configurazione per ciascuna interfaccia di rete.
Per configurare il risolutore DNS tramite la riga di comando, puoi utilizzare nmcli. Esegui il comando sottostante per configurare il risolutore DNS per l’interfaccia di rete specifica. Puoi sostituire il nome dell’interfaccia eth0.
sudo nmcli connection modify eth0 ipv4.dns "192.168.5.100"Ogni interfaccia gestita da NetworkManager ha un file di configurazione specifico che è memorizzato nella directory ‘/etc/NetworkManager/system-connections’ con il formato ‘.nmconnection’.
Puoi modificare la configurazione dell’interfaccia con il tuo editor di testo preferito e aggiungere le seguenti righe alla sezione ‘[ipv4]‘.
[ipv4]
dns=192.168.5.100
ignore-auto-dns=true
never-default=trueSe preferisci utilizzare un’applicazione GUI, apri l’applicazione NetworkManager sulla tua macchina e modifica il nome dell’interfaccia che desideri modificare. Fai clic sulla scheda ‘Impostazioni IPv4’ e inserisci il tuo server DNS locale. Quindi, fai clic su Salva per confermare.

Per server Ubuntu generico
Per macchine server Ubuntu generiche, la rete è gestita da netplan con il servizio di backend systemd-networkd. E per la configurazione del risolutore DNS, il systemd-networkd utilizza il systemd-resolved. Quindi, per configurare il risolutore DNS su un server Ubuntu generico, puoi farlo tramite il servizio systemd-resolved.
Apri il file di configurazione systemd-resolved utilizzando il tuo editor preferito. Questo esempio utilizza un editor nano.
sudo nano /etc/systemd/resolved.confNella sezione ‘[Resolve]‘, decommenta il parametro ‘DNS‘ e inserisci l’indirizzo IP del tuo server DNS locale.
[Resolve]
DNS=192.168.5.100Salva e esci dal file quando hai finito.
Ora esegui il comando sottostante per riavviare il servizio systemd-resolved e applicare le modifiche. Quindi, puoi verificare lo stato del risolutore DNS tramite il comando resolvectl come segue.
sudo systemctl restart systemd-resolved
sudo resolvectl statusSe tutto va bene, dovresti vedere un output simile a questo - Il risolutore DNS predefinito è cambiato all’indirizzo IP del server DNS locale Unbound 192.168.5.100.

Testare il server DNS Unbound
Per assicurarti che il DNS Unbound funzioni come risolutore DNS, esegui il comando dig sottostante dalla macchina client Ubuntu. Il parametro ‘@192.168.5.100‘ garantisce che stai utilizzando un server DNS Unbound che gira sull’indirizzo IP ‘192.168.5.100‘.
dig @192.168.5.100Quando tutto va bene, ricevi una risposta dal server DNS radice come l’output sottostante. Inoltre, noterai il flag ‘ad‘ (authentic data) nell’output dell’intestazione, il che significa che DNSSEC è abilitato.

Successivamente, esegui il comando sottostante per assicurarti che i client possano accedere ai nomi di dominio su Internet.
dig github.com
dig duckduckgo.comQuando tutto va bene, dovresti ricevere un output dettagliato del record DNS per il dominio ‘github.com‘ e ‘duckduckgo.com‘. Puoi vedere che il risolutore DNS che risponde alla query è ‘127.0.0.53#53’, il systemd-resolved che utilizza Unbound come risolutore predefinito. Inoltre, puoi vedere il ‘Tempo di query‘ per ciascuna query, il ‘Tempo di query‘ per il dominio ‘github.com‘ è ‘1748‘ e per ‘duckduckgo.com‘ è ‘999‘.
Output per github.com:

Output per duckduckgo.com:

Se riesegui il comando dig sopra, il ‘Tempo di query‘ dovrebbe essere ridotto. E questo conferma che le tue query sono state memorizzate nella cache e la cache DNS sta funzionando.
dig github.com
dig duckduckgo.comAccedi a Github dopo che la cache è stata memorizzata:

Accedi a duckduckgo dopo che la cache è stata memorizzata:

Successivamente, verifica il dominio locale o il sottodominio tramite il comando dig sottostante. Se tutto va bene, ogni sottodominio sarà puntato all’indirizzo IP corretto configurato nel file di configurazione di Unbound ‘/etc/unbound/unbound.conf‘.
dig firewall.home.lan +short
dig vault.home.lan +short
dig media.home.lan +shortOutput:

Ora esegui il comando dig sottostante per assicurarti che i record PTR siano puntati al nome di dominio corretto.
dig -x 10.0.0.1 +short
dig -x 10.0.0.2 +short
dig -x 10.0.0.3 +shortOutput:

Puoi anche verificare DoT (DNS over TLS) tramite tcpdump. Installa il pacchetto ‘tcpdump‘ sul tuo server Unbound.
sudo apt install tcpdumpInserisci y quando richiesto e premi INVIO per procedere.

Ora esegui il comando tcpdump sottostante per monitorare il traffico sull’interfaccia ‘eth0‘ con la porta DoT 853. In questo esempio, il DNS Unbound è in esecuzione sull’indirizzo IP ‘192.168.5.100‘ con l’interfaccia ‘eth0‘.
tcpdump -vv -x -X -s 1500 -i eth0 'port 853'Spostati sulla macchina client ed esegui il comando sottostante per accedere ai nomi di dominio esterni/internet tramite il comando dig sottostante.
dig google.comOutput:

Dopo di che, torna al server Unbound e ora dovresti ottenere un output simile a questo nell’output di tcpdump.

Con questo, hai ora installato e configurato un server DNS locale tramite Unbound sul server Ubuntu. Inoltre, hai configurato un risolutore DNS su Ubuntu Desktop e Server tramite NetworkManager e systemd-resolved.
Conclusione
In questa guida, hai installato il server DNS locale Unbound su un server Ubuntu 22.04. Hai abilitato la cache DNS, DNSSEC (abilitato per impostazione predefinita), configurato indirizzi privati e ACL, aggiunto un dominio locale tramite local-zone, quindi configurato Unbound come risolutore DNS con DoT (DNS-over-TLS).
Inoltre, hai configurato la privacy e la sicurezza DNS di base, ottimizzato Unbound e configurato i log di Unbound tramite rsyslog e logrotate.
Alla fine di questa guida, hai anche imparato come impostare un risolutore DNS su Ubuntu Desktop e Server tramite NetworkManager e systemd-resolved. E hai anche appreso l’uso di base del comando dig per controllare il server DNS.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.