Questo tutorial ti mostrerà come configurare un resolver DNS locale su Ubuntu 20.04 con Unbound . 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)
- server DNS ricorsivo
- server dei nomi ricorsivo
- Risolutore ricorsivo
- Ricorrente DNS
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 computer ha un resolver, sebbene sia chiamato stub resolver a causa delle sue capacità limitate. Un risolutore di 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 con memorizzazione nella cache .
Perché eseguire il proprio risolutore DNS
Di solito, il tuo computer, router o server utilizza il resolver DNS del tuo ISP per interrogare i nomi DNS, quindi perché eseguire un 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 molte più possibilità di ottenere risposte 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 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.
Suggerimento :Local
non significa il tuo computer di casa. Piuttosto, significa che il risolutore DNS viene eseguito sulla stessa scatola o sulla stessa rete del client DNS. Puoi installare un resolver DNS non legato sul tuo computer di casa. È locale sul tuo computer di casa. Puoi anche installare un risolutore DNS non legato su un server cloud ed è locale sul server cloud.
Risolutore DNS non associato
Unbound è un risolutore di convalida DNS open source, il che significa che può eseguire la convalida DNSSEC per garantire che la risposta DNS sia autentica. Funzionalità non vincolate:
- Leggero ed estremamente veloce, in quanto non fornisce funzionalità di server DNS autorevoli in piena regola. Su uno dei miei server, Unbound utilizza un quarto della memoria richiesta da BIND9.
- Cache di risposta DNS
- Prefetch:recupera i dati che stanno per scadere in modo che il client non subisca picchi di latenza quando la ricerca deve essere ripetuta quando TTL scade sui dati.
- DNS su TLS
- DNS su HTTPS
- Minimizzazione del nome della query:invia una quantità minima di informazioni ai server upstream per migliorare la privacy.
- Uso aggressivo della cache convalidata da DNSSEC
- Zone di autorizzazione, per una copia locale della zona radice
- DNS64
- Cripta DNSC
- Convalida DNSSEC:è abilitata per impostazione predefinita su Ubuntu 🙂
- Sottorete client EDN
- Può funzionare come un server di inoltro DNS.
- Supporta i dati locali e la zona delle politiche di risposta per restituire una risposta personalizzata per determinati nomi di dominio.
Passaggio 1:installa unbound DNS Resolver su Ubuntu 20.04
Esegui il comando seguente per installare Unbound su Ubuntu 20.04 dal repository predefinito.
sudo apt update sudo apt install unbound
Controlla la versione.
unbound -V
Esempio di output:
Per impostazione predefinita, Unbound si avvia automaticamente dopo l'installazione. Puoi verificarne lo stato con:
systemctl status unbound
Se non è in esecuzione, avvialo con:
sudo systemctl start unbound
E abilita l'avvio automatico all'avvio:
sudo systemctl enable unbound
Nota :se è presente un altro servizio in ascolto sulla porta UDP 53, è possibile che non sia possibile avviare unbound. È necessario interrompere quel servizio prima di iniziare senza vincoli. Per scoprire quale servizio sta già utilizzando la porta UDP 53, esegui il comando seguente.
sudo ss -lnptu | grep 53
Se hai già installato il resolver BIND9, devi eseguire il comando seguente per interromperlo e disabilitarlo, in modo che Unbound possa ascoltare la porta UDP 53. Per impostazione predefinita, Unbound è in ascolto su 127.0.0.1:53
e [::1]:53
sudo systemctl disable named --now
Fase 2:Configura Non vincolato
Il file di configurazione principale per Unbound è /etc/unbound/unbound.conf
. Per impostazione predefinita, il server Unbound su Ubuntu fornisce un servizio ricorsivo solo per localhost. Le query esterne verranno rifiutate.
Modifica il file di configurazione.
sudo nano /etc/unbound/unbound.conf
Per impostazione predefinita, c'è solo una riga di configurazione in questo file.
include: "/etc/unbound/unbound.conf.d/*.conf"
Questo per includere i file di configurazione in /etc/unbound/unbound.conf.d/
directory, che contiene due file di configurazione.
qname-minimisation.conf
:abilita la minimizzazione di QNAME.root-auto-trust-anchor-file.conf
:Abilita la convalida DNSSEC.
Non è necessario toccare questi due file. Sappi solo che faranno bene alla tua risoluzione DNS. Ora dobbiamo aggiungere le nostre configurazioni personalizzate. Puoi dare un'occhiata al file di configurazione di esempio /usr/share/doc/unbound/examples/unbound.conf
per sapere come configurare Unbound. Per tua comodità, ho compilato una configurazione minima per te. Aggiungi le seguenti righe in /etc/unbound/unbound.conf
file.
server: # the working directory. directory: "/etc/unbound" # run as the unbound user username: unbound verbosity: 2 # uncomment and increase to get more logging. # listen on all interfaces, answer queries from the local subnet. interface: 0.0.0.0 # comment out the following line if your system doesn't have IPv6. interface: ::0 # perform prefetching of almost expired DNS cache entries. prefetch: yes access-control: 10.0.0.0/8 allow access-control: 127.0.0.1/24 allow access-control: 2001:DB8::/64 allow # hide server info from clients hide-identity: yes hide-version: yes remote-control: # Enable remote control with unbound-control(8) here. control-enable: no # what interfaces are listened to for remote control. # give 0.0.0.0 and ::0 to listen to all interfaces. # set to an absolute path to use a unix local name pipe, certificates # are not used for that, so key and cert files need not be present. control-interface: 127.0.0.1 # control-interface: ::1 # port number for remote control operations. control-port: 8953
Le configurazioni di cui sopra sono autoesplicative. Ci sono due cose che potresti dover considerare.
(1) Per impostazione predefinita, Ubuntu esegue il risolutore di stub risolto da systemd che è in ascolto su 127.0.0.53:53
. Devi interromperlo, quindi unbound può associare a 0.0.0.0:53
.
sudo systemctl disable systemd-resolved --now
(2) Se l'intervallo di rete locale non è 10.0.0.0/8
, devi cambiarlo, ad esempio,
access-control: 192.168.0.0/24 allow
quindi non vincolato accetterà query DNS dalla rete 192.168.0.0/24.
Salva e chiudi il file. Quindi riavvia Unbound.
sudo systemctl restart unbound
Controlla lo stato. Assicurati che sia in esecuzione.
systemctl status unbound
Se hai un firewall UFW in esecuzione sul server Unbound, devi aprire la porta 53 per consentire ai client LAN di inviare query DNS.
sudo ufw allow in from 10.0.0.0/8 to any port 53
Questo aprirà la porta TCP e UDP 53 alla rete privata 10.0.0.0/8.
Passaggio 3:impostazione del risolutore DNS predefinito sul server Ubuntu 20.04
Dobbiamo fare in modo che il server Ubuntu 20.04 utilizzi 127.0.0.1 come risolutore DNS, quindi non legato risponderà alle query DNS. Il pacchetto non associato su Ubuntu viene fornito con un servizio systemd unbound-resolvconf.service
che dovrebbe aiutarci a raggiungere questo obiettivo. Tuttavia, ho scoperto che non funzionerà.
Invece, puoi creare un unbound-resolvconf.service
personalizzato file.
sudo nano /etc/systemd/system/unbound-resolvconf.service
Aggiungi le seguenti righe in questo file.
[Unit] Description=local unbound via resolvconf After=unbound.service ConditionFileIsExecutable=/sbin/resolvconf [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c 'echo nameserver 127.0.0.1 | /sbin/resolvconf -a lo.unbound' ExecStop=/sbin/resolvconf -d lo.unbound [Install] WantedBy=unbound.service
Salva e chiudi questo file. Quindi ricarica systemd.
sudo systemctl daemon-reload
Assicurati che il tuo sistema abbia il resolvconf
binario.
sudo apt install openresolv
Quindi, riavvia questo servizio.
sudo systemctl restart unbound-resolvconf.service
Ora controlla il contenuto di /etc/resolv.conf
.
cat /etc/resolv.conf
Come puoi vedere, 127.0.0.1 (Unbound) è il resolver DNS predefinito.
Risoluzione dei problemi
Se vedi un valore diverso in /etc/resolv.conf
file, ciò significa che Unbound non è ancora il tuo 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.
Se questo metodo continua a non funzionare, forse è dovuto al fatto che /etc/resolv.conf
il file sul tuo server Ubuntu non è un collegamento simbolico a /run/resolvconf/resolv.conf
. Devi eliminare il /etc/resolv.conf
file e creare un collegamento simbolico.
sudo rm /etc/resolv.conf sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
Se hai un client VPN WireGuard in esecuzione sul server Ubuntu, devi utilizzare la seguente impostazione DNS nel file di configurazione del client WireGuard.
DNS = 127.0.0.1
Quindi riavvia il client VPN WireGuard.
Fase 4: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 Unbound. I passaggi per impostare il resolver DNS predefinito su MacOS e Windows sono disponibili su Internet.
Come disabilitare IPv6 in Unbound
Se il tuo server non dispone di connettività IPv6, è una buona idea disattivare IPv6 in Unbound per ridurre le ricerche DNS non necessarie su IPv6. Per disabilitare IPv6 in Unbound su Ubuntu, aggiungi semplicemente la seguente riga nel server:
clausola nel /etc/unbound/unbound.conf
file.
do-ip6: no
Salva e chiudi il file. Quindi riavvia Unbound.
sudo systemctl restart unbound
DNSEC non vincolato
DNSSEC è un modo per verificare che la risposta DNS non venga manomessa. È abilitato per impostazione predefinita se si installa Unbound dal repository Ubuntu predefinito. Facciamo una rapida query DNS sul server Ubuntu 20.04.
dig A linuxbabe.com
Puoi vedere l'ad
flag nella risposta DNS. AD significa dati autentici.
Si noti che il nome di dominio deve abilitare DNSSEC affinché la convalida funzioni. Se non vedi il flag dell'annuncio, potrebbe significare che il nome di dominio non ha abilitato DNSSEC.
Dati locali
Puoi utilizzare la funzione dati locali in Unbound per servire nomi host interni locali o sovrascrivere record DNS pubblici.
Ad esempio, se installo unbound sul server web del mio blog, posso aggiungere le seguenti quattro righe nel server:
clausola nei file di configurazione Unbound, in modo che il dominio si risolva sempre in localhost.
local-data: "linuxbabe.com A 127.0.0.1" local-data: "www.linuxbabe.com A 127.0.0.1" local-data: "linuxbabe.com AAAA ::1" local-data: "www.linuxbabe.com AAAA ::1"
Non è stato possibile raggiungere nessun server
Se vedi il seguente errore quando usi dig
comando sui computer client
;; connection timed out; no servers could be reached
È possibile che la regola del firewall sia sbagliata o che il resolver Unbound non sia in esecuzione.
Conclusione
Spero che questo tutorial ti abbia aiutato a configurare un resolver DNS locale su Ubuntu 20.04 con Unbound. Poiché verrà utilizzato su un host locale/rete locale, non è necessaria alcuna crittografia (DNS su TLS o DNS su HTTPS). Per impostare un resolver DoT o un resolver DoH, leggi i seguenti tutorial.
- Come configurare facilmente un DNS su TLS Resolver con Nginx su Ubuntu
- Imposta DNS over HTTPS (DoH) Resolver su Ubuntu con DNSdist
Come sempre, se hai trovato utile questo post, iscriviti alla nostra newsletter gratuita per ricevere ulteriori suggerimenti e trucchi. Attento 🙂