DNS, acronimo di Domain Name System, strutturato come un database si occupa della risoluzione dei nomi di dominio (es. www.esempio.com) nei loro corrispettivi indirizzi numerici (es. 10.11.12.13) e viceversa, delle informazioni relative all'instradamento della posta e di ulteriori dati relativi a diverse applicazioni internet.
La struttura dei nomi di dominio è gerarchica, ad albero in cui la radice indica il dominio principale ed è rappresentata da un punto alla fine del nome (es. www.example.com.).
Nella maggior parte dei casi il punto finale viene omesso a parte quando ci si appresta a editare i file delle zone, in cui è importante specificarlo per far capire al server i limiti della zona su cui ha autorità.
I dati che un DNS gestisce sono identificati in nomi di dominio e organizzati in una struttura ad albero. Ogni nodo dell'albero corrisponde a un dominio e ne viene assegnato un nome. Un nome di dominio pienamente qualificato (FQDN, Fully Qualified Domain Name) nasce dall'unione di tutti i nomi dei nodi (detti "etichette") che lo compongono, separati da un punto, a partire dal nome della macchina per arrivare al punto finale del dominio radice.
Ad esempio pc01.esempio.com è composto dal dominio com, il quale è il dominio principale (TLD, Top Level Domain), dal dominio esempio che è un sottodominio o dominio secondario di com e per finire da pc01 che altri non è che il nome della macchina.
Per fini amministrativi ad ogni nodo che compone un nome di dominio corrisponde una zona.
Per il DNS i file delle zone contengono i riferimenti ai domini di cui il server ha competenza o eventualmente contengono i riferimenti ad altre zone a cui il server demanda il compito di risoluzione dei nomi. Queste zone a loro volta saranno competenti per tutti i loro sotto-domini.
Il DNS utilizza principalmente il protocollo UDP per la gestione delle richieste fuorchè nei casi in cui i dati superano il limite di 512 bytes imposto dal protocollo UDP (ad esempio per un "zone transfer") in tal caso utilizza TCP. La porta utilizzata dal servizio è la 53 sia in UDP che in TCP.
Un server DNS può essere di vari tipi:
- Authoritative Server: Un DNS autoritativo per una determinata zona contiene tutti i dati relativi alle zone di sua competenza. Per un servizio quanto più invulnerabile ai fallimenti è generalmente consigliato "appoggiare" (ridondanza) le zone ad uno o più server secondari (detti slave). Il server che mantiene le copie principali dei file delle zone è detto master o primary server. Il secondary o slave server aggiorna i suoi file di zona da un'altro server attraverso una procedura detta zone transfer. Il file di zona contiene un numero seriale che va incrementato ogni volta che il file subisce una modifica in questo modo i server slave riconosceranno i cambiamenti. Generalmente li trasferisce dal primary server ma questo non è obbligatorio, se ne deduce che un server slave può essere master per un'altro/i.
- Caching Only Server: Detto anche Recursive Server effettua dei recursive lookups per conto dei client locali e inoltre mantiene una cache delle ultime richieste effettuate di modo che alla replicazione delle richieste non debba più rivolgersi all'esterno per la risoluzione. Questo ha un effetto di minor occupazione di banda e quindi anche di una maggiore velocità nelle risposte. Essendo questo tipo di DNS completamente indipendente dagli altri si appresta all'implementazione in reti protette da firewall.
Per comprendere il funzionamento del DNS è necessario comprendere il significato di un record di risorsa e il funzionamento del database delle zone.
I record risorse DNS sono voci memorizzate all'interno dei file che compongono un database DNS.
Il database DNS è un set di file di testo (ASCII), detti anche file delle zone, che contiene le informazioni sulle macchine che compongono un determinato dominio.
Le informazioni vengono associate ad un dominio aggiungendo record di risorse al database DNS di un nameserver primario. Il database corrispondente ad un determinato dominio contiene le informazioni sul dominio di cui il nameserver è autoritario o eventualmente i riferimenti che indirizzano ad un altro nameserver che avrà autorità per il dominio richiesto.
Ecco perchè quando si parla di database DNS se ne parla in termini di database "distribuito". Non esiste un nameserver principale contenente tutte le informazioni su tutti i domini esistenti, ogni DNS ha autorità (contiene i dati) solo per il dominio di sua competenza e la risoluzione dei nomi esterni al suo viene delegata ad altri server.
Un database elementare conterrà almeno tre file:
db.network (ad esempio db.10.11.12)
db.domain (ad esempio db.esempio)
db.127.0.0
Da ricordare: tutti i file descritti possono avere nomi arbitrari, andranno poi specificati nel file di configurazione.
Il primo file conterrà le informazioni necessarie per risolvere gli indirizzi numerici IP (ad esempio 10.11.12.13) in nomi di host (ad esempio miohost.esempio.com)
Il secondo file conterrà invece le informazioni necessarie ad eseguire il procedimento opposto, da un nome di host al suo corrispettivo IP numerico.
Il terzo file infine conterrà una corrispondenza per l'host locale.
Ciascun file di zona ha 3 sezioni principali:
Start of Authority (SOA), nameserver (NS) e la sezione database contenente le informazioni sugli host.
La sintassi può essere rappresentata così:
[TTL][class] type data
[class][TTL] type data
I due campi TTL e class sono campi opzionali che corrispondono alla durata Time-To-Live e alla classe del record di risorsa. Il Time-To-Live indica quanto tempo il nameserver attende prima di effettuare un refresh del record. Può essere omesso in tal caso il valore di default è di tre ore.
Il campo della classe indica a quale classe di dati appartiene il record. Si usa una sola classe per tutti i record che è IN e sta a significare che si tratta di dati Internet.
Il campo type è obbligatorio e descrive il tipo di record risorsa.
Vediamo alcuni dei principali tipi e il loro significato:
SOA: Start of Authority, posizionato all'inizio di ogni file di zona indica l'inizio di una zona autoritativa per il nameserver.
NS: Name Server, indica il o i server che hanno autorità per una determinata zona.
A: Address, indica l'indirizzo di un host. E' utilizzato per tradurre un nome host nel suo corrispettivo numerico.
PTR: Record Puntatore, si trova solo nei file come da esempio, db.network o db.127.0.0, serve per convertire un indirizzo ip nel suo nome di domino.
CNAME:Canonical Name, questo record è importante per assegnare un alias ad un host. Per esempio se una macchina su una rete interna si chiama miohost.esempio.com e fornisce servizi di web (www) e ftp è utile che possa essere chiamato www.esempio.com o ftp.esempio.com.
MX: Mail Exchange, questo record serve a specificare gli host che si occuperanno di instradare la posta e la loro priorità. La priorità indica l'host che si occuperà per primo dell'instradamento della posta ed è rappresentata da un numero che segue immediatamente dopo il record MX, un numero piccolo indica il server che ha la priorità.