BIND, o named, è il software per Domain Name System (DNS) più utilizzato su Internet. Sui sistemi operativi Unix-like è lo standard de facto.
Il software fu originariamente progettato nei primi anni ’80 presso la University of California, Berkeley (UCB). Il suo nome deriva dall’acronimo Berkeley Internet Name Domain e rifletteva, al tempo, l’utilizzo dell’applicazione all’interno della UCB. Il software consiste, principalmente, di una componente server DNS, chiamata named, un’abbreviazione di name daemon. Inoltre la distribuzione contiene vari strumenti di amministrazione ed un Domain Name Resolver. L’ultima versione di BIND è BIND 9, il cui primo rilascio è del 2000. È possibile scaricare bind da qui. Per l’installazione su sistemi Linux si veda, ad esempio Debian.
Un semplice file di zona d’esempio, è il seguente:
$ORIGIN . $TTL 1D ; 24 hours could have been writen as 24h or 1d ; $TTL used for all RRs without explicit TTL value example.local IN SOA ns1.example.local. hostmaster.example.local. ( 1 ; serial 86400 ; retry 900 ; refresh 604800 ; espire 43200 ; minimum ) IN NS ns1.example.local. ; in the zone. IN NS ns2.example.local. ; in the zone. IN MX 10 mail.example.local. ; in the zone. IN MX 15 mail.another.tld. ; external to zone. $ORIGIN example.local. ; some hosts definitions ns1 IN A 192.168.0.1 ; the name server ns2 IN A 192.168.0.2 ; the slave name server server1 IN A 192.168.0.3 ; the first server server2 IN A 192.168.0.4 ; the second server smtp IN CNAME server1 ; smtp is an Alias for server1.example.local. imap IN CNAME server1 ; imap is an Alias for server1.example.local. pop IN CNAME server1 ; pop is an Alias for server1.example.local. mail IN CNAME server1 ; Alias. The Mail eXchanger www IN CNAME server2 ; ... webmail IN CNAME server2 ; Alias... sql IN CNAME server2 ; Alias...
Le direttive (Directives) iniziano con il simbolo del dollaro ($), seguite dal nome della direttiva. Di solito le direttive appaiono al principio del file di zona.
Le direttive del master file comprendono $ORIGIN, $INCLUDE e $TTL:
$ORIGIN
Syntax: $ORIGIN domain-name [ comment ]
Imposta il nome di dominio che verrà aggiunto a qualsiasi record non qualificato, ovvero quei record dove viene specificato solo il nome dell’host. Quando una zona viene letta, vi è implicitamente un $ORIGIN <zone_name>. (seguito dal punto finale). L’attuale $ORIGIN viene aggiunta al nome specificato nell’argomento di $ORIGIN se non è assoluto, ovvero non finisce con il segno punto “.”. Dunque:
$ORIGIN example.local. ftp CNAME www
equivale a
ftp.example.local. CNAME www.example.local.
$INCLUDE
Syntax: $INCLUDE filename [ origin ] [ comment ]
Legge e processa il file filename come se fosse incluso all’interno del file di zona al punto in cui appare. Se è specificato un origin il file e processato con $ORIGIN configurato con quel valore, altrimenti viene utilizzata l’origin corrente. Ciò tipicamente consente di avere delle configurazioni addizionali di zona separate rispetto al file principale di zona.
$TTL
Syntax: $TTL default-ttl [ comment ]
Imposta il Time To Live (TTL) predefinito per i record privi di un loro TTL che seguono tale direttiva. I TTL validi sono nell’intervallo 0-2147483647 secondi.
La direttiva $TTL viene definita nella RFC 2308.
Una zona contiene, dopo le direttive, un resource record SOA (the start of a zone of authority, più info) quale primo resource record in un file di zona. La struttura generale del RR è la seguente:
@ SOA <primary-name-server> <hostmaster-email> ( <serial-number> <time-to-refresh> <time-to-retry> <time-to-expire> <minimum-TTL> )
il simbolo della chiocciola “@” , quando il file viene letto e processato, posiziona l’argomento della direttiva $ORIGIN, quale namespace definito da questo resource record SOA. Se non è presente la direttiva $ORIGIN, lo stesso simbolo posiziona il nome della zona, come definito all’interno di named.conf.
$ORIGIN . $TTL 86400 example.local SOA ns1.example.local. hostmaster.example.local.
La precedente, ripresa dall’esempio, al contrario costringe, inizialmente, ad indicare il FQDN di qualsiasi host, che prevede l’aggiunta del punto finale.
L’hostname completo del primo name server autoritativo per questa zona è dichiarato in <primary-name-server>, infine l’indirizzo email della persona responsabile circa il namespace è scritto in <hostmaster-email>. Per la zona sono definiti: un numero intero che rappresenta un numero di serie e quattro timer espressi in secondi. I valori per questi timer va espresso quindi in secondi, oppure tramite abbreviazioni quando si vogliano utilizzare unità di tempo differenti; come i minuti (M), le ore (H) i giorni (D) le settimane (W), allora:
1 ; serial 86400 ; refresh 900 ; retry 604800 ; expire 43200 ; minimum
equivale a
1 ; serial 1D ; retry 15M ; refresh 1W ; espire 12H ; minimum
questo resource record è sempre presente in un qualunque file di zona perché contiene informazioni tanto basilare quanto importanti come, e non solo, il primo name server autoritativo per la zona. Inoltre non è necessario esplicitare la classe, viene presa in automatico “IN” (Internet, si veda) e quindi si ha:
$ORIGIN . $TTL 1D ; 24 hours could have been writen as 24h or 1d ; $TTL used for all RRs without explicit TTL value example.local SOA ns1.example.local. hostmaster.example.local. ( 1 ; serial 1D ; retry 15M ; refresh 1W ; espire 12H ; minimum ) NS ns1.example.local. ; in the zone. NS ns2.example.local. ; in the zone. MX 10 mail.example.local. ; in the zone. MX 15 mail.another.tld. ; external to zone. $ORIGIN example.local. ; some hosts definitions ns1 A 192.168.0.1 ; the name server ns2 A 192.168.0.2 ; the slave name server server1 A 192.168.0.3 ; the first server server2 A 192.168.0.4 ; the second server smtp CNAME server1 ; smtp is an Alias for server1.example.local. imap CNAME server1 ; imap is an Alias for server1.example.local. pop CNAME server1 ; pop is an Alias for server1.example.local. mail CNAME server1 ; Alias. The Mail eXchanger www CNAME server2 ; ... webmail CNAME server2 ; Alias... sql CNAME server2 ; Alias...
La RFC 1035, definisce i serial e timers del SOA in questo modo:
SERIAL
un numero di versione a 32 bit, senza segno, della copia originale della zona. Il trasferimento di zona preserva questo valore. Questo valore e estensibile e dovrebbe essere messo a confronto tramite l’uso di progressioni aritmetiche.
REFRESH
Intervallo di tempo a 32 bit trascorso il quale la zona dovrebbe essere aggiornata.
RETRY
Intervallo di tempo a 32 bit che dovrebbe trascorrere prima che si possa riprovare (un refresh ndr) in seguito ad un fallito refresh.
EXPIRE
Un valore temporale a 32 bit che specifica il limite superiore dell’intervallo di tempo che può trascorrere, prima che la zona non sia più autoritativa.
MINIMUM
Il più piccolo valore TTL che dovrebbe essere esportato con ogni RR da questa zona.