Newsgroup: it.comp.os.linux.sys
Titolo: bind come caching DNS

Salve,
 
domanda da principiante, e` possibile configurare
bind in modo che funzioni come caching dns?
 
Al momento il DNS e` 192.168.x,y, cioe` e` nel
modem DSL, ovviamente questo punta al provider.
 
Questo viene scritto in "/etc/resolv.conf" dal
dhcp, quando richiede l'indirizzo IP.
 
Ora, la domanda piu` dettagliata e`: si puo`
configurare dhcp in modo da dire a bind di usare
come DNS di riferimento il 192.168.x.y e, in
"/etc/resolv.conf" mettere l'IP della macchina
stessa ovvero 127.0.0.1?
 
Ovviamente, poi, bind deve essere configurato
in modo da mantenere in qualche cache il data
base DNS che conosce...
 
Grazie,
 
bye,
 
-- 
 
piergiorgio

 base DNS che conosce...
 
  Lo fa da solo, non c'è bisogno di dirglielo, nella sua configurazione
di default si comporta come server di sola cache.
 
 
  Ciao,
 
 
-- 
Alessandro Selli 
http://alessandro.route-add.net
 
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.

 di default si comporta come server di sola cache.
 
Immagino si possa configurare "quanta" cache?
 
bye,
 
-- 
 
piergiorgio

 "/etc/resolv.conf" mettere l'IP della macchina stessa ovvero 127.0.0.1?
 
Dunque: /etc/resolv.conf serve ad esempio a Firefox per sapere dove sta 
il server DNS a cui deve rivolgersi.
 
Se lì sta scritto 127.0.0.1, Firefox domanda a localhost sulla porta 53 
(la porta su cui ascoltano i DNS). Se tu hai installato bind, o un altro 
DNS, quest'ultimo si fa carico della risoluzione.
 
Di default bind chiede ai root servers (i cui ip stanno nel file db.root), 
e di lì in cascata fino alla soluzione, però lo si può istruire perché, 
prima, provi a forwardare la richiesta ad un altro server: che magari 
sarà il DNS del provider, o un qualsiasi DNS pubblico, oppure un altro DNS 
della subnet. L'ip di questo altro server (ma possono essere più d'uno) 
deve stare nel file named.conf, insieme ad altre cose. Quindi se è un ip 
fisso, è facile inserircelo una volta per tutte. Se invece non è fisso, 
le cose si fanno complesse.
 
Il dhcp, quando ti dà un indirizzo, può (dipende da com'è configurato 
l'ambaradan) anche cambiarti il file /etc/resolv.conf (così tagliando 
fuori il tuo DNS su localhost). Ma che cambi la configurazione del tuo 
DNS, sul tuo pc, e poi lo riavvii, mi pare chiedergli un po' troppo.
L'aggiornamento dinamico del DNS tramite DHCP - che conosco un po' meno 
bene del cinese, eh, quindi aspetta che intervenga chi sa - è AFAIK altra 
cosa: riguarda il server DNS non sul tuo pc, ma semmai quello della subnet 
a cui si può far puntare /etc/resolv.conf.
 
Poi: cogli script tutto si può fare: intercettato il cambiamento nel tuo 
resolv.conf, lo script ne riporta il contenuto a 127.0.0.1, trasferisce 
opportunamente il nuovo ip del DNS in /etc/bind/named.conf, e riavvia 
bind. Ma 'nsomma...
 
Se sbalio mi corigerete. :)
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_________________________________________________________________
Non sprecare i cicli idle della tua CPU, né quelli della tua GPU.
 
http://www.worldcommunitygrid.org/index.jsp
 
http://www.rnaworld.de/rnaworld/
 
http://home.edges-grid.eu/home/
 
 
http://www.gpugrid.net/
 

 /etc/ resolv.conf.


 uno o piu` indirizzi (IP) a cui chiedere, o no?
 
Bind di suo pesca o nelle zone per cui e` autoritativo, o sui root dns (li 
trovi impostati tra i file di configurazione). Detto questo, se non ti serve 
mettere su un autoritativo, usa unbound o pdns-recursor che sono fatti 
apposta per questo lavoro (e, di conseguenza, sono piu` leggeri)
 
Enrico

 bind. Ma 'nsomma...
 
Vedo adesso che esiste un folder, /etc/dhcp/dhclient.d,
dove vi e` un "ntp.sh" che appartiene a ntp...
Forse quel folder e` per hook script... Boh...
 
bye,
 
-- 
 
piergiorgio

 apposta per questo lavoro (e, di conseguenza, sono piu` leggeri)
 
Di fatto mi serve (si fa per dire, e` solo un
esperimento) una cache per velocizzare la
risoluzione DNS.
 
Deve, pero`, integrarsi con dhcp...
 
bye,
 
-- 
 
piergiorgio

 "prima"? Prima dei root, immagino, spero non prima della sua cache...
 
Ma naturale. 
Bind ha una sua cache, che ovviamente è volatile ma configurabile per 
quanto concerne il tempo massimo di permanenza di un'informazione (il 
tempo minimo è invece fissato per ogni dominio). Vedi max-cache-ttl e max-
ncache-ttl in named.conf.
 
Una cache non volatile, molto rudimentale, è invece il file /etc/hosts.
La priorità di utilizzo fra bind, hosts e nis viene impostata nel file 
/etc/host.conf. Normalmente hosts viene prima di bind:
 
order hosts,bind


 risoluzione DNS.
 
Di fatto allora ti vanno bene anche unbound o pdns-recursor che, rispetto a 
bind, sono dedicati e, soprattutto, piu` semplici da configurare. Per il 
discorso della quantita` di cache da impostare, di solito e` piu` corretto 
parlare della durata della cache (vedi i vari TTL impostati)
 
Enrico
P.S. Tieni presente che Firefox mantiene una cache degli indirizzi 
completamente sua e che anche Chrome sta implementando un sistema di cache 
degli indirizzi

 Deve, pero`, integrarsi con dhcp...
 
A meno che tu non voglia aggiungere automaticamente i record delle macchine 
al loro ingresso nella rete (cosa che pero` non puoi fare con un DNS 
ricorsivo), al DHCP non glie ne frega nulla di qual e` il server DNS 
impostato sulla tua rete, lui si limita solo a comunicare l'indirizzo di 
dove si trova. Casomai, devi prevedere che l'indirizzo del server che fa da 
DNS sia direttamente associato al MAC address della scheda di rete della 
macchina, in modo da non ritrovarti brutte sorprese
 
Enrico

 D'altro canto, chiedere ai root DNS fa perder tempo.
 
Come ogni cosa da metere sotto cache, la richiesta di una risorsa puo` far 
perdere tempo la prima volta, non la seconda (a meno che non sia scaduta)
 
Enrico
P.S. in tutto questo non ricordo: bind, unbound o pdns-recursor dove tengono 
la cache? solo in memoria?

 la cache? solo in memoria?
 
Ah! Questo e` un punto interessante.
 
Io speravo qualcosa come /var/cache,
cosi` da essere persistente tra i
reboot.
 
Ovviamente con un expire time decente...
 
bye,
 
-- 
 
piergiorgio

 tengono la cache? solo in memoria?
 
Per quanto riguarda bind, sì (immagino la cosa valga anche per gli 
altri). Ma se ne può fare un dump con:
 
# rndc dumpdb -cache
 
(questo vale per bind9, almeno).
 
Il dump, un semplice file di testo, finisce in 
/var/cache/bind/named_dump.db (salvo eventuale chroot, naturalmente). 


 Ovviamente con un expire time decente...
 
Il tempo di scadenza e` deciso dal TTL del record, non dalla cache stessa. 
La mia domanda era soprattutto per capire se vi era una cache intermedia in 
modo da ottenere un po' di persistenza (ma a questo punto dubito)
 
Enrico

 modo da ottenere un po' di persistenza (ma a questo punto dubito)
 
Pensavo si potesse decidere quanto mantenere
in "cache" un entry.
 
Piuttosto, che mi dici di dnsmasq?
Lem lo suggeriva e, leggendo sull'argomento
mi pare sia proprio pensato per quello che
intenderei farei io.
 
bye,
 
-- 
 
piergiorgio

 intenderei farei io.
 
Dipende da che deve fare la macchina su cui devi avere la cache DNS.
A meno di utilizzi "tipo client", affidati a qualcosa che implementi il
protocollo DNS *correttamente*.
 
Ovvero bind, unbound (consigliato) o pdns.
 
E, sostanzialmente, null'altro.

 E, sostanzialmente, null'altro.
 
OK, grazie, terro` presente!
 
bye,
 
-- 
 
piergiorgio

 O no?
 
No, pare di no.
 
Allora come funziona?
 
Se ho un max-cache-ttl inferiore al minimo ttl impostato per il dominio, 
che succede? Qualcuno si picchia?


 "spirare" prima del previsto.
 
Infatti questo è consentito, dato che il risultato che il gestore delle
informazioni autoritative vuole ottenere non cambia.

 Allora come funziona?
 
Facendo qualche prova (il mio bind interroga i root), emerge che il 
valore impostato per dominio è un massimo, e non un minimo come avevo 
letto chissà dove, in rete, su qualche howto dei poveri.
 
A questo punto non capisco a che diavolo serva max-cache-ttl: se è 
superiore al ttl del dominio, viene ignorato. Se è inferiore, viene 
ignorato. Ma a che serve?


 O no?
 
No. Se metti max-cache-ttl a 1 mese, bind inserirà in cache un TL di un
mese per qualunque record abba un TTL maggiore o uguale a un mese.
 
Più sensatamente: se imposti max-cache-ttl a 5 minuti, qualunque record
abbia TTL pari a 1 settimana verrà memorizzato con un TTL di 5 minuti, e
quindi dopo 5 minuti la entry in cache scadrà.
 
Mai, in nessun caso, è consentito di *innalzare* il TTL impostato dal
nameserver autoritativo. Almeno, per qualsiasi DNS serio.
E per ottime ragioni.
 

 ignorato. Ma a che serve?
 
Ti faccio un esempio tipico. Hai una infrastruttura di mailserver
"pesante", con traffico molto sostenuto.
Poichè i mailserver fanno un uso molto esteso di query DNS, è bene che i
tuoi mailserver facciano riferimento ad un nameserver comune e locale,
in modo che possano il più possibile riutilizzare le informazioni in
cache poichè già richieste dai "loro pari".
 
Questo nameserver lavorerà con un gran quantitativo di RAM e con nessuna
impostazione particolare riguardo alla massima durata della cache: più a
lungo ti è consentito mantenere le informazioni in cache e meglio è (e,
come abbiamo detto, mai, in nessuna condizione puoi aumentare la durata
in cache dei record altrui).
 
Ma per ciascun mailserver interrogare una macchina esterna per ogni
query (con le relative latenze introdotte dalle comunicazioni in rete
locale) è comunque una fonte di degrado prestazionale. Sarebbe molto
meglio se eseguisse una cache locale, sia perchè avrebbe una latenza
sensibilmente inferiore, sia perchè "martellerebbe di meno" il resolver
esterno.
 
Quindi si installa su ciascun mailserver un resolver, che usi come
forwarder "quello centrale". Ma cachare su questo sistema tutto quel che
vien già cachato sul resolver dedicato è inutile, poichè richiederebbe
una quantità di RAM analoga a quella installata su quest'ultimo, il che
non ha molto senso...
Molto meglio avere una cache piccola per informazioni di breve durata
che vengono richieste più volte in tempi molto stretti, e andare a
reperire dalla cache centrale le informazioni che sian già scadute.
Quindi il resolver in esecuzione sui mailserver lo imposti per un
max-cache-ttl di 300 secondi, in modo da mantenere basso il memory
footprint dello stesso. Se poi ti serve una informazione con TTL di 1
ora dopo 6 minuti, anzichè dover sostenere le latenze di una nuova
recursion completa dalla root dovrai solamente sostenere la latenza
della query verso il resolver centrale, che avrà la entry ancora cachata...

 quindi dopo 5 minuti la entry in cache scadrà.
 
Ti ringrazio molto di tutte le informazioni.
 
Siccome sono ciecato, nella prova che ho appena fatto, invece di alterare 
max-cache-ttl, ho alterato max-ncache-ttl. E ci credo che dopo sessanta 
secondi i record non mi scadevano, dal che il mio stupore.
 
Ora tutto quadra: bind tiene in cache un record per il minor tempo fra 
quello indicato da max-cache-ttl e quello indicato dal TTL del dominio.


 Ovvero bind, unbound (consigliato) o pdns.
 
A proposito di TTL e di DNS server, ho appena scoperto che pdns-recursor, 
nella sua ultimissima versione (3.4) che vi dovrete scaricare dal version 
control, supporta la modifica anche del TTL di risposta.
 
Talvolta potrebbe essere una cosa utile (se usata molto cum grano salis).
 
Max