Server 2012R2 DNS 伺服器針對某些 AAAA 查詢傳回 SERVFAIL

Server 2012R2 DNS 伺服器針對某些 AAAA 查詢傳回 SERVFAIL

(重寫這個問題的大部分內容,因為我的許多原始測試與新資訊無關)

我在使用 Server 2012R2 DNS 伺服器時遇到問題。這些問題的最大副作用是 Exchange 電子郵件無法通過。在嘗試 A 記錄之前交換 AAAA 記錄的查詢。當它看到 AAAA 記錄的 SERVFAIL 時,它甚至不會嘗試 A 記錄,而是放棄。

對於某些網域,當查詢我的 Active Directory DNS 伺服器時,我得到 SERVFAIL 而不是 NOERROR,但沒有結果。

我已在多個執行 DNS 的不同 Server 2012R2 網域控制站上嘗試過此操作。其中之一是完全獨立的網域,位於不同防火牆和網際網路連線後面的不同網路上。

我知道導致此問題的兩個地址是smtpgw1.gov.on.camxmta.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”。

相關內容