19.1.1 DNS - Domain Name System

Il DNS è essenzialmente un database distribuito per la risoluzione dei nomi dei sistemi collegati in rete. Il database è formato dalle informazioni presenti su vari server che concorrono a formare il DNS, detti appunto server DNS o name server. Il database che si viene a delineare è di tipo gerarchico, ovvero è un albero (DNS tree), in cui ogni nodo è costituito da un server DNS. La posizione di un server DNS all’interno dell’albero deriva dalla sua importanza (zona di competenza, v. sez. 19.1.1.1) nel DNS.


pict
Figura 19.1: Esempio di albero del DNS.

Ad ogni interfaccia di rete di ogni sistema (name server o meno) viene quindi associato un nome con una lunghezza massima di 63 caratteri. Il nome può contenere lettere alfabetiche, numeri ed il simbolo “-” e deve necessariamente iniziare con una lettera.

L’interfaccia del name server che rappresenta la radice (root) dell’albero del DNS è identificata dal nome “.”. Per ogni sistema, si definisce il nome di dominio che è rappresentato dall’elenco dei nomi dei nodi attraversati, partendo dal sistema considerato fino ad arrivare al name server alla radice dell’albero del DNS separati dal carattere “.” (analogamente a quanto avviene per i file con il carattere di separazione “/”, ma i nomi sono considerati nell’ordine opposto). Il nome di dominio così risultante identifica univocamente un sistema. Ad esempio, considerando la fig. 19.1, il nome di dominio del sistema col nome pippo che sta sotto il sistema col nome mydomain che sta sotto il sistema col nome local, al di sotto del sistema . è

 
pippo.mydomain.local.  
Analogamente a quanto avviene per il filesystem, si può parlare di nomi assoluti (completi), se il carattere terminale del nome è “.”, o relativi (incompleti). I nomi di dominio assoluti sono anche detti FQDN (Fully Qualified Domain Name). I nomi relativi vengono completati dal meccanismo di risoluzione dei nomi, il resolver, secondo un’opportuna logica: in genere i nomi relativi non contenenti nessun “.” vengono completati aggiungendo a destra un suffisso locale (ad esempio .mydomain.local.), mentre gli altri vengono completati semplicemente aggiungendo sulla destra un “.” (per questo motivo nella pratica il “.” finale viene omesso).

I domini che stanno gerarchicamente sotto ad altri domini, sono detti sotto-domini e sono contenuti nel dominio da cui derivano. L’albero del DNS può essere suddiviso in livelli dipendentemente dalla profonità considerata a partire dalla radice. Esistono così il domininio di livello zero (quello a cui appartiene “.”), i domini di primo livello (o TLD - Top Level Domain), quelli di secondo, e così via. I domini di primo livello di Internet sono gestiti dallo IANA e si dividono in


TLD---Descrizione------------------|
aero---air- transport industry----------|
arpa   Address and Routing Parameter Area
biz   business                     |
com   commercial                   |
ceoodpu   cUo.oSp.e eradtuivcaetsional               |
gov   U.S. government              |
info   information                   |
imnitl   iUn.teSr.n matiiliontaarly organizations       |
museum  museums                     |
name   individuals, by name           |
net   network                      |
oprrgo   oprrgoafeniszsiatoionsn                   |
-----------------------------------

Tabella 19.1: Elenco dei general TLD del DNS di Internet.


TLD---Descrizione----------------|
de---Germania (Deutschland)------|
es   Spagna (Espa~na)             |
fi   Finlandia                  |
fr   Francia                    |
into   INtaoliravegia                   |
uk   Regno unito (United Kingdom)|
us---Stati Uniti (United States-USA)

Tabella 19.2: Alcuni dei country code TLD del DNS di Internet.

L’insieme dei domini del DNS è detto spazio dei nomi di dominio o domain name space.

Per ogni interfaccia è possibile associare più nomi. Il primo costituisce il nome canonico (o nome primario) dell’interfaccia, mentre gli altri sono detti alias.

Il name server più utilizzato sui sistemi Unix-like è named che è contenuto nel pacchetto BIND (Berkeley Internet Name Domain). Nel seguito sarà fatto riferimento a tale name server.

19.1.1.1 Le zone di competenza

La caratteristica fondamentale del DNS è il fatto che ogni name server ha una propria zona di competenza o di autorità (zone of authority), per la quale il name server è detto authoritative name server. Un name server conosce soltanto i nomi delle interfacce che appartengono in maniera diretta alla sua zona di competenza. La gestione delle altre interfacce viene delegata ai name server che hanno la competenza su altre zone. Una zona è una parte dell’albero del DNS (un sotto-albero) che viene amministrata in maniera autonoma. Ad esempio un dominio di secondo livello può costituire (ed in genere è così) una zona. Una zona può essere ulteriormente suddivisa in altre zone (o sotto-zone), per poter meglio amministrare l’intera zona (ogni sotto-zona verrà amministrata in maniera autonoma).

Per ogni zona sarà presente un authoritative name server primario. Possono anche esservi uno o più authoritative name server secondari in maniera tale da rendere più affidabile il servizio di ricerca nel DNS: nel caso in cui un name server interrompa la propria operatività (ad esempio in seguito ad un guasto), ci sarà un altro name server che assicura la continuità del servizio. La differenza tra un name server primario ed uno secondario è che quello primario legge le informazioni relative alle zone da file detti zone file o master file, mentre quello secondario le acquisisce via rete dal primario, per mezzo dell’operazione denominata zone transfer.

19.1.1.2 I Resource Record (RR)

Le informazioni relative ai domini sono memorizzate sui name server sottoforma di elementi di tabelle ed ognuna di esse costituisce un Resource Record, o RR. Ogni RR è formato dai campi riportati in fig. 19.2 ed illustrati di seguito.


pict
Figura 19.2: Struttura di un Resource Record del DNS.

19.1.1.3 I messaggi del protocollo del DNS

L’interrogazione dei name server e le relative risposte, seguono uno specifico protocollo. Ogni messaggio di richiesta (query) o di risposta (response) si compone della sezioni illustrate in fig. 19.3 e descritte di seguito


pict
Figura 19.3: Formato dei messaggi del protocollo del DNS.

Header L’header del messaggio ha il formato riportato in fig. 19.4 e descritto di seguito.


pict
Figura 19.4: Formato dell’header dei messaggi del protocollo del DNS.

Question Contiene la richiesta da inoltrare al name server, ovvero una serie di QdCount (in genere 1) elementi con il formato riportato in fig. ?? ed illustrato di seguito.

Answer, Authority o Additional Le sezioni Answer, Authority e Additional hanno tutte la stessa struttura: esse contengono il numero di RR (per la struttura v. sez. 19.1.1.2) secondo quanto indicato rispettivamente da AnCount, NSCount e ARCount.

19.1.1.4 Compressione dei dati

Per ridurre la lunghezza del messaggio, il protocollo del DNS prevede di comprimere i nomi dei domini nei messaggi, secondo quanto di seguito descritto.

I nomi di dominio sono rappresentati da sequenze dei seguenti gruppi di campi

Poiché Label deve iniziare con una lettera alfabetica, si ha che il suo primo byte avrà i due bit più significativi a 0.

Per ridurre la dimensione dei nomi di domini trasmessi, Label può essere, anziché una parte del nome di dominio, un riferimento ad essa, cioè un valore di 16 bit, di cui i due bit più significativi due devono essere impostati a 1 ed i rimanenti bit indicano il byte da considerare dall’inizio del messaggio (ovvero il suo offset);

19.1.1.5 Caching name server

Generalmente i resolver forniti con i sistemi operativi sono degli stub resolver, ovvero non sono in grado di risolvere un nome di dominio in maniera autonoma contattando direttamente il server della zona di competenza, ma essi contattano un name server, il quale effettua la risoluzione al loro posto. Per motivi di efficienza, un name server memorizza (in una memoria cache) le richieste che riceve ed i risultati ottenuti con le relative operazioni di risoluzione dei nomi. Per questo motivo, un name server è detto anche chaching name server.

19.1.1.6 Il master file

Il master file è un file in formato testo che contiene i RR della zona del DNS considerata. I RR sono inseriti essenzialmente per righe (le parentesi possono essere utilizzate per inserire un RR su più righe) ed i campi sono separati da spazi o TAB. Inoltre sono definite le seguenti direttive

All’interno di un master file, ogni RR è rappresentato da una riga con la seguente sintassi

 
OwnerName [TTL] [Class] Type RData  
Se un RR non contiene un valore per il campo OwnerName, questo viene desunto dal RR precedente che lo ha specificato. I campi Type e Class sono espressi mediante gli mnemonici standard elencati in tab. 19.3 e 19.4. I campi TTL e Class possono anche essere espressi in ordine invertito (se non specificati vengono considerati gli ultimi valori specificati in tali campi). I nomi di dominio sono espressi come stringhe di caratteri intervallate da ‘.’. Inoltre alcune sequenze di caratteri assumono un particolare significato (v. tab. 19.9).


Carattere--Significato--------------------------------------|
@--------nome di dominio di default----------------------|
\X        considera il carattere X per quello che `e             |
\ddd       rappresenta il carattere ASCII con codice decimale ddd  |
(e)       nel testo racchiuso non vengono considerati i caratteri CR o LF
;--------indica-l’inizio di un commento----------------------

Tabella 19.9: Caratteri particolari nel master file.

I valori numerici relativi ad intervalli temporali possono essere espressi con una sintassi del tipo

 
a[A[b[B[...]]]]  
dove

Ad esempio, il valore 12d3h indica 12 giorni e 3 ore, mentre il valore 22h15m8s indica 22 ore, 15 minuti e 8 secondi. Il valore 9867, invece, indica 9.867 secondi.

Inoltre esistono delle regole per la validazione del contenuto di un master file. Le principali sono le seguenti

Se un master file contiene qualche errore, l’intero file non viene preso in considerazione dall’authoritative name server primario.

Di seguito è riportato un esempio di master file. Segue una descrizione dello stesso.

                                                                        
                                                                        
;
; Zone file for linux.bogus
;
; The full zone file
;
$TTL 3D
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                   200402151       ; serial, todays date + todays serial #
                   8H              ; refresh
                   2H              ; retry
                   4W              ; expire
                   1D )            ; minimum
;
           TXT     "Linux.Bogus, your DNS consultants"
           NS      ns              ; Inet Address of name server
           NS      ns.friend.bogus.
           MX      10 mail         ; Primary Mail Exchanger
           MX      20 mail.friend.bogus. ; Secondary Mail Exchanger
localhost       A       127.0.0.1       ; localhost IP address
gw              A       192.168.196.1   ; gw IP address
           TXT     "The router"
ns              A       192.168.196.2           ; ns IP address
           MX      10 mail                 ; ns mail server
           MX      20 mail.friend.bogus.   ; ns secondary mail server
www             CNAME   ns                      ; alias www for ns
donald          A       192.168.196.3           ; donald IP address
           MX      10 mail                 ; donald mail server
           MX      20 mail.friend.bogus.   ; donald secondary mail server
           TXT     "DEK"
mail            A       192.168.196.4           ; mail IP address
           MX      10 mail                 ; mail mail server
           MX      20 mail.friend.bogus.   ; mail secondary mail server
ftp             A       192.168.196.5           ; ftp IP address
           MX      10 mail                 ; ftp mail server
           MX      20 mail.friend.bogus.   ; ftp secondary mail server
La prima riga imposta un valore di TTL di default di 3 giorni.

Le 6 righe successive (SOA) definiscono la zona di competenza del dominio in questione (@) con il nome ns.linux.bogus., il cui responsabile ha l’indirizzo di posta elettronica hostmaster@linux.bogus.. Tale RR è di classe Internet, ha versione 200402151 e chi lo riceve può richiederne un aggiornamento dopo che sono trascorse 8 ore dal ricevimento dello stesso, riprovando ad intervalli di 2 ore nel caso in cui la richiesta non andasse a buon fine, e comunque tale RR dovrebbe essere scartato dopo 4 settimane che non si riesce ad aggiornarlo. Inoltre i RR della zona considerata hanno un TTL minimo di 1 giorno.

I successivi RR (NS) definiscono il nome di dominio degli authoritative name server per la zona considerata (ns e ns.friend.bogus.).

I sucessivi RR (MX) definiscono il valore di precedenza ed il nome di dominio dei server di posta elettronica della zona considerata (mail, server preferenziale, e mail.friend.bogus., server secondario).

19.1.1.7 La risoluzione dei nomi

Quando un client tenta di contattare un server con il suo nome di dominio, viene iniziata la risoluzione del nome, ovvero vengono lanciati in esecuzione sul sistema, i programmi che costituiscono il resolver, cioè il meccanismo di risoluzione dei nomi.

In genere, per prima cosa il resolver controlla se l’associazione tra il nome di dominio desiderato ed il relativo indirizzo IP è presente nel file /etc/hosts. Nel caso in cui non sia presente, richiede la risoluzione del nome al name server, di cui il resolver deve necessariamente conoscere l’indirizzo IP (v. file /etc/resolv.conf). La comunicazione tra il resolver ed i name server avviene per mezzo di uno specifico protocollo di rete (v. RFC 1034 e 1035).


pict
Figura 19.5: Schema esemplificativo di risoluzione dei nomi per mezzo del DNS.

Si supponga ad esempio che il sistema A (name1.domain1.it) voglia contattare il sistema B (name2.domain2.com), come illustrato in fig. 19.5. Dopo aver verificato che sul file /etc/hosts non vi sia specificato l’indirizzo IP di name2.domain2.com, il sistema A chiede al name server (dns.domain1.it) di cui conosce l’indirizzo IP di risolvere il nome name2.domain2.com. Si supponga, per semplicità, che il resolver inoltri al name server dns.domain1.it una richiesta ricorsiva e che il name server dns.domain1.it sia in grado di effettuare una ricerca ricorsiva del nome di dominio in maniera autonoma. Il name server dns.domain1.it non è competente relativamente al dominio domain2.com e pertanto contatterà il name server di competenza del dominio .it per inoltrargli una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. Di nuovo, tale name server non è competente relativamente al dominio domain2.com e pertanto contatterà il name server di competenza del dominio . per inoltrargli una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. Tale name server non è competente relativamente al dominio domain2.com, ma conosce il name server di competenza del dominio .com e gli inoltra una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. A sua volta, tale name server non è competente relativamente al dominio domain2.com, ma conosce il name server di competenza del dominio domain2.com per inoltrargli una richiesta (ricorsiva) a proposito del nome di dominio name2.domain2.com. A questo punto il name server di competenza del dominio domain2.com risponderà con l’indirizzo IP corrispondente al nome di dominio name2.domain2.com. Quindi i server si passeranno tale informazione a ritroso fino a recapitarla al resolver, il quale la memorizzerà in una propria cache, in maniera tale che una successiva richiesta di tale risoluzione del nome non venga più effettuata interrogando i name server, ma la risposta è gestita direttamente dal resolver.

Il confronto tra i nomi di dominio viene sempre effettuato senza fare distinzione tra le lettere maiuscole e quelle minuscole.

19.1.1.8 La risoluzione degli indirizzi

Il DNS utilizzato per Internet, fa uso di un nome di dominio particolare per la risoluzione dei nomi di dominio a partire dagli indirizzi IP delle interfacce: in-addr.arpa. Tale nome di dominio permette l’operazione che va sotto il nome di IP address lookup.

I sotto-domini di in-addr.arpa possono al massimo avere fino a 4 livelli ed ogni livello rappresenta un byte dell’indirizzo IP espresso in notazione decimale (da 0 a 255). Il nome di dominio risultante per un determinato indirizzo IP in decimal dotted notation

 
aaa.bbb.ccc.ddd  
sarà espresso come

 
ddd.ccc.bbb.aaa.in-addr.arpa  
Il fatto che l’indirizzo IP venga rovesciato nel nome di dominio è dovuto al fatto che in questo modo è possibile strutturare l’albero del DNS in maniera tale da poter agevolmente organizzare le zone delegando ad ogni livello la competenza di una sottorete.

19.1.1.9 Risoluzione degli indirizzi di posta elettronica

[da completare ...]