Questo tutorial ti mostrerà come configurare un resolver DNS locale su Ubuntu 18.04, 16.04 con il software DNS BIND9 ampiamente utilizzato. Un resolver DNS è conosciuto con molti nomi, alcuni dei quali sono elencati di seguito. Si riferiscono tutti alla stessa cosa.
- full resolver (in contrasto con stub resolver)
- Ricorrente DNS
- server DNS ricorsivo
- Risolutore ricorsivo
Inoltre, tieni presente che un server DNS può anche essere chiamato server dei nomi. Esempi di risolutori DNS sono 8.8.8.8 (server DNS pubblico di Google) e 1.1.1.1 (server DNS pubblico Cloudflare). Anche il sistema operativo del tuo PC ha un resolver, sebbene sia chiamato stub resolver a causa delle sue capacità limitate. Un risolutore stub è un piccolo client DNS sul computer dell'utente finale che riceve richieste DNS da applicazioni come Firefox e inoltra le richieste a un risolutore ricorsivo. Quasi tutti i risolutori possono memorizzare nella cache la risposta DNS per migliorare le prestazioni, quindi sono anche chiamati server DNS di memorizzazione nella cache.
Perché eseguire il proprio risolutore DNS locale
Normalmente, il tuo computer o router utilizza il resolver DNS del tuo ISP per interrogare i nomi DNS, quindi perché eseguire il tuo resolver DNS?
- Può velocizzare le ricerche DNS, perché il resolver DNS locale ascolta solo le tue richieste DNS e non risponde alle richieste DNS di altre persone, quindi hai molte più possibilità di ottenere risposte DNS direttamente dalla cache del resolver. Inoltre, la latenza di rete tra il tuo computer e il resolver DNS viene eliminata (quasi zero), quindi le query DNS possono essere inviate ai server DNS root più rapidamente.
- Se esegui un server di posta e utilizzi le liste nere DNS (DNSBL) per bloccare lo spam, dovresti eseguire il tuo risolutore DNS, perché alcune liste nere DNS come URIBL rifiutano le richieste dai risolutori DNS pubblici.
- Se esegui il tuo server VPN su un VPS (Virtual Private Server), è buona norma anche installare un resolver DNS sullo stesso VPS.
- Potresti anche voler eseguire il tuo risolutore DNS se non ti piace che la cronologia di navigazione in Internet venga archiviata su un server di terze parti.
Se possiedi un sito Web e desideri che il tuo server DNS gestisca la risoluzione dei nomi per il tuo nome di dominio invece di utilizzare il server DNS del registrar di domini, dovrai configurare un server DNS autorevole, che è diverso da un risolutore DNS. BIND può fungere contemporaneamente da server DNS autorevole e risolutore DNS, ma è buona norma separare i due ruoli su caselle diverse .
Questo tutorial mostra come configurare un resolver DNS locale e poiché verrà utilizzato su localhost/rete locale, non è necessaria alcuna crittografia (DNS su TLS o DNS su HTTPS). La configurazione di un resolver DoT o di un server DoH sarà discussa in un prossimo articolo.
Suggerimento :Local
non significa il tuo computer di casa. Piuttosto, significa che il risolutore DNS viene eseguito sulla stessa casella del client DNS. Puoi installare il risolutore DNS BIND sul tuo computer di casa. È locale sul tuo computer di casa. Puoi installare il risolutore DNS BIND su un server cloud ed è locale sul server cloud.
Configura un risolutore DNS locale su Ubuntu 18.04, 16.04 con BIND9
BIND (Berkeley Internet Name Domain) è un software server DNS open source ampiamente utilizzato su Unix/Linux grazie alla sua stabilità e alta qualità. È stato originariamente sviluppato da UC Berkeley e successivamente, nel 1994, il suo sviluppo è stato spostato a Internet Systems Consortium, Inc (ISC).
Esegui il comando seguente per installare BIND 9 su Ubuntu 18.04, 16.04 dal repository predefinito. BIND 9 è la versione attuale e BIND 10 è un progetto morto.
sudo apt update sudo apt install bind9 bind9utils bind9-doc bind9-host dnsutils
Controlla la versione.
named -v
Esempio di output:
BIND 9.11.3-1ubuntu1.3-Ubuntu (Extended Support Version) <id:a375815>
Per controllare il numero di versione e le opzioni di build, esegui
named -V
Per impostazione predefinita, BIND si avvia automaticamente dopo l'installazione. Puoi verificarne lo stato con:
systemctl status bind9
Se non è in esecuzione, avvialo con:
sudo systemctl start bind9
E abilita l'avvio automatico all'avvio:
sudo systemctl enable bind9
Il server BIND verrà eseguito come bind
utente, che viene creato durante l'installazione, ed è in ascolto sulla porta TCP e UDP 53, come si può vedere eseguendo il seguente comando:
sudo netstat -lnptu | grep named
Di solito le query DNS vengono inviate alla porta UDP 53. La porta TCP 53 è per dimensioni delle risposte superiori a 512 byte.
Il demone BIND si chiama named . (Un demone è un pezzo di software che viene eseguito in background.) Il named
binary è installato da bind9
pacchetto e c'è un altro importante binario:rndc
, il controller del demone del nome remoto, installato da bind9utils
pacchetto. Il rndc
binary viene utilizzato per ricaricare/arrestare e controllare altri aspetti del demone BIND. La comunicazione avviene tramite la porta TCP 953.
Ad esempio, possiamo controllare lo stato del server dei nomi BIND.
sudo rndc status
Configurazioni per un risolutore DNS locale
/etc/bind/
è la directory che contiene le configurazioni per BIND.
- named.conf :il file di configurazione principale che include le configurazioni di altri tre file.
- db.root :i suggerimenti radice file utilizzato dai resolver DNS per interrogare i server DNS radice. Esistono 13 gruppi di server DNS root, da
a.root-servers.net
am.root-servers.net
. - db.127 :file della zona di mappatura inversa IPv4 di localhost.
- db.local :localhost inoltra il file della zona di mappatura IPv4 e IPv6.
- db.empty :un file di zona vuoto
Per impostazione predefinita, il server BIND9 su Ubuntu fornisce un servizio ricorsivo solo per localhost e client di rete locale. Le domande esterne verranno rifiutate. Quindi non è necessario modificare i file di configurazione. Per familiarizzare con le configurazioni di BIND 9, ti mostrerò comunque come abilitare il servizio di ricorsione.
Il file di configurazione BIND principale /etc/bind/named.conf
origina le impostazioni da altri 3 file.
- /etc/bind/named.conf.options
- /etc/bind/named.conf.local
- /etc/bind/named.conf.default-zones
Per abilitare il servizio di ricorsione, modifica il primo file.
sudo nano /etc/bind/named.conf.options
Nelle options
clausola, aggiungere le seguenti righe. Sostituisci gli indirizzi IP in allow-recursion
dichiarazione con i tuoi indirizzi di rete locale.
// hide version number from clients for security reasons. version "not currently available"; // optional - BIND default behavior is recursion recursion yes; // provide recursion service to trusted clients only allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; }; // enable the query log querylog yes;
Salva e chiudi il file. Quindi prova la sintassi del file di configurazione.
sudo named-checkconf
Se il test ha esito positivo (indicato da un'uscita silenziosa), riavvia BIND9.
sudo systemctl restart bind9
Se hai un firewall in esecuzione sul server BIND, devi aprire la porta 53 per consentire ai client LAN di inviare query DNS.
sudo ufw allow in from 192.168.0.0/24 to any port 53
Questo aprirà la porta TCP e UDP 53 alla rete privata 192.168.0.0/24. Quindi da un altro computer nella stessa LAN, possiamo eseguire il seguente comando per interrogare il record A di google.com. Sostituisci 192.168.0.102 con l'indirizzo IP del tuo risolutore BIND.
dig A google.com @192.168.0.102
Ora sul risolutore BIND, controlla il registro delle query con il seguente comando.
sudo journalctl -eu bind9
Questo mostrerà l'ultimo messaggio di registro dell'unità di servizio bind9. Posso trovare la seguente riga nel registro, che indica che è stata ricevuta una query DNS per il record A di google.com dalla porta 57806 di 192.168.0.103.
named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)
Impostazione del risolutore DNS predefinito su Ubuntu 18.04 Server
Systemd-resolved fornisce lo stub resolver su Ubuntu 18.04. Come accennato all'inizio di questo articolo, un risolutore stub è un piccolo client DNS sul computer dell'utente finale che riceve richieste DNS da applicazioni come Firefox e inoltra le richieste a un risolutore ricorsivo.
Il risolutore ricorsivo predefinito può essere visualizzato con questo comando.
systemd-resolve --status
Come puoi vedere, BIND non è l'impostazione predefinita. Se esegui il seguente comando sul server BIND,
dig A facebook.com
Questa query DNS non può essere trovata nel registro BIND. Invece, devi dire esplicitamente a dig di usare BIND.
dig A facebook.com @127.0.0.1
Per impostare BIND come risolutore predefinito, apri il file di configurazione risolto da systemd.
sudo nano /etc/systemd/resolved.conf
Nel [Resolve]
sezione, aggiungere la riga seguente. Questo imposterà un server DNS globale per il tuo server.
DNS=127.0.0.1
Salva e chiudi il file. Quindi riavvia il servizio risolto dal sistema.
sudo systemctl restart systemd-resolved
Ora esegui il seguente comando per controllare il risolutore DNS predefinito.
systemd-resolve --status
Ora esegui una query DNS senza specificare 127.0.0.1
.
dig A facebook.com
Vedrai la query DNS nel registro BIND, il che significa che BIND è ora il risolutore ricorsivo predefinito. Se non vedi alcuna query nel registro BIND, potrebbe essere necessario configurare il server DNS per collegamento.
Configura il server DNS Per-Link su Ubuntu 18.04
Puoi anche configurare il server DNS per collegamento, che sovrascriverà il server DNS globale. Esistono due modi per configurare i server DNS per collegamento:
- tramite systemd risolto
- tramite netplan
Risolto dal sistema
Elenca i file in /etc/systemd/network/
directory.
ls /etc/systemd/network/
Esempio di output:
05-eth0.network 99-default.link
Come puoi vedere, ho due file di configurazione del collegamento. Il 05-eth0.network
file è per la mia interfaccia di rete principale, quindi modifico questo file.
sudo nano /etc/systemd/network/05-eth0.network
Il tuo nome file potrebbe essere diverso. Se non ci sono file in questa directory, la tua configurazione DNS per collegamento non è controllata da systemd-resolved
.
Commenta la voce DNS e dominio predefinita e aggiungi la tua voce DNS.
DNS=127.0.0.1
Salva e chiudi il file. Quindi riavvia systemd-resolved
e systemd-networkd
servizio.
sudo systemctl restart systemd-resolved systemd-networkd
netplan
Alcuni server Ubuntu potrebbero utilizzare netplan per configurare la rete per collegamento. In questo caso, devi configurare il server DNS in .yaml
file in /etc/netplan/
directory. Elenca i file in questa directory.
ls /etc/netplan/
Esempio di output:
01-netcfg.yaml
Quindi modifico questo file.
sudo nano /etc/netplan/01-netcfg.yaml
Imposta l'indirizzo del server DNS in nameservers
sezione.
nameservers: search: [ invalid ] addresses: - 127.0.0.1
Salva e chiudi il file. Quindi applica la modifica.
sudo netplan apply
Nota: Se vedi il seguente messaggio di errore, allora netplan non può elaborare il file di configurazione.
Invalid YAML at /etc/netplan/01-netcfg.yaml inconsistent indentation
Dovresti correggere l'indentazione incoerente ed eseguire sudo netplan apply
comando di nuovo.
Impostazione del risolutore DNS predefinito su Ubuntu 16.04 Server
Ubuntu 16.04 usa il resolvconf
programma per gestire i resolver DNS in /etc/resolv.conf
file. Installa resolvconf
pacchetto.
sudo apt install resolvconf
Per impostare BIND come risolutore predefinito sul server Ubuntu 16.04, devi modificare il /etc/resolvconf/resolv.conf.d/head
file e aggiungi “nameserver 127.0.0.1
” a questo file, operazione che può essere eseguita eseguendo il comando seguente:
echo "nameserver 127.0.0.1" | sudo tee -a /etc/resolvconf/resolv.conf.d/head
Il risolutore definito in questo file sarà sempre il primo risolutore DNS, qualunque cosa accada. Ora riavvia resolvconf
servizio.
sudo systemctl restart resolvconf
Ora puoi controllare il contenuto di /etc/resolv.conf
.
cat /etc/resolv.conf
Come puoi vedere, 127.0.0.1 è il risolutore DNS predefinito.
Nota che alcuni provider di hosting come Linode possono utilizzare un assistente di rete per generare automaticamente il /etc/resolv.conf
file. Per modificare il resolver DNS predefinito, devi disabilitare quell'helper di rete nel pannello di controllo dell'hosting.
Aggiorna :Successivamente ho notato che il pacchetto BIND su Ubuntu 16.04 viene fornito con un'unità di servizio Systemd bind9-resolvconf.service
, che ci aiuterà a impostare il risolutore DNS predefinito sul server Ubuntu, quindi non devi farlo manualmente come sopra. Per impostazione predefinita, questo servizio è disabilitato, è necessario avviarlo e abilitare l'avvio automatico all'avvio.
sudo systemctl start bind9-resolvconf sudo systemctl enable bind9-resolvconf
Assicurati che il resolvconf
pacchetto è installato. Solo due righe di comandi e BIND verranno impostati come resolver DNS predefinito sul tuo server Ubuntu 16.04.
Impostazione del risolutore DNS predefinito sui computer client
Sul desktop di Ubuntu, puoi seguire le istruzioni precedenti per impostare il resolver DNS predefinito, ma ricorda di sostituire 127.0.0.1 con l'indirizzo IP del server BIND. I passaggi per impostare il resolver DNS predefinito su MacOS e Windows sono disponibili su Internet.
Come disabilitare IPv6 in BIND
Se non utilizzi IPv6 nella tua rete, è una buona idea disattivare IPv6 in BIND, altrimenti ci saranno molti errori su IPv6 nel registro BIND come di seguito.
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
Per disabilitare IPv6 in BIND su Ubuntu, apri semplicemente il /etc/default/bind9 file
sudo nano /etc/default/bind9
Aggiungi "-4" alle OPZIONI.
OPTIONS="-u bind -4"
Salva e chiudi il file. Quindi riavvia BIND e il gioco è fatto.
sudo systemctl restart bind9
BIND SERVFAIL
Se il tuo risolutore BIND non è in grado di rispondere alle query DNS (SERVFAIL) e nel registro BIND viene visualizzata la riga seguente.
dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out
Probabilmente è perché il tuo server non ha una connettività IPv6 funzionante. Questo è successo a uno dei miei server. Pensavo che la connettività IPv6 funzionasse come al solito, ma all'improvviso si è interrotta per ragioni che non conoscevo. Dopo aver disabilitato IPv6 in BIND, la risoluzione DNS funziona di nuovo.
BIND dimensione massima della cache
BIND può memorizzare nella cache i risultati DNS sul server per accelerare la ricerca DNS per i client. BIND presuppone che tu stia eseguendo un risolutore DNS dedicato, ovvero nessun altro servizio Web è in esecuzione sullo stesso host, quindi la dimensione della cache predefinita (definita da max-cache-size
) è impostato sul 90% della RAM totale per ottenere le migliori prestazioni. Puoi vedere una riga come quella di seguito nel registro BIND (sudo journalctl -eu bind9
) all'avvio di BIND.
none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)
Nota che BIND non utilizzerà immediatamente il 90% della tua RAM. Se ci sono solo poche richieste DNS, BIND utilizza solo una piccola quantità di RAM, perché non ci sono molti risultati DNS da memorizzare nella cache. Se ci sono molte richieste DNS, utilizzerà molta RAM per archiviare la cache DNS.
Se la tua RAM è limitata, potresti non volere che BIND utilizzi il 90% della tua RAM per la cache. Modifica il file di configurazione BIND /etc/bind/named.conf.options
.
sudo nano /etc/bind/named.conf.options
Aggiungi la seguente direttiva nelle options
clausola. Cambia il 50% al tuo valore preferito.
max-cache-size 50%;
Riavvia BIND per rendere effettive le modifiche.
sudo systemctl restart bind9
Conclusione
Spero che questo tutorial ti abbia aiutato a configurare un resolver DNS locale su Ubuntu 18.04, 16.04 con BIND9. Come sempre, se hai trovato utile questo post, iscriviti alla nostra newsletter gratuita per ricevere altri suggerimenti e trucchi. Attento 🙂