Propagazione DNS e verifica della delega

Introduzione: domini, root nameserver e propagazione della delega

La propagazione delle modifiche DNS non riguarda solo i record di un singolo dominio. Per un'introduzione alla propagazione dei record DNS standard (A, MX, CNAME, ecc.) gestiti sui nameserver del provider, consulta questa guida introduttiva sulla gestione DNS.

I domini sono registrati tramite organizzazioni che gestiscono le varie estensioni (TLD) e il puntamento del dominio verso i nameserver scelti dall’utente avviene attraverso i root nameserver del registro competente.

Quando i nameserver appartengono allo stesso dominio che delegano, il registro deve includere anche i relativi indirizzi IP, detti glue record, per evitare loop di risoluzione. I glue record vengono gestiti automaticamente dal provider DNS.

Possiamo distinguere due aspetti:

  • Propagazione DNS: riguarda i record (A, AAAA, MX, CNAME, …) di uno specifico dominio.
  • Propagazione della delega: riguarda i record NS memorizzati sui root nameserver del TLD.

Alla registrazione di un nuovo dominio o al cambio di nameserver, il registrar invia il comando di aggiornamento al registro, e sul WHOIS la modifica risulta visibile in pochi istanti.

Però i root nameserver dei registri non sono gestiti come i nameserver dei singoli provider: amministrano milioni di domini e sono interrogati da resolver di tutto il mondo. Non possono quindi adottare TTL estremamente bassi né aggiornarsi in tempo reale.

In genere gli aggiornamenti vengono applicati a intervalli prefissati e il TTL dei record NS memorizzati sui root nameserver può arrivare a 24–48 ore. Di conseguenza, l’aggiunta o la modifica di una delega può richiedere diverse ore per diventare effettiva su tutti i server del registro, oltre a un ulteriore tempo affinché la modifica si propaghi ai resolver. Nel frattempo si possono ricevere errori come hostname not found o visualizzare ancora il vecchio hosting.

Nota pratica: questa pagina approfondisce la propagazione della delega (record NS sui root nameserver). Se hai bisogno invece di capire quanto tempo impiegano i record A, MX, CNAME ecc. a propagarsi dopo l’aggiornamento sui nameserver del provider, trovi tutto spiegato nella guida base alla propagazione dei record DNS .

Come verificare lo stato della propagazione

Tutto parte dai root server, i server autoritativi della zona radice. Possiamo interrogarli per verificare se la delega è già stata aggiornata.

I root server si possono ottenere interrogando il resolver locale.

Esempio Linux:

$ dig . NS +short

…
m.root-servers.net.
c.root-servers.net.
l.root-servers.net.
f.root-servers.net.
e.root-servers.net.
i.root-servers.net.
j.root-servers.net.
d.root-servers.net.
h.root-servers.net.
a.root-servers.net.
k.root-servers.net.
b.root-servers.net.
g.root-servers.net.
…

Esempio Windows:

> nslookup -type=NS .

…
(root)  nameserver = k.root-servers.net
(root)  nameserver = b.root-servers.net
(root)  nameserver = g.root-servers.net
(root)  nameserver = m.root-servers.net
(root)  nameserver = c.root-servers.net
(root)  nameserver = l.root-servers.net
(root)  nameserver = f.root-servers.net
(root)  nameserver = e.root-servers.net
(root)  nameserver = i.root-servers.net
(root)  nameserver = j.root-servers.net
(root)  nameserver = d.root-servers.net
(root)  nameserver = h.root-servers.net
(root)  nameserver = a.root-servers.net
…

Per ottenere i nameserver dell'estensione .com:

Procediamo con la query su uno dei server ottenuti prima, proviamo a.root-servers.net

Esempio Linux:

$ dig com NS @a.root-servers.net

…
;; AUTHORITY SECTION:
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
…

Esempio Windows:

> nslookup -type=NS com a.root-servers.net

…
com     nameserver = l.gtld-servers.net
com     nameserver = j.gtld-servers.net
com     nameserver = h.gtld-servers.net
com     nameserver = d.gtld-servers.net
com     nameserver = b.gtld-servers.net
com     nameserver = f.gtld-servers.net
com     nameserver = k.gtld-servers.net
com     nameserver = m.gtld-servers.net
com     nameserver = i.gtld-servers.net
com     nameserver = g.gtld-servers.net
com     nameserver = a.gtld-servers.net
com     nameserver = c.gtld-servers.net
com     nameserver = e.gtld-servers.net
…

Verificare il TTL del TLD

Ora abbiamo i root nameserver dell'estensione .com, scegliamo uno dei nameserver e richiediamo il record SOA dell'estensione. Il campo minimum (o default TTL su Windows) è utile per capire quanto può durare una risposta negativa (NXDOMAIN).

Esempio Linux:

$ dig com SOA +multiline @a.gtld-servers.net

…
;; ANSWER SECTION:
com.            900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. (
                    1754585805 ; serial
                    1800       ; refresh (30 minutes)
                    900        ; retry (15 minutes)
                    604800     ; expire (1 week)
                    900        ; minimum (15 minutes)
                    )
…

Esempio Windows:

> nslookup -type=SOA com a.gtld-servers.net

…
com
    primary name server = a.gtld-servers.net
    responsible mail addr = nstld.verisign-grs.com
    serial  = 1754585620
    refresh = 1800 (30 mins)
    retry   = 900 (15 mins)
    expire  = 604800 (7 days)
    default TTL = 900 (15 mins)
…

In entrambi i casi, abbiamo trovato il TTL predefinito che nell’esempio è 15 minuti.

Verificare i record NS del dominio

Esempio Linux:

$ dig gidinet.com NS @a.gtld-servers.net

…
;; AUTHORITY SECTION:
gidinet.com.		172800	IN	NS	dns1.gidinet.com.
gidinet.com.		172800	IN	NS	dns2.gidinet.com.
gidinet.com.		172800	IN	NS	dns3.gidinet.com.
gidinet.com.		172800	IN	NS	dns4.gidinet.com.
gidinet.com.		172800	IN	NS	dns5.gidinet.com.
…

Esempio Windows (con -debug per vedere il TTL):

> nslookup -type=NS -debug gidinet.com a.gtld-servers.net

…
    AUTHORITY RECORDS:
    ->  gidinet.com
        nameserver = dns1.gidinet.com
        ttl = 172800 (2 days)
    ->  gidinet.com
        nameserver = dns2.gidinet.com
        ttl = 172800 (2 days)
    ->  gidinet.com
        nameserver = dns3.gidinet.com
        ttl = 172800 (2 days)
    ->  gidinet.com
        nameserver = dns4.gidinet.com
        ttl = 172800 (2 days)
    ->  gidinet.com
        nameserver = dns5.gidinet.com
        ttl = 172800 (2 days)
…

Il TTL associato ai record NS (es. 172800 = 48 h) mostra per quanto tempo i resolver possono mantenere in cache la vecchia delega.

Strategie per evitare ritardi nella propagazione

Dopo un cambio di nameserver è buona norma non accedere subito al dominio dai propri dispositivi: se il resolver locale memorizza la vecchia delega, resterà in cache per l'intero TTL. Lo stesso vale per gli strumenti di verifica online, che potrebbero diffondere ulteriormente l'informazione errata.

È possibile interrogare ciascun root nameserver dell'estensione per verificare se è già stato aggiornato o meno, ripetendo il comando visto sopra per ognuno.

Esegui il comando una volta per ciascun root nameserver dell'estensione (a.gtld-servers.net, b.gtld-servers.net, …):

Esempio Linux:

$ dig gidinet.com NS @nameserver

Esempio Windows:

> nslookup -type=NS gidinet.com nameserver

Strumenti utili per la verifica della propagazione della delega

Per semplificare la diagnosi, abbiamo preparato questi script open source che automatizzano i passaggi descritti. Ognuno:

  • Identifica il TLD del dominio fornito
  • Ottiene l'elenco dei root nameserver del registro
  • Interroga ciascun nameserver e mostra i record NS restituiti

Scarica il formato che preferisci:

Gli script possono essere liberamente modificati e distribuiti.