Il DNS (Domain Name System) è un insieme di tecnologie gestite con il paradigma client/server, per la risoluzione di nomi di dominio in indirizzi IP (e viceversa).
È realizzato tramite un database gerarchico, distribuito su diversi Name Server (NS).

Stiamo al livello applicazione dello stack TCP/IP, quindi più precisamente possiamo dire che il DNS è costituito da un programma in esecuzione su tutti i client che intendono usarlo, che comunica con dei server DNS tramite UDP su porta 53.

Con il DNS è possibile assegnare uno o più nomi, ad uno o più indirizzi IP.

Cos'è un dominio?

Un nome di dominio identifica una risorsa (o più), ed è rappresentato da una stringa composta da parti separate da un punto.
La parte più significativa è la prima partendo da destra, ed è chiamata TLD (Top Level Domain).
Il numero di suddivisioni della stringa, definisce il livello del dominio; ad esempio: 5th.4th.3rd.2ns.1st.

Dominio Livello
miosito.com 2
it.miosito.com 3
mail.google.com 3
admin.it.miosito.com 4

Resource Record Sets (Zone)

Ritroviamo la struttura a livelli dei domini, nella gerarchia del DNS.
Un RRSet (Resource Record Set o Zona) è un sottoalbero del DNS amministrato separatamente.

Zone del DNS

Il NS che amministra un RRSet è detto autoritativo. Essendo, quindi, ogni sottoalbero un RRSet, ogni singolo dominio possiede un NS autoritativo.

Tipi di NS

Essenzialmente esistono due tipi di NS:

  • Primario: gestisce il database (aggiunta ed eliminazione dei record);
  • Secondario: copia del primo (replicazione).

Che, a loro volta, possono anche ricoprire tre ruoli:

  • Caching: copia temporanea di alcuni Resource Record;
  • Forwarding: interroga ricorsivamente altri NS;
  • Stealth: autoritativo, ma invisibile per le query.

Resource Records

All'interrogazione del client, il NS può rispondere con uno o più tipi di record, a seconda della risorsa richiesta. I principali tipi di RR (Resource Records) sono i seguenti, i cui valori si riferiscono al dominio interessato alla query:

Tipo RR Valore contenuto
A IPv4 associato al dominio
AAAA IPv6 associato al dominio
MX (Mail eXchange) Server SMTP
CNAME Alias canonico
TXT Testo
PTR Puntatore (per reverse lookup)
HINFO Info HW/SW del server
NS IPv4 altro NS (utilizzato anche per delegazione query)
SOA (State Of Authority) IPv4 NS autoritativo per il dominio

Formato di un Resource Record

RR (dominio, TTL, classe, tipo, valore)

  • Dominio: dominio richiesto;
  • TTL: Time To Live, ovvero il tempo (in secondi) entro cui il record è valido;
  • Classe: è sempre IN, ovvero Internet;
  • Tipo: tipo di RR;
  • Valore: valore contenuto nel RR.

È possibile visualizzare i risultati di una query DNS con il comando nslookup.
Per esempio questo è ciò che attualmente spunta fuori eseguendo nslookup (in Windows), per il dominio wikipedia.org:

Tipo RR Valore contenuto
A 91.198.174.192
AAAA 2620:0:862:ed1a::1
NS ns1.wikimedia.org ns2.wikimedia.org
SOA ns0.wikimedia.org
MX priority: 10, polonium.wikimedia.org priority: 50, lead.wikimedia.org
TXT google-site-verification=AMHkgs-4ViEvIJf5znZle-BSE2EPNFqM1nDJGRyn2qk

La sintassi di nslookup in Windows è: nslookup -querytype=<tipo> dominio.

Risoluzione dei nomi

Genericamente, la risoluzione DNS si compone di queste fasi:

  1. Il client interroga il DNS, chiedendo l'indirizzo per un dominio;
  2. Il DNS restituisce il record;
  3. Il client si connette all'indirizzo contenuto nel record.

Più dettagliatamente, sono presenti più passaggi prima di ottenere l'indirizzo IP, ed esistono due tipi di query DNS.

Risoluzione Iterativa

DNS: Risoluzione Iterativa

  1. Il client chiede al Local NS l'indirizzo del dominio;
  2. Il Local NS interroga il Root NS, per l'indirizzo del NS autoritativo per il TLD del dominio;
  3. Il Local NS interroga il TLD NS, per l'indirizzo del NS autoritativo per il dominio richiesto;
  4. Il Local NS interroga il NS autoritativo per il dominio, per l'indirizzo della risorsa richiesta;
  5. Il Local NS restituisce l'indirizzo al client, che raggiunge la destinazione.

Il poche parole, è il Local NS che si occupa di interrogare iterativamente, tutti i NS che saranno coinvolti.
Dopo ogni singola interrogazione, sempre il Local NS interroga il NS successivo, fino all'autoritativo.

Risoluzione Ricorsiva

DNS: Risoluzione Ricorsiva

  1. Il client chiede al Local NS l'indirizzo del dominio;
  2. Il Local NS delega la richiesta al Root NS;
  3. Il Root NS delega la richiesta al TLD NS;
  4. Il TLD NS interroga il NS autoritativo per il dominio;
  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 restiruisce l'indirizzo al client, che raggiunge la destinazione.

I NS sono interrogati ricorsivamente. Ogni NS coinvolto, interroga il successivo, che interrogerà quello successivo ancora.

Tra client e Local NS

Cos'è il Local NS

Il Local NS (o anche Default NS) è il nameserver che è assegnato di default dall'ISP del client. È possibile cambiarlo impostando manualmente l'indirizzo dei nameserver desiderati, o attraverso le impostazioni della scheda di rete, o dal gateway.

Google Public DNS (8.8.8.8, 8.8.4.4), ad esempio, è un Local NS che esegue query in maniera 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 salvare in cache i record ricevuti, per ottimizzare le future connessioni agli stessi host.

Oltre alla propria cache DNS, il client possiede anche una propria mappatura "statica" tra nomi di dominio e indirizzi IP – il file degli hosts – che può essere facilmente modificato dagli utenti.

Riassumento, quindi, il client prima controlla il file degli hosts, poi la propria cache e, infine (se non trova il dominio) interroga il Local NS.

Per qualsiasi domanda, chiarimento, o semplice curiosità, c'è lo spazio dei commenti proprio qui sotto 🙂