Il DNS (Domain Name System) - guida teorica
Vi sottopongo questa Guida teorica relativa al funzionamento del servizio DNS (Domain Name System) per la risoluzione dei nomi di dominio in indirizzi IP. Appena possibile, invierò anche un mini-tutorial per configurare il DNS con il nostro Sistema Operativo preferito. Inviate i vostri commenti, le vostre opinioni, o i vostri suggerimenti, per migliorarla! Grazie!
Livello: tutti
Introduzione
Se almeno per una volta abbiamo osservato, attraverso il monitor di un computer, il meraviglioso mondo di Internet, se abbiamo utilizzato un mouse per accedere ad un sito web o se abbiamo mai scaricato una e-mail da una casella di posta elettronica, allora, molto probabilmente possiamo dire che, almeno per una volta nella nostra vita, abbiamo fatto uso del DNS.
Il servizio DNS, infatti, è uno dei servizi più importanti e più utilizzati di Internet e permette di accedere, in maniera più agevole per l’utente, a tutti gli altri servizi messi a disposizione dalla rete WAN più importante al mondo.
Probabilmente, senza una “comodità” come il DNS il fenomeno Internet non sarebbe mai decollato o comunque non sarebbe come appare oggi ai nostri occhi.
Perché, allora, una trattazione sul servizio DNS?
Bisogna dire che, purtroppo, a dispetto dell’importanza che riveste tale servizio, solo pochi conoscono realmente il suo funzionamento. Inoltre, si tratta di un servizio che svolge le proprie funzioni in maniera molto “discreta”, non imponendo una vera e propria interazione all’utente che vuole semplicemente navigare sul web o che vuole fruire di uno specifico servizio messo a disposizione on-line.
Anche tra gli amministratori di rete, molto spesso, il servizio DNS è tabù e non è raro trovare esperti di networking che gettano la spugna dinanzi a un name server che non funziona come dovrebbe (compromettendo il funzionamento complessivo della rete).
DNS: chi è costui?
Ma che cosa è il DNS?
DNS è l’acronimo di Domain Name System e indica un sistema di risoluzione dei nomi utilizzato in Internet per fare riferimento a uno specifico host o a un gruppo di hosts.
Come sappiamo, ogni host presente su Internet deve essere identificato in maniera univoca da un indirizzo composto da quattro bytes, espresso nella forma a.b.c.d (indirizzo IP).
Perciò, se con il nostro PC a casa vogliamo comunicare con il server web che ospita il sito X situato, ad esempio, negli U.S.A., abbiamo bisogno di conoscere l’indirizzo IP di quel server, in maniera analoga a quanto avviene per le comunicazioni telefoniche, dove abbiamo bisogno del numero di telefono del destinatario.
Tuttavia, sarebbe complicato ricordare gli indirizzi IP di tutti i siti che vogliamo visitare, così come sarebbe difficile ricordare i numeri di telefono di tutti i nostri amici o colleghi. Ed ecco che interviene in nostro aiuto il servizio DNS.
In maniera molto simile ad un elenco telefonico, il DNS offre un sistema per tradurre gli indirizzi IP in nomi, sicuramente più semplici da ricordare, per cui, se vogliamo accedere ad esempio al sito web contenente l’ultima versione del kernel Linux, non siamo costretti a ricordare l’indirizzo IP 217.64.195.226, ma possiamo utilizzare più agevolmente il nome “www.space4tutorial.com”.
Il nome appena mostrato è un nome FQDN (Fully Qualified Domain Name) e indica l’host www presente nel dominio space4tutorial.com (nel seguito chiariremo cosa si intende per dominio). Un piccolo chiarimento legato a una credenza diffusa tra i navigatori alle prime armi: www è soltanto un nome generalmente utilizzato per indicare computers sui quali girano dei server web; tuttavia, tale nome non è né necessario né sufficiente affinché un host sia un server web.
Fornendo al nostro server DNS un nome in questa forma, otterremo, se il nome esiste, il corrispondente indirizzo IP, che successivamente potremo utilizzare per attuare la comunicazione con l’host di destinazione.
Organizzazione delle informazioni gestite dal DNS
Prima di descrivere il funzionamento del Domain Name System, bisogna notare che esso è un sistema statico, vale a dire che l’aggiunta, la modifica, o la rimozione delle informazioni non avviene in maniera automatica, ma deve essere effettuata manualmente dall’amministratore del server DNS responsabile per quelle informazioni.
Si tratta, inoltre, di un sistema che realizza una struttura gerarchica distribuita. Questo significa che non esiste un unico server DNS che conserva tutte le corrispondenze dei nomi Internet, ma che il suo funzionamento complessivo dipende da migliaia di server DNS presenti sulla rete. Pertanto, se uno di essi subisce un’interruzione per guasto o per altri motivi, il servizio continua a funzionare senza impedimenti.
Infine, il DNS si basa su un’architettura di tipo client-server (come molti altri servizi Internet), vale a dire che abbiamo sempre una macchina che effettua una richiesta di risoluzione di un nome detta appunto “resolver” e un’altra che fornisce il servizio di risoluzione (server). Naturalmente, come avviene per qualsiasi altro servizio basato sulla suite di protocolli TCP/IP, client e server possono risiedere sullo stesso computer.
I nomi di dominio sono organizzati secondo una struttura ad albero capovolto, che costituisce il “name space”. La radice dell’albero è detta “radice non denominata” o più semplicemente dominio “root” ed è rappresentata da un punto “.”. I nodi interni descrivono i “domini”. Un dominio consiste in un’insieme di nomi che discendono da uno stesso nodo. Trattandosi di un’albero, inoltre, un dominio può essere suddiviso ulteriormente in più sotto-domini. Le foglie, infine, rappresentano i nomi degli hosts.
Fig. 1: L’organizzazione del name space per i nomi di dominio.
Attraverso quest’albero è possibile ottenere il nome FQDN di una macchina presente su Internet.
Un nome FQDN è un nome di dominio che include tutti i domini di livello superiore e, per questo, è detto anche nome di dominio completo. Esso è composto da una sequenza di più etichette separate tra loro da punti. Nomi di dominio validi, possono essere www.ietf.org, setiathome.ssl.berkeley.edu, ecc.
Come si evince dallo schema in Fig. 1, per esempio, il nome FQDN www.space4tutorial.com., relativo al sito web di questo blog, rappresenta l’host www appartenente al dominio space4tutorial. A sua volta, il dominio space4tutorial è contenuto nel dominio com, il quale discende dal dominio radice (“.”).
A questo punto è necessario fare una precisazione: i nomi “www.space4tutorial.com” e “www.space4tutorial.com.” (seguito dal punto finale) sono perfettamente identici, agli occhi del DNS. Questo perché il punto è suffisso implicito di ogni nome di dominio e può essere omesso (come d’altronde avviene nella maggior parte dei casi). Inoltre, il DNS considera lettere maiuscole e minuscole allo stesso modo (in altre parole, non è case-sensitive), pertanto “WHOIS.RIPE.NET” è perfettamente identico a “whois.ripe.net”.
Nella gerarchia dei nomi DNS, immediatamente al di sotto del dominio radice, si trovano i nomi dei domini di primo livello (Top Level Domain o TLD). Alcuni di questi domini indicano una collocazione geografica e sono chiamati ccTLD (country code TLD), mentre altri, indicati a volte come gTLD (generic TLD), possono indicare una tipologia giuridica o delle finalità specifiche (in Tabella 1 sono riportati degli esempi).
|
ccTLD |
Paese indicato |
gTLD |
Tipo di organizzazione |
|
.it |
Italia |
.com |
Organizzazioni che svolgono attività commerciali |
|
.de |
Germania |
.org |
Organizzazioni senza fini di lucro |
|
.uk |
Regno Unito |
.net |
Organizzazioni che svolgono attività orientate alla rete |
|
.jp |
Giappone |
.edu |
Enti con finalità educative |
|
.us |
Stati Uniti |
.mil |
Organizzazioni con scopi militari |
|
.sg |
Singapore |
.gov |
Enti governativi |
Tabella 1: Esempi di domini Top Level. Alcuni domini ccTLD sono ulteriormente suddivisi in sotto-domini che rappresentano specifiche regioni geografiche di un determinato Paese (es: .wv.us – West Virginia – United States).
Per quanto riguarda il dominio radice, bisogna dire che su Internet esistono circa una dozzina di server DNS radice, contenenti le medesime informazioni, utilizzati per garantire, in caso di indisponibilità di uno di essi, il corretto funzionamento del servizio.
Al di sotto dei domini TLD, ritroviamo i diversi domini (eventualmente suddivisi in ulteriori sotto-domini) e i nomi delle singole macchine.
Come funziona il DNS?
Detto questo, analizziamo nel dettaglio il meccanismo di interrogazione del DNS, attraverso un esempio pratico (Vedi Fig. 2).
Se digitiamo l’indirizzo www.kernel.org nella barra degli indirizzi del nostro browser preferito, il nostro computer chiede ad un server DNS di risolvere il nome fornito (1), restituendoci il corrispondente indirizzo IP, che successivamente sarà utilizzato per stabilire la connessione con la macchina remota che ospita il server Web capace di restituire contenuti html.
Il server DNS da noi interpellato, generalmente è il server del nostro provider Internet, ma potrebbe anche essere un server diverso (ad esempio, se il computer fa parte di una rete connessa ad Internet, potrebbe trattarsi di un server DNS interno alla rete stessa). Comunque, il funzionamento non cambia.
Il server DNS verifica prima di tutto se possiede l’indirizzo IP corrispondente al nome da risolvere. Potrebbe, infatti, essere in grado di risolvere autonomamente quel nome, perché contiene le informazioni relative ad esso oppure perché tale nome è già stato risolto in precedenza. In caso contrario, esso interroga uno dei root servers (2), dando inizio al processo di ricerca delle informazioni da noi richieste all’interno della gerarchia dei nomi di dominio.
Fig. 2: Il meccanismo di querying (interrogazione) del DNS
Come si può vedere dalla Fig. 2, il root server interrogato, fornisce al nostro server DNS l’indicazione del server responsabile per lo spazio dei nomi .org (3). Successivamente, il nostro server inoltra la stessa richiesta a quest’ultimo (4), che non è in grado di risolvere completamente il nome www.kernel.org, ma che è in grado di indicarci il server che può farlo (5), cioè il server responsabile per la zona kernel.org. Il processo di risoluzione si conclude inoltrando la richiesta a questo server (6), il quale riconosce il nome www come facente parte della zona kernel.org e restituisce l’indirizzo IP corrispondente (7 e 8).
Prima di andare avanti è necessario chiarire il concetto di zona. Una zona consiste in un dominio, o un insieme di domini che ricadono sotto la responsabilità di un server DNS. In altre parole, una zona è un sottoinsieme del name space, contenente uno o più domini gestiti dallo stesso name server. Quest’ultimo è detto “server autoritativo” per quella zona.
È interessante notare come lo stesso server DNS possa gestire zone diverse, diventando server autoritativo per esse.
A volte, i concetti di dominio e di zona sono considerati intercambiabili. Tuttavia, si tratta di due entità distinte. Infatti, il dominio rappresenta un insieme di nomi raggruppati in base ad un determinato criterio (es: i nomi delle macchine che riguardano un’azienda, un Paese, ecc.), mentre una zona comprende le informazioni su un dominio o su parte di esso mantenute da un server specifico.
Detto questo, esaminiamo i diversi tipi di server DNS. In particolare abbiamo:
- Servers primari: sono servers principali, responsabili della gestione delle informazioni relative ad una determinata zona (di autorità).
- Servers secondari: servers utilizzati per realizzare la ridondanza delle informazioni conservate dai server primari. Un server secondario conserva una copia delle informazioni presenti sul name server primario, informazioni ottenenute attraverso una operazione denominata “trasferimento di zona” o “zone transfer”. I servers secondari sono utilizzati, quindi, principalmente come server di backup da utilizzare nel caso in cui il server primario sia non disponibile e svolgono anche una funzione di bilanciamento del carico nel caso in cui si debba far fronte ad un numero eccessivo di richieste. A fronte di un server primario, è possibile avere diversi servers secondari.
- Servers di cache: sono servers la cui funzione principale è migliorare l’efficienza nella risoluzione dei nomi di dominio. Essi sono molto utilizzati all’interno di reti LAN e memorizzano le risposte ottenute da altri servers DNS in un’apposita cache, per il successivo utilizzo. Questa cache, si riempie progressivamente, sicché, dopo un certo tempo di utilizzo, il maggior numero di nomi di dominio sia risolvibile senza far capo ad altri server DNS, abbreviando progressivamente i tempi di attesa per la risoluzione.
Bisogna fare una considerazione di carattere strategico: dato che dalla velocità di risoluzione dei nomi di dominio dipende l’efficienza dell’intera rete, il servizio di DNS è stato progettato per utilizzare principalmente il protocollo UDP (porta 53), caratterizzato da una semplicità intrinseca, tipica dei protocolli connection-less. Tuttavia, per i trasferimenti di zona, esso si appoggia al protocollo TCP, più affidabile. In questi casi, infatti, è necessaria la garanzia che i dati trasferiti non vengano alterati durante la copia presso i name server secondari.
Tra le informazioni contenute in un messaggio DNS, assume particolare importanza il “Resource Record” o record di risorsa (RR), il quale descrive il contenuto del messaggio stesso. Un name server può infatti inviare messaggi di diverso tipo, a seconda delle interrogazioni che esso riceve. Di seguito indichiamo i RR principali, con il relativo significato:
A = (Address) indirizzo IP corrispondente al nome di dominio richiesto al DNS;
SOA = (Start Of Authority) informazioni sull’autorità per il dominio richiesto;
MX = (Mail eXchange) Host utilizzato come centrale postale per il dominio;
CNAME = (Canonical NAME) definisce un alias da utilizzare nell’ambito del dominio;
NS = (Name Server) nome del server di autorità per il dominio;
TXT = (TeXT) Testo arbitrario, utilizzato per fornire ulteriori informazioni;
PTR = (PoinTeR) puntatore utilizzato nella risoluzione inversa, che permette di ottenere, da un indirizzo IP, il nome di dominio corrispondente.
I Resource Records sono un elemento molto importante, nell’ambito del funzionamento del DNS. Essi permettono, ad esempio, di distinguere se un server ha restituito una risposta contenente l’indirizzo di un nome risolto (tipo A) oppure se tale risposta contiene il nome di un altro server responsabile di una specifica zona (tipo NS), al quale va inoltrata la richiesta. Inoltre, offrono all’amministratore la possibilità di creare più alias di uno stesso nome o di fornire informazioni supplementari che non riguardano direttamente la risoluzione degli indirizzi (es: il tipo TXT).
Due parole, in particolare, vanno spese per il tipo PTR: il DNS, oltre a consentirci di risalire, partendo dal nome di dominio, ad uno specifico indirizzo IP, ci permette di effettuare l’operazione inversa, cioè, conoscendo l’indirizzo IP, possiamo ottenere il relativo nome di dominio. A tal fine, il Domain Name System prevede un dominio speciale, denominato “.in-addr.arpa” (in-addr come internet address, arpa come ARPANet, la rete dalla quale è nata Internet), il quale può essere utilizzato, in abbinamento con un indirizzo IP o con parte di esso, per ottenerne il nome di dominio corrispondente. Ad esempio, se vogliamo ottenere il nome corrispondente all’indirizzo 192.0.34.161, possiamo interrogare il nostro name server (tramite utility di querying DNS come dig o nslookup) chiedendo di risolvere “161.34.0.192.in-addr.arpa“ e ottenendo il nome di dominio “www.internic.net”. Notiamo come l’indirizzo IP debba essere indicato nella forma inversa, ovvero dall’ottetto meno significativo al più significativo (allo stesso modo dei nomi di dominio, che vanno dal nome più specifico al più generico).
Voglio anche io il mio nome di dominio!!!
Dopo esserci soffermati sugli aspetti teorici dell’argomento, concludiamo vedendo come si ottiene un nome di dominio, ad esempio, per il nostro nuovo portale web, oppure perché vogliamo proiettare la parte pubblica della nostra rete su Internet e vogliamo che essa sia raggiungibile dall’esterno.
Possiamo utilizzare i DNS del nostro provider, delegando ad esso l’onere delle pratiche burocratiche necessarie alla registrazione del nuovo nome di dominio, oppure possiamo decidere di gestire il nostro server DNS in autonomia. Se optiamo per quest’ultima scelta, allora dobbiamo rivolgerci direttamente alla Registration Autority (RA) competente, a seconda del dominio TLD sotto il quale vogliamo inserire il nostro nome. Le Registration Autorities sono coordinate da un’istituzione “super-partes” che è l’I.A.N.A. (Internet Assigned Numbers Authority). Dalla pagina http://www.iana.org/cctld/cctld-whois.htm è possibile raggiungere i links delle diverse RAs, relative ai domini TLD di tutto il mondo.
Per il dominio .it, ad esempio, è responsabile la Registration Autority Italiana raggiungibile all’indirizzo http://www.nic.it/RA/. Se desideriamo un dominio nel TLD .it, dobbiamo effettuare la registrazione del nome presso la RA Vedremo, nei successivi articoli quali sono i pre-requisiti tecnici per ottenere la registrazione del proprio nome di dominio.
Concludendo…
L’amministrazione del DNS non è cosa semplice, a volte può risultare piuttosto insidiosa. Tuttavia, dopo aver compreso i concetti che stanno alla base del suo funzionamento, non si dovrebbero avere grosse difficoltà a soddisfare anche esigenze di una certa portata.
Naturalmente, una trattazione su uno dei servizi più “anziani” di Internet non può certamente esaurirsi in queste righe, che tuttavia possono essere il punto di partenza per un’analisi più approfondita dell’argomento (vedi alla fine del tutorial).
Nel corso dei successivi articoli, vedremo insieme come implementare il servizio di DNS con GNU/Linux, esaminando gli aspetti della configurazione di un name server di cache, primario e secondario, attraverso l’impiego del pacchetto BIND ed affrontando problematiche specifiche come, ad esempio, la sicurezza.
Per ulteriori approfondimenti sugli argomenti trattati in queste pagine, consigliamo la lettura delle principali RFCs (Requests For Comment):
· 819 “The Domain Convention for Internet User Applications”
· 1034 “Domain Names — Concepts and Facilities”
· 1035 “Domain Names — Implementation and Specification”
· 1591 “Domain Name System Structure and Delegation”
Inoltre, di seguito segnaliamo alcuni links di interesse:
· http://www.noc.garr.it/docum/corsi/CorsoDNS.pdf
Per chi, invece, desiderasse dedicarsi alla lettura di un buon libro, affrontando anche altre tematiche riguardanti le reti, consigliamo:
· “Internetworking con TCP/IP” vol.1 – Douglas Comer – Ed. Addison-Wesley - 2002
Questo articolo è stato realizzato insieme ad un mio grandissimo amico nonché appassionato di software Open-Sources e di Linux in particolare, che ora vedo un pò meno, perché si è maritato e vive lontanuccio, ma che vorrei salutare e ringraziare in queste pagine.
Grazie, Claudio!














Agosto 10th, 2007 at 15:27
[…] http://www.space4tutorial.com/2007/07/31/il-dns-domain-name-system-guida-teorica/ […]
Agosto 22nd, 2007 at 08:43
Grazie, questa guida al dns è molto ben curata e finalmente ho capito come funziona la conversione dei nomi in indirizzi ip, che di solito l’interrogazione è spiegata coi piedi. Continua così!
Marzo 23rd, 2008 at 07:39
grazie anche da parte mia …..
finalmente ho trovato una guida che mi esaurisce molti dubbi…
Marzo 23rd, 2008 at 12:12
Grazie 1000!
La soddisfazione di un blog è la soddisfazione dei suoi lettori!