Це, очевидно, поетапні запитання, але це часто бентежить людей, і я не можу знайти канонічне питання, що висвітлює цю тему.
dig +trace
є чудовим інструментом діагностики, але один аспект його дизайну широко не зрозумілий: IP-адреса кожного сервера, на який буде проведено запит, отримується з вашої бібліотеки резолюцій . Це дуже легко помітити і часто стає проблемою лише тоді, коли ваш локальний кеш має неправильну відповідь на кешування серверу імен.
Детальний аналіз
Це простіше розбити за допомогою вибірки результату; Я опущу все, що минуло першої делегації НС.
; <<>> 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
- Початковий запит на
. IN NS
(кореневі сервери імен) потрапляє в локальну роздільну здатність, яка в даному випадку - Comcast. ( 75.75.75.75
) Це легко помітити.
- Наступний запит призначений для
serverfault.com. IN A
і працює проти e.root-servers.net.
, випадково вибраний зі списку кореневих серверів імен, який ми щойно отримали. У нього IP-адреса 192.203.230.10
, і оскільки ми +additional
ввімкнули, схоже, він походить від клею.
- Оскільки він не є авторитетним для serverfault.com, це делегується серверам
com.
імен TLD.
- Що не очевидно з висновку тут, це те, що
dig
не отримав IP-адресу e.root-servers.net.
від клею.
На задньому плані ось що насправді сталося:
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
обдурив і порадився з місцевим рішенням, щоб отримати IP-адресу наступного сервера імен хоп замість консультації з клеєм. Підлий!
Зазвичай це "досить добре" і не спричинить проблем для більшості людей. На жаль, є крайові випадки. Якщо з будь-якої причини ваш кеш-код DNS надає неправильну відповідь для сервера імен, ця модель повністю руйнується.
Приклад реального світу:
- термін дії домену закінчується
- Клей перейменований у серверах перенаправлення імен реєстратора
- неправдиві IP-адреси кешовані для ns1 та ns2.yourdomain.com
- поновлюється домен відновленим клеєм
- будь-які кеші з неправдивими IP-серверами імен продовжують надсилати людей на веб-сайт, який говорить, що домен продається
У наведеному вище випадку +trace
буде запропоновано, що власні сервери імен власників домену є джерелом проблеми, і ви за один дзвінок від неправильного повідомлення клієнту про те, що його сервери неправильно налаштовані. Чи це щось, про що ви можете (або готові) зробити щось інше, але важливо мати правильну інформацію.
dig +trace
це чудовий інструмент, але як і будь-який інструмент, ви повинні знати, що він робить, а що не робить, і як усунути проблему вручну, коли виявиться недостатньою.
Редагувати:
Слід також зазначити, що dig +trace
не попередить вас про NS
записи, які вказують на CNAME
псевдоніми. Це порушення RFC, яке ISC BIND (і, можливо, інші) не намагатиметься виправити. +trace
буде повністю радий прийняти A
запис, який він отримує від локально налаштованого сервера імен, тоді як якби BIND виконував повну рекурсію, він би відхилив всю зону за допомогою SERVFAIL.
Це може бути складно вирішити, якщо клей присутній; це буде працювати чудово, доки записи NS не будуть оновлені , а потім раптом зламаються. Безглузді делегації завжди порушують рекурсію BIND, коли NS
рекорд показує псевдонім.
+nssearch
?