Un primo approccio alla configurazione del DNS, molto utile per gli utenti con collegamento telefonico, cable modem, ADSL e simili
Sulla Red Hat e sulle distribuzioni da essa derivate potrete fare le
cose descritte in questa prima sezione dell'HOWTO installando i
pacchetti bind
, bind-utils
e caching-nameserver
. Se siete
utenti Debian installerete semplicemente bind
(o bind9
, pur
non essendo BIND 9 supportato dall'attuale distribuzione stabile di Debian, potato)
e bind-doc
.
Naturalmente il solo installare questi pacchetti non vi insegnerà tanto
quanto leggere l'HOWTO. Quindi installate pure i pacchetti e poi verificate
i file che essi hanno installato.
Un name server che fa solo da cache troverà le risposte alle interrogazioni e ricorderà le risposte la prossima volta che ne avrete bisogno. Questo abbrevierà significativamente il tempo di attesa per le interrogazioni successive, specialmente se avete una connessione lenta.
Prima di tutto vi occorre un file chiamato /etc/named.conf
(Debian: /etc/bind/named.conf
).
Questo viene letto quando named parte. Per adesso dovrebbe contenere
semplicemente:
// Config file for caching only name server // // The version of the HOWTO you read may contain leading spaces // (spaces in front of the characters on these lines ) in this and // other files. You must remove them for things to work. // // Note that the filenames and directory names may differ, the // ultimate contents of should be quite similar though. options { directory "/var/named"; // Uncommenting this might help if you have to go through a // firewall and things are not working out. But you probably // need to talk to your firewall admin. // query-source port 53; }; controls { inet 127.0.0.1 allow { localhost; } keys { rndc_key; }; }; key "rndc_key" { algorithm hmac-md5; secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K"; }; zone "." { type hint; file "root.hints"; }; zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };
I pacchetti presenti nelle distribuzioni Linux potrebbero usare nomi di file differenti da quelli menzionati; conterranno comunque le stesse cose.
La riga "directory
" dice a named dove andare a cercare i file.
Tutti i file nominati in seguito saranno relativi a questa directory.
Perciò pz
è una directory sotto /var/named
, ovvero
/var/named/pz
. /var/named
è la giusta directory in
accordo con il Linux File system Standard.
Vi è citato il file chiamato /var/named/root.hints
,
che dovrebbe contenere quanto segue:
; ; There might be opening comments here if you already have this file. ; If not don't worry. ; ; About any leading spaces in front of the lines here: remove them! ; Lines should start in a ;, . or character, not blanks. ; . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 6D IN A 198.41.0.4 B.ROOT-SERVERS.NET. 6D IN A 128.9.0.107 C.ROOT-SERVERS.NET. 6D IN A 192.33.4.12 D.ROOT-SERVERS.NET. 6D IN A 128.8.10.90 E.ROOT-SERVERS.NET. 6D IN A 192.203.230.10 F.ROOT-SERVERS.NET. 6D IN A 192.5.5.241 G.ROOT-SERVERS.NET. 6D IN A 192.112.36.4 H.ROOT-SERVERS.NET. 6D IN A 128.63.2.53 I.ROOT-SERVERS.NET. 6D IN A 192.36.148.17 J.ROOT-SERVERS.NET. 6D IN A 198.41.0.10 K.ROOT-SERVERS.NET. 6D IN A 193.0.14.129 L.ROOT-SERVERS.NET. 6D IN A 198.32.64.12 M.ROOT-SERVERS.NET. 6D IN A 202.12.27.33
Questo file descrive i root name server nel mondo. Esso cambia col tempo e deve essere aggiornato se necessario. Leggete la sezione Manutenzione per sapere come fare.
La sezione successiva in named.conf
è l'ultima zone
.
Spiegherò il suo utilizzo nell'ultimo capitolo, per adesso create solo
un file chiamato 127.0.0
nella sottodirectory pz
: (Nuovamente,
se fate copia e incolla rimuovete gli spazi iniziali)
$TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.
Le sezioni chiamate key
e controls
insieme significano che
il vostro named potrà essere controllato in remoto da un programma chiamato
rndc
se esso si connette dall'host locale e identifica se stesso
con la chiave segreta codificata. Questa chiave è come una password. Per far
sì che rndc funzioni avrete bisogno di un file /etc/rndc.conf
come questo :
key rndc_key { algorithm "hmac-md5"; secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K"; }; options { default-server localhost; default-key rndc_key; };
Come potete vedere il segreto è identico a quello di named.conf.
Se volete usare rndc
da altre macchine esse devono avere tempi non
più distanti di 5 minuti una dall'altra.
Raccomando di usare il software ntp (xntpd
e ntpdate
)
per fare ciò.
Poi avrete bisogno di un /etc/resolv.conf
che somigli
vagamente a questo: (togliete gli spazi!)
search sottodominio.proprio-dominio.edu proprio-dominio.edu nameserver 127.0.0.1
La riga "search
" specifica su quali domini deve avvenire la
ricerca per ogni nome di host al quale volete collegarvi. La riga
nameserver
specifica l'indirizzo del vostro name server, in questo
caso la vostra stessa macchina, poiché è qui che named lavora
(127.0.0.1 è corretto, non importa se la macchina ha già un altro
indirizzo). Se volete inserire più name server mettete una riga
"nameserver
" per ognuno di essi. (Nota: named non legge mai questo
file, il risolutore che usa named invece sì. Nota 2: in alcuni resolv.conf
troverete una riga dove è scritto "domain". È corretto, ma non usate
insieme "search" e "domain", funzionerà solo una delle due).
Vediamo cosa fa questo file: se un client cerca la macchina
pippo
, allora il primo tentativo che verrà fatto sarà
pippo.sottodominio.vostro-dominio.edu
, poi
pippo.vostro-dominio.edu
e infine pippo
. Se un
client cerca sunsite.unc.edu
, il primo tentativo sarà
sunsite.unc.edu.sottodominio.vostro-dominio.edu
, poi
sunsite.unc.edu.vostro-dominio.edu
e infine
sunsite.unc.edu
. Vi potrebbe convenire non mettere troppi domini
nella riga di ricerca, si impiega del tempo a provarli tutti.
L'esempio assume che voi facciate parte del dominio
sottodominio.vostro-dominio.edu
, quindi probabilmente la
vostra macchina sarà
vostra-macchina.sottodominio.vostro-dominio.edu
. La
riga di ricerca non dovrebbe contenere il vostro TLD (Top Level
Domain, "edu
" in questo caso). Se avete spesso bisogno di collegarvi
a host in un altro dominio, potrete aggiungerlo in una
riga di ricerca come questa: (Ricordate di togliere gli spazi
iniziali, se presenti)
search sottodominio.vostro-dominio.edu vostro-dominio.edu altro-dominio.com
e così via. Ovviamente dovrete metterci domini reali. Notate l'assenza del punto alla fine dei nomi di dominio. Questo è importante.
Adesso è ora di far partire named. Se state usando una
connessione telefonica, per prima cosa collegatevi. Adesso fate partire
named, o lanciando lo script /etc/init.d/named start
o named direttamente con /usr/sbin/named
. Se avete provato prima
d'ora qualche versione di named avrete usato ndc
. In BIND 9 è stato
rimpiazzato da rndc
, che può controllare il vostro named da remoto,
ma non può far ripartire named un'altra volta.
Se andate a leggere il file che contiene il
log di sistema (usualmente chiamato /var/log/messages
,
in Debian è /var/log/daemon
, controllate anche la directory
/var/log
e un altro file da controllare in questa è
syslog
) quando named parte (fate tail -f /var/log/messages
)
dovreste leggere qualcosa di simile a:
(le righe che terminano per "\" continuano sulla riga successiva)
Dec 23 02:21:12 lookfar named[11031]: starting BIND 9.1.3
Dec 23 02:21:12 lookfar named[11031]: using 1 CPU
Dec 23 02:21:12 lookfar named[11034]: loading configuration from \
'/etc/named.conf'
Dec 23 02:21:12 lookfar named[11034]: the default for the \
'auth-nxdomain' option is now 'no'
Dec 23 02:21:12 lookfar named[11034]: no IPv6 interfaces found
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface lo, \
127.0.0.1#53
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface eth0, \
10.0.0.129#53
Dec 23 02:21:12 lookfar named[11034]: command channel listening on \
127.0.0.1#953
Dec 23 02:21:13 lookfar named[11034]: running
Se ci sono messaggi d'errore significa che c'è un problema. Named dirà il nome del file in cui si cela. Tornate indietro per controllare quel file e fate ripartire named una volta sistemato.
Adesso potete testare la vostra configurazione. Per fare ciò si usava
tradizionalmente un programma chiamato nslookup
. Oggi si raccomanda
di usare dig
:
$ dig -x 127.0.0.1
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26669
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 259200 IN PTR localhost.
;; AUTHORITY SECTION:
0.0.127.in-addr.arpa. 259200 IN NS ns.linux.bogus.
;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:26:17 2001
;; MSG SIZE rcvd: 91
Se corrisponde a quello che vedete significa che sta funzionando.
Lo spero. Altrimenti tornate indietro e ricontrollate tutto. Ogni volta
che cambiate un file dovete far ripartire named con il comando
rndc reload
.
Adesso potete immettere un'interrogazione ("query"). Cercate di fare il
lookup di macchine vicine a voi. pat.uio.no
è vicina a me,
all'università di Oslo:
$ dig pat.uio.no
; <<>> DiG 9.1.3 <<>> pat.uio.no
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15574
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0
;; QUESTION SECTION:
;pat.uio.no. IN A
;; ANSWER SECTION:
pat.uio.no. 86400 IN A 129.240.130.16
;; AUTHORITY SECTION:
uio.no. 86400 IN NS nissen.uio.no.
uio.no. 86400 IN NS nn.uninett.no.
uio.no. 86400 IN NS ifi.uio.no.
;; Query time: 651 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:28:35 2001
;; MSG SIZE rcvd: 108
dig
adesso ha chiesto al vostro named di cercare la macchina
pat.uio.no
. Poi contatta una delle macchine name server
indicate nel file root.hints
e chiede loro la strada per arrivarci.
Potrebbe essere necessario un po' di tempo prima che sia disponibile
il risultato, come potrebbe essere necessario cercare in tutti i
domini elencati in /etc/resolv.conf
.
Se lo chiederete nuovamente, otterrete questo:
$ dig pat.uio.no
; <<>> DiG 8.2 <<>> pat.uio.no
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUERY SECTION:
;; pat.uio.no, type = A, class = IN
;; ANSWER SECTION:
pat.uio.no. 23h59m58s IN A 129.240.130.16
;; AUTHORITY SECTION:
UIO.NO. 23h59m58s IN NS nissen.UIO.NO.
UIO.NO. 23h59m58s IN NS ifi.UIO.NO.
UIO.NO. 23h59m58s IN NS nn.uninett.NO.
;; ADDITIONAL SECTION:
nissen.UIO.NO. 23h59m58s IN A 129.240.2.3
ifi.UIO.NO. 1d23h59m58s IN A 129.240.64.2
nn.uninett.NO. 1d23h59m58s IN A 158.38.0.181
;; Total query time: 4 msec
;; FROM: lookfar to SERVER: default -- 127.0.0.1
;; WHEN: Sat Dec 16 00:23:09 2000
;; MSG SIZE sent: 28 rcvd: 162
Come potete notare chiaramente questa volta è stato molto più veloce, 4 ms rispetto a più di mezzo secondo. La risposta era in cache. Con le risposte in cache c'è la possibilità che siano scadute, ma i server di origine possono controllare da quanto tempo quelle risposte stanno nella cache e se possono essere considerate valide, così c'è un'alta probabilità che la risposta ottenuta sia valida.
Tutti i sistemi operativi che implementano lo standard C API hanno le
chiamate gethostbyname e gethostbyaddr. Queste possono prelevare informazioni
da diverse fonti. Le fonti da cui prelevare informazioni sono
configurate in /etc/nsswitch.conf
su Linux (e anche su altri Unix).
Questo è un lungo file che specifica da quali file o database andare a
prelevare diversi tipi di dati. Solitamente all'inizio è ricco di utili
indicazioni che è bene leggere. Dopo di ché cercate la riga che comincia
per "hosts:
"; dovreste leggervi:
hosts: files dns
(Vi ricordate degli spazi iniziali, vero? Non ve lo ricorderò mai più.)
Se non ci fosse la riga "hosts:
", mettetela in una di quelle
sopra. Essa significa che i programmi dovrebbero prima cercare nel file
/etc/hosts
, poi andare a chiedere al DNS in accordo con
resolv.conf
.
Adesso sapete come impostare una versione con cache di named. Prendetevi una birra, del latte o qualunque cosa vi piaccia per celebrare l'evento.