이것은 분명히 단계적인 Q & A이지만, 사람들을 자주 혼동하는 경향이 있으며 주제를 다루는 정식 질문을 찾을 수 없습니다.
dig +trace
훌륭한 진단 도구이지만 디자인의 한 측면은 널리 이해되지 않습니다. 쿼리 할 모든 서버의 IP는 리졸버 라이브러리에서 얻습니다 . 이것은 쉽게 간과되고 로컬 캐시에 캐시 된 네임 서버에 대한 잘못된 응답 이있을 때 종종 문제가됩니다 .
상세 분석
출력 샘플로 분석하기가 더 쉽습니다. 첫 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
. 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
하지 않은 e.root-servers.net.
것은 접착제에서 IP 주소 를 얻지 못했다 는 것입니다 .
백그라운드에서 이것은 실제로 일어난 일입니다.
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
대해서는 경고하지 않습니다 . 이는 ISC BIND (및 기타)가 정정을 시도하지 않는 RFC 위반입니다. BIND가 전체 재귀를 수행하는 경우 SERVFAIL을 사용하여 전체 영역을 거부하는 반면 로컬로 구성된 네임 서버에서 가져온 레코드 를 수락하면 기쁠 것입니다.NS
CNAME
+trace
A
접착제가 있으면 문제를 해결하기가 까다로울 수 있습니다. NS 레코드가 새로 고쳐질 때까지 제대로 작동 하고 갑자기 중단됩니다. 레코드가 별칭을 가리킬 때 글루리스 위임은 항상 BIND의 재귀를 중단 NS
합니다.
+nssearch
?