Velocizzare le richieste DNS con Opendns e una cache locale

Mar, 31/07/2007 - 00:20

Velocizzare le richieste DNS con Opendns e una cache locale

Inviato da paolo 3 commenti
Introduzione

Mi capita spesso di lavorare su macchine, che sono collegate a router di tutti i tipi e mi capita spesso di vederli collassare su stessi quando sono invasi di richieste DNS, aumentando progressivamente il tempo di latenza per la risoluzione dei nomi a dominio, rendendo la navigazione lenta ed esasperante.

Oppure magari succede che il server DNS a cui siamo connessi, per un motivo o per l'altro ci impedisca di risolvere determinati nomi di dominio.

Qual'è dunque la soluzione ?

La soluzione ottimale è innanzitutto avere un nostro server dns locale dove fare cache dei nomi a dominio per abbattere i tempi di accesso e di risoluzione e poi usare come server DNS principale non quella della nostra lan oppure del nostro provider internet, ma quelli di opendns.

Installiamo il nostro server dns locale

Invece di usare un vero e proprio server DNS completo, utilizziamo un applicazione molto più leggera (rispetto ad un server come BIND9) in quanto noi abbiamo solo bisogno che ci faccia da cache locale dei nomi e che faccia forward ad un server dns reale di quelli che ancora non abbiamo cachato, l'applicazione che utilizzeremo è pdnsd.

Procediamo all'installazione:

root@paolo-laptop:/mnt#apt-get install pdnsd
 
 
Lettura della lista dei pacchetti in corso... Fatto
 
 
Generazione dell'albero delle dipendenze in corso       
 
 
Reading state information... Fatto               
 
 
Pacchetti suggeriti:
 
 
  resolvconf
 
 
I seguenti pacchetti NUOVI (NEW) saranno installati:
 
 
  pdnsd
 
 
0 aggiornati, 1 installati, 0 da rimuovere e 0 non aggiornati.
 
 
È necessario prendere 252kB di archivi. 
 
 
Dopo l'estrazione, verranno occupati 639kB di spazio su disco.
 
 
Get:1 http://it.archive.ubuntu.com gutsy/universe pdnsd 1.2.4par-0.2 [252kB]
 
 
Scaricato 252kB in 4s (54,0kB/s)                 
 
 
Selezionato il pacchetto pdnsd, che non lo era.
 
 
(Lettura del database ... 151966 file e directory attualmente installati.)
 
 
Spacchetto pdnsd (da .../pdnsd_1.2.4par-0.2_i386.deb) ...
 
 
Configuro pdnsd (1.2.4par-0.2) ...
 
 
Aggiunta dell'utente di sistema «pdnsd» (UID 115) ...
 
 
Aggiunta del nuovo utente «pdnsd» (UID 115) con gruppo «proxy» ...
 
 
La home directory "/var/cache/pdnsd" non è stata creata.
 
 
Starting proxy DNS server: pdnsd.

Come di consueto il file di configurazione è posizionato in /etc/pdnsd.conf.

Configurazione

Per configurare e far funzionare a dovere il software bisogna fare 2 cose fondamentali:

* Configurare pdnsd per farlo puntare ad 1 o più server DNS reali, in questo caso utilizzeremo Opendns, cosi che potrà fare forward della nostra richiesta se non è in cache

* Cambiare il nostro /etc/resolv.conf impostando come nameserver pdnsd, quindi localhost

Quindi, apriamo con un editor il file /etc/pdnsd.conf e modifichiamo la sezione "server" in questo modo:

server {
 
 
        label="open-dns";
 
 
        ip="208.67.22.222,208.67.220.220";
 
 
        timeout=30;
 
 
        interval=30;
 
 
        uptest=ping;
 
 
        ping_timeout=50;
 
 
        purge_cache=off;
 
 
}

Ricorda di decomentare il blocco di impostazioni, /* */ vanno eliminati]

Ho evidenziato la sezione IP, come si puo vedere i nameserver sono proprio quelli di opendns e possiamo specificarne più di 1 semplicemente separandoli con la virgola.

Tutto il resto del file di configurazione puo tranquillamente essere lasciato invariato.

Salviamo e riavviamo:

root@paolo-laptop:/mnt# /etc/init.d/pdnsd restart
 
 
Restarting proxy DNS server: pdnsd.

Ora non ci resta che modificare il nostro resolv.conf:

nameserver 127.0.0.1

Possiamo tranquillamente eliminare quelli gia presenti e lasciare solamente questo.

Se la nostra rete è provvista di DHCP, allora dobbiamo modificare un'altro file di configurazione, /etc/dhcp3/dhclient.conf :

prepend domain-name-servers 127.0.0.1;

Togliendo il commento proprio su quella particolare stringa, che non fa altro che aggiungere al automaticamente al resolv.conf il nostro indirizzo nameserver 127.0.0.1

Test

1) Facciamo un test senza il nostro dns proxy server:

root@paolo-laptop:/var/cache/pdnsd# dig ildn.net
 
 
 
 
 
; <<>> DiG 9.4.1-P1 <<>> ildn.net
 
 
;; global options:  printcmd
 
 
;; Got answer:
 
 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60578
 
 
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
 
 
;; WARNING: recursion requested but not available
 
 
 
 
 
;; QUESTION SECTION:
 
 
;ildn.net.                      IN      A
 
 
 
 
 
;; ANSWER SECTION:
 
 
ildn.net.               10000   IN      A       212.239.26.111
 
 
 
 
 
;; Query time: 4 msec
 
 
;; SERVER: 192.168.0.2#53(192.168.0.2)
 
 
;; WHEN: Tue Jul 31 00:23:24 2007
 
 
;; MSG SIZE  rcvd: 42
 
 
root@paolo-laptop:/var/cache/pdnsd# dig ildn.net
 
 
 
 
 
; <<>> DiG 9.4.1-P1 <<>> ildn.net
 
 
;; global options:  printcmd
 
 
;; Got answer:
 
 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60578
 
 
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
 
 
;; WARNING: recursion requested but not available
 
 
 
 
 
;; QUESTION SECTION:
 
 
;ildn.net.                      IN      A
 
 
 
 
 
;; ANSWER SECTION:
 
 
ildn.net.               10000   IN      A       212.239.26.111
 
 
 
 
 
<b>;; Query time: 94 msec </b>
 
 
;; SERVER: 192.168.0.2#53(192.168.0.2)
 
 
;; WHEN: Tue Jul 31 00:23:24 2007
 
 
;; MSG SIZE  rcvd: 42

Il tempo per la query al dns server è di 94 secondi.

2) Facciamo la stessa query utilizzando il nostro proxy dns locale:

root@paolo-laptop:/var/cache/pdnsd# dig ildn.net
 
 
 
 
 
; <<>> DiG 9.4.1-P1 <<>> ildn.net
 
 
;; global options:  printcmd
 
 
;; Got answer:
 
 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13013
 
 
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
 
 
 
 
 
;; QUESTION SECTION:
 
 
;ildn.net.                      IN      A
 
 
 
 
 
;; ANSWER SECTION:
 
 
ildn.net.               30641   IN      A       212.239.26.111
 
 
 
 
 
;; AUTHORITY SECTION:
 
 
ildn.net.               30641   IN      NS      ns2.ildn.net.
 
 
ildn.net.               30641   IN      NS      ns.ildn.net.
 
 
 
 
 
;; ADDITIONAL SECTION:
 
 
ns2.ildn.net.           39551   IN      A       212.239.26.112
 
 
ns.ildn.net.            39551   IN      A       212.239.26.111
 
 
 
 
 
<b>;; Query time: 0 msec</b>
 
 
;; SERVER: 127.0.0.1#53(127.0.0.1)
 
 
;; WHEN: Tue Jul 31 00:25:09 2007
 
 
;; MSG SIZE  rcvd: 109

Come si vede ora il tempo è sceso a 0 che è un valore approsimato

I risultati sono eccellenti, sopratutto quando ci capiterà di navigare con connessioni che hanno per ovvie limitazioni tecniche latenze molte alte (GPRS/UMTS/HDSPA).

Conclusione

E' tutto, ora lascio a voi il divertimento di fare dei benchmark Wink

http://packages.debian.org/experimental/net/pdnsd

http://www.opendns.com/

http://www.debian.org/doc/manuals/reference/ch-gateway.en.html





Commenti

Ritratto di bricke
#1

Inviato da bricke il Ven, 07/09/2007 - 19:03.

utile, ma se non ho un proxy?

posso usare questo sistema se non ho un server e la mia connessione passa solo attraverso un router?

PC <==> Router <---> WWW

Questo è Unix. Ti dà abbastanza corda per impiccarti da solo. --Miquel van Smoorenburg



Ritratto di paolo
#2

Inviato da paolo il Sab, 08/09/2007 - 20:43.

Re: utile, ma se non ho un proxy?

Si certo, essere collegati ad un router (nat) non è la stessa cosa di essere collegati ad un proxy, attenzione Smile

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di pietro
#3

Inviato da pietro il Gio, 17/01/2008 - 23:57.

Finalmente risolti i problemi di DNS!

Dopo una giornata passata ad imprecare contro i DNS italiani, ho appena installato questo pacchetto (non so perche' non l'ho fatto prima!) e funziona veramente bene.

Tra l'altro, se si utilizza resolvconf non si deve modificare praticamente niente: viene tutto gestito in automatico. Con "pdnsd-ctl dump", che visualizza il contenuto della cache, si vede quante richieste vengono effettuate che non ce ne accorgiamo...

Ora anche se i DNS sono giu' su DebianItalia.org ci arrivo lo stesso 8-)

Grazie Paolo.

Pietro

Debian. Be unique.