Aug 182012
 

In passato ho pubblicato articoli su come fare un benchmark con namebench per vedere qual è il server DNS più veloce per voi e come cifrare il vostro traffico DNS se utilizzare OpenDNS, ma non ho mai fatto una guida completa del comando dig , probabilmente il miglior comando che si può avere sulla riga di comando per interrogare un server DNS, quindi oggi voglio mostrarvi l’uso di base di questo comando e qualche trucco, con esempi che si possono riutilizzare per i vostri obiettivi.

Ma, come prima cosa, ogni lettore probabilmente sa che cosa è un server DNS, ma comunque è meglio prendere la buona definizione da Wikipedia :

Il sistema dei nomi a dominio, in inglese Domain Name System (spesso indicato con l’acronimo DNS), è un sistema utilizzato per la risoluzione di nomi dei nodi della rete (in inglese host) in indirizzi IP e viceversa. Il servizio è realizzato tramite un database distribuito, costituito dai server DNS.
Il nome DNS denota anche il protocollo che regola il funzionamento del servizio, i programmi che lo implementano, i server su cui questi girano, l’insieme di questi server che cooperano per fornire il servizio.


Installazione

dig (domain information groper), è un comando comune che può essere installato su qualsiasi distribuzione Linux, ma di solito non è installato di default, quindi per l’installazione eseguire questi comandi:

Per gli utenti di Debian, Ubuntu e altre distro che utilizzano i pacchetti deb, utilizzare il seguente comando:

sudo apt-get install dnsutils

Gli utenti di Red Hat Enterprise, CentOS e Fedora possono usare il seguente comando:

sudo yum install bind-utils

In Arch Linux, usate invece:

sudo pacman -S dnsutils

Ed infine in gentoo si può usare

sudo emerge  bind-tools

Come si può vedere la cosa più difficile è quella di scoprire il nome del pacchetto in cui le diverse distribuzioni mettono questa utility.

Uso base

la più tipica, semplice query è per un singolo host. Per impostazione predefinita, tuttavia, dig è abbastanza dettagliato. Probabilmente non c’è bisogno di tutte le informazioni ottenute nell’output di default, ma probabilmente vale la pena sapere che cosa è ogni parte della risposta:

$ dig linuxaria.com
; < <>> DiG 9.8.1-P1 < <>> linuxaria.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 49569
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;linuxaria.com. IN A

;; ANSWER SECTION:
linuxaria.com. 35 IN A 108.162.197.170
linuxaria.com. 35 IN A 108.162.197.70

;; Query time: 47 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Aug 17 23:39:21 2012
;; MSG SIZE rcvd: 63

In uscita vediamo all'inizio la versione di dig che stiamo utilizzando e la richiesta mago (prima riga dell'output) dopo alcune informazioni tecniche generiche e dopo queste 2 righe si comincia con alcune informazioni utili:

;; QUESTION SECTION:

Qui dig mostra ciò che abbiamo chiesto, la query predefinita è per un indirizzo Internet (A).

;; ANSWER SECTION:

In questa sezione troviamo la risposta della nostra query al server DNS, in questo esempio si può vedere che linuxaria.com si risolve con 2 Indirizzi IP: 108.162.197.170 e 108.162.197.70.

;; Query time:

Si tratta di una informazione interessante, ci dice quanto tempo c’è voluto per ottenere una risposta dal nostro server DNS.

;; SERVER:

Questo è l’indirizzo IP del server DNS che ha risposto alla nostra domanda.

Quindi, con nessuna opzione, si ottiene l’indirizzo IP di un indirizzo DNS.

Selezione un server DNS specifico

Se non specificato, dig utilizza come server per le richieste quello presente nel file di configurazione /etc/resolv.conf, ma possiamo cambiare questo comportamento senza modificare il file, basta utilizzare il parametro @IPADDRESS, così se abbiamo un server DNS installato sul nostro server e vogliamo verificare che abbia caricato tutte le zone correttamente possiamo utilizzare il comando

dig @127.0.0.1 mysite.com

O se vogliamo comparare i tempi di risposta di Google DNS e Opendns possiamo dare di seguito i due comandi:

dig @8.8.8.8 linuxaria.com
dig @208.67.220.220 linuxaria.com

E verificare qual’è il numero più basso nel parametro Quey time delle due risposte.

Usare dig per fare una richiesta IPV6

Di default dig usa ipv4, ma ci sono 2 modi per usare dig con ipv6

1) Usare l’opzione -6 per forzare dig ad usare solo il trasporto IPv6.

dig -6 @8.8.8.8 linuxaria.com

;; QUESTION SECTION:
;linuxaria.com. IN A

;; ANSWER SECTION:
linuxaria.com. 168 IN A 108.162.197.170
linuxaria.com. 168 IN A 108.162.197.70

;; Query time: 61 msec
;; SERVER: ::ffff:8.8.8.8#53(::ffff:8.8.8.8)
;; WHEN: Sat Aug 18 00:14:57 2012
;; MSG SIZE rcvd: 63

In questo esempio abbiamo utilizzato solo il protocollo IPV6 e quindi abbiamo utilizzato il server ::: ffff:8.8.8.8 come server DNS, si noti che la risposta è ancora un indirizzo IPv4, è possibile ottenere lo stesso risultato utilizzando il parametro @ con un indirizzo IPv6 senza metetre il parametro -6, quindi si ottiene lo stesso risultato con il comando:

dig @::ffff:8.8.8.8 linuxaria.com

2)È possibile utilizzare dig per fare richiesta di un indirizzo IPV6, per fare questo dobbiamo aggiungere alla fine il parametro AAAA. Un indirizzo IPv4 a 32 bit è un record A. IPv6 è quattro volte più grande – 128 bit – quindi è finito per essere un un record quad-A. Quindi per conoscere l’indirizzo IPV6 di linuxaria.com è possibile utilizzare il comando

dig @8.8.8.8 linuxaria.com AAAA

;; QUESTION SECTION:
;linuxaria.com. IN AAAA

;; ANSWER SECTION:
linuxaria.com. 300 IN AAAA 2600:3c03::f03c:91ff:fe93:b7b3

;; Query time: 51 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)

In questo esempio abbiamo chiesto al server 8.8.8.8 DNS, tramite protocollo IPV4, l’indirizzo IPV6 di linuxaria.com e abbiamo ottenuto il risultato: 2600:3c03::f03c:91ff:fe93:b7b3

Usare dig per scoprire il record MX di un dominio

Allo stesso modo in cui abbiamo chiesto al server DNS un record AAAA possiamo fare una query per un record MX (mail exchanger record), che specifica un server di posta che accetta messaggi di posta elettronica a nome del dominio.

dig @8.8.8.8 linuxaria.com MX

;; QUESTION SECTION:
;linuxaria.com. IN MX

;; ANSWER SECTION:
linuxaria.com. 110 IN MX 5 alt2.aspmx.l.google.com.
linuxaria.com. 110 IN MX 1 aspmx.l.google.com.
linuxaria.com. 110 IN MX 10 aspmx3.googlemail.com.
linuxaria.com. 110 IN MX 5 alt1.aspmx.l.google.com.
linuxaria.com. 110 IN MX 10 aspmx2.googlemail.com.

Abbiamo in nella sezione di risposta multipli server, questo è abbastanza comune, prima di ogni nome di server è possibile vedere un numero che è la priorità del server MX che segue, quindi nel mio caso il primo MX è aspmx.l.google.com.

Se si desidera visualizzare tutti i record per un dominio è possibile utilizzare la parola any come parametro:
dig @8.8.8.8 linuxaria.com any
;; QUESTION SECTION:
;linuxaria.com. IN ANY

;; ANSWER SECTION:
linuxaria.com. 300 IN AAAA 2600:3c03::f03c:91ff:fe93:b7b3
linuxaria.com. 300 IN MX 5 alt2.aspmx.l.google.com.
linuxaria.com. 300 IN MX 1 aspmx.l.google.com.
linuxaria.com. 300 IN MX 5 alt1.aspmx.l.google.com.
linuxaria.com. 43200 IN NS gabe.ns.cloudflare.com.
linuxaria.com. 300 IN MX 10 aspmx3.googlemail.com.
linuxaria.com. 300 IN A 108.162.197.70
linuxaria.com. 300 IN A 108.162.197.170
linuxaria.com. 300 IN MX 10 aspmx2.googlemail.com.
linuxaria.com. 43200 IN NS ruth.ns.cloudflare.com.
linuxaria.com. 43200 IN SOA gabe.ns.cloudflare.com. dns.cloudflare.com. 2012062111 10000 2400 604800 3600

Ricordate che il default è di fare una query di record A.

Fare una ricerca inversa con dig

Può capitare di avere un indirizzo IP e volete sapere il nome, per questo si può utilizzare l’opzione -x

dig -x 8.8.4.4 +short
google-public-dns-b.google.com

In questo esempio ho usato anche il parametro +short che rende l’uscita veramente … corta. Insomma mostra solo la risposta, in questo caso possiamo vedere che il nome dell’indirizzo 8.8.4.4 è google-pubblico-dns-b.google.com.
+short può essere utilizzato con qualsiasi query per mostrare solo la risposta.

Conclusioni

E questo è abbastanza per un tutorial di base, qui ci sono gli usi più comuni del comando dig , si può anche fare query multiple in 1 riga di comando, ma non trovo questa cosa così utile nella vita reale , dove si può solo dare 2 o 3 differenti (e facili) comandi al posto di 1 lunga riga di comandi. Ora avete la base per chiedere qualsiasi cosa al vostro server DNS, buon divertimento!

Popular Posts:

Flattr this!

  3 Responses to “Come eseguire una query ad un server DNS da Linux usando DIG, con esempi”

  1. ;; ANSWER SECTION:
    linuxaria.com. 168 IN A 108.162.197.170
    linuxaria.com. 168 IN A 108.162.197.70

    Excuse me, i’m a noob… i type “108.162.197.170” and “108.162.197.70” in location bar of firefox, but i got a dns error. why?
    many thanks

    Scusatemi, sono un principiante… se scrivo “108.162.197.170” e “108.162.197.70” come indirizzo in firefox ottengo un errore di dns. Perché?
    mille grazie

  2. Pretty cool. Very appreciated. 🙂

  3. Nice article. Helped me a lot. Thanks!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*