Tutorial > Cosa sono i DNS e come utilizzarli

Cosa sono i DNS e come utilizzarli

Pubblicato il: 11 gennaio 2021

DNS Web Hosting

Introduzione

Il DNS, acronimo di Domain Name System, è il sistema che permette di tradurre i nomi di dominio in indirizzi IP.

Capire a fondo il funzionamento del DNS ti aiuterà a diagnosticare i problemi con la configurazione degli accessi ai tuoi siti web e ti consentirà di ottenere una visione più chiara delle logiche alla base del funzionamento di Internet.

In questa guida, tratteremo alcuni concetti fondamentali legati al DNS, utili a fornire una conoscenza di base, per poi spiegarti come puoi configurare concretamente i DNS e modificare un file di zona.

DNS: Terminologia e definizioni

Prima di tutto, è bene che tu riconosca i diversi termini che incontrerai trattando di questo argomento. Per aiutarti a riconoscerli in maniera più universali tramite i loro acronimi, i termini ti verranno presentati in inglese con la relativa traduzione in italiano.

Domain Name System

Il Domain Name System (Sistema Nome Dominio), meglio conosciuto come DNS, è il sistema di rete che permette di tradurre i nomi, scritti in linguaggio naturale, in indirizzi IP unici.

Domain Name

Il Domain Name (Nome di Dominio) è proprio il nome, scritto in linguaggio naturale, che viene associato a una determinata risorsa su internet. Per fare un esempio: “google.it” è un nome di dominio. Alcuni definirebbero solo “google” come nome di dominio ma, in generale, ci si riferisce alla forma combinata con il termine Domain Name.

Indirizzo IP

L’indirizzo IP viene definito una locazione indirizzabile nella rete. Ogni indirizzo IP è unico all’interno di una specifica rete. Si parla di rete poiché le reti possono essere costruite anche all’interno di un'azienda ma, nell’ambito dei siti web, la rete coincide con l’intero universo Internet.

IPv4 è la versione più comune di formato degli indirizzi. Esso si compone di 4 stringhe da 3 numeri, concatenati da dei punti tra loro (es: “111.222.333.444”).

Tramite il DNS puoi mappare questi indirizzi con dei nomi scritti in linguaggio naturale, che ti permettano di associare a essi gli indirizzi, senza dover ricordare tutte le stringhe numeriche. Funziona in pratica come una sorta di rubrica telefonica. Immagina infatti cosa sarebbe, per esempio, dover ricordare a memoria l’indirizzo IP di Google, Facebook o Wikipedia per accedere ogni volta ai loro servizi!

Top-level Domain

Un Top-level Domain (Dominio di primo livello), o TLD, è la parte più generale di un dominio, anche detta generalmente "estensione" del nome di dominio. Semplicemente, il TLD definisce il suffisso presente alla fine del nome del sito web, subito dopo un punto. Per fare alcuni esempi, sono dei domini di alto livello i suffissi: “.com”, “.it”, “.net”, “.org”.

I domini di alto livello sono in cima alla gerarchia dei termini dei nomi di dominio. Alcuni gruppi gestiscono il controllo dei domini di alto livello per conto della ICANN (Internet Corporation for Assigned Name and Numbers). Questi gruppi distribuiscono nomi di dominio sotto determinati TLD, solitamente tramite la registrazione di un dominio.

Hosts

All’interno di un dominio, il proprietario del dominio può definire degli hosts singolarmente, che identificano dei computer o servizi individuali attraverso il dominio. Per esempio, molti proprietari dei domini rendono il proprio server web accessibile sia tramite il nome di dominio (es: esempio.com) ma anche attraverso la definizione ”host” “www” (es: www.esempio.com).

Altri esempi di definizioni “host” possono essere quella ”api” (api.esempio.com) o quella ”ftp”(ftp.example.com). I nomi host possono essere scelti arbitrariamente, purché siano unici per il dominio.

Sub-Domain

Il Sub-Domain (Sottodominio) è un concetto legato agli hosts.

DNS funziona in una gerarchia e i domini di alto livello possono avere diversi domini sotto di loro. Il TLD ”.com”, per esempio, possiede domini come “google.com” o “youtube.com” sotto di lui. Potremmo , quindi, definire questi ultimi due esempi dei sottodomini del TLD “.com”. In sostanza, quindi, un sottodominio altro non è che un dominio parte di uno più grande.

Nei domini usati come esempio , il nome “google” sarà definito un Second Level Domain (Dominio di secondo livello), o SLD.

Fully Qualified Domain Name

Un Fully Qualified Domain Name (Nome di dominio pienamente qualificato), o FQDN, è un nome di dominio unico e che specifica una posizione assoluta di un nodo nella gerarchia del DNS. Questo a differenza di normali nomi di dominio, che in un sistema DNS possono essere ambigui perché “relativi”.

Questo nome “assoluto” include tutte le componenti precedentemente specificate, incluso il TLD. Per definizione, un FQDN finisce sempre con un punto, che sta a indicare la radice della gerarchia ad albero del dominio. Un esempio potrebbe essere “mail.google.com”.

E’ anche possibile trovare questi nomi senza il punto finale, ma lo standard ICANN lo prevede.

Name Server

Il Name Server è un computer che si occupa della traduzione dei nomi di dominio in indirizzi IP. Questi server, per la maggior parte, lavorano nel sistema DNS. Giacché il numero totale di domini da tradurre è troppo grande per un server solo, ognuno di essi può reindirizzare le richieste ad altri server o delegarne la responsabilita per alcuni sottodomini.

In base a questo funzionamento, i name servers possono essere “autoritari” se forniscono direttamente risposta alle domande sui propri domini o possono essere “deleganti” nel momento in cui si riferiscono ad altri servers da cui estrapolano le corrispondenze dei nomi e indirizzi.

File di Zona

Un file di zona DNS è un file contenente la mappatura che collega i nomi di dominio ai corrispondenti indirizzi IP. Tramite questo file, il sistema DNS scopre quali indirizzi IP passare quando l’utente richiede un determinato nome di dominio.

Il file di zona risiede nei name servers e definisce, in generale, le risorse disponibili sotto uno specifico dominio o da dove ricavare una determinata informazione.

Records

I records sono contenuti nel file di zona. Un record rappresenta una corrispondenza tra una risorsa e un nome. I records possono servire ad esempio per:

  • Far corrispondere un nome di dominio a un indirizzo IP;
  • Definire un name server per un dominio;
  • Definire i mail server per un dominio.

Come funziona un DNS

Ora che ti sei introdotto meglio nella terminologia che riguarda il DNS, potrai meglio comprendere come funziona il sistema.

Il sistema è molto semplice se visto da una prospettiva di alto livello ma, nel dettaglio, la comprensione può diventare più complicata. Tuttavia, resta una infrastruttura molto affidabile ed essenziale per il corretto funzionamento della rete Internet.

Server Root

Come detto prima, i DNS sono composti da un sistema gerarchico. Nel livello più alto della gerarchia, trovi i root servers. Questi servers sono controllati da diverse organizzazioni e sono autorità delegate dalla ICANN.

Al momento, esistono 13 root servers in funzione. Tuttavia, dato che le corrispondenze da risolvere ogni minuto sono in numero altissimo, ognuno di questi servers sono “duplicati”, ma ogni duplicato condivide lo stesso indirizzo IP dell’originale. Di conseguenza, quando le richieste allo stesso server root sono troppe, alcune di esse vengono inoltrate ai suoi duplicati.

Il compito di questi server di root è quello di gestire le richieste di informazioni sui domini di alto livello. Se la richiesta arrivasse per una risorsa di un livello più basso di quello possibile dal server di root, allora ad esso verrebbe chiesto solo il dominio.

I server di root non conoscono dove sia ospitato il dominio. Saranno in grado, però, di reindirizzare il richiedente al name server che gestisce quello specifico dominio di alto livello, oggetto della richiesta.

Dato che questa dinamica non è facilmente intuibile, si spiega meglio con un esempio:

Immagina di cercare il sito web “www.wikipedia.org”. Il root server non troverà il risultato tra i record del suo file di zona, cercando il nome per intero. Tuttavia, ricercando solo la voce ”.org”, ovvero il TLD, restituirà al richiedente il name server responsabile di tutti gli indirizzi con il TLD uguale a “.org” .

Servers TLD

Riprendendo lo scenario precedente, la richiesta inoltrata precedentemente al root server, passerà ora al TLD responsabile di questo dominio ad alto livello (es: “.org”). Il root server aveva fornito, ovviamente, l’indirizzo IP a cui inoltrare la richiesta per comunicare con il TLD scelto.

Il TLD , guardando nei suoi files, non troverà il record corrispondente alla congiunzione tra il nome “www.wikipedia.org” e il suo Indirizzo IP ma troverà l’indirizzo del name server responsabile per ”wikipedia.org”.

Piano piano, ci si avvicina al risultato...

Domain-Level Name Server

A questo punto, la richiesta viene inoltrata al name server responsabile del riconoscimento dell’indirizzo IP della risorsa cercata. Ancora una volta, riprendendo lo scenario, viene chiesto se si conosca l’indirizzo IP di “www.wikipedia.org”.

Questa volta, nel file di zona, il name server troverà una corrispondenza. Verrà trovato il record per l’host ”www”. Questo record dirà all’indirizzo IP dove si trova l’host e , per concludere, il name server risponderà con un risultato al richiedente.

Cosa è un resolving name server?

Nello scenario utilizzato come esempio, viene citato spesso un “richiedente”. Questa entità, di solito, altro non è che un resolving name server, ovvero un server configurato per interrogare altri server. Detto in termini più basilari, il suo compito è di fare da intermediario per l’utente salvando in una memoria temporanea i risultati delle interrogazioni precedenti per velocizzare il processo di ricerca di una risorsa in rete. Conosce inoltre gli indirizzi dei root servers, così da poter innescare la serie di richieste che vengono poi effettuate in sequenza per trovare ciò che l’utente ha domandato.

I fornitori di servizi internet, chiamati anche ISP (Internet Service Providers), forniscono di solito alcuni resolving name servers che vengono salvati sui file dei computer degli utenti. Per esempio, Google fornisce dei server DNS che puoi interrogare e puoi configurare automaticamente o manualmente sul tuo PC.

Quando cerchi un URL nella barra degli indirizzi del browser, il computer controlla prima se può scoprire tramite i suoi file locali l’indirizzo IP della risorsa. Uno dei file solitamente interessati da questo controllo è il file hosts. La richiesta viene poi mandata al resolving name server per ricevere indietro l’indirizzo IP della risorsa.

Il resolving name server controllerà poi la sua memoria cache per vedere se possiede già l’indirizzo richiesto, altrimenti seguiranno i passaggi già spiegati in precedenza.

I resolving name servers servono quindi a semplificare le richieste degli utenti finali, permettendo ad essi di specificare semplicemente la richiesta di locazione della risorsa per ricevere indietro, dopo alcuni controlli, la risposta esatta.

File di Zona DNS

Nelle meccaniche precedenti, ti sono stati presentati i file di zona e i record.

I file di zona sono il modo in cui i name servers immagazzinano informazioni sui domini che conoscono. Ogni dominio conosciuto da un name server è quindi immagazzinato in un file di zona. Molte richieste, però, non sono gestibili direttamente interrogando un file di zona di un name server.

Di conseguenza, un name server potrà fornire direttamente la risposta o suggerire dove continuare a cercare l’informazione.

Quanti più file di zona sono posseduti da un name server, quanto più il name server sarà in grado di rispondere a più richieste senza dover far riferimento ad altre entità.

Un file di zona descrive una “zona” DNS, che di solito fa da scheletro all’intero sistema di nomi DNS. Di solito viene usato per configurare un dominio solo e può contenere un numero di record che definisce dove si trovino le risorse per il dominio in questione.

Il parametro $ORIGIN, appartenente a un file di zona, sarà uguale al livello più alto di autorità della zona, di default.

Per esempio, se esistesse un file di zona per configurare il dominio “esempio.com”, il parametro $ORIGIN sarebbe impostato su “esempio.com.”.

Questo parametro può essere configurato sia all’inizio del file di zona o nel file di configurazione del server DNS che si riferisce al file di zona. In ogni caso, questo parametro rappresenterà su quale zona il server name potrà avere controllo per gestire autonomamente le richieste.

Similmente, il $TTL è un parametro che configura il tempo di vita dell’informazione fornita dal name server. Sostanzialmente, è un timer. La memoria cache di un name server può conservare i risultati delle richieste passate per un certo lasso di tempo fino alla scadenza di questo valore TTL.

Tipi di Record DNS

Nel file di zona, puoi trovare diversi tipi di record. In questa sezione, ti verranno presentati alcuni dei più comuni o quelli obbligatori.

SOA Record

Lo Start Of Autorithy, o SQA, record è un record obbligatorio in tutti i files di zona. É infatti il primo record che deve comparire nel file e può essere preceduto soltanto dai parametri $ORIGIN e $TTL. É anche uno dei record più difficile da capire.

L’inizio di un record SQA si presenta solitamente così:

domain.com.  IN SOA   ns1.domain.com. admin.domain.com. (
                          12083           ; serial number
                          3h              ; refresh interval
                          30m             ; retry interval
                          3w              ; expiry period
                          1h              ; negative TTL
                          )

Analizzando ogni parte:

  • domain.com.: questa è la radice della zona. Questa voce specifica che la zona si riferisce al dominio denominato “domain.com”. Spesso, vedrai il nome sostituito da una @. Questa dicitura suggerisce che il nome del dominio si trova nella variabile $ORIGIN;
  • IN SOA: la porzione “IN” indica internet (e sarà presente in molti record). La voce “SOA” indica che è l’inizio del SOA record;
  • ns1.domain.com.: questa voce definisce il server name primario per questo dominio. I name servers possono essere primari o secondari e, se il DNS è dinamico, un server deve per forza essere primario. Se il DNS non è stato configurato in questo modo, allora questo sarà solo uno dei tuoi server primari;
  • admin.domain.com.: questo campo contiene l’indirizzo email dell’amministratore per questa zona. Il valore “@” è sostituito con un punto nell’indirizzo email. Se nell’indirizzo c’è un punto, esso viene sostituito con uno “/”;
  • 12083: questo è il numero seriale per il file di zona. Ogni volta che modifichi un file di zona, devi incrementare il numero per permettere al file di zona di propagarsi correttamente. I server secondari controlleranno se il numero seriale del server primario per una zona sia più grande di quello sui loro sistemi. Se è così, il nuovo file di zona viene richiesto. Se no, si continua a servire il file originale;
  • 3h: questo è l’intervallo di aggiornamento per la zona. Rappresenta il tempo che il server secondario aspetterà prima di interrogare il primario per i cambiamenti del file di zona;
  • 3w: questo è il periodo di scadenza. Se un name server secondario non è stato in grado di contattare quello primario per l’intervallo di tempo specificato, allora non restituirà risposte come fonte autoritaria per questa zona.
  • 1h: questo è l’ammontare di tempo dopo il quale il name server riporterà un errore se non riuscirà a trovare il nome richiesto in questo file.

A e AAAA Records

Questi due tipi di record associano un host a un indirizzo IP. Il record “A” serve per collegare un host a un IPv4, mentre il record “AAAA” collega un host a un IPv6.

In generale, il formato di tali record appare in questo modo:

host     IN      A       IPv4_address
host     IN      AAAA    IPv6_address

Dato che i SOA record dell’esempio richiamavano un server primario in “ns1.domain.com”, allora dovrebbe corrispondere a un indirizzo IP giacchè “ns1.domain.com” è all’interno della zona definita dal file della zona “domain.com”.

Il record potrebbe apparire così:

ns1     IN  A       111.222.111.222

Come potrai notare, non è stato necessario specificare l’intero nome. Può essere specificato solo l’host, senza il FQDN e il server DNS completerà il resto con il valore del parametro $ORIGIN. Tuttavia, se volessi essere semanticamente più chiaro, potresti anche inserire l’interno FQDN , come in esempio:

ns1.domain.com.     IN  A       111.222.111.222

Nella maggioranza dei casi, qui definirai il tuo server web come “www” :

www    IN  A       222.222.222.222

Potresti anche comunicare in quale indirizzo si traduce il tuo dominio di base. Per esempio:

domain.com.     IN  A       222.222.222.222

Potresti anche usare la “@” per riferirti al dominio di base, come già detto precedentemente:

@     IN  A       222.222.222.222

Puoi anche scegliere di scrivere le corrispondenze di qualunque cosa sia sotto il dominio e che non sia esplicitamente definita in questo server. Puoi usare un “ * “ come carattere jolly:

*     IN  A       222.222.222.222

Ovviamente, tutte queste indicazioni funzionano anche con gli indirizzi IPv6 e, di conseguenza, servono anche a definire i records “AAAA”.

Record CNAME

I record CNAME servono a definire degli alias per i nomi canonici del tuo server (definiti già tramite un record A o AAAA).

Per esempio, potresti avere un record “A” che definisca un host di nome “server1” e che usi il “www” come alias per questo host:

server1     IN  A       111.111.111.111
www         IN  CNAME   server1

Fa attenzione poichè queste ridenominazioni possono causare alcuni cali delle prestazioni dato che la traduzione dagli alias ai nomi originali richiede una interrogazione in più.

La maggior parte delle volte, lo stesso risultato può essere ottenuto aggiungendo più record di tipo A o AAAA.

Il record CNAME può essere utile quando è necessario un alias per una risorsa che si trovi fuori dalla zona corrente.

Record MX

I record MX sono usati per definire gli scambi di mail usati per i domini. Questo aiuta le email ad arrivare correttamente al tuo server.

A differenza di altri tipi di record, i record riferiti alle email non creano corrispondenze con un host, poiché si applicano all’intera zona. Di solito, appaiono in un modo simile:

 IN  MX  10   mail.domain.com.

Come puoi notare, non vi è alcun nome di un host a precedere la stringa.

Potrai anche constatare che c’è un numero in più in questa voce. Questo è il numero di preferenza: un numero che aiuta a decidere a quale server mandare una mail se ci sono più server preposti alla ricezione di messaggi. I numeri più piccoli hanno una priorità più alta.

Il record MX dovrebbe generalmente puntare a un host definito già da un record A o AAAA e non a un record CNAME.

Quindi, se vi fossero più server organizzati per la ricezione delle email, le voci nel file apparirebbero così:

        IN  MX  10  mail1.domain.com.
        IN  MX  50  mail2.domain.com.
mail1   IN  A       111.111.111.111
mail2   IN  A       222.222.222.222

Nell’esempio di sopra, l’host di nome “mail1” è il server preferito nello scambio di email.

Potresti anche scrivere la stessa informazione nel seguente modo:

        IN  MX  10  mail1
        IN  MX  50  mail2
mail1   IN  A       111.111.111.111
mail2   IN  A       222.222.222.222

Record NS

Questa tipologia di record definisce i name servers usati per la zona interessata.

Potresti chiederti perché un file di zona, contenuto già in un name server, debba avere dei riferimenti che ripetano l’associazione file-server.

Parte delle risposte, a favore di questa meccanica, risiedono nel fatto che tali riferimenti permettono di velocizzare alcuni processi del DNS. Inoltre, perché a volte un file di zona potrebbe appartenere a una copia temporanea del server originale, serve avere il riferimento in chiaro.

Come i records MX, anche i parametri del record NS si riferiscono all’intera zona e non a degli hosts specifici. Un record di questo tipo apparirebbe in questo modo:

   IN  NS     ns1.domain.com.
   IN  NS     ns2.domain.com.

Dovresti definire almeno due name server in ogni file di zona per far funzionare bene il sistema nel caso in cui uno dei due server riscontri problemi. Molti server DNS infatti riportano un errore nel caso in cui sia definito un server solo, definendo il file di zona non valido.

Come al solito, vengono inclusi anche le corrispondenze con gli host tramite i record A o AAAA:

        IN  NS     ns1.domain.com.
        IN  NS     ns2.domain.com.
ns1     IN  A      111.222.111.111
ns2     IN  A      123.211.111.233

Con questo ultimo record, ora disponi delle conoscenze dei record più comuni in cui potresti imbatterti.

Record PTR

I records PTR sono usati per definire un nome associato a un indirizzo IP. Tali record sono, in termini pratici, l’opposto dei records A o AAAA.

L’unicità dei record PTR sta nel fatto che iniziano nella radice “.arpa” e sono delegati ai proprietari degli indirizzi IP. I Registri Regionali di Internet (RIR) gestiscono la delegazione degli indirizzi IP a specifiche organizzazioni o fornitori di servizi. I RIR includono APNIC, AQRIN, RIPE NCC, LACNIC e AFRINIC.

Un esempio di come potrebbe apparire un PTR record di un indirizzo IP, uguale a 111.222.333.444, potrebbe essere:

444.333.222.111.in-addr.arpa.   33692   IN  PTR host.example.com.

Qui sotto, invece, troverai un esempio della traduzione di un indirizzo IPv6 di un Server DNS di Google, mostrato in formato nibble (un formato a 4 bit). Il server di cui parliamo avrà indirizzo IPv6 uguale a 2001:4860:4860::8888.

8.8.8.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.8.4.0.6.8.4.1.0.0.2.ip6.arpa. 86400IN PTR google-public-dns-a.google.com.

Tramite il comando dig combinato con il flag -x, puoi scoprire il nome del DNS associato a un indirizzo IP inserito da te.

$ dig -x 8.8.4.4 +short

L’output del comando sarà il nome del dominio associato a quell’indirizzo IP, presente nel record PTR:

google-public-dns-b.google.com.

I server di Internet usano i record PTR per inserire i nomi di dominio nei log degli accessi, prendere decisioni sulla gestione dello spam e mostrare dettagli su altri dispositivi.

I server email più usati controlleranno il record PTR di un indirizzo IP da cui hanno ricevuto la email. Se il mittente del messaggio non possiede un PTR associato al suo indirizzo IP, allora l’email potrebbe essere rifiutata o etichettata come spam. Non è importante che il dominio della email corrisponda al FQDN nel PTR ma, per lo meno, che il record PTR sia valido e abbia corrispondenza con un record A.

Normalmente i router di rete su Internet hanno un record PTR che corrisponde alla loro posizione fisica. Questo aiuta nella diagnostica del traffico di rete o nel tracciamento.

Molti fornitori offrono server dedicati o servizi VPS che daranno al cliente la possibilità di inserire un record PTR per il loro indirizzo IP.

Record CAA

I record CAA vengono usati per specificare quali autorità di certificazione, abbreviate in inglese con l’acronimo CA, sono autorizzate a rilasciare certificati SSL / TLS per il tuo dominio.

Tutte le autorità sono tenute a controllare questi records prima di rilasciare un certificato. Se nessun record è presente, qualunque CA può rilasciare un certificato. Altrimenti, solo la CA specificata nel record può rilasciare certificati per quel dominio. I record CAA possono essere applicati su hosts singoli o sull’intero dominio.

Un record CAA di esempio appare così:

example.com.    IN  CAA 0 issue "letsencrypt.org"

L’host, IN e il tipo di record (CAA) sono campi che già hai incontrato nello studio dei DNS. La parte aggiuntiva che compone un record CAA è la stringa ” 0 issue “letsencrypt.org” ”. La stringa è composta di un flag (0), un tag (issue) e dei valori (“letsencrypt.org”).

  • Flags: sono dei numeri interi che indicano come un CA dovrebbe gestire dei tag che non conosce. Se il valore è 0, il record verrà ignorato. Se 1, il CA deve rifiutare il rilascio del certificato.
  • Tags: sono delle stringhe che denotano lo scopo del record CAA. I valori dei tag possono essere issue per autorizzare una CA a creare i certificati per un hostname specifico , issuewild per autorizzare i certificati jolly o iodef per definire un URL dove le CA possono segnalare le violazioni delle policy.
  • Values: sono stringhe associate al tag. Per issue e issuewild , il valore sarà il dominio del CA a cui stai garantendo i permessi. Per iodef questo potrebbe essere l’ URL di un form di contatto i di un link di tipo mailto: per inviare dei feedback via email.

Potresti usare il comando dig per prendere il record CAA usando le seguenti opzioni:

$ dig example.com type257

Conclusioni

Dopo aver letto i diversi passaggi di questa guida, dovresti avere ora una buona conoscenza relativa al funzionamento dei DNS e a come modificarli concretamente per impostare la zona DNS del tuo dominio.

Mentre il concetto generale è relativamente facile da imparare, le meccaniche dettagliate alla base del Domain Name System possono rivelarsi più difficili da comprendere e mettere in pratica per amministratori poco esperti.