兩台 DNS 伺服器之間的查詢
我一直在努力用 BIND9 理解 DNS。
我使用了兩台機器 A 和 B,它們通過 LAN 連接,不供全球使用。
A 正在執行一個管理“範例”域和名為“www”的 Web 伺服器的名稱伺服器。
B 正在執行一個名稱伺服器,將“sub.example”域作為子域進行管理,並具有來自 A 的委派和名為“www”的 Web 伺服器。
配置文件如下。
“named.conf”代表機器 A 上的“範例”。
options { directory "C:\dns\etc"; recursion yes; version "XXX DNS Server 1.0X"; }; logging { channel my_file { file "c:\dns\etc\named.run" versions 5 size 1m; severity debug 0; print-category yes; print-severity yes; print-time yes; }; category default {my_file;}; category queries {my_file;}; category lame-servers {my_file;}; category config {my_file;}; }; zone "." { type hint; file "named.root"; }; zone "localhost" { type master; file "localhost/fwd"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" { type master; file "localhost/rev"; allow-update { none; }; }; zone "example" { type master; file "example/fwd"; allow-update { none; }; }; zone "72.11.16.172.in-addr.arpa" { type master; file "example/rev"; allow-update { none; }; };
機器 A 上“範例”的“區域文件”。
$TTL 1H @ 1H IN SOA example. postmaster.example. ( 200508291 ; Serial 15M ; Refresh 5M ; Retry 1D ; Expire 15M) ; TTL IN NS ns.example. IN A 172.16.11.72 ns IN A 172.16.11.72 www IN A 172.16.11.72 sub IN NS ns.sub.example. ns.sub.example. IN A 172.16.10.37
“named.conf”代表機器 B 上的“範例”。
options { directory "C:\dns\etc"; recursion yes; version "unknown"; allow-transfer {172.16.11.72; }; }; logging { channel my_file { file "c:\dns\etc\named.run" versions 5 size 1m; severity debug 0; print-category yes; print-severity yes; print-time yes; }; category default {my_file;}; category queries {my_file;}; category lame-servers {my_file;}; category config {my_file;}; }; zone "." { type hint; file "named.root"; }; zone "localhost" { type master; file "localhost/fwd"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" { type master; file "localhost/rev"; allow-update { none; }; }; zone "sub.example" { type master; file "example/fwd"; allow-update { none; }; }; zone "37.10.16.172.in-addr.arpa" { type master; file "example/rev"; allow-update { none; }; }; zone "example" { type forward; forward only; forwarders { 172.16.11.72; }; };
機器 B 上“sub.example”的“區域文件”。
$TTL 1H @ 1H IN SOA sub.example. postmaster.sub.example. ( 200508291 ; Serial 15M ; Refresh 5M ; Retry 1D ; Expire 15M) ; TTL IN NS ns.sub.example. IN A 172.16.10.37 ns IN A 172.16.10.37 www IN A 172.16.10.37
現在我在兩台機器上有四台伺服器,如下所示。
"ns.example" and "www.example" in machine A. "ns.sub.example" and "www.sub.example" in machine B.
我可以從 A 解析“www.example”,從 B 解析“www.sub.example”。
但我無法解析 A 中的“www.sub.example”和 B 中的“www.example”。
消息 dig 命令顯示並寫入 BIND 的日誌是底部。
A 和 B 都響應“SERVFAIL”或“連接超時;無法訪問任何伺服器”,但 BIND 的日誌中沒有錯誤消息。
實際上它們是 Windows2008 伺服器,我已經更改了 Windows 防火牆過濾器以接受 UPD 53 埠。
奇怪的是,防火牆日誌 A 和 B 中都沒有 DROP 消息,甚至沒有 ALLOW 消息。
我的意思是如果我從 AI 中探勘“www.example”可以看到 ALLOW 消息,但如果我探勘“www.sub.exaple”我看不到 ALLOW 和 DROP 消息。
我想我必須將這個問題歸類為 BIND 引起的或 Windows 防火牆引起的。
我必須先做什麼?
例如,我猜 DNS 查詢無法發送到名稱伺服器的另一台機器。這就是為什麼 dig 顯示消息“無法訪問任何伺服器”的原因。
如何檢查 DNS 查詢是否已發送,如果未發送,為什麼?
探勘機器 A。
C:\dns\bin>dig www.sub.example ; <<>> DiG 9.9.2-P1 <<>> www.sub.example ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 1777 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.sub.example. IN A ;; Query time: 0 msec ;; SERVER: 172.16.11.72#53(172.16.11.72) ;; WHEN: Wed Mar 13 08:42:04 2013 ;; MSG SIZE rcvd: 44 C:\dns\bin>dig @172.16.10.37 www.sub.example. a ; <<>> DiG 9.9.2-P1 <<>> @172.16.10.37 www.sub.example. a ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached
挖機器 B。
C:\dns\bin>dig www.example ; <<>> DiG 9.9.2-P1 <<>> www.example ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 39790 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.example. IN A ;; Query time: 4015 msec ;; SERVER: 172.16.10.37#53(172.16.10.37) ;; WHEN: Wed Mar 13 09:40:31 2013 ;; MSG SIZE rcvd: 40 C:\dns\bin>dig @172.16.11.72 www.example. a ; <<>> DiG 9.9.2-P1 <<>> @172.16.11.72 www.example ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached
BIND 在 A 的日誌。
13-Mar-2013 14:43:22.624 general: info: managed-keys-zone: loaded serial 0 13-Mar-2013 14:43:22.624 general: info: zone 72.11.16.172.in-addr.arpa/IN: loaded serial 200508291 13-Mar-2013 14:43:22.624 general: info: zone 0.0.127.in-addr.arpa/IN: loaded serial 200508291 13-Mar-2013 14:43:22.624 general: info: zone example/IN: loaded serial 200508291 13-Mar-2013 14:43:22.624 general: info: zone localhost/IN: loaded serial 200508291 13-Mar-2013 14:43:22.624 general: notice: all zones loaded 13-Mar-2013 14:43:22.624 general: notice: running 13-Mar-2013 14:43:22.624 notify: info: zone example/IN: sending notifies (serial 200508291) 13-Mar-2013 14:43:22.624 notify: info: zone 72.11.16.172.in-addr.arpa/IN: sending notifies (serial 200508291) 13-Mar-2013 14:44:34.515 queries: info: client 172.16.11.72#58221 (www.sub.example): query: www.sub.example IN A +E (172.16.11.72) 13-Mar-2013 14:44:39.515 queries: info: client 172.16.11.72#58221 (www.sub.example): query: www.sub.example IN A +E (172.16.11.72) 13-Mar-2013 14:44:44.515 queries: info: client 172.16.11.72#58221 (www.sub.example): query: www.sub.example IN A +E (172.16.11.72)
BIND 在 B 的日誌
13-Mar-2013 14:38:27.281 general: info: managed-keys-zone: loaded serial 0 13-Mar-2013 14:38:27.281 general: info: zone 0.0.127.in-addr.arpa/IN: loaded serial 200508291 13-Mar-2013 14:38:27.281 general: info: zone 37.10.16.172.in-addr.arpa/IN: loaded serial 200508291 13-Mar-2013 14:38:27.281 general: info: zone sub.example/IN: loaded serial 200508291 13-Mar-2013 14:38:27.281 general: info: zone localhost/IN: loaded serial 200508291 13-Mar-2013 14:38:27.296 general: notice: all zones loaded 13-Mar-2013 14:38:27.296 general: notice: running 13-Mar-2013 14:38:27.296 notify: info: zone sub.example/IN: sending notifies (serial 200508291) 13-Mar-2013 14:38:27.296 notify: info: zone 37.10.16.172.in-addr.arpa/IN: sending notifies (serial 200508291) 13-Mar-2013 14:46:08.984 queries: info: client 172.16.10.37#58326 (www.sub.example): query: www.sub.example IN A +E (172.16.10.37) 13-Mar-2013 14:46:11.250 queries: info: client 172.16.10.37#58330 (www.example): query: www.example IN A +E (172.16.10.37) 13-Mar-2013 14:46:17.250 queries: info: client 172.16.10.37#58330 (www.example): query: www.example IN A +E (172.16.10.37)
有幾件事我可以提出建議。
首先是您在失敗探勘中獲得的返回程式碼是 SERVFAIL。這可能有幾個原因,但您首先要排除的一個原因是某些東西阻止了機器之間的名稱查詢。我知道你說你已經關閉了埠 53 UDP 的 Windows 防火牆規則,但我建議你證明(至少對你自己)機器 B 可以執行“dig @machine-a www.example.a”和得到你期望的答案。然後檢查機器 A 是否可以查詢機器 B 的伺服器。
除此之外,查看您的 named.conf 以及任何已命名的消息正在記錄會非常有幫助。向我們展示 named.conf 將允許我們檢查您的區域是否正確指定(您的區域文件中的大多數 RR 都與區域原點相關,因此查看區域的載入方式很重要,這樣我們才能看到原點的真正含義..) 並且將幫助我們確定是否其中一台機器或兩者都應該執行遞歸。
請提供更多資訊;這將使確定正在發生的事情變得更加容易。
編輯:
您提供的 dig 輸出肯定聽起來像是伺服器沒有收到來自其他機器的請求:
; <<>> DiG 9.9.2-P1 <<>> @172.16.10.37 www.sub.example. a ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached
和
; <<>> DiG 9.9.2-P1 <<>> @172.16.11.72 www.example ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached
這似乎很重要,你不同意嗎?