
(重寫這個問題的大部分內容,因為我的許多原始測試與新資訊無關)
我在使用 Server 2012R2 DNS 伺服器時遇到問題。這些問題的最大副作用是 Exchange 電子郵件無法通過。在嘗試 A 記錄之前交換 AAAA 記錄的查詢。當它看到 AAAA 記錄的 SERVFAIL 時,它甚至不會嘗試 A 記錄,而是放棄。
對於某些網域,當查詢我的 Active Directory DNS 伺服器時,我得到 SERVFAIL 而不是 NOERROR,但沒有結果。
我已在多個執行 DNS 的不同 Server 2012R2 網域控制站上嘗試過此操作。其中之一是完全獨立的網域,位於不同防火牆和網際網路連線後面的不同網路上。
我知道導致此問題的兩個地址是smtpgw1.gov.on.ca
和mxmta.owm.bell.net
我一直dig
在 Linux 機器上使用來測試這個(192.168.5.5 是我的網域控制器):
grant@linuxbox:~$ dig @192.168.5.5 smtpgw1.gov.on.ca -t AAAA
; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> @192.168.5.5 smtpgw1.gov.on.ca -t AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 56328
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;smtpgw1.gov.on.ca. IN AAAA
;; Query time: 90 msec
;; SERVER: 192.168.5.5#53(192.168.5.5)
;; WHEN: Wed Oct 21 14:09:10 EDT 2015
;; MSG SIZE rcvd: 46
但是針對公共網域控制器的查詢按預期工作:
grant@home-ssh:~$ dig @4.2.2.1 smtpgw1.gov.on.ca -t AAAA
; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> @4.2.2.1 smtpgw1.gov.on.ca -t AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 269
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 8192
;; QUESTION SECTION:
;smtpgw1.gov.on.ca. IN AAAA
;; Query time: 136 msec
;; SERVER: 4.2.2.1#53(4.2.2.1)
;; WHEN: Wed Oct 21 14:11:19 EDT 2015
;; MSG SIZE rcvd: 46
正如我所說,我已經在兩個不同的網路和網域上嘗試過。一種是全新的域名,它肯定具有 DNS 的所有預設設定。另一個已遷移到 Server 2012,因此 2003/2008 中的一些舊設定可能已保留。我對他們兩個都得到相同的結果。
停用 EDNS 可以dmscnd /config /enableednsprobes 0
修復此問題。我看到很多關於 Server 2003 中 EDNS 存在問題的搜尋結果,但與我在 Server 2012 中看到的相符的不多。不過,停用 EDNS 應該只是一個臨時解決方法 - 它會阻止使用 DNSSEC,並可能導致其他問題。
我還看到了一些有關 Server 2008R2 和 EDNS 問題的帖子,但這些帖子說 Server 2012 中的問題已修復,因此它應該可以正常工作。
我也嘗試過啟用 DNS 的偵錯日誌。我可以看到我期望的資料包,但它並沒有讓我深入了解它返回 SERVFAIL 的原因。以下是 DNS 伺服器調試日誌的相關部分:
第一個封包 - 從客戶端到我的 DNS 伺服器的查詢
2015 年 10 月 16 日上午 9:42:29 0974 封包 000000EFF1BF01A0 UDP 接收 172.16.0.254 a61e Q [2001 D 無錯誤] AAAA (7)smtpgw1(3)(002) UDP 問題資訊位於 000000EFF1BF01A0 插座 = 508 遠端位址172.16.0.254,連接埠50764 時間查詢=4556080,排隊=0,過期=0 緩衝區長度 = 0x0fa0 (4000) 訊息長度 = 0x002e (46) 訊息: XID 0xa61e 標誌 0x0120 QR 0(問題) 操作碼 0(查詢) AA 0 TC 0 RD 1 RA 0 Z 0 光碟0 西元1 R代碼 0(無錯誤) 數量 1 帳戶 0 NSCOUNT 0 ARCOUNT 1 問題部分: 偏移量 = 0x000c,RR 計數 = 0 名稱“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q型 AAAA (28) QCLASS 1 答案部分: 空的 權力部分: 空的 附加部分: 偏移量 = 0x0023,RR 計數 = 0 名稱“(0)” 類型選擇 (41) 4096級 生存時間0 DLEN 0 數據 緩衝區大小 = 4096 R 代碼擴充 = 0 R 代碼已滿 = 0 版本 = 0 標誌= 0
第二個封包 - 從我的 DNS 伺服器到他們的 DNS 伺服器的查詢
2015 年 10 月 16 日上午 9:42:29 0974 封包 000000EFF0A22160 UDP Snd 204.41.8.237 3e6c Q [0000 無錯誤] AAAA (7)smtpgw1(3) UDP 問題資訊位於 000000EFF0A22160 插座 = 9812 遠端位址204.41.8.237,連接埠53 時間查詢=0,排隊=0,過期=0 緩衝區長度 = 0x0fa0 (4000) 訊息長度 = 0x0023 (35) 訊息: XID 0x3e6c 標誌 0x0000 QR 0(問題) 操作碼 0(查詢) AA 0 TC 0 讀值0 RA 0 Z 0 光碟0 廣告0 R代碼 0(無錯誤) 數量 1 帳戶 0 NSCOUNT 0 ARCOUNT 0 問題部分: 偏移量 = 0x000c,RR 計數 = 0 名稱“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q型 AAAA (28) QCLASS 1 答案部分: 空的 權力部分: 空的 附加部分: 空的
第三個資料包 - 來自 DNS 伺服器的回應(無錯誤)
2015 年 10 月 16 日上午 9:42:29 0974 資料包 000000EFF2188100 UDP Rcv 204.41.8.237 3e6c RQ [0084 無錯誤] AAAA (7)tpgw1(3) UDP 回應資訊位於 000000EFF2188100 插座 = 9812 遠端位址204.41.8.237,連接埠53 時間查詢=4556080,排隊=0,過期=0 緩衝區長度 = 0x0fa0 (4000) 訊息長度 = 0x0023 (35) 訊息: XID 0x3e6c 標誌 0x8400 QR 1(回覆) 操作碼 0(查詢) AA 1 TC 0 讀值0 RA 0 Z 0 光碟0 廣告0 R代碼 0(無錯誤) 數量 1 帳戶 0 NSCOUNT 0 ARCOUNT 0 問題部分: 偏移量 = 0x000c,RR 計數 = 0 名稱“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q型 AAAA (28) QCLASS 1 答案部分: 空的 權力部分: 空的 附加部分: 空的
第四個資料包 - 從我的 DNS 伺服器到客戶端的回應 (SERVFAIL)
2015 年 10 月 16 日上午 9:42:29 0974 封包 000000EFF1BF01A0 UDP Snd 172.16.0.254 a61e RQ [8281 DR SELFAIL] AAAA (7)tpgw1(3) UDP 回應資訊位於 000000EFF1BF01A0 插座 = 508 遠端位址172.16.0.254,連接埠50764 時間查詢=4556080,已排隊=4556080,過期=4556083 緩衝區長度 = 0x0fa0 (4000) 訊息長度 = 0x002e (46) 訊息: XID 0xa61e 標誌 0x8182 QR 1(回覆) 操作碼 0(查詢) AA 0 TC 0 RD 1 RA 1 Z 0 光碟0 廣告0 R代碼 2(服務失敗) 數量 1 帳戶 0 NSCOUNT 0 ARCOUNT 1 問題部分: 偏移量 = 0x000c,RR 計數 = 0 名稱“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q型 AAAA (28) QCLASS 1 答案部分: 空的 權力部分: 空的 附加部分: 偏移量 = 0x0023,RR 計數 = 0 名稱“(0)” 類型選擇 (41) 4000級 生存時間0 DLEN 0 數據 緩衝區大小 = 4000 R 代碼擴充 = 0 R 代碼完整 = 2 版本 = 0 標誌= 0
其他注意事項:
- 其中一個網路具有本機 IPv6 Internet 存取權限,另一個網路則沒有(但在預設設定的伺服器上啟用了 IPv6 堆疊)。似乎不是 IPv6 網路問題
- 它不會影響所有域。例如
dig @192.168.5.5 -t AAAA serverfault.com
返回 NOERROR,並且沒有結果。同樣的事情也可以google.com
正確地回傳 google 的 IPv6 位址。 - 嘗試從安裝修補程序KB3014171,沒有什麼差別。
- 更新自KB3004539已安裝。
2015 年 11 月 7 日編輯
我已經設定了另一台未加入網域的 Server 2012R2 計算機,並安裝了 DNS 伺服器角色,並使用命令進行了測試nslookup -type=aaaa smtpgw1.gov.on.ca localhost
。它沒有同樣的問題。
兩個虛擬機器位於同一主機和同一網路上,因此消除了任何網路/防火牆問題。現在,要么是補丁級別,要么是網域成員/網域控制器,才能發揮作用。
2015 年 11 月 8 日編輯
應用了所有更新,沒有任何區別。仔細檢查我的新測試伺服器和網域控制器的 DNS 設定之間是否存在任何配置差異,且網域控制器設定了轉發器。
現在,我確信我在最初的測試中嘗試過使用轉發器而不使用轉發器,但我只dig
在 Linux 機器上嘗試過。當我在 Windows 電腦上使用 nslookup 時,無論是否設定轉發器(使用 Google、OpenDNS、4.2.2.1 和我的 ISP DNS 伺服器嘗試過),我得到的結果確實略有不同。
有了轉發器集,我得到了Server failed
。
如果沒有轉發器(因此它使用根 DNS 伺服器),我會得到No IPv6 address (AAAA) records available for smtpgw1.gov.on.ca
.
但這仍然與我從沒有 IPv6 記錄的其他網域中獲得的結果不同 - Windows 上的 nslookup 只傳回其他網域的任何結果。
無論有或沒有轉發器,在查詢我的 Windows DNS 伺服器時dig
仍然顯示SERVFAIL
該名稱。
即使我不涉及我的 Windows DNS 伺服器,問題網域和其他似乎相關的網域之間也存在細微差別:
dig -t aaaa @8.8.8.8 smtpgw1.gov.on.ca
沒有答案,也沒有權威部分。
dig -t aaaa @8.8.8.8 serverfault.com
不返回任何答案,但有一個權威部分。無論我使用什麼解析器,我嘗試的大多數其他網域也是如此。
那麼為什麼缺少該權限部分,以及為什麼 Windows DNS 伺服器將其視為故障,而其他 DNS 伺服器則不然?
答案1
我進一步研究了網路並閱讀了一些內容。如果 AAAA 記錄不存在,則請求傳回 SOA。事實證明,SOA 適用於所要求的不同域。我懷疑這就是 Windows 拒絕回應的原因。請求 mx.atomwide.com 的 AAAA。響應 lgfl.org.uk 的 SOA。我將看看我們是否可以利用這些資訊取得一些進展。編輯:僅供將來參考,暫時關閉「安全快取防止污染」將使查詢成功。不太理想,但證明問題出在不可靠的 DNS 記錄。 RFC4074 也是一個很好的參考 - 簡介和部分。
答案2
根據KB832223
原因
出現此問題的原因是 Windows Server DNS 支援 DNS 擴充機制 (EDNS0) 功能。
EDNS0 允許更大的用戶資料報協定 (UDP) 資料包大小。但是,某些防火牆程式可能不允許大於 512 位元組的 UDP 封包。因此,這些DNS封包可能會被防火牆攔截。
微軟有以下解決方案:
解決
若要解決此問題,請更新防火牆程式以識別並允許大於 512 位元組的 UDP 封包。有關如何執行此操作的更多信息,請聯繫防火牆程序的製造商。
Microsoft 提出以下建議來解決該問題:
解決方法
若要解決此問題,請關閉基於 Windows 的 DNS 伺服器上的 EDNS0 功能。為此,請執行以下操作:
在命令提示字元處,鍵入下列命令,然後按 Enter:
dnscmd /config /enableednsprobes 0
注意 在此指令的“enableednsprobes”後面鍵入 0(零)而不是字母“O”。