Introduzione
Dig (Domain Information Groper) è un potente strumento da riga di comando per eseguire query sui server dei nomi DNS.
Con il comando dig
, è possibile richiedere informazioni su vari record DNS, inclusi indirizzi host, scambi di posta e server dei nomi. È lo strumento più comunemente usato dagli amministratori di sistema per la risoluzione dei problemi DNS per la sua flessibilità e facilità d'uso.
In questo tutorial, ti mostreremo come utilizzare l'utilità dig
attraverso esempi pratici e spiegazioni dettagliate delle opzioni dig
più comuni.
Installare Dig
Per verificare se il comando dig
è disponibile sul tipo di sistema in uso:
dig -v
L'output dovrebbe assomigliare a questo:
DiG 9.11.3-1ubuntu1.1-Ubuntu
Se dig
non è presente sul tuo sistema, il comando sopra stampa "dig: command not found". Puoi facilmente installare lo strumento dig
usando il gestore pacchetti della tua distribuzione.
Installare dig su Ubuntu e Debian
sudo apt update && sudo apt install dnsutils
Installare dig su CentOS e Fedora
sudo yum install bind-utils
Installare dig su Arch Linux
sudo pacman -S bind-tools
Comprensione dell'output di scavo
Nella sua forma più semplice, quando usato per interrogare un singolo host (dominio) senza ulteriori argomenti, il comando dig è piuttosto dettagliato.
Nel seguente esempio, eseguiremo una query per recuperare informazioni sul dominio linux.org
.
dig linux.org
L'output dovrebbe assomigliare a questo:
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30498
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;linux.org. IN A
;; ANSWER SECTION:
linux.org. 300 IN A 104.27.167.219
linux.org. 300 IN A 104.27.166.219
;; Query time: 34 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Fri Jan 10 14:24:19 CET 2020
;; MSG SIZE rcvd: 70
Andiamo sezione per sezione e spieghiamo l'output del comando dig
:
La prima riga dell'output stampa la versione di installata di dig e la query invocata. La seconda riga mostra le opzioni globali (per impostazione predefinita, solo cmd).
; <<>> DiG 9.13.3 <<>> linux.org
;; global options: +cmd
Se non si desidera includere quelle righe nell'output, utilizzare l'opzione +nocmd
. Questa opzione deve essere la prima dopo il comando dig
.
La prima sezione include i dettagli tecnici sulla risposta ricevuta dall'autorità richiesta (server DNS). L'intestazione mostra il codice operativo (l'azione eseguita dal dig) e lo stato dell'azione. In questo esempio, lo stato è NOERROR
, il che significa che l'autorità richiesta ha servito la query senza alcun problema.
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37159
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5
Questa sezione può essere rimossa usando l'opzione +nocomments
, che disabilita anche le intestazioni di alcune altre sezioni.
La pseudo sezione "OPT" è mostrata di default solo nelle versioni più recenti dell'utilità di dig. Puoi leggere ulteriori informazioni sui meccanismi di estensione per DNS (EDNS) qui.
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
Se non si desidera includere questa sezione nell'output, utilizzare l'opzione +noedns
.
Nella sezione "QUESTION" dig
mostra la nostra query domanda (question). Per impostazione predefinita dig
richiede il record A.
;; QUESTION SECTION:
;linux.org. IN A
Puoi disabilitare questa sezione usando l'opzione +noquestion
.
La sezione "ANSWER" ci fornisce una risposta alla nostra domanda. Come già accennato, per impostazione predefinita dig
richiederà il record A. Qui, il dominio linux.org
punta all'indirizzo IP 104.18.59.123
.
;; ANSWER SECTION:
linux.org. 300 IN A 104.18.59.123
linux.org. 300 IN A 104.18.58.123
Di solito, non si desidera disattivare la risposta, ma è possibile rimuovere questa sezione dall'output utilizzando l'opzione +noanswer
.
La sezione "AUTHORITY" ci dice quali server sono i principali, per rispondere alle domande DNS sul dominio richiesto.
;; AUTHORITY SECTION:
linux.org. 86379 IN NS lia.ns.cloudflare.com.
linux.org. 86379 IN NS mark.ns.cloudflare.com.
È possibile disabilitare questa sezione dell'output utilizzando l'opzione +noauthority
.
La sezione "ADDITIONAL" ci fornisce informazioni sugli indirizzi IP dei server DNS autorevoli mostrati nella sezione autorità.
;; ADDITIONAL SECTION:
lia.ns.cloudflare.com. 84354 IN A 173.245.58.185
lia.ns.cloudflare.com. 170762 IN AAAA 2400:cb00:2049:1::adf5:3ab9
mark.ns.cloudflare.com. 170734 IN A 173.245.59.130
mark.ns.cloudflare.com. 170734 IN AAAA 2400:cb00:2049:1::adf5:3b82
L'opzione +noadditional
disabilita la sezione aggiuntiva di una risposta.
L'ultima sezione dell'output di dig include statistiche sulla query.
;; Query time: 22 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Fri Jan 10 14:30:24 CET 2020
;; MSG SIZE rcvd: 70
È possibile disabilitare questa parte con l'opzione +nostats
.
Stampare solo la risposta
Nella maggior parte dei casi, si desidera ottenere solo una risposta rapida alla query di dig.
Ottenere una risposta breve
Per ottenere una risposta breve alla tua domanda, usa l'opzione +short
:
dig linux.org +short
104.18.59.123
104.18.58.123
L'output includerà solo gli indirizzi IP del record A.
Ottenere una risposta dettagliata
Per una risposta più dettagliata, disattiva tutti i risultati utilizzando le opzioni +noall
e quindi attiva solo la sezione di risposta con l'opzione +answer
.
dig linux.org +noall +answer
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux.org +noall +answer
;; global options: +cmd
linux.org. 300 IN A 104.27.167.219
linux.org. 300 IN A 104.27.166.219
Server dei nomi specifico per le query
Per impostazione predefinita, se non viene specificato alcun nameserver, dig
utilizza i server elencati nel file /etc/resolv.conf
.
Per specificare un nameserver in base al quale verrà eseguita la query, utilizzare il @
(at) simbolo seguito dall'indirizzo IP o dall'hostname del nameserver.
Ad esempio, per eseguire una query sul servername di Google (8.8.8.8) per informazioni sul dominio linux.org
utilizzare:
dig linux.org @8.8.8.8
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux.org @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54855
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;linux.org. IN A
;; ANSWER SECTION:
linux.org. 299 IN A 104.27.167.219
linux.org. 299 IN A 104.27.166.219
;; Query time: 34 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jan 10 14:40:41 CET 2020
;; MSG SIZE rcvd: 70
Eseguire una query su un tipo di record
Dig consente di eseguire qualsiasi query DNS valida aggiungendo il tipo di record alla fine della query. Nella sezione seguente, ti mostreremo esempi su come cercare i record più comuni, come A (l'indirizzo IP), CNAME (nome canonico), TXT (record di testo), MX (scambiatore di posta) e NS (nameserver).
Richiesta di record A
Per ottenere un elenco di tutti gli indirizzi per un nome dominio, utilizzare l'opzione a
:
dig +nocmd google.com a +noall +answer
google.com. 299 IN A 172.217.16.174
Come già sapete, se non viene specificato alcun tipo di record DNS, dig richiederà il record A. È inoltre possibile eseguire una query sul record A senza specificare l'opzione a
.
Richiesta di record CNAME
Per trovare il nome di dominio alias utilizzare l'opzione cname
:
dig +nocmd mail.google.com cname +noall +answer
mail.google.com. 601626 IN CNAME googlemail.l.google.com.
Richiesta di record TXT
Utilizzare l'opzione txt
per recuperare tutti i record TXT per un dominio specifico:
dig +nocmd google.com txt +noall +answer
google.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 300 IN TXT "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289"
google.com. 3600 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 300 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com. 3600 IN TXT "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
Richiesta di record MX
Per ottenere un elenco di tutti i server di posta per un dominio specifico utilizzare l'opzione mx
:
dig +nocmd google.com mx +noall +answer
google.com. 491 IN MX 50 alt4.aspmx.l.google.com.
google.com. 491 IN MX 30 alt2.aspmx.l.google.com.
google.com. 491 IN MX 40 alt3.aspmx.l.google.com.
google.com. 491 IN MX 20 alt1.aspmx.l.google.com.
google.com. 491 IN MX 10 aspmx.l.google.com.
Richiesta di record NS
Per trovare i server name autorevoli per il nostro dominio specifico utilizzare l'opzione ns
:
dig +nocmd google.com ns +noall +answer
google.com. 343727 IN NS ns2.google.com.
google.com. 343727 IN NS ns3.google.com.
google.com. 343727 IN NS ns4.google.com.
google.com. 343727 IN NS ns1.google.com.
Richiesta di tutti i record
Utilizzare l'opzione any
per ottenere un elenco di tutti i record DNS per un dominio specifico:
dig +nocmd google.com any +noall +answer
google.com. 172 IN A 172.217.16.174
google.com. 115 IN AAAA 2a00:1450:4001:814::200e
google.com. 431 IN MX 40 alt3.aspmx.l.google.com.
google.com. 431 IN MX 20 alt1.aspmx.l.google.com.
google.com. 431 IN MX 10 aspmx.l.google.com.
google.com. 431 IN MX 50 alt4.aspmx.l.google.com.
google.com. 431 IN MX 30 alt2.aspmx.l.google.com.
google.com. 57 IN SOA ns1.google.com. dns-admin.google.com. 288864427 900 900 1800 60
google.com. 343707 IN NS ns3.google.com.
google.com. 343707 IN NS ns4.google.com.
google.com. 343707 IN NS ns1.google.com.
google.com. 343707 IN NS ns2.google.com.
Ricerca DNS inversa
Per eseguire una query sull'hostname associato a un indirizzo IP specifico, utilizzare l'opzione -x
.
Ad esempio, per eseguire una ricerca inversa su 149.20.4.15
dovrai usare:
dig -x 149.20.4.15 +noall +answer
Come puoi vedere dall'output sotto, l'indirizzo IP 149.20.4.15
è associato al hostname mirror-isc3.debian.org
.
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> -x 149.20.4.15 +noall +answer
;; global options: +cmd
15.4.20.149.in-addr.arpa. 3600 IN PTR mirror-isc3.debian.org.
Ricerche in blocco
Se si desidera eseguire una query su un gran numero di domini, è possibile aggiungerli in un file (un dominio per riga) e utilizzare l'opzione -f
seguita dal nome del file.
Nel seguente esempio, stiamo interrogando i domini elencati nel filedomains.txt
.
Crea il file domains.txt:
nano domains.txt
Inserisci una lista di domini, ad esempio:
ubuntu.org
debian.org
google.com
Digita il seguente comando da terminale:
dig -f domains.txt +short
Dovresti ricevere un output simile al seguente:
69.16.230.42
130.89.148.77
128.31.0.62
149.20.4.15
172.217.16.174
b.root-servers.net.
c.root-servers.net.
d.root-servers.net.
e.root-servers.net.
f.root-servers.net.
g.root-servers.net.
h.root-servers.net.
i.root-servers.net.
a.root-servers.net.
j.root-servers.net.
k.root-servers.net.
l.root-servers.net.
m.root-servers.net.
Il file .digrc
Il comportamento del comando dig può essere controllato impostando le opzioni per utente nel file ${HOME}/.digrc
.
Se il file .digrc
è presente nella home directory dell'utente, le opzioni specificate vengono applicate prima degli argomenti della riga di comando.
Ad esempio, se si desidera visualizzare solo la sezione delle risposte, aprire l'editor di testo e creare il seguente file ~/.digrc
:
nano ~/.digrc
Incollare i seguenti parametri
+nocmd +noall +answer
Quando si eseguirà nuovamente il comando dig, questo leggerà i parametri impostati nel file di configurazione appena creato prima di lanciare il comando.
Conclusione
dig
è uno strumento da riga di comando per la query di informazioni DNS e la risoluzione dei problemi relativi a DNS.