Obviamente, esto es un Q&A organizado, pero tiende a confundir a las personas con frecuencia y no puedo encontrar una pregunta canónica que cubra el tema.
dig +trace
es una gran herramienta de diagnóstico, pero un aspecto de su diseño es ampliamente malentendido: la IP de cada servidor que se consultará se obtiene de su biblioteca de resolución . Esto se pasa por alto fácilmente y, a menudo, solo se convierte en un problema cuando su caché local tiene la respuesta incorrecta para un servidor de nombres en caché.
Análisis detallado
Esto es más fácil de descomponer con una muestra de la salida; Omitiré todo más allá de la primera delegación de 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 consulta inicial para
. IN NS
(servidores de nombres raíz) llega al solucionador local, que en este caso es Comcast. ( 75.75.75.75
) Esto es fácil de detectar.
- La siguiente consulta es para
serverfault.com. IN A
y se ejecuta en contra e.root-servers.net.
, seleccionada al azar de la lista de servidores de nombres raíz que acabamos de recibir. Tiene una dirección IP de 192.203.230.10
, y dado que lo hemos +additional
habilitado, parece provenir del pegamento.
- Como no tiene autoridad para serverfault.com, esto se delega a los
com.
servidores de nombres de TLD.
- Lo que no es obvio de la salida aquí es que
dig
no derivó la dirección IP e.root-servers.net.
del pegamento.
En el fondo, esto es lo que realmente sucedió:
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
engañó y consultó al solucionador local para obtener la dirección IP del servidor de nombres del próximo salto en lugar de consultar el pegamento. ¡Furtivo!
Esto suele ser "lo suficientemente bueno" y no causará problemas a la mayoría de las personas. Desafortunadamente, hay casos extremos. Si, por alguna razón, su caché DNS ascendente proporciona una respuesta incorrecta para el servidor de nombres, este modelo se descompone por completo.
Ejemplo del mundo real:
- el dominio expira
- se pega pegamento en los servidores de nombres de redirección de registradores
- Las IP falsas se almacenan en caché para ns1 y ns2.yourdomain.com
- el dominio se renueva con pegamento restaurado
- cualquier caché con direcciones IP falsas del servidor de nombres continúa enviando personas a un sitio web que dice que el dominio está a la venta
En el caso anterior, +trace
sugerirá que los propios servidores de nombres del propietario del dominio son la fuente del problema, y está a una llamada de decirle incorrectamente a un cliente que sus servidores están mal configurados. Si es algo que puede (o está dispuesto a hacer) hacer algo es otra historia, pero es importante tener la información correcta.
dig +trace
es una gran herramienta, pero como cualquier herramienta, necesita saber qué hace y qué no hace, y cómo solucionar el problema manualmente cuando resulta insuficiente.
Editar:
También debe tenerse en cuenta que dig +trace
no le advertirá sobre los NS
registros que apuntan a CNAME
alias. Esta es una violación de RFC que ISC BIND (y posiblemente otros) no intentará corregir. +trace
estará completamente feliz de aceptar el A
registro que obtiene de su servidor de nombres configurado localmente, mientras que si BIND realizara una recursión completa, rechazaría toda la zona con un SERVFAIL.
Esto puede ser difícil de solucionar si hay pegamento presente; esto funcionará bien hasta que los registros NS se actualicen y luego se rompan de repente. Las delegaciones sin cola siempre romperán la recursividad de BIND cuando un NS
registro apunte a un alias.
+nssearch
?