129 lines
8.7 KiB
Markdown
129 lines
8.7 KiB
Markdown
# Domain Name System (DNS)
|
|
|
|
Il Domain Name System o `DNS` è un protocollo del livello applicativo (layer 7) nel modello ISO/OSI (layer 5 nel modello TCP/IP). Utilizza il protocollo UDP a livello di trasporto ed è associato alla *well-know port 53*.
|
|
|
|
La funzione principale del DNS è quella di tradurre i nomi di dominio in indirizzi IP, facilitando così la navigazione degli utenti. Oltre a questa funzione principale, il DNS offre anche altre due importanti caratteristiche:
|
|
|
|
- **Aliasing**: consente di creare alias per un dominio principale (ad esempio, per il dominio *miosito.com*, è possibile avere alias come *blog.miosito.com*)
|
|
- **Load Balancing**: il DNS può anche fungere da bilanciatore di carico. Quando un client richiede l'indirizzo IP di un web server, il DNS può inviare la richiesta a un server specifico in base al carico di lavoro attuale, smistando così le richieste tra più indirizzi IP associati allo stesso dominio
|
|
|
|
## Gerarchia DNS
|
|
|
|
Quando il processo di risoluzione DNS viene avviato, si seguono diversi passaggi per ottenere l'indirizzo IP associato a un nome di dominio.
|
|
|
|
Il primo passo consiste nell'interrogare la **memoria locale del dispositivo**, la quale può contenere sia entry manuali inserite dall'utente sia informazioni precedentemente risolte e memorizzate nella cache.
|
|
|
|
### DNS Resolver locale
|
|
|
|
Se l'informazione non è presente nella memoria locale, il sistema si rivolge al *DNS resolver locale*, che può essere:
|
|
|
|
- un server DNS configurato localmente sulla macchina o sul proprio router
|
|
- un server DNS locale nella LAN
|
|
- un server DNS fornito dal proprio Internet Service Provider (`ISP`)
|
|
|
|
### Server DNS root
|
|
|
|
Se il resolver locale non riesce a fornire la risposta, la richiesta viene inoltrata ai `server DNS root`, che rappresentano *il primo livello della gerarchia DNS*. Non contengono informazioni specifiche sui nomi di dominio, ma il loro compito principale è quello di indirizzare la risoluzione verso i server dei **Top Level Domain** (`TLD`), che si trovano al *secondo livello della gerarchia*. Questi server gestiscono i domini di primo livello, come ad esempio `.com`, `.org`, ecc.
|
|
|
|
### Server TLD
|
|
|
|
I `server TLD` ricevono la richiesta e, a loro volta, indirizzano il resolver verso i server DNS autoritativi per il dominio specifico richiesto.
|
|
|
|
### Server DNS Autoritativi
|
|
|
|
Infine, al terzo livello della gerarchia, ci sono i `server DNS autoritativi`. Questi server contengono le informazioni definitive riguardanti il dominio richiesto e sono gestiti dal proprietario del dominio o da un ente di fiducia a cui il proprietario si affida. Solo questi server possono fornire la risposta finale, ovvero l'indirizzo IP associato al nome di dominio.
|
|
|
|

|
|
|
|
## Risoluzione DNS
|
|
|
|
La risoluzione DNS può avvenire attraverso due modalità principali:
|
|
|
|
- `Interattiva`: nella modalità interattiva, il DNS resolver locale richiede direttamente l'informazione a ciascun livello della gerarchia DNS, partendo dal server DNS root fino ai server autoritativi. Questo approccio presenta diversi vantaggi in termini di sicurezza. Il resolver locale quindi:
|
|
- invia richieste ai server DNS root per ottenere indicazioni sui server TLD appropriati
|
|
- prosegue a interrogare i server TLD per ottenere informazioni sui server autoritativi specifici del dominio richiesto
|
|
- contatta i server autoritativi per ottenere l'indirizzo IP associato al nome di dominio
|
|
- `Ricorsiva`: nella modalità ricorsiva, il resolver locale delega la responsabilità di trovare l'informazione a altri server DNS, partendo dal server DNS root di primo livello. Questo processo continua in modo ricorsivo, con ogni server che fornisce indicazioni al successivo, fino a quando il resolver non ottiene la risposta finale
|
|
|
|
## Zona DNS
|
|
|
|
Una zona DNS è una sottosezione della gerarchia DNS che comprende un insieme di server DNS responsabili di un determinato dominio e dei suoi sottodomini. Questa zona contiene tutte le informazioni relative ai nomi di dominio e ai relativi `Resource Records` (RR).
|
|
|
|
Il `namespace` di una zona DNS è l'insieme completo di tutte le informazioni contenute in quella zona. Ogni zona DNS ha un server DNS autoritativo, che è responsabile di fornire informazioni accurate e aggiornate sulla zona stessa.
|
|
|
|
## Records DNS
|
|
|
|
I `Resource Records` (RR) o records DNS sono informazioni strutturate in quattro macro campi: (`nome, tipo, valore, TTL`). Esistono diversi tipi di record DNS, ognuno con uno scopo specifico:
|
|
|
|
- `Tipo A` (Address Record): associa un nome di dominio a un indirizzo IPv4, un processo noto come `DNS lookup`. Ad esempio, `(www.sito.com,A,X.X.X.X,100)`
|
|
- `Tipo AAAA` (Address Record): simile al tipo A, ma associa un nome di dominio a un indirizzo IPv6
|
|
- `Tipo MX` (Mail Exchange Record): indica il server di posta autorizzato a ricevere email per un dominio `(www.gmail.com,MX,smtp.gmail.com,100)`
|
|
- `Tipo CNAME` (Canonical Name Record): associa un nome di dominio canonico a un alias `(www.sito.com,CNAME,blog.sito.com,100)`
|
|
- `Tipo NS` (Name Server Record): identifica i server responsabili per una zona di dominio (detti `name server`), mappando il dominio al nome di un ns `(www.sito.com,NS,ns1.dnsprovider.com,100)`
|
|
- `Tipo PTR` (Pointer Record): utilizzato per la `reverse DNS lookup`, associa un indirizzo IP a un nome di dominio `(152.152.142.12.in-addr.arpa,PTR,www.sito.com,100)`
|
|
- `Tipo SOA` (Start of Authority): fornisce informazioni amministrative sulla zona DNS, inclusi i server autoritativi. Un esempio di record SOA:
|
|
|
|
```txt
|
|
@ IN SOA ns.example.com. admins.siteground.com. (
|
|
2022010101 ; Serial
|
|
86400 ; Refresh
|
|
7200 ; Retry
|
|
3600000 ; Expire
|
|
86400 ; Minimum TTL
|
|
)
|
|
```
|
|
|
|
- `Tipo TXT`: Associa una stringa di testo a un dominio. I record TXT sono spesso utilizzati per configurazioni relative alla posta elettronica, come SPF, DKIM e DMARC, per migliorare la sicurezza e l'autenticità delle comunicazioni email
|
|
|
|
## Pacchetto DNS
|
|
|
|
Il pacchetto DNS è costituito da diverse componenti, alcune delle quali vengono utilizzate se il pacchetto è una richiesta DNS (DNS request) e altre nella risposta (DNS response). La struttura principale del pacchetto include:
|
|
|
|
### Intestazione (Header)
|
|
|
|
L'intestazione, lunga 12 byte, contiene vari campi:
|
|
|
|
- `Transaction ID`: un identificatore univoco della richiesta, che consente di associare una specifica query alla sua risposta
|
|
- `Flags`: un insieme di valori rappresentati da singoli bit, ciascuno dei quali può essere acceso (1) o spento (0):
|
|
- `QR`: indica se il pacchetto è una query (0) o una risposta (1)
|
|
- `AA` (Authoritative Answer): indica se la risposta è autoritativa (1) o meno (0)
|
|
- `RCODE` (Response Code): un campo di 4 bit che riporta codici di risposta per eventuali errori
|
|
- `QDCount`: il numero di richieste presenti nella sezione *Question*, che indica quante domande sono state formulate
|
|
- `ANCount`: il numero di record di risposta presenti nella sezione *Answer*
|
|
- `NSCount`: il numero di RR presenti nella sezione *Authority*, che indica quanti record provengono da un server autoritativo
|
|
- `ARCount`: il numero di record presenti nella sezione *Additional*, che fornisce informazioni supplementari utili per la risoluzione della richiesta
|
|
|
|
### Sezione Questions
|
|
|
|
La sezione Questions contiene la/e richiesta/e DNS e include i seguenti campi:
|
|
|
|
- `QNAME`: il nome di dominio per il quale si sta effettuando la richiesta
|
|
- `QTYPE`: indica il tipo di record richiesto, rappresentato da un codice associato al tipo di RR specificato in QNAME.
|
|
- A (1)
|
|
- AAAA (28)
|
|
- MX (15)
|
|
- CNAME (5)
|
|
- `QCLASS`: indica la classe della query, specificando il contesto/luogo in cui si sta cercando l'informazione per il nome di dominio. Per un contesto ampio, come Internet, si utilizza la QCLASS IN (Internet).
|
|
|
|
Questi campi forniscono le informazioni necessarie per elaborare la richiesta e ottenere la risposta desiderata.
|
|
|
|
### Sezione Answers (Risposte)
|
|
|
|
La sezione Answers fornisce le risposte alla/e richiesta/e DNS e include i seguenti campi:
|
|
|
|
- `Name`: rappresenta il dominio per il quale è stata effettuata la richiesta
|
|
- `Type`: indica il tipo di record restituito, come A, AAAA, MX, CNAME, ecc.
|
|
- `CLASS`: rappresenta la classe di risposta, che è quasi sempre IN (Internet).
|
|
- `TTL` (Time to Live): indica il tempo di vita della risposta. Una volta scaduto, l'informazione viene considerata obsoleta e viene eliminata
|
|
- `RD Length`: indica la lunghezza dei dati di risposta, specificando quanti byte occupa l'informazione restituita
|
|
- `RDATA`: contiene i dati effettivi della risposta, che variano a seconda del tipo di record richiesto
|
|
|
|
### Sezione Authority
|
|
|
|
La sezione Authority indica le risposte provenienti da server DNS autoritativi.
|
|
|
|
### Sezione Additional
|
|
|
|
La sezione Additional può contenere informazioni extra che non rientrano nelle altre sezioni.
|
|
|
|
 |