Come configurare la cache DNS usando dnsmasq su Ubuntu

DNSmasq può essere utilizzato per memorizzare nella cache le richieste DNS per le distribuzioni Linux. tuttavia, può essere un po’ impegnativo.

La cache DNS funziona in modo da velocizzare la procedura di ricerca DNS che converte il nome di dominio di un sito Web nell’indirizzo IP associato. Quando più utenti della rete visitano lo stesso indirizzo del sito Web, l’utilizzo del server cache DNS locale può ridurre il tempo necessario per il caricamento del Web.

Per prima cosa vediamo cos’è la cache DNS.

Che cos’è la cache DNS?

Il DNS viene utilizzato da Internet per tenere traccia di tutti i siti online accessibili pubblicamente e dei relativi indirizzi IP. Può essere paragonato a un elenco telefonico. L’utilizzo del DNS ci evita di dover memorizzare l’IP di ogni sito, necessario per l’interazione dell’infrastruttura di rete con i siti Internet.

Ogni volta che richiedi al motore di ricerca di visualizzare una pagina web, questo è ciò che effettivamente accade dietro le quinte.

Sebbene il tuo sistema abbia accesso a un gran numero di server DNS esterni, il problema è che avere una replica centrale del DNS accelera comunque la trasmissione e la risoluzione. Questo è quando entra in gioco la memorizzazione nella cache DNS.

Prima di inviare la richiesta al Web, la cache DNS gestisce la risoluzione dell’identità per i domini a cui si accede di recente e di frequente nel tentativo di accelerare ulteriormente la procedura.

Si accede al server DNS ogni volta che è necessario risolvere un indirizzo IP in un nome di dominio. Ciò può comportare un carico aggiuntivo sul server DNS, in particolare se il sito Web riceve molte richieste contemporaneamente.

Viene utilizzata una cache DNS per ridurre le richieste DNS e i tempi di risposta. Gli indirizzi IP risolti insieme ai dettagli dell’host vengono salvati localmente. Anziché avviare una nuova query DNS, il risultato viene recuperato dalla memoria cache DNS la prossima volta che l’IP o il nome di dominio deve essere risolto.

In che modo la cache DNS aiuta a risolvere i problemi DNS intermittenti sulle istanze Amazon EC2?

La maggior parte dei sistemi Linux non utilizza una cache DNS locale. Ciò implica che tutte le richieste DNS vengono inviate direttamente al risolutore DNS autorevole fornito da Amazon, che ha una limitazione sul numero di richieste che può elaborare contemporaneamente. I problemi di risoluzione DNS si verificano quando ci sono molte richieste.

La distribuzione di una cache DNS locale nel sistema ti aiuterà a ridurre l’utilizzo della CPU e della rete prevenendo gli errori di risoluzione DNS. Una cache DNS locale risponde alle query fatte a risorse DNS esterne come Amazon RDS e S3.

Il protocollo DHCP viene utilizzato durante l’avvio dalle istanze Amazon EC2 connesse a Amazon VPC per richiedere un indirizzo del server DNS.

Quando utilizzi Amazon VPC per costruire un cloud privato virtuale, Route 53 DNS Resolver utilizza efficacemente un resolver sul VPC per rispondere alle richieste DNS per le istanze EC2 in esecuzione con indirizzi Web Amazon VPC locali e voci in zone amministrate privatamente. Resolver effettua ricerche ricorrenti sui server DNS pubblici per tutti gli indirizzi Web aggiuntivi.

Una cache DNS funge da registrazione transitoria di precedenti query DNS che il nostro sistema può esaminare rapidamente durante il tentativo di accedere a un sito Web online. Mantiene un registro di ogni sessione esistente e successiva. Questa cache DNS semplifica la risoluzione del dominio e previene gli errori con le istanze Linux di Amazon EC2.

Molti utenti in genere utilizzano il servizio Route 53 di Amazon per il DNS quando accedono ad AWS. È davvero facile da usare e quasi gratuito. Ma ci sono una serie di ragioni che potrebbero influenzare la decisione dell’utente di utilizzare un server DNS locale.

Anche se bind9 è ancora un’ottima opzione per configurare un server cache DNS locale, dnsmasq è molto più semplice da installare e configurare sia su istanze EC2 che su una macchina locale.

Cos’è dnsmasq?

DNSmasq è uno strumento relativo a Linux che supporta la memorizzazione nella cache DNS, DHCP, TFTP e DNS. È progettato per essere compatto e leggero, il che lo rende ideale per reti e firewall con meno vincoli di risorse.

È incredibilmente semplice da installare e configurare. Per configurare DNS e DHCP per le sottoreti, dnsmasq è una soluzione pratica e flessibile.

È possibile impostare questi identificatori assegnati da DHCP e le istruzioni associate per ciascun server o per un controller sottostante. Le opzioni DHCP dinamiche e statiche sono entrambe supportate da dnsmasq. È portatile e ha la capacità di gestire DNS e DHCP per almeno 1.000 client.

Quando viene ricevuta una query DNS, dnsmasq risponde da una cache locale o la trasmette a un server DNS autorevole. Oltre a rispondere alle richieste DNS di indirizzi con configurazione DHCP, controlla il contenuto del file /etc/hosts per identificare i nomi host locali che non sono elencati nel DNS pubblico.

L’utilizzo dello strumento dnsmasq invece della cache DNS integrata del browser migliora notevolmente le prestazioni di navigazione in Internet. È ideale per un ambiente integrato con risorse limitate perché è molto semplice da configurare e richiede pochissimo spazio su disco.

Caratteristiche di dnsmasq

  • È semplice integrare i server DNS interni utilizzando dnsmasq configurandolo per trasmettere particolari query di risoluzione dei nomi di dominio a particolari server autorevoli.
  • Il carico di lavoro del server viene ridotto e l’affidabilità viene migliorata utilizzando il server DNS locale configurato.
  • La configurazione del DNS per gli endpoint abilitati al firewall è piuttosto semplice e indipendente dal DNS utilizzato dall’ISP.
  • Se la porta collegata a Internet è inaccessibile durante l’esecuzione di un controllo DNS sul computer, l’operazione di ricerca verrà immediatamente sospesa.
  • Tramite query PPP (Point-to-point protocol) o DHCP, dnsmasq può davvero essere configurato per raccogliere periodicamente i dati direttamente dal server di risoluzione del dominio sottostante.

Installazione

Il servizio systemd-resolved deve essere disattivato prima di installare e configurare l’utilità dnsmasq.

systemctl stop systemd-resolved

Puoi anche nasconderlo usando l’attributo mask in modo che non si avvii automaticamente al riavvio.

 systemctl mask systemd-resolved

L’installazione di dnsmasq è l’azione iniziale che è necessario eseguire dopo aver disattivato systemd-resolved. DNSmasq è preinstallato in quasi tutte le distribuzioni Linux. In caso contrario, puoi installarlo manualmente. Avvia un terminale di comando, quindi digita il seguente comando per farlo.

sudo apt-get install dnsmasq

Usa il seguente comando se sei un utente yum:

sudo yum install -y dnsmasq

Questo comando installa automaticamente lo strumento e avvia dnsmasq in background.

Dopo una corretta installazione, puoi controllare lo stato di dnsmasq usando il comando seguente.

systemctl status dnsmasq

Se mostra il suo stato come “attivo (in esecuzione)”, significa che l’installazione è stata eseguita e configurata sulla porta 53. Se mostra il suo stato come “inattivo (morto)”, è necessario riavviare nuovamente sia la macchina Ubuntu che dnsmasq. Questo risolverà l’errore.

Configurazione

Dnsmasq è ora pronto per essere configurato sul tuo computer come server DNS di memorizzazione nella cache locale. Il file di configurazione predefinito si trova in /etc/dnsmasq.conf. Questo file di configurazione deve essere modificato per configurare l’utilità dnsmasq nel sistema.

Utilizzare questo comando per aprire e modificare il file di configurazione.

nano /etc/dnsmasq.conf

Il file di configurazione deve essere modificato solo con i privilegi di root. Basta cancellare tutto nel file inclusi i commenti e semplicemente copiare, incollare e salvare questa impostazione di configurazione.

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1
expand-hosts
domain=geek-demo.com
cache-size=1000

Vorrei descrivere brevemente cosa significa ciascuno dei parametri.

  • Porta: per specificare o associare la porta che Dnsmasq utilizzerà per ricevere le richieste DNS.
  • domain-needed – Trasmette solo i nomi di dominio al server DNS upstream.
  • bogus-priv – impedisce il dominio e il port forwarding
  • listen-address – Per definire l’indirizzo del nameserver. In genere, localhost viene utilizzato come predefinito, per configurare un server DNS locale.
  • dominio – Per configurare i domini che dnsmasq aggiunge agli identificatori brevi.
  • cache-size – La dimensione massima della cache DNS consentita nell’archiviazione.

Dopo aver eseguito tutte le modifiche necessarie, salva e chiudi il file di configurazione. E il passaggio successivo consiste nel modificare il file /etc/resolv.conf per aggiungere l’indirizzo di risoluzione dell’host locale. Utilizzare il comando seguente per aprire con l’editor nano.

nano /etc/resolv.conf

Qui puoi trovare tutti i nameserver utilizzati dal tuo sistema per la risoluzione degli indirizzi. In quell’elenco, aggiungi anche l’indirizzo di loopback. Aggiungi “nameserver 127.0.0.1” e mantienilo nella prima riga.

Salva ed esci dal file di configurazione. Affinché l’impostazione aggiornata abbia effetto, riavviare l’utilità dnsmasq.

systemctl restart dnsmasq

Test del server di memorizzazione nella cache DNS locale

È facile testare il server DNS locale. Aprire una riga di comando e utilizzare il comando dig per verificare la memorizzazione nella cache DNS. Quando esegui il comando dig per la prima volta, il risultato dovrebbe essere abbastanza comune.

┌──(root💀kali)-[/home/writer]
└─# dig winadmin.it.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> winadmin.it.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;winadmin.it.com.                 IN      A

;; ANSWER SECTION:
winadmin.it.com.          227     IN      A       172.66.43.163
winadmin.it.com.          227     IN      A       172.66.40.93

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:52:49 EDT 2022
;; MSG SIZE  rcvd: 74

Qui, si prega di notare che il tempo di query è di circa 31 msec per interrogare i dettagli dal server dei nomi a monte. Esegui ancora una volta lo stesso comando dig e noterai una significativa riduzione del tempo di query.

┌──(root💀kali)-[/home/writer]
└─# dig winadmin.it.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> winadmin.it.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;winadmin.it.com.                 IN      A

;; ANSWER SECTION:
winadmin.it.com.          281     IN      A       172.66.40.93
winadmin.it.com.          281     IN      A       172.66.43.163

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:58:10 EDT 2022
;; MSG SIZE  rcvd: 74

Qui, il tempo di interrogazione è 0 msec. Ciò è dovuto al fatto che dopo aver eseguito la ricerca iniziale, dnsmasq ha archiviato i dati e tutte le ricerche eseguite successivamente sono state istantanee a causa dell’utilizzo della cache archiviata. Il riavvio di dnsmasq è necessario se si desidera eliminare la cache DNS archiviata.

Avvolgendo

In questo articolo, abbiamo visto come impostare e configurare dnsmasq per funzionare come un server DNS locale. Potresti anche essere interessato a sapere come modificare i server DNS per una navigazione più veloce in diversi sistemi operativi.