Cache DNS con BIND su FreeBSD
scritto da Antonio Bonifati <antonio.bonifati@libero.it>
Installazione e configurazione
Potete utilizzare il demone DNS che viene con FreeBSD, che sulla
FreeBSD 4.5-RELEASE è la versione 8 di BIND, oppure
scegliere di installare una versione più recente del
pacchetto BIND. Se scegliete un più recente BIND,
controllate che non sia già installato, altrimenti
installatelo col sysinstall(8)
o con
pkg_add(1)
:
$ pkg_info | grep bind
bind-9.1.3 The Berkeley Internet Name Daemon, an implementation of DNS
Questo pacchetto contiene manpage, utility di diagnostica quali
dig(1) e host(1), di controllo quali named-checkconf(1) e
name-checkzone(1) e il tool amministrativo rdnc(8), file header e
librerie del resolver e varia documentazione. In particolare
consiglio di iniziare a leggere il manuale in formato HTML e le
FAQ:
/usr/local/share/doc/bind9/arm/Bv9ARM.html
/usr/local/share/doc/bind9/FAQ
La documentazione di BIND 8 che viene col FreeBSD 4.5-RELEASE si
trova invece qui:
/usr/share/doc/bind/html/index.html
Qui mi limiterò a dare le istruzioni per creare un server
DNS di cache usando il demone named(8)
che fa parte di
FreeBSD (ho installato il BIND 9 solo per avere il manuale
introduttivo, ma non lo uso). Un server DNS di pura caching non ha
alcuna autorità per nessun dominio, eccetto 0.0.127.in-addr.arpa, cioè il localhost. Un
server DNS di sola cache può risolvere sia i nomi interni ad
una vostra zona sia quelli esterni, proprio come i nameserver
master e slave della vostra zona. Il nameserver di cache può
contattare proprio quest'ultimi server (che hanno l'autorità
sulla zona) la prima volta che li viene chiesta la risoluzione di
un nome e poi si tiene nella cache il risultato, in modo da non
doverli ricontattare per una successiva richiesta dello stesso
nome, almeno finché il risultato in cache non scade.
E' utile creare un server DNS di cache sui client perché
riduce il carico sul master, specialmente se un certo client ha
bisogno di effettuare un gran numero di query DNS (ad es. se si
desidera la risoluzione degli IP nei log di un server web o altro
server). E' utile avere una cache DNS anche per accellerare
leggermente le connessioni dial-up.
Il pacchetto bind installato prima non contiene alcun file di
configurazione, mentre ci sono dei file di configurazione di
esempio in /etc/namedb
forniti con la distribuzione di
base di FreeBSD relativi alla versione BSD. Il file di
configurazione principale da creare è named.conf(5) e lo si
può creare in /etc/namedb
, facendosi prima una
copia del file originale:
# cd /etc/namedb
# mv named.conf named.conf.default
# vi named.conf
// A Caching-only Nameserver
// Subnets we wish to allow queries from.
acl "mysubnet" { 131.175.6.0/24; };
options {
directory "/etc/namedb"; // Working directory
pid-file "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 "localhost.rev";
notify no;
};
Naturalmente potete anche scegliere una working directory
differente. Il file che abbiamo chiamato root.hint
deve contenere gli indirizzi IP dei server DNS di root da cui
attingere e deve essere posizionato nella directory scelta prima
/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.
Nel momento in cui scrivo la versione distribuita con FreeBSD
è aggiornata, quindi ho utilizzato quella. Ogni tanto (es.
una volta al mese) andare a scaricare la versione aggiornata,
oppure potete automatizzare la cosa con cron(8)
.
Infine il file di dati per l'interfaccia di loopback
localhost.rev
potete ottenerlo lanciando sempre nella
directory /etc/namedb
, lo script make-localhost con la
shell sh(1)
:
# sh make-localhost
# cat localhost.rev
Ora controllate la configurazione:
# named-checkconf /etc/namedb/named.conf
the default for the 'auth-nxdomain' option is now 'no'
# echo $?
0
Avviate poi il demone named(8)
, il quale sta in
ascolto sulle seguenti porte:
# grep ^domain /etc/services
domain 53/tcp #Domain Name Server
domain 53/udp #Domain Name Server
# named
# sockstat -4l | grep named
root named 678 4 udp4 *:1139 *:*
root named 678 20 udp4 131.175.6.134:53 *:*
root named 678 21 tcp4 131.175.6.134:53 *:*
root named 678 22 udp4 127.0.0.1:53 *:*
root named 678 23 tcp4 127.0.0.1:53 *:*
# tail /var/log/messages
...
Jun 15 10:14:50 ninux named[677]: starting (/etc/namedb/named.conf). named 8.2.4-REL Mon Jan 28 12:52:14 GMT 2002 murray@builder.freebsdmall.com:/usr/obj/usr/src/usr.sbin/named
Jun 15 10:14:50 ninux named[678]: Ready to answer queries.
...
Per avviarlo automaticamente al boot, aggiungete la seguente riga
in /etc/rc.conf
:
named_enable="YES"
date poi un'occhiata a security(7)
che consiglia di
aggiungere anche questo per evitare che named(8)
giri
con i permessi di root:
named_flags="-u bind -g bind"
Durante l'avvio il messaggio seguente confermerà l'avvio di
named(8)
:
Doing additional network setup: named.
Testing
Ora non resta che provare. Il file resolv.conf(5)
posizionato in /etc/resolv.conf
indica i nameserver da
usare e sarà simile al seguente:
domain rett.polimi.it
nameserver 131.175.12.1
nameserver 131.175.12.2
inserite una prima opzione nameserver seguita dal vostro nome host,
nel mio caso si tratta dell'IP corrispondente a
ninux.rett.polimi.it:
domain rett.polimi.it
nameserver 131.175.6.134
nameserver 131.175.12.1
nameserver 131.175.12.2
adesso per tutte le risoluzioni viene usata la cache locale quando.
Anche altri PC che rientrano nella acl definita prima (nel mio caso
tutti quelli sulla subnet 131.175.6.0/24
) possono
usare la vostra cache, aggiungendo quella stessa linea nei loro
resolv.conf(5)
. Per tutti gli altri le query saranno
rifiutate:
# nslookup www.polimi.it ninux.rett.polimi.it
*** Can't find server name for address 131.175.6.134: Query refused
*** Default servers are not available
Riferimenti