Đây rõ ràng là một câu hỏi và trả lời được dàn dựng, nhưng điều này có xu hướng gây nhầm lẫn cho mọi người thường xuyên và tôi không thể tìm thấy một câu hỏi kinh điển về chủ đề này.
dig +trace
là một công cụ chẩn đoán tuyệt vời, nhưng một khía cạnh trong thiết kế của nó bị hiểu lầm rộng rãi: IP của mọi máy chủ sẽ được truy vấn được lấy từ thư viện trình phân giải của bạn . Điều này rất dễ bị bỏ qua và thường chỉ trở thành một vấn đề khi bộ đệm cục bộ của bạn có câu trả lời sai cho một máy chủ lưu trữ tên.
Phân tích chi tiết
Điều này dễ dàng hơn để phá vỡ với một mẫu đầu ra; Tôi sẽ bỏ qua mọi thứ qua phái đoàn NS đầu tiên.
; <<>> 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
- Truy vấn ban đầu cho
. IN NS
(máy chủ tên gốc) đánh vào trình phân giải cục bộ, trong trường hợp này là Comcast. ( 75.75.75.75
) Điều này rất dễ nhận ra.
- Truy vấn tiếp theo là cho
serverfault.com. IN A
và chạy ngược lại e.root-servers.net.
, được chọn ngẫu nhiên từ danh sách các máy chủ tên gốc mà chúng ta vừa có. Nó có một địa chỉ IP 192.203.230.10
và vì chúng tôi đã +additional
kích hoạt nên nó xuất hiện từ keo.
- Vì nó không có thẩm quyền cho serverfault.com, nên điều này được ủy quyền cho các
com.
máy chủ tên TLD.
- Điều không rõ ràng từ đầu ra ở đây là
dig
không lấy được địa chỉ IP e.root-servers.net.
từ keo.
Trong nền, đây là những gì thực sự đã xảy ra:
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
lừa và tham khảo bộ giải quyết cục bộ để lấy địa chỉ IP của máy chủ tên hop tiếp theo thay vì tư vấn keo. Lén lút!
Điều này thường là "đủ tốt" và sẽ không gây ra vấn đề cho hầu hết mọi người. Thật không may, có trường hợp cạnh. Nếu vì bất kỳ lý do gì, bộ đệm DNS ngược dòng của bạn cung cấp câu trả lời sai cho máy chủ tên, mô hình này bị hỏng hoàn toàn.
Ví dụ thế giới thực:
- tên miền hết hạn
- keo được bổ sung tại máy chủ tên chuyển hướng đăng ký
- IP không có thật được lưu trữ cho ns1 và ns2.yourdomain.com
- tên miền được làm mới với keo phục hồi
- bất kỳ bộ nhớ cache nào có IP máy chủ tên không có thật tiếp tục gửi mọi người đến một trang web cho biết tên miền được rao bán
Trong trường hợp trên, +trace
sẽ đề xuất rằng máy chủ tên riêng của chủ sở hữu tên miền là nguồn gốc của vấn đề và bạn chỉ cần gọi một câu không chính xác cho khách hàng rằng máy chủ của họ bị định cấu hình sai. Cho dù đó là điều gì đó bạn có thể (hoặc sẵn sàng) làm điều gì đó là một câu chuyện khác, nhưng điều quan trọng là phải có thông tin chính xác.
dig +trace
là một công cụ tuyệt vời, nhưng giống như bất kỳ công cụ nào, bạn cần biết nó làm gì và không làm gì, và làm thế nào để khắc phục sự cố một cách thủ công khi nó không đủ.
Chỉnh sửa:
Cũng cần lưu ý rằng dig +trace
sẽ không cảnh báo bạn về NS
các hồ sơ chỉ vào CNAME
bí danh. Đây là vi phạm RFC mà ISC BIND (và có thể cả những người khác) sẽ không cố gắng sửa. +trace
sẽ hoàn toàn vui vẻ chấp nhận A
bản ghi mà nó nhận được từ máy chủ tên được cấu hình cục bộ của bạn, trong khi nếu BIND được thực hiện đệ quy đầy đủ thì nó sẽ từ chối toàn bộ khu vực bằng một SERVFAIL.
Điều này có thể khó khăn để khắc phục sự cố nếu có keo; Điều này sẽ hoạt động tốt cho đến khi các bản ghi NS được làm mới , sau đó đột nhiên bị phá vỡ. Các phái đoàn không có ánh sáng sẽ luôn phá vỡ đệ quy của BIND khi một NS
kỷ lục chỉ vào một bí danh.
+nssearch
?