FreeBSD utilizza, di default, una versione di BIND (Berkeley Internet Name Domain), che è la più completa implementazione del protocollo DNS. DNS è il protocollo attraverso il quale nomi sono mappati ad indirizzi IP, e viceversa. Per esempio, una query per www.FreeBSD.org riceverà una replica con l’indirizzo IP del web server del The FreeBSD Project, mentre una query per ftp.FreeBSD.org ritornerà l’indirizzo IP della corrispondente macchina FTP. Allo stesso modo, può avvenire l’opposto. Una query per un indirizzo IP può risolvere il suo nome host. Non è necessario avere in esecuzione un name server per fare DNS lookups su un sistema.
DNS è coordinato su Internet attraverso un sistema alquanto complesso di name server autoritativi, ed altri name server di più piccola scala che ospitano e gestiscono cache di informazioni individuali sui domini.
Attualmente vengono usati due tipi di name server: un name server autoritativo, ed un name server cache.
Un name server autoritativo è necessario quando:
- uno vuole servire informazioni DNS a tutto il mondo, rispondendo in maniera autoritativa alle query.
- un dominio, tipo example.org, è registrato e gli indirizzi IP devono essere assegnati ad hostname sotto questo.
- un blocco di indirizzi IP richiede entry di DNS inverso (da IP ad hostname).
- un name server di backup, chiamato uno slave, deve rispondere alle query quando il primario è giù o inaccessibile.
Un name server cache è necessario quando:
- un server locale DNS può tenere in cache e rispondere più velocemente rispetto ad effettuare query ad un name server all’esterno.
- una riduzione nel traffico complessivo di rete è desiderato (è stato calcolato che il traffico DNS conta più del 5% sul traffico totale di Internet).
Quando uno fa una query per risolvere www.FreeBSD.org, il risolutore di solito fa una query al name server dell’ISP a cui si è connessi, ed ottiene una risposta. Con un server DNS locale, che fa cache, la query deve essere effettuata una volta sola dal server DNS che fa cache. Ogni query aggiuntiva non dovrà cercare all’esterno della rete locale, dato che l’informazione è tenuta in cache localmente.
Vediamo ora come agire per ottenere un name server cache che gira in chroot.
Per prima cosa aggiungiungete le seguenti righe al vostro rc.conf (si trova in /etc):
named_enable=”YES” #abilitiamo bind
named_flags=”-u bind” #e lo facciamo girare da utente non privilegiato
named_chrootdir=”/var/named” #settiamo la directory del chroot
named_chroot_autoupdate=”YES”
named_symlink_enable=”YES”
ora:
# cd /var/named/etc/namedb
# mv named.conf named.conf.default
# ee named.conf
e copiate ed incollateci queste righe:
// A Caching-only Nameserver
// Subnets we wish to allow queries from.
acl “mysubnet” {
192.168.0.0/24;
localhost;
};
options {
directory “/etc/namedb”; // Working directory
pid-file “/var/run/named/pid”; // Put pid file in working dir
allow-query { mysubnet; };
};
// Root server hints
zone “.” { type hint; file “named.root”; };
// Provide a reverse mapping for the loopback address 127.0.0.1
zone “0.0.127.in-addr.arpa” {
type master;
file “master/localhost.rev”;
notify no;
};
Il file chiamato named.root deve contenere gli indirizzi IP dei server DNS di root da cui attingere e deve essere posizionato nella directory /var/named/etc/namedb . Questo file può essere ottenuto facendo una query di tipo ns sul dominio generico . ad uno dei vostri nameserver master o slave, se volete utilizzare gli stessi server root che usano loro:
# dig . ns >named.root
oppure potete utilizzare quello che viene di default con FreeBSD, oppure reperire la versione aggiornata da ftp://ftp.rs.internic.net/domain/named.root.
Infine il file di dati per l’interfaccia di loopback localhost.rev potete ottenerlo lanciando sempre nella directory /var/named/etc/namedb, lo script make-localhost con la shell sh(1):
# sh make-localhost
# cat localhost.rev
Potete ora avviare il demone named con il comando:
# /etc/rc.d/named start
Bene, non resta che provare se tutto funziona correttamente: il file resolv.conf(5) posizionato in /etc/resolv.conf indica i nameserver da usare: inserite una prima opzione nameserver seguita dal vostro nome host, nel mio caso si tratta dell’IP corrispondente a 192.168.0.2
domain sun.paologatti.lan
nameserver 192.168.0.2
adesso, per tutte le risoluzioni, viene usata la cache locale. Anche altri PC che rientrano nella acl definita prima (nel mio caso tutti quelli sulla subnet 192.168.0.0/24) possono usare la vostra cache, aggiungendo quella stessa linea nei loro resolv.conf(5) (o, nel caso di client Windows, inserendo l’ip del nameserver cache only nelle proprietà della connessione di rete), mentre per tutti gli altri le query saranno rifiutate:
# nslookup www.google.it host_mio_server_dns
** server can’t find http://www.google.it: REFUSED