DNS – Domain Name System

DNS – Domain Name System

Il Protocollo DNS è un sistema utilizzato per assegnare dei nomi mnemonici agli host di una rete, in modo da evitare di dover ricordare a memoria i loro indirizzi IP. Ad ogni indirizzo IP vengono quindi assegnati uno o più nomi alfanumerici, utilizzati per accedere alle risorse messe a disposizione dell’host remoto. Le risorse dell’host remoto saranno quindi rese disponibili tramite un nome che a sua volta andrà ad inoltrare la richiesta ad un indirizzo IP e numero di porta, mediante una chiamata detta “risoluzione” del DNS. In pratica la risoluzione DNS è la conversione da nome di dominio ad indirizzo IP, e viene operata interrogando il database dei server DNS. All’inverso la conversione da indirizzo IP a nome di dominio è detta risoluzione inversa. Il servizio DNS è realizzato quindi tramite un enorme database distribuito, costituito appunto dai Server DNS. Effettua più o meno lo stesso servizio di una rubrica telefonica di un cellulare, associando quindi ad ogni numero di telefono un nome.

Il DNS ha una struttura gerarchica ad albero rovesciato ed è suddiviso in “domini”. Ad ogni dominio corrisponde un Nameserver, che conserva un database con le informazioni di alcuni domini dei quali è responsabile, mentre si rivolge ai nodi successi quando deve trovare delle informazioni relative ad altri domini. Ogni nome di dominio termina con un carattere “.”. La stringa che segue il punto è chiamata “dominio radice” o DNS Root Zone. I Server responsabili del dominio radice si chiamano Root Nameserver. Essi possiedono l’elenco dei Server autoritativi di tutti i domini di primo livello (TLD: Top Level Domain) e lo forniscono in risposta a ciascuna richiesta. I Root Nameserver sono attualmente 13 in tutto il mondo: 10 negli USA, 2 in Europa e uno in Giappone. Il DNS delega la responsabilità di effettuare la mappatura tra indirizzi IP e relative risorse e nomi di dominio utilizzando i Root Nameserver autoritativi per quel dominio, mentre gli amministratori di rete possono delegare l’autorità di mappare i sottodomini ad altri nameserver. Questo meccanismo fornisce un sistema distribuito fault tolerant ed evita che si generi un database di enormi dimensioni.

Il protocollo DNS specifica anche le modalità tecniche di funzionamento del database che lo costituisce, definendo una specifica dettagliata delle strutture dati  e delle modalità di comunicazione che fanno parte integrante del protocollo TPC/IP.

Internet mantiene due principali namespace: la gerarchia dei nomi di dominio e lo spazio degli indirizzi IP. Il DNS mantiene la gerarchia dei nomi di dominio e fornisce servizi di traduzione/mappatura tra di essa e lo spazio degli indirizzi IP. Un server DNS è quindi un server che memorizza i record DNS per un dominio; un server dei nomi DNS risponde alle richieste sul suo database, restituendo indirizzi in corrispondenza di una query basata su un nome.

In pratica, il DNS è un registro universale cioè un database distribuito, con una struttura gerarchica, che archivia i nomi mnemonici di dominio e la loro associazione ai relativi indirizzi IP specifici.

Utilizzi

I vantaggi di un tale sistema sono i seguenti:

  • La possibilità di attribuire un nome testuale, più facile da memorizzare, ad un server, anziché doverlo raggiungere tramite il suo indirizzo IP.
  • La possibilità di attribuire più nomi allo stesso indirizzo IP e viceversa per rappresentare diversi servizi o funzioni messe a disposizione da un unico server. Questa caratteristica risulta molto utile in numerosi casi:
    • Nel caso in cui si debba sostituire il server che ospita un servizio, o si debba modificare il suo indirizzo IP, è sufficiente modificare il record DNS, senza dover intervenire sul client.
    • Utilizzando nomi diversi per riferirsi a diversi servizi di uno stesso server (e registrati quindi tutti con lo stesso indirizzo IP) è possibile all’occorrenza spostare una parte dei servizi su un altro host (con diverso indirizzo IP). Modificando quindi sul server DNS i record dei nomi associati ai servizi da spostare e registrando il nuovo IP al posto di quello vecchio, si otterrà lo spostamento automatico delle nuove richieste di tutti i client su questo nuovo host, senza interruzione dei servizi.
    • Possibilità di gestire i Virtual Hosts, ovvero una tecnica che permette ai Web Server di gestire più servizi e più siti web da una sola interfaccia di rete con un singolo indirizzo IP, utilizzando l’indirizzo alfanumerico del sito web desiderato per identificare su quale virtual host inoltrare la richiesta.
    • Associando ad uno stesso nome più indirizzi IP è possibile realizzare una struttura load balancing e fault tolerance, distribuendo le richieste su più server.
  • La risoluzione inversa è utile per identificare l’identità di un host o per leggere il risultato di un traceroute.
  • Il DNS viene utilizzato in maniera del tutto trasparente all’utente e permette di organizzare in maniera più efficiente le informazioni necessarie al funzionamento di un determinato servizio.

Nomi di dominio

Un nome di dominio è costituito da una serie di stringhe separate dal carattere “.” e organizzate a livelli. A differenza degli indirizzi IP, dove la parte più importante è la prima cifra partendo da sinistra, nei nomi a dominio del protocollo DNS la parte più importante è quella di destra.

La parte destra infatti si chiama TLD, o Top Level Domain, detta anche estensione (.it, .com, etc).

A sinistra del “.” che precede l’estensione TLD si trova il dominio di secondo livello, spesso formato da una parola a scelta (se disponibile per quella particolare estensione TLD).

Ancora più a sinistra troviamo il dominio di terzo livello, ad esempio il WWW.

Record DNS

Un record DNS è un valore che corrisponde ad una determinata informazione per un dato dominio. Esistono differenti tipi di record impiegati a seconda dei servizi che si vogliono utilizzare. Vediamo i più comuni:

  • Record A: indica la corrispondenza tra un nome a dominio ed un indirizzo IPv4 a 32 bit, o anche più indirizzi IP, infatti possono esistere più Record A per ogni dominio. Il record A è quindi utilizzato per collegare un nome host ad un indirizzo IP.
  • Record AAAA: è l’equivalente del Record A ma utilizzato con gli indirizzi IPv6. Se interrogato restituisce quindi un IPv6 a 128 bit anziché un IPv4 a 32 bit come il Record A.
  • Record MX (Mail eXchange): indica quali server gestiscono la posta elettronica per un determinato dominio. Non necessariamente, infatti, un dominio gestisce anche le caselle di posta elettronica con la sua estensione, ma tale compito può essere demandato ad un server esterno, identificato appunto dai record MX. Possono esistere più record MX per ogni dominio, ed in questo caso esiste un campo che indica la precedenza di un record rispetto ad un altro.
  • Record SRV: si utilizzano per identificare un determinato servizio offerto dal server all’interno di un dominio. Possono essere considerati una generalizzazione dei record MX.
  • Record CNAME: Permettono di collegare un nome DNS ad un altro e sono quindi utilizzati per creare un alias, ovvero per fare in modo che lo stesso host sia noto con più nomi. Questo Record è molto utile per gestire più servizi con lo stesso nome offerti da uno stesso server, ad esempio quando su un singolo server sono disponibili i servizi FTP, HTTP, ect. Utilizzando il CNAME i servizi, all’occorrenza, possono essere spostati su altri host senza dover riconfigurare i client, ma modificando solo il DNS.
  • Record PTR: si utilizza per la risoluzione inversa, ovvero per far corrispondere ad un indirizzo IP il corrispondente nome a dominio.
  • Record TXT: si usano per associare dei campi di testo arbitrario ad un dominio e vengono utilizzati per scopi molto diversi, ad esempio per contenere una descrizione informativa sul dominio stesso oppure per verificare la titolarità del dominio stesso o per realizzare altri servizi particolari. Oggi viene usato per lo più per trasmettere informazioni di sicurezza utilizzati dai server di invio e ricezione della posta elettronica.

Altri record sono più particolari e sono necessari al funzionamento del database distribuito:

  • Record NS: questo particolare record si utilizza per indicare quali siano i server DNS autoritativi per un certo dominio, ovvero per delegarne la gestione.
  • Record SOA (Start of Authority): usato per la gestione delle zone DNS e per rilasciare informazioni circa il server DNS principale del dominio. Il suo valore si utilizza anche per verificare se ci sono state variazioni nei dati della zona e per gestire diversi timer che regolano la frequenza di trasferimento e la durata di validità degli altri record.

Time to Live

Dal momento che i record associati ad un certo nome a dominio possono variare i loro valori nel tempo, il protocollo DNS introduce il parametro TTL, ovvero Time to Live, che indica per quanto tempo il valore di un determinato record DNS può essere memorizzato in un sistema di cache, in modo da essere risolto più velocemente senza la necessità di effettuare una nuova interrogazione ai server autoritativi. Quando un server risponde ad una richiesta con un record prelevato dalla propria cache DNS, assegnerà alla risposta il TTL residuo per avvisare il richiedente del tempo di validità restante per quel determinato record. Se il record originario aveva un TTL di 12 ore, e un server risponde ad una richiesta con un dato che ha ottenuto due ore prima, nella risposta metterà come TTL il valore di 10 ore. Il TTL, tuttavia, si misura in secondi.

Figura 33: Sequenza di risoluzione DNS
Figura 33: Sequenza di risoluzione DNS

Realizzazione DNS

I DNS realizzano un namespace gerarchico in modo da consentire ad una parte del namespace, detto “zona”, di essere delegato da un nameserver ad un altro che si trova più in basso nella gerarchia. In questo modo di ottiene un sistema più flessibile e fault tolerante.

I nomi di dominio di secondo livello non possono superare i 63 caratteri e il nome complessivo non può superare i 255 caratteri, oltre a non poter utilizzare tutti i caratteri ASCII ma solo un loro sottoinsieme (niente accenti né segni di interpunzione).

Zone, deleghe e repliche

Un Resource Record Set (RRS) o Zona DNS è un sottoalbero del DNS amministrato separatamente, ovvero una parte del namespace, costituita da un dominio e dai suoi sottodomini che non sono a loro volta delegati, che si trova sotto una stessa gestione amministrativa e quindi è gestita da uno o più server. La gestione di una Zona DNS è delegata dalla zona superiore tramite i record NS. Un Record NS che amministra un RRS, ovvero che amministra una Zona DNS, è detto Record NS Autoritativo.

Essendo quindi ogni sottoalbero una Zona (RRS), ogni singolo dominio possiede necessariamente un NS autoritativo. Ad esempio, per la zona “.it” ci sarà una delega per la zona “il-mio-ip.it” affidata ai server DNS che la gestiscono. Ogni Zona solitamente è replicata su più server NS per garantire la ridondanza, infatti ogni dominio ha almeno un Record NS primario e un Record NS secondario (detti anche Master e Slave): quello primario gestisce il database, ovvero i record veri e propri, mentre il secondario effettua una semplice copia del primo a scopo di ridondanza. I diversi server delegati per una zona, quindi, devono contenere le stesse informazioni in modo da rispondere correttamente, e allo stesso modo, ad una stessa query DNS.

Per tenere traccia delle diverse versioni di una Zona DNS, ed i particolare per fare in modo che il record secondario decida o meno di replicare le informazioni del record primario, si utilizza il valore del record SOA, che è una sorta di numero di serie. Ogni record inferiore al primario effettua un’interrogazione del record SOA e confronta il valore contenuto nel Record NS primario con il proprio. Se il valore del SOA primario è superiore al proprio allora effettua la copia, che può essere completa (tutti i record) o incrementale (si copiano solo i record modificati). Ad ogni modifica del NS primario il valore del record SOA viene incrementato di una unità. Ricordiamo che la root dell’albero dei nomi DNS è la zona “.”, gestita da un insieme di server detti appunto Root Server.

Figura 34: Domain Name Space
Figura 34: Domain Name Space

Risoluzione tramite iterazione e ricorsione

La risoluzione DNS di un nome a dominio si compone delle seguenti fasi:

  1. Il Client (ad esempio un browser) interroga il DNS, chiedendo di ottenere l’indirizzo per un dominio;
  2. Il DNS restituisce al Cliente il record corrispondente al dominio richiesto;
  3. Il Client si connette all’indirizzo contenuto nel record.

Esistono tuttavia due tipi di query DNS: iterazione e ricorsione.

Iterazione

Con l’iterazione per ottenere la risoluzione di un nome è necessario partire dalla radice, interrogare uno dei Root Server del dominio di primo livello, ottenere quindi il server che lo gestisce, interrogare il server di secondo livello a sua volta, fino a raggiungere il server autoritativo del nome a dominio desiderato. Questa tecnica prende il nome di iterazione. Vediamo i passaggi in dettaglio

  1. Il Client chiede al Local NS l’indirizzo del dominio;
  2. Il Local NS interroga il Root NS per ottenere l’indirizzo del NS autoritativo per il TLD del dominio;
  3. Il Local NS interroga il TLD NS per l’indirizzo dell’NS autoritativo per il dominio richiesto;
  4. Il Local NS interroga il NS autoritativo per il dominio, per ottenere l’indirizzo della risorsa richiesta;
  5. Il Local NS restituisce l’indirizzo trovato al Client, che potrà quindi raggiungere la destinazione;

in pratica è il Local NS che si occupa di interrogare in maniera iterativa tutti i NS che sono coinvolti nella query. Dopo ogni singola interrogazione è sempre il Local NS che si occupa di interrogare il NS successivo, fino a giungere al NS autoritativo.

Ricorsione

Nella risoluzione DNS ricorsiva il Client effettua una richiesta al Root Server, il quale la inoltra al TLD server, il quale a sua volta la inoltra al server autoritativo e così via fino a raggiungere il server desiderato. La risposta DNS procede quindi in senso inverso fino a raggiungere il client che aveva fatto la richiesta.

  1. Il Client chiede al Local NS l’indirizzo del dominio;
  2. Il Local NS delega la richiesta al Root Server NS;
  3. Il Root Server NS delega la richiesta al TLD NS;
  4. Il TLD NS interroga il NS Autoritativo per il dominio in questione;
  5. Il NS autoritativo rimanda il record al TLD NS. Il record viene passato tra tutti i NS coinvolti, fino al Local NS;
  6. Il Local NS restituisce l’indirizzo al Client, che potrà raggiungere la destinazione;

in questo modo quindi ogni NS interroga il successivo.

Local NS

Il Local NS (o anche Default NS) è il nameserver che viene assegnato di default dall’ISP del Client. È possibile cambiarlo impostando manualmente l’indirizzo dei nameserver desiderati solitamente nelle impostazioni della scheda di rete, o dal gateway. Ad esempio, Google mette a disposizione i suoi Public DNS (8.8.8.8, 8.8.4.4) che sono quindi dei Local NS che effettuano query DNS in modalità iterativa.

Risolutore DNS del client

Il Local NS restituisce comunque un record al client, il cui valore viene estrapolato attraverso il risolutore DNS del client. Il risolutore DNS locale, infatti, può essere configurato (generalmente è così di default) per porre i record ricevuti in cache, per ottimizzare le future connessioni agli stessi host. Oltre alla propria cache DNS, il client possiede anche una propria mappatura tra nomi di dominio e indirizzi IP – il file degli hosts – che può essere facilmente modificato dagli utenti. Riassumendo, quindi, il client prima controlla il file degli hosts, poi la propria cache e, infine (se non trova il dominio) interroga il Local NS.

Caching

Per risparmiare il tempo necessario ad effettuare l’iterazione o la ricorsione alcuni Server memorizzano i risultati delle Query in una cache per un determinato periodo di tempo, implementando quindi la funzione di Cache DNS.

Formato messaggi DNS

Figura 35: Formato messaggio DNS
Figura 35: Formato messaggio DNS

Il protocollo DNS utilizza due tipi di messaggi: le query e le risposte, ed entrambi i tipi di messaggio hanno lo stesso formato. Ogni messaggio è costituito da un’intestazione e da 4 sezioni.

L’intestazione (header) è formata come segue:

  • Identificazione
  • Flag (Parametri)
  • N° di domande
  • N° di risposte
  • N° di Authority
  • N° di informazioni aggiuntive

Il campo di intestazione chiamato Flag controlla il contenuto delle quattro sezioni. Ciascun campo è lungo 16 bit e viene visualizzato nell’ordine indicato. Il campo di identificazione viene utilizzato per abbinare le risposte alle domande.

Le quattro sezioni sono le seguenti:

  • Sezione domande
  • Sezione risposte
  • Sezione Authorithy
  • Sezione informazioni aggiuntive

Il campo flag è costituito da sottocampi come segue:

CampoDescrizioneBit
QRIndica se il messaggio è una query (0) o una risposta (1)1
OPCODEIl tipo può essere QUERY (query standard, 0), IQUERY (query inversa, 1) o STATUS (richiesta di stato del server, 2)4
AARisposta autorevole, in una risposta, indica se il server DNS è autorevole per il nome host richiesto1
TCTruncation, indica che questo messaggio è stato troncato a causa della lunghezza eccessiva1
RDRicorsione desiderata, indica se il client intende una query ricorsiva1
RARicorsione RA Disponibile, in una risposta, indica se il server DNS di risposta supporta la ricorsione1
ZZero, riservato per uso futuro3
RCODECodice di risposta, può essere NOERROR (0), FORMERR (1, Errore di formato), SERVFAIL (2), NXDOMAIN (3, Dominio inesistente), ecc4

DNS Dinamico (DDNS)

Il DNS dinamico è una tecnologia che permette di inserire automaticamente in una zona DNS degli indirizzi IP relativi ad host che ottengono indirizzi non predefiniti, o i cui indirizzi per diversi motivi possono variare spesso: è il caso di un ISP che assegna ad una connessione un indirizzo IP pubblico dinamico tramite DHCP o PPP. A tale scopo sono state definite delle query DNS di “UPDATE”. Esistono appositi software, i client DNS, sia a livello applicazione che all’interno dei router, che permettono di utilizzare un servizio di DDNS.

DNS Security Extensions (DNSSEC)

Inizialmente il protocollo DNS era del tutto privo di un sistema di cifratura, e poneva quindi diversi problemi di sicurezza. È stato quindi implementato il protocollo DNSSEC per introdurre il supporto alla crittografia, introducendo nuovi specifici record. Il DNSSEC utilizza una crittografia a chiave pubblica e dei certificati digitali.