Files
learning/networking/026-dns.md
2025-06-15 15:06:45 +02:00

78 lines
5.8 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.
![dns-hierarchy](asset/img/dns-hierarchy.png)
## 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