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 dal nome host 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.