Ogni volta che è richiamato indirizzo internet per nome (quale 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



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!
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.
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
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
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