dns domain tree
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.