Come funziona effettivamente dig + trace?


19

Quando guardo la pagina man per scavare, ottengo quanto segue:

+[no]trace
  Toggle tracing of the delegation path from the root name servers for the name
  being looked up. Tracing is disabled by default. When tracing is enabled, dig
  makes iterative queries to resolve the name being looked up. It will follow
  referrals from the root servers, showing the answer from each server that was
  used to resolve the lookup.

Quindi, come funziona, in pratica? Quale sarebbe la serie equivalente di digcomandi (senza + traccia) che sarebbe funzionalmente equivalente?

Risposte:


37

dig +trace funziona fingendo di essere un server dei nomi e funziona lungo l'albero dello spazio dei nomi utilizzando query iterative che iniziano dalla radice dell'albero, seguendo i riferimenti lungo il percorso.

La prima cosa da fare è chiedere al normale server DNS di sistema i record NS per "."

Dopo aver ottenuto una risposta, che sarà l'elenco corrente dei server dei nomi di root, ne sceglierà uno e quindi chiederà il record A per quel nome se non lo ha ottenuto nella sezione dei record aggiuntivi la prima volta, quindi ha ottenuto un indirizzo IP a cui inviare la query successiva. Diciamo che sceglie f.root-servers.net il cui indirizzo IP è 192.5.5.241.

A questo punto, usiamo dig +trace www.google.co.uk.come nostro comando con un nome di dominio per cui vogliamo tracciare il percorso di risoluzione.

La prossima query dietro le quinte sarà questa:

$ dig +norecurse @192.5.5.241 www.google.co.uk

   ; <<>> DiG 9.9.4 <<>> +norecurse @192.5.5.241 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8962
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 11, ADDITIONAL: 15

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk.              IN      A

;; AUTHORITY SECTION:
uk.                     172800  IN      NS      ns5.nic.uk.
uk.                     172800  IN      NS      ns6.nic.uk.
uk.                     172800  IN      NS      ns4.nic.uk.
uk.                     172800  IN      NS      nsc.nic.uk.
uk.                     172800  IN      NS      ns2.nic.uk.
uk.                     172800  IN      NS      ns3.nic.uk.
uk.                     172800  IN      NS      nsd.nic.uk.
uk.                     172800  IN      NS      nsa.nic.uk.
uk.                     172800  IN      NS      ns7.nic.uk.
uk.                     172800  IN      NS      nsb.nic.uk.
uk.                     172800  IN      NS      ns1.nic.uk.

;; ADDITIONAL SECTION:
ns1.nic.uk.             172800  IN      A       195.66.240.130
ns2.nic.uk.             172800  IN      A       217.79.164.131
ns3.nic.uk.             172800  IN      A       213.219.13.131
ns4.nic.uk.             172800  IN      A       194.83.244.131
ns5.nic.uk.             172800  IN      A       213.246.167.131
ns6.nic.uk.             172800  IN      A       213.248.254.130
ns7.nic.uk.             172800  IN      A       212.121.40.130
nsa.nic.uk.             172800  IN      A       156.154.100.3
nsb.nic.uk.             172800  IN      A       156.154.101.3
nsc.nic.uk.             172800  IN      A       156.154.102.3
nsd.nic.uk.             172800  IN      A       156.154.103.3
ns1.nic.uk.             172800  IN      AAAA    2a01:40:1001:35::2
ns4.nic.uk.             172800  IN      AAAA    2001:630:181:35::83
nsa.nic.uk.             172800  IN      AAAA    2001:502:ad09::3

;; Query time: 45 msec
;; SERVER: 192.5.5.241#53(192.5.5.241)
;; WHEN: Tue Feb 11 19:19:14 MST 2014
;; MSG SIZE  rcvd: 507

Wow, quindi ora sappiamo che ci sono nameserver per uke questa è l'unica cosa che il root server conosce. Questo è un rinvio , perché non abbiamo chiesto la ricorsione ( +norecursela disattiva).

Ottimo, risciacquiamo e ripetiamo. Questa volta scegliamo uno dei uknameserver e facciamo la stessa domanda .

$ dig +norecurse @195.66.240.130 www.google.co.uk

; <<>> DiG 9.9.4 <<>> +norecurse @195.66.240.130 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 618
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk.              IN      A

;; AUTHORITY SECTION:
google.co.uk.           172800  IN      NS      ns1.google.com.
google.co.uk.           172800  IN      NS      ns3.google.com.
google.co.uk.           172800  IN      NS      ns2.google.com.
google.co.uk.           172800  IN      NS      ns4.google.com.

;; Query time: 354 msec
;; SERVER: 195.66.240.130#53(195.66.240.130)
;; WHEN: Tue Feb 11 19:22:47 MST 2014
;; MSG SIZE  rcvd: 127

Fantastico, ora abbiamo scoperto che il uknameserver di livello superiore sa che c'è una zona chiamata google.co.uke ci dice di andare a fare la nostra domanda a quei nameserver. Questo è un altro riferimento.

Risciacqua, ripeti.

Questa volta, tuttavia, non abbiamo ottenuto i record A nella sezione dei record aggiuntivi della risposta, quindi scegliamo uno, diciamo ns2.google.com, e dobbiamo andare a trovare il suo indirizzo. Abbiamo Ripartiamo una query (alla radice di nuovo) e inseguire l'albero per trovare l'indirizzo IP per ns2.google.com. Salterò quella parte per brevità, ma apprendiamo che l'IP per esso è 216.239.34.10.

Quindi la nostra prossima query è:

$ dig +norecurse @216.239.34.10 www.google.co.uk

; <<>> DiG 9.9.4 <<>> +norecurse @216.239.34.10 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33404
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.co.uk.              IN      A

;; ANSWER SECTION:
www.google.co.uk.       300     IN      A       74.125.225.216
www.google.co.uk.       300     IN      A       74.125.225.223
www.google.co.uk.       300     IN      A       74.125.225.215

;; Query time: 207 msec
;; SERVER: 216.239.34.10#53(216.239.34.10)
;; WHEN: Tue Feb 11 19:26:43 MST 2014
;; MSG SIZE  rcvd: 82

E abbiamo finito! (finalmente) Come facciamo a sapere che abbiamo finito? Abbiamo ricevuto una risposta alla nostra domanda, che era il record A per www.google.co.uk. Puoi anche dirlo perché non è più un riferimento, il aabit è impostato nell'ultima risposta, il che significa che questa è la risposta autorevole per la tua query.

Quindi è quello che sta succedendo ad ogni passo lungo la strada quando lo usi dig +trace.

Si noti che se si dispone di una versione di dig compatibile con DNSSEC e si aggiunge +dnssecal comando, è possibile che vengano visualizzati più record. Ciò che quei record extra sono lasciati come esercizio per il lettore ... ma entra nel modo in cui dig +sigchasefunziona.


Un dubbio: nella richiesta a @ 192.5.5.241, le risposte nella SEZIONE AGGIUNTIVA, sono i cosiddetti record di colla ?
José Tomás Tocino,

Sì, perché il nome dei record A esiste all'interno o al di sotto della zona cui fanno riferimento i record NS nella sezione Autorità, quindi sono necessari per continuare il processo di risoluzione.
milli,

1

Diciamo che stavi guardando in alto

www.domain.co.uk

Il DNS è una gerarchia, che inizia con i server root che sanno quali server sono autorevoli per i TLD (l'ultima parte del nome di dominio). Quindi l'equivalente a

dig subdomain.domain.co.uk

Passo dopo passo sarebbe:

dig SOA @g.root-servers.net uk

(ad esempio, esegui una query su uno dei server principali per trovare chi è autorevole per .uk)

Questo risponde con una serie di server britannici autorevoli, quindi chiediamo loro chi ha co.uk

dig SOA @ns6.nic.uk co.uk

E ci viene detto che la SOA (autorità) si trova sugli stessi server

Quindi, interroga ns1.nic.uk per vedere chi ha domain.co.uk

dig SOA @ns1.nic.uk domain.co.uk

Questo ritorna e dice che l'autorità per il dominio è su dns.dns1.de (più i backup);

Quindi ora possiamo chiedere il record A:

dig  A @dns.dns2.de www.domain.co.uk

;; QUESTION SECTION:
;www.domain.co.uk.              IN      A

;; ANSWER SECTION:
www.domain.co.uk.       86400   IN      CNAME   domain.co.uk.
domain.co.uk.           86400   IN      A       95.130.17.36

Come posso affrontare l'argomento della delega? Supponiamo che l'autorità per domain.co.uk sia dns.dns1.de, ma members.domain.co.uk è stata delegata a dns.dns2.com e sto cercando joe.members.domain.co.uk. Come faccio a sapere quando è "sicuro" uscire dalla giostra della SOA e interrogare gli altri record?
Doktor J,

Il processo attuale richiede sempre il Arecord. Non c'è magico passaggio alle SOAquery. (Non potrebbe esserci, dal momento che un proxy di risoluzione non saprebbe quando tornare indietro.) Non c'è nemmeno una modifica magica del nome di dominio nella domanda. È www.domain.co.uk.tutto fino in fondo. Questo è importante da ricordare, perché ciò significa che tutti i server di contenuti interrogati possono fornire la risposta completa .
JdeBP,

@DoktorJ Sì, questo è il mio errore JdeBP ha ragione. Stavo cercando di ottenere un punto con la SOA, ma si è aggrovigliato nella risposta. L'altra risposta è più accurata.
Paul,

@Paul grazie per il follow-up; Ho contrassegnato l'altra risposta come la risposta corretta per aiutare chiunque possa finire qui (senza offesa per te!) :)
Doktor J,

@doktorj Niente affatto, è esattamente come dovrebbe essere :)
Paul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.