Home > Comandi Console, Connessioni, Internet, Linux, Pacchetti, Sistema, Ubuntu > Velocizzare le navigazione con una cache DNS

Velocizzare le navigazione con una cache DNS

31 maggio 2008

Ogni volta che è richiamato indirizzo internet per nome (quale http://www.ubuntu.com) viene effettuata una richiesta al server DNS (Domain Name System) che risolverà il nome dell’host in un indirizzo IP a cui il programma poi potrà connettersi.

Queste richieste sono spesso continue e ogni richiesta impiegherà del tempo tra andata, elaborazione e ritorno, ciò si traduce in continue perdite di tempo nella navigazione e tempi di accesso più elevati. Installando una cache DNS le richieste saranno mantenute in memoria e non dovranno essere ogni volta reinoltrate ai server DNS.

L’installazione è molto semplice e richiede unicamente due pacchetti: dnsmasq e dnsmasq-base, per cui all’interno di un terminale:

sudo apt-get install dnsmasq dnsmasq-base

Il servizio si autoconfigurerà e si porrà in ascolto sulla porta TCP 53, come un normale server DNS. Se la nostra necessità è utilizzarlo autonomamente è possibile chiudere la connessione su altri indirizzi IP e accettare unicamente richieste provenienti dal nostro PC. Per far ciò basterà modificare il file /etc/dnsmasq.conf con:

gksudo gedit /etc/dnsmasq.conf

Trovare le definizioni #interface (circa alla riga 85) e #bind-interfaces (circa riga 103) e modificarle in:

interface=lo
bind-interfaces

Salvare e chiudere il file, quindi modificare il file con gli indirizzi DNS da utilizzare:

gksudo gedit /etc/resolv.conf

E aggiungere in cima:

nameserver 127.0.0.1

Quindi chiudere il file e riavviare il servizio dnsmasq con:

sudo /etc/init.d/dnsmasq restart

Fatto ciò le richieste DNS transiteranno prima per dnsmasq che ricercherà innanzitutto nella propria cache, qualora il risultato sarà presente fornirà l’indirizzo altrimenti la richiesta sarà girata al server DNS e quindi memorizzata nella cache. I tempi di accesso dalla cache sono mediamente di 1-2 ms, i tempi di accesso ad un server DNS sono mediamente 50 volte superiori.😉

L’opzione predefinita di dnsmasq assume che vengano memorizzati gli ultimi 150 indirizzi in cache ma questo valore può essere ampliato modificando il parametro cache-size nel file dnsmasq.conf (circa riga 370) e ovviamente togliendo il simbolo # dall’inizio della riga.

E’ possibile effettuare un test dei tempi con:

dig www.ubuntu.com

La prima volta si otterrà una risposta simile:

;; Query time: 104 msec

Mentre le volte successive:

;; Query time: 1 msec

Il vantaggio è notevole, almeno per quanto riguarda le richieste DNS. Ulteriori informazioni sui DNS:
http://www.kernel-panic.it/it/openbsd/dns/dns2.html
http://www.comefunziona.net/articolo.asp?Ogg=dns&Pro=5

  1. Mir
    08 giugno 2008 alle 6:49

    Immagino che la cache non sia permanente; questo limite è invece superato da pdnsd.
    Quanto alla configurazione del programma, conviene decommentare la riga
    prepend domain-name-servers 127.0.0.1;
    in /etc/dhcp3/dhclient.conf
    Ave!

  2. stefano
    27 settembre 2008 alle 10:35

    La riga interface lo è sbagliata. Il tutorial è scopiazzato da 1000 altri in rete uguali e non spiega dove sta la cache.

  3. 27 settembre 2008 alle 15:03

    stefano, ottimo commento inutile
    rispondo solo per chi passera` da qui in seguito

    l’uso della specifica dell’interfaccia lo al posto dell’indirizzo 127.0.0.1 consente di porre in ascolto il demone su tutti gli indirizzi dell’interfaccia di loopback, che non e` detto che debba essere sempre e SOLO 127.0.0.1
    io personalmente ho due indirizzi assegnati all’interfaccia lo e cosi` ho dnsmasq in ascolto su entrambi gli indirizzi. preferire listen-address non e` migliorativo ma generalmente solo limitativo

    quanto alla cache la risposta sta nelle faq: http://thekelleys.org.uk/dnsmasq/docs/FAQ
    la cache di dnsmasq non viene salvata su disco perche` sarebbe poco utile, dato il TTL di quasi tutti i server dns. se vuoi vedere cosa realmente tiene in cache ci sono ottime opzioni di debug che dumpano il contenuto della cache al sighup (kill -1)

    il guadagno e` facilmente verificabile:
    time ping -c 3 http://www.google.com => real 0m2.196s senza dnsmasq
    time ping -c 3 http://www.google.com => real 0m2.090s con dnsmasq

  4. sacarde
    02 maggio 2009 alle 9:06

    ciao,
    e’ corretto che dopo aver avviato il servizio dnsmasq
    trovo tra i log:

    ay 2 10:02:32 arch64 dnsmasq[3109]: exiting on receipt of SIGTERM
    May 2 10:02:37 arch64 dnsmasq[29088]: started, version 2.47 cachesize 290
    May 2 10:02:37 arch64 dnsmasq[29088]: compile time options: IPv6 GNU-getopt no-DBus no-I18N TFTP
    May 2 10:02:37 arch64 dnsmasq[29088]: reading /etc/resolv.conf
    May 2 10:02:37 arch64 dnsmasq[29088]: using nameserver 192.168.1.1#53
    May 2 10:02:37 arch64 dnsmasq[29088]: using nameserver 193.70.152.25#53
    May 2 10:02:37 arch64 dnsmasq[29088]: using nameserver 193.70.192.25#53
    May 2 10:02:37 arch64 dnsmasq[29088]: ignoring nameserver 127.0.0.1 – local interface
    May 2 10:02:37 arch64 dnsmasq[29088]: read /etc/hosts – 1 addresses

    e a volte non mi risolve i nomi

    • 02 maggio 2009 alle 11:22

      a volte non e` indicativo
      perche` hai quel dns su 192.168.1.1 ?
      quando non te li risolve prova a fare la risoluzione manualmente con
      nslookup ip serverdns
      e fai il giro con tutti e 3 i dns

  5. sacarde
    02 maggio 2009 alle 12:36

    ho messo nel config solo: eth0

    per adesso funziona, grazie

    p.s.
    ho anche aumentato il tempo di lease del server dhcp a 24ore

  6. 14 agosto 2009 alle 12:49

    Ciao Muflone

    grazie per tutti i tuoi tips così utili e ottimamente gerarchizzati.

    Questo in particolare l’ho trovato interessante, ben descritto e molto utile.

    Saluti
    Frank

    • 14 agosto 2009 alle 14:02

      grazie a te🙂
      ciao

  7. sacarde
    29 gennaio 2010 alle 9:53

    ma come integro il server DNS col servizio DHCP ?

    cioe’, se sulla lan ho un server dhcp, come posso aggiornare
    la risoluzione dei nomi subito dopo che sono stati assegnati?

    grazie

  8. sacarde
    05 febbraio 2010 alle 16:53

    … aggiungo….

    e’ possibile avere server DNS su un Pc e server DHCP in un’altro?

    come comunicano tra di loro?

    grazie

    • 06 febbraio 2010 alle 13:43

      sacarde te l’ho gia` detto piu` volte
      questo e` un blog, non un sito di supporto.
      non rispondo alle richieste tecniche.

      peraltro questa richiesta non c’entra nulla con l’argomento cache dns, non e` un server dns e non si occupa di risolvere i nomi, infatti richiede la presenza degli altri server dns per la risoluzione e salva le risposte ottenute per velocizzare.

      il discorso dhcp – dns poi non sta proprio in piedi, se ricevi da un dhcpd gli ip ricevi pure il server dns da usare, e` ruolo del dhcpd e nulla ti vieta di usare un ip differente per dns.

  9. angeloilcampione
    14 ottobre 2011 alle 18:06

    Grazie mille Fabio🙂

  1. 18 agosto 2009 alle 14:14
I commenti sono chiusi.
%d blogger cliccano Mi Piace per questo: