Questo tutorial ti mostrerà come configurare un resolver DNS locale su Debian 10 Buster, con il software DNS BIND9 ampiamente utilizzato. Esistono molti sinonimi di risolutore DNS, 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
Tieni inoltre presente che un server DNS può anche essere chiamato server dei nomi. Esempi di risolutore 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
Normalmente, il tuo computer o router utilizza il resolver DNS del tuo ISP per interrogare i nomi di dominio al fine di ottenere un indirizzo IP. L'esecuzione del tuo resolver DNS locale 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 maggiori possibilità di ottenere una risposta DNS direttamente dalla cache del resolver.
- 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 si esegue un server di posta e si utilizzano le liste nere DNS (DNSBL) per bloccare lo spam, si consiglia di eseguire un resolver DNS locale per accelerare le ricerche DNS. 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 host locale/rete locale, non è necessaria alcuna crittografia (DNS su TLS o DNS su HTTPS). La configurazione di un server DoT o DoH verrà discussa in un prossimo articolo.
Si noti che è necessario disporre dei privilegi di root durante l'installazione del software su Debian. Puoi aggiungere sudo all'inizio di un comando, oppure usa su -
comando per passare all'utente root.
Installa BIND9 su Debian 10 Buster
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).
Eseguire il comando seguente per installare BIND 9 su Debian 10 Buster 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 le informazioni sulla versione.
sudo named -v
Esempio di output:
BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c>
Per controllare il numero di versione e le opzioni di build, esegui
sudo named -V
Per impostazione predefinita, BIND si avvia automaticamente dopo l'installazione. Puoi verificarne lo stato con:
systemctl status bind9
Suggerimento:se il comando precedente non si chiude immediatamente, premi Q.
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 risposte di dimensioni maggiori di 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.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
Il pacchetto bind9 su Debian 10 non viene fornito con un db.root
file, ora utilizza il file dei suggerimenti di root in /usr/share/dns/root.hints
. I suggerimenti radice il file viene utilizzato dai risolutori DNS per interrogare i server DNS radice. Esistono 13 gruppi di server DNS root, da a.root-servers.net
a m.root-servers.net
.
Per impostazione predefinita, il server BIND9 su Debian 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 si dispone di un firewall in esecuzione sul server BIND, è necessario aprire la porta 53 per consentire ai client LAN di inviare query DNS. Se utilizzi il firewall UFW, puoi eseguire il comando seguente.
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 dell'indirizzo IP 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 Debian 10 Buster Server
Sul server BIND, dobbiamo impostare 127.0.0.1 come risolutore DNS predefinito. Puoi controllare l'attuale risolutore DNS su Debian 10 con il seguente comando.
cat /etc/resolv.conf
Esempio di output:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 2001:19f0:300:1704::6 nameserver 108.61.10.10
Il pacchetto bind9 su Debian 10 viene fornito con un'unità di servizio Systemd bind9-resolvconf.service
, che ci aiuterà a impostare BIND come risolutore DNS predefinito sul server Debian. 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
Ora puoi controllare il contenuto di /etc/resolv.conf
ancora. Come puoi vedere, 127.0.0.1 (BIND) è ora il risolutore DNS predefinito su Debian 10 Buster.
Se il tuo resolver DNS non è 127.0.0.1, è possibile che il tuo sistema non abbia il resolvconf
binario, che causa il bind9-resolvconf
servizio per fallire. Devi installare resolvconf
pacchetto e riavviare il servizio.
sudo apt install resolvconf sudo systemctl restart bind9-resolvconf
Impostazione del risolutore DNS predefinito sui computer client
Ora puoi configurare altri calcoli sulla LAN per utilizzare il server BIND come risolutore DNS. Per i computer Windows e MacOS, puoi cercare su Google per scoprire come impostare i resolver DNS predefiniti. Qui ti mostrerò come impostare il resolver DNS sui computer desktop Linux. Il metodo seguente funziona su qualsiasi distribuzione Linux che utilizza NetworkManager.
Fare clic sull'icona Network Manager sul desktop Linux per trovare Edit connections
. (Su alcune distribuzioni Linux, è necessario fare clic con il pulsante destro del mouse su Network Manager.)
Quindi seleziona la connessione corrente e fai clic sull'icona a forma di ingranaggio per modificare questa connessione.
Seleziona la scheda Impostazioni IPv4, cambia metodo da Automatic(DHCP)
a Automatic(DHCP) addresses only
, che impedirà al tuo sistema Ubuntu di ottenere l'indirizzo del server DNS dal tuo router. Quindi specificare un server DNS. Qui inserisco l'indirizzo IP del server BIND nella mia LAN.
Salva le modifiche. Quindi riavvia NetworkManager per rendere effettive le modifiche.
sudo systemctl restart NetworkManager
Dopo esserti riconnesso, fai nuovamente clic sull'icona Network Manager e seleziona connection information
. Puoi vedere che il tuo computer desktop Linux ora sta usando il tuo server DNS BIND.
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 Riavvio automatico
Se per qualsiasi motivo il tuo processo di associazione viene interrotto, devi eseguire il comando seguente per riavviarlo.
sudo systemctl restart bind9
Invece di digitare manualmente questo comando, possiamo far riavviare automaticamente il binding modificando il named.service
unità di servizio systemd. Per sovrascrivere la configurazione del servizio systemd predefinita, creiamo una directory separata.
sudo mkdir -p /etc/systemd/system/bind9.service.d/
Quindi crea un file in questa directory.
sudo nano /etc/systemd/system/bind9.service.d/restart.conf
Aggiungi le seguenti righe nel file, che farà riavviare automaticamente Bind 5 secondi dopo il rilevamento di un errore.
[Service] Restart=always RestartSec=5s
Salva e chiudi il file. Quindi ricarica systemd.
sudo systemctl daemon-reload
Per verificare se funzionerebbe, uccidi Bind con:
sudo pkill named
Quindi controlla lo stato di associazione. Troverai Bind riavviato automaticamente.
systemctl status bind9
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 del 50% il 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 Debian 10 Buster con BIND9. Come sempre, se hai trovato utile questo post, iscriviti alla nostra newsletter gratuita per ricevere ulteriori suggerimenti e trucchi. Abbi cura di 🙂