GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Configura un risolutore DNS locale su Ubuntu 18.04, 16.04 con BIND9

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 a m.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 🙂


Ubuntu
  1. Come configurare un firewall con UFW su Ubuntu 18.04

  2. Come configurare il risolutore DNS locale utilizzando Dnsmasq su Ubuntu 20.04

  3. Scansiona la rete locale con arp-scan su Ubuntu

  4. Come configurare un firewall con UFW su Ubuntu 16.04

  5. Come configurare un risolutore DNS non legato su Ubuntu 20.04

Configura il server DNS autorevole BIND su Ubuntu 18.04, 16.04

Configura il risolutore DNS su HTTPS (DoH) su Ubuntu con DNSdist

Come configurare facilmente un DNS su TLS Resolver con Nginx su Ubuntu

Configura il risolutore DNS locale su Ubuntu 20.04 con BIND9

Imposta un risolutore DNS non legato sul server Ubuntu 20.04

Configura il server Ubuntu con EHCP (LAMP, DNS, FTP, Mail)