Questa è ovviamente una domanda e risposta graduale , ma tende a confondere spesso le persone e non riesco a trovare una domanda canonica che tratti l'argomento.
dig +trace
è un ottimo strumento diagnostico, ma un aspetto del suo design è ampiamente frainteso: l'IP di ogni server su cui verrà eseguita la query viene ottenuto dalla libreria del resolver . Questo è molto facilmente trascurato e spesso finisce per diventare un problema solo quando la cache locale ha la risposta errata per un nameserver memorizzato nella cache.
Analisi dettagliata
Questo è più semplice da scomporre con un campione dell'output; Ometterò tutto oltre la prima delegazione NS.
; <<>> DiG 9.7.3 <<>> +trace +additional serverfault.com
;; global options: +cmd
. 121459 IN NS d.root-servers.net.
. 121459 IN NS e.root-servers.net.
. 121459 IN NS f.root-servers.net.
. 121459 IN NS g.root-servers.net.
. 121459 IN NS h.root-servers.net.
. 121459 IN NS i.root-servers.net.
. 121459 IN NS j.root-servers.net.
. 121459 IN NS k.root-servers.net.
. 121459 IN NS l.root-servers.net.
. 121459 IN NS m.root-servers.net.
. 121459 IN NS a.root-servers.net.
. 121459 IN NS b.root-servers.net.
. 121459 IN NS c.root-servers.net.
e.root-servers.net. 354907 IN A 192.203.230.10
f.root-servers.net. 100300 IN A 192.5.5.241
f.root-servers.net. 123073 IN AAAA 2001:500:2f::f
g.root-servers.net. 354527 IN A 192.112.36.4
h.root-servers.net. 354295 IN A 128.63.2.53
h.root-servers.net. 108245 IN AAAA 2001:500:1::803f:235
i.root-servers.net. 355208 IN A 192.36.148.17
i.root-servers.net. 542090 IN AAAA 2001:7fe::53
j.root-servers.net. 354526 IN A 192.58.128.30
j.root-servers.net. 488036 IN AAAA 2001:503:c27::2:30
k.root-servers.net. 354968 IN A 193.0.14.129
k.root-servers.net. 431621 IN AAAA 2001:7fd::1
l.root-servers.net. 354295 IN A 199.7.83.42
;; Received 496 bytes from 75.75.75.75#53(75.75.75.75) in 10 ms
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
a.gtld-servers.net. 172800 IN A 192.5.6.30
a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
b.gtld-servers.net. 172800 IN A 192.33.14.30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
c.gtld-servers.net. 172800 IN A 192.26.92.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
l.gtld-servers.net. 172800 IN A 192.41.162.30
;; Received 505 bytes from 192.203.230.10#53(e.root-servers.net) in 13 ms
- La query iniziale per
. IN NS
(nameserver root) colpisce il resolver locale, che in questo caso è Comcast. ( 75.75.75.75
) Questo è facile da individuare.
- La query successiva è pro
serverfault.com. IN A
e contro e.root-servers.net.
, selezionata casualmente dall'elenco dei nameserver di root che abbiamo appena ricevuto. Ha un indirizzo IP di 192.203.230.10
e, poiché abbiamo +additional
abilitato, sembra provenire dalla colla.
- Poiché non è autorevole per serverfault.com, questo viene delegato ai
com.
nameserver TLD.
- Ciò che non è ovvio dall'output qui è che
dig
non deriva l'indirizzo IP della e.root-servers.net.
colla.
Sullo sfondo, questo è ciò che è realmente accaduto:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
02:03:43.301022 IP 192.0.2.1.59900 > 75.75.75.75.53: 63418 NS? . (17)
02:03:43.327327 IP 75.75.75.75.53 > 192.0.2.1.59900: 63418 13/0/14 NS k.root-servers.net., NS l.root-servers.net., NS m.root-servers.net., NS a.root-servers.net., NS b.root-servers.net., NS c.root-servers.net., NS d.root-servers.net., NS e.root-servers.net., NS f.root-servers.net., NS g.root-servers.net., NS h.root-servers.net., NS i.root-servers.net., NS j.root-servers.net. (512)
02:03:43.333047 IP 192.0.2.1.33120 > 75.75.75.75.53: 41110+ A? e.root-servers.net. (36)
02:03:43.333096 IP 192.0.2.1.33120 > 75.75.75.75.53: 5696+ AAAA? e.root-servers.net. (36)
02:03:43.344301 IP 75.75.75.75.53 > 192.0.2.1.33120: 41110 1/0/0 A 192.203.230.10 (52)
02:03:43.344348 IP 75.75.75.75.53 > 192.0.2.1.33120: 5696 0/1/0 (96)
02:03:43.344723 IP 192.0.2.1.37085 > 192.203.230.10.53: 28583 A? serverfault.com. (33)
02:03:43.423299 IP 192.203.230.10.53 > 192.0.2.1.37085: 28583- 0/13/14 (493)
+trace
ingannato e consultato il resolver locale per ottenere l'indirizzo IP del server dei nomi hop successivo invece di consultare la colla. Subdolo!
Questo di solito è "abbastanza buono" e non causerà un problema per la maggior parte delle persone. Sfortunatamente, ci sono casi limite. Se per qualsiasi motivo la cache DNS upstream fornisce la risposta errata per il nameserver, questo modello si interrompe completamente.
Esempio nel mondo reale:
- il dominio scade
- la colla viene rimandata ai server dei nomi di reindirizzamento del registrar
- IP falsi vengono memorizzati nella cache per ns1 e ns2.tuodominio.com
- il dominio si rinnova con la colla restaurata
- eventuali cache con IP di nameserver fasulli continuano a inviare persone a un sito Web che afferma che il dominio è in vendita
Nel caso sopra, +trace
suggerirai che i nameserver del proprietario del dominio sono la fonte del problema e sei a una chiamata dal dire erroneamente a un cliente che i loro server sono configurati male. Se è qualcosa su cui puoi (o sei disposto a) fare qualcosa è un'altra storia, ma è importante avere le informazioni giuste.
dig +trace
è un ottimo strumento, ma come qualsiasi strumento, devi sapere cosa fa e cosa non fa e come risolvere manualmente il problema quando si rivela insufficiente.
Modificare:
Va anche notato che dig +trace
non ti avvertirà dei NS
record che indicano CNAME
alias. Questa è una violazione di RFC che ISC BIND (e forse altri) non tenterà di correggere. +trace
sarà completamente felice di accettare il A
record che ottiene dal nameserver configurato localmente, mentre se BIND dovesse eseguire la ricorsione completa, rifiuterebbe l'intera zona con un SERVFAIL.
Questo può essere difficile da risolvere se è presente la colla; questo funzionerà bene fino a quando i record NS non verranno aggiornati , per poi rompersi improvvisamente. Le delegazioni senza colla interromperanno sempre la ricorsione di BIND quando un NS
record indica un alias.
+nssearch
?