In una rete che usa il TCP/IP ogni stazione è identificata da un indirizzo IP; al posto degli indirizzi si possono usare dei nomi.
DNS (Domain Name System) è un servizio di risoluzione dei nomi usato principalmente per associare nomi di host e destinazioni di posta elettronica a indirizzi IP.
Prima del DNS, per poter usare i nomi al posto degli indirizzi, su ogni stazione doveva essere presente il file hosts che conteneva la lista dei nomi e i corrispondenti indirizzi IP; i nomi dovevano essere univoci in tutta la rete e il file hosts doveva elencarli tutti.
Il DNS usa un sistema di denominazione con una struttura gerarchica, i nomi di dominio.
Client e server DNS
Ogni dominio gestisce dei server (name server) che mantengono la parte del database relativa al dominio; tali server si dicono autoritari per il dominio e contengono i dati di autorità, cioè quelli aggiornati dagli amministratori che gestiscono il dominio.
In ogni dominio possono esserci vari tipi di server dei nomi:
-
primari (o principali): sono i server che devono essere aggiornati e modificati dagli amministratori del dominio;
-
secondari: non possono essere aggiornati e ricevono i file di database con le informazioni esclusivamente da un altro server (primario o secondario);
-
master: sono server primari o secondari che forniscono i loro file con le informazioni a server secondari;
-
per sola cache: sono server che non hanno file di database; sono configurati con l’indirizzo di un server primario o secondario e quando ricevono una richiesta chiedono all’altro server e poi memorizzano la risposta nella cache per poterla fornire alla richiesta successiva.
Lo spazio dei nomi DNS è suddiviso in zone non sovrapposte. La zona è l’unità amministrativa principale e può essere divisa in sottozone. Una zona può essere un sottodominio o contenere due o più sottodomini; in pratica contiene una parte dell’albero del namespace di dominio.
In ogni zona c’è sempre un name server principale che contiene le informazioni relative alla zona (informazioni di autorità) e possono esserci uno o più name server secondari, che ricevono una copia delle informazioni.
I client, o risolutori (che di solito sono integrati in una applicazione, per esempio in un browser) interrogano i name server per la risoluzione dei nomi (il DNS è un sistema di tipo client/server).
I risolutori (o resolver) usano UDP per comunicare con il server DNS; poi l’applicazione può usare l’indirizzo IP individuato per aprire una connessione TCP o inviare datagrammi UDP.
Se la richiesta è relativa al dominio gestito dal server (cioè il server è autoritario per il dominio) il server restituisce le informazioni richieste, altrimenti può essere necessario ricorrere ad altri server.
Secondo il metodo di risoluzione configurato, il server può gestire l’interrogazione in modo ricorsivo o iterativo.
Nelle interrogazioni ricorsive se il server non ha aluna informazione disponibile invia un’interrogazione al name server del dominio di livello massimo del dominio chiesto; questo interroga i suoi sottodomini finché trova le informazioni di autorità della risorsa (ogni server diventa client per un altro server); i dati richiesti tornano indietro un passo per volta, fino al server iniziale, che li inserisce nella cache; il client può ottenere l’indirizzo IP richiesto o una risposta che segnala che il nome è sconosciuto.
Nelle interrogazioni iterative se il server non ha leinformazioni richieste fornisce un riferimento ad un altro server; è il client stesso che deve eseguire una nuova interrogazione; questo processo continua attraverso la gerarchia, finché viene trovato un server in possesso dei dati o finché si verifica una condizione di errore o di timeout.
In ogni caso i server usano una cache in cui inseriscono le informazioni relative alle interrogazioni che hanno risolto, per velocizzare le richieste successive.
I dati vengono conservati nella cache per un tempo definito dal campo TTL (Time To Live) contenuto nella risposta.
Nella cache vengono inseriti anche gli indirizzi dei server dei domini di massimo livello, con tempi di vita molto lunghi, copiandoli da un file di configurazione (di cui si può ottenere una copia dall’InterNIC).
Un file del database DNS contiene per ciascun dominio (che può contenere un solo host o molti) un insieme di descrittori di risorse (resource records). Il descrittore di risorse più comune è il record che contiene l’indirizzo IP di un host (risorsa di tipo A).
Quando un resolver invia a un server DNS una richiesta riguardo a un dominio, ciò che ottiene in risposta sono i descrittori di risorse associati al dominio.
| Tipo | Significato | Valore |
|---|---|---|
| SOA | inizio di autorità (Start of authority) | indirizzo di posta dell’amministratore, flag ecc. |
| A | indirizzo IP dell’host (Address) | intero a 32 bit |
| MX | scambio posta (Mail eXchange): nome del server di posta | nome host |
| NS | nome di un name server per questo dominio | nome host |
| CNAME | alias per un indirizzo IP | nome dominio |
| PTR | alias per un indirizzo IP | nome dominio |
| HINFO | descrizione di host | stringa ASCII |
| TXT | testo a disposizione | stringa ASCII |
Il DNS permette anche un altro tipo di ricerca: è possibile individuare il nome di un host, noto l’indirizzo IP. Questo tipo di ricerca è noto come interrogazione inversa (reverse name lookup).
Questo tipo di ricerca può servire per i servizi di sicurezza, per esempio per risolvere un indirizzo IP che si trova in un file di log, o quando in un firewall si imposta una regola su un nome (si risolvono gli indirizzi IP delle richieste di comunicazione per evitare che digitando l’indirizzo IP si aggiri la regola imposta sul nome).
Dato che non esiste nessuna correlazione diretta tra indirizzi IP e nomi di dominio, le associazioni indirizzo IP – nome host vengono gestite mediante il dominio speciale in-addr.arpa; ai nodi del dominio vengono assegnati dei nomi formati dai gruppi di numeri separati da punti che compongono gli indirizzi IP, ma in ordine inverso (gli indirizzi diventano più specifici da sinistra a destra mentre i nomi di dominio diventano meno specifici); ai domini con questi nomi vengono associati descrittori di risorsa di tipo PTR con il nome dell’host.
Per esempio per trovare il nome dell’host con indirizzo IP 178.34.45.1 il client interroga il server per ottenere il record PTR del dominio 1.45.34.178.in-addr.arpa; se il server non ha l’informazione richiesta si deve collegare al server autoritario del dominio in-addr.arpa e discendere l’albero.
Per supportare IPv6 il DNS ha bisogno di un nuovo tipo di record di risorsa (AAAA) per gli indirizzi IPv6 e di un nuovo dominio per le ricerche inverse; il dominio è chiamato ip6.int e il nome corrispondente a un indirizzo IPv6 è costituito dalle cifre esadecimali che corrispondono all’indirizzo, nell’ordine inverso e separate l’una dall’altra da un punto.
Per esempio 4321:0:1:2:3:4:567:89ab diventa b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.int
Il DNS non permette aggiornamenti dinamici; ogni modifica al database deve essere effettuata manualmente.
Una evoluzione del sistema è il DDNS (DNS dinamico) in cui un host che cambia indirizzo IP (per esempio perché riceve ogni volta un indirizzo diverso da un server DHCP) può comunicarlo al server DDNS.