Finita la definizione della SOA, si procede con quella dei name server (almeno uno) autorevoli per la zona, e a questo punto conveniente indicare i mail exchanger… come anche eventuali record TXT validi per la zona. Vediamo le loro dichiarazioni complete:

NS
example.local. IN NS ns1.example.local.
MX
example.local. IN MX 10 mail.example.local.

Si dice “valore di preferenza” o “priorità” il numero intero che segue il record type “MX” il numero più basso ha maggior valore di preferenza per lo scambio della posta elettronica. Si noti si faccio uso del FQDN per ciascun nodo. La componente primaria di una zona sono i suoi resource records, vediamo i record più comunemente utilizzati. Si dichiara, nella zona d’esempio, la $ORIGIN example.local. e da questo punto in avanti si definiscono i vari RRs per gli hosts, senza più indicarne il nome di dominio.

A
<hostname>   IN   A   <ip-address>
CNAME
<alias-name>   IN   CNAME   <real-name>

Nel complesso la zona example.local. utilizza le direttive standard ed il SOA. I name server autoritativi sono impostati ad ns1.example.local. e ns2.example.local., con record A che li associano, rispettivamente a 192.168.0.1 e 192.168.0.2.

Troviamo due MX; il primo mail punta al server server1 tramite un CNAME. Il secondo è esterno a questo dominio. Poiché i nomi dei server presenti negli RR “A” e “CNAME” (server1, server2, mail, ecc) non terminano con il segno “.” il nome di dominio in argomento alla direttiva $ORIGIN viene impostato dopo il loro, espandendoli in server1.example.local.server2.example.local.mail.example.local., ecc. Attraverso il relativo resource record “A” viene determinato il rispettivo indirizzo IP.

I servizi FTP e web, assieme a tutti gli altri, disponibili attraverso i loro indirizzi standard, ftp.example.local.www.example.local, ecc, sono puntati ciascuno al server appropriato grazie a record CNAME.



Per mandare in servizio una zona del genere bisogna dichiararla all’interno di named.conf, ad esempio nel modo seguente:

zone "example.local" {
     type master;
     file "/var/named/zones/example.local.hosts";
     //journal "/var/cache/bind/example.local.hosts.jnl";
     // IP addresses of slave servers allowed to
     // transfer example.local.
     allow-transfer { 192.168.0.2; };
     };
};

PTR è tipo di record interessante.

Le risorse si indicano come di seguito:

<ip-address-in-reverse-order.IN-ADDR.ARPA> IN PTR <FQDN-of-system>

se nella zona è indicata un $ORIGIN

<last-ip-digit> IN PTR <FQDN-of-system>

Il PTR può essere utilizzato all’interno di un qualsiasi file di zona come quello in esempio, tuttavia è possibile definire una zona detta a inversa risoluzione dei nomi, reverse zone. Allo stesso modo possiamo definire la zona dell’esempio precedente “zona diretta”. In realtà la creazione di una reverse zone procede in modo identico ad ogni altra zona:

$ORIGIN .
$TTL 1D			; 24 hours could have been writen as 24h or 1d
			; $TTL used for all RRs without explicit TTL value
168.192.IN-ADDR.ARPA	SOA	ns1.example.local. hostmaster.example.local. (
		1		; serial
		1D		; retry
		15M		; refresh
		1W		; espire
		12H		; minimum

		)
	NS	ns1.example.local.
	NS	ns2.example.local.
$ORIGIN 0.168.192.IN-ADDR.ARPA.
; same pointer records definitions
1		PTR	ns1.example.local.
2		PTR	ns2.example.local.
3		PTR	server1.example.local.
4		PTR	server2example.local.

dns reverse mapping schema

Si inizia infatti con le direttive $ORIGIN$TTL e con la dichiarazione del SOA che definisce il name server autorevole principale e l’indirizzo email di contatto, come discusso in precedenza. In seguito si definiscono i name server autoritativi per la zona ed infine le varie risorse PTR. Questa zona d’esempio definisce una risorsa SOA “ampia” per via del “168.192.IN-ADDR.ARPA”, infatti una seconda dichiarazione $ORIGIN 0.168.192.IN-ADDR.ARPA. si è resa necessaria per fare uso nel seguito della sola parte finale dell’IP. Nella pratica una zona come questa, copre l’intero spazio IP che va da 192.168.0.0 a 192.168.255.255, ricorrendo quando necessario alle opportune direttive $ORIGN, per esempio

[...]
$ORIGIN 5.168.192.IN-ADDR.ARPA. ; addresses range is 192.168.5.0 − 192.168.5.255
18		PTR	server-in-5.example.local. ; the ip address is 192.168.5.18.
[... ecc]

Sono infine dichiarati i PTR per i server 192.168.0.1192.168.0.2192.168.0.3 e 192.168.0.4 che rispettivamente puntano a ns1.example.local., ns2.example.local., server1.example.local. e server2.example.local.

 

Per mandare in servizio una zona del genere bisogna dichiararla all’interno di named.conf, ad esempio nel modo seguente:

zone "168.192.in-addr.arpa" {
	type master;
	file "/var/named/zones/168.192.rev";
	//journal "/var/cache/bind/168.192.rev.jnl";
	allow-transfer { 192.168.0.2; };
};

Il file named.conf è utilizzato per configurare il demone named nei suoi vari aspetti per come fin’ora descritto, dunque possiamo impostare varie opzioni e zone al suo interno. Alle volte possiamo invece preferire di scrivere le zone all’interno di un secondo file, diverso da named.conf, chiamato per esempio named.conf.local e le opzioni in un terzo file, ad esempio named.conf.options. Per farlo, ovviamente, bisogna editare innanzitutto il file named.conf in modo che conosca ed utilizzi questi due files. Per farlo si fa uso dell’include dunque:

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the 
// structure of BIND configuration files in Debian, *BEFORE* you customize 
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

e quindi editare il file named.conf.local nel modo seguente:

zone "example.local." {
	type master;
	file "/var/named/zones/example.local.hosts";
	//journal "/var/cache/bind/example.local.hosts.jnl";
	allow-transfer { 192.168.0.2; };
};

zone "168.192.in-addr.arpa" {
	type master;
	file "/var/named/zones/192.168.rev";
	//journal "/var/cache/bind/192.168.rev.jnl";
	allow-transfer { 192.168.0.2; };
};