Modulo 8 · 8.2
Interrogare il DNS con dig e nslookup
Modulo 8: Sicurezza e risoluzione dei problemi · Tempo di lettura: 10 minuti
Obiettivo della lezione: Dopo questa lezione saprà usare dig e nslookup per interrogare i record, interrogare un nameserver specifico e leggere l'output.
Concetti chiave: dig, nslookup, Resolve-DnsName, +short, @server, +trace, sezioni ANSWER e AUTHORITY, stato NOERROR, NXDOMAIN, SERVFAIL, dig -x
Perché interrogare Lei stesso?
Un pannello mostra ciò che Lei ha inserito. Ciò che il resto del mondo vede può essere diverso: forse un'altra parte gestisce il DNS, forse una cache contiene ancora una risposta vecchia. Con un programma di interrogazione pone la stessa domanda di un browser o di un server di posta, e vede la risposta reale.
Esistono tre programmi comuni:
| Programma | Dove | Commento |
|---|---|---|
dig | macOS, Linux (Windows tramite WSL o da installare separatamente) | Il più completo, standard per gli amministratori |
nslookup | Windows, macOS, Linux | Presente ovunque, output più sintetico |
Resolve-DnsName | Windows PowerShell | Comodo su Windows senza software aggiuntivo |
Non ha a disposizione un terminale? Può fare esattamente la stessa cosa con uno strumento dig online (lezione 8.3).
La prima interrogazione con dig
Apra il terminale (macOS/Linux) e digiti:
$ dig example.com AL'output, in forma abbreviata, è il seguente:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41872
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 2847 IN A 192.0.2.10
;; Query time: 12 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)Cosa deve leggere:
- status: la parola più importante. Veda la tabella qui sotto.
- flags:
adsignifica che il resolver ha verificato la risposta con DNSSEC (lezione 8.1). - ANSWER SECTION: i record veri e propri. Le colonne sono le stesse di una zona: nome, TTL, classe, tipo, valore.
- TTL (qui 2847): per quanti secondi questa risposta rimane ancora nella cache del resolver. Se nella zona era impostato 3600, la risposta ha quindi già 753 secondi. Se la richiede di nuovo, vedrà il numero scendere.
- SERVER: quale resolver ha interrogato. A casa è spesso il Suo router.
I tre stati che deve conoscere
| Stato | Significato | Cosa fare |
|---|---|---|
NOERROR con risposta | Tutto in ordine, questa è la risposta | Il valore non è corretto? Allora c'è un record sbagliato, oppure sta vedendo una cache vecchia |
NOERROR senza risposta (ANSWER: 0) | Il nome esiste, ma non ha record di questo tipo | Spesso: ha richiesto il tipo sbagliato (ad esempio A su un nome che ha solo un CNAME o solo MX) |
NXDOMAIN | Questo nome non esiste affatto | Errore di battitura, record dimenticato, o un nome di dominio duplicato come mail.example.com.example.com |
SERVFAIL | Il resolver non è riuscito a ottenere una risposta affidabile | Nameserver irraggiungibili, oppure una catena DNSSEC compromessa (provi con +cd) |
Varianti utili
Solo la risposta con +short:
$ dig +short MX example.com
10 mail.example.com.
20 mail2.example.com.Interrogare un altro resolver o direttamente un nameserver con @. Questo è il trucco più importante in caso di problemi. Se interroga direttamente il nameserver autoritativo, ottiene sempre la risposta più recente, senza cache:
$ dig +short NS example.com
ns1.hosting.example.
ns2.hosting.example.
$ dig +short A www.example.com @ns1.hosting.example
192.0.2.20
$ dig +short A www.example.com @9.9.9.9
192.0.2.10Qui vede subito cosa sta succedendo: il nameserver fornisce già il nuovo indirizzo (.20), il resolver pubblico ha ancora quello vecchio in cache (.10). Non deve quindi fare nulla, solo attendere che il TTL scada (modulo 6).
Altri tipi: aggiunga il tipo dopo il nome.
$ dig +short TXT example.com
"v=spf1 a mx include:_spf.hosting.example ~all"
"google-site-verification=AbC123..."
$ dig +short TXT _dmarc.example.com
"v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
$ dig +short CNAME shop.example.com
shops.platform.example.Seguire l'intero percorso con +trace. dig fa allora ciò che farebbe un resolver: prima la root, poi il TLD, poi il server autoritativo (lezione 1.4):
$ dig +trace example.com A
. 518400 IN NS a.root-servers.net.
;; Received 239 bytes from 192.168.1.1#53
com. 172800 IN NS a.gtld-servers.net.
;; Received 708 bytes from 198.41.0.4#53(a.root-servers.net)
example.com. 172800 IN NS ns1.hosting.example.
;; Received 412 bytes from 192.5.6.30#53(a.gtld-servers.net)
example.com. 3600 IN A 192.0.2.10
;; Received 57 bytes from 198.51.100.53#53(ns1.hosting.example)Con +trace vede quali nameserver il registro comunica realmente. È utile se ha dubbi su una modifica dei nameserver già applicata.
Vedere il DNSSEC con +dnssec: ottiene anche le firme RRSIG. Con +cd disattiva il controllo per vedere se un SERVFAIL dipende dal DNSSEC.
DNS inverso con -x (lezione 4.6):
$ dig +short -x 192.0.2.25
mail.example.com.La stessa cosa con nslookup
nslookup funziona su qualsiasi computer. Le forme più importanti:
C:\> nslookup example.com
Server: router.lan
Address: 192.168.1.1
Non-authoritative answer:
Name: example.com
Address: 192.0.2.10
C:\> nslookup -type=mx example.com
example.com MX preference = 10, mail exchanger = mail.example.com
C:\> nslookup -type=txt _dmarc.example.com 9.9.9.9Un secondo indirizzo dopo il nome (qui 9.9.9.9) è il server che sta interrogando, proprio come @ in dig. "Non-authoritative answer" significa soltanto che la risposta proviene da un resolver e non dal nameserver autoritativo: è normale. Se il nome non esiste, nslookup risponde Non-existent domain, che equivale a NXDOMAIN.
Windows PowerShell: Resolve-DnsName
PS> Resolve-DnsName example.com -Type MX
PS> Resolve-DnsName _dmarc.example.com -Type TXT -Server 9.9.9.9
PS> Resolve-DnsName example.com -Type A -DnsOnlySvuotare la propria cache
Uno strumento online vede già la nuova risposta, ma il Suo computer ancora no? Allora la risposta vecchia si trova nella cache del Suo computer o del browser.
- Windows:
ipconfig /flushdnsnel Prompt dei comandi. - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSRespondernel terminale. - Linux con systemd-resolved:
resolvectl flush-caches. - Browser: una finestra privata, oppure il telefono tramite 4G/5G con il wifi disattivato.
La cache del Suo provider o router non può svuotarla da solo; in tal caso deve attendere la scadenza del TTL.
Nella pratica: come appare in un pannello
Nella maggior parte dei pannelli non può eseguire dig. Usi quindi dig insieme al Suo pannello: prima controlli nel pannello cosa ha inserito, poi con dig @<Suo nameserver> verifichi se il nameserver fornisce davvero quel dato, e infine con dig @9.9.9.9 se il resto del mondo lo vede già. Mio WebOké dispone di una diagnosi DNS che confronta i nameserver tra loro; altri fornitori hanno pulsanti simili di "controllo DNS".
Riepilogo
dig <nome> <tipo>pone la stessa domanda di un browser o di un server di posta; legga prima lo stato.- NOERROR con risposta va bene, NOERROR senza risposta significa "il nome esiste, il tipo no", NXDOMAIN significa "il nome non esiste", SERVFAIL significa "nessuna risposta affidabile".
- Con
@serverinterroga direttamente un determinato resolver o il nameserver autoritativo; così vede la differenza tra un errore e una cache. +short,+trace,+dnssec,+cde-xsono le varianti di cui avrà più bisogno.- nslookup e Resolve-DnsName fanno la stessa cosa su Windows.
Quiz
Esercizio
Esercizio Z8.2: dig e nslookup. Con dig, nslookup o Resolve-DnsName (oppure uno strumento dig online) interroghi tre informazioni:
- lo stato di un nome che non esiste:
bestaat-niet-dnscursus.sidn.nl; - i record MX di
wikipedia.org, direttamente presso uno dei nameserver di wikipedia.org (lo cerchi prima); - il TTL che un resolver pubblico restituisce in questo momento per il record A di
sidn.nl(lo richieda due volte, con un minuto di intervallo, e annoti entrambi i numeri).
Inserisca le risposte.
Per approfondire
Questi articoli descrivono i passaggi in WebOké; i comandi funzionano allo stesso modo ovunque.
