服务器 2012R2 DNS 服务器为某些 AAAA 查询返回 SERVFAIL

Gra*_*ant 17 domain-name-system active-directory mx-record

(重写此问题的大部分内容,因为根据新信息,我的许多原始测试都无关紧要)

我在使用 Server 2012R2 DNS 服务器时遇到问题。这些问题的最大副作用是 Exchange 电子邮件无法通过。在尝试 A 记录之前交换 AAAA 记录的查询。当它看到 AAAA 记录的 SERVFAIL 时,它甚至不尝试 A 记录,它只是放弃。

对于某些域,当查询我的活动目录 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
Run Code Online (Sandbox Code Playgroud)

但是对公共域控制器的查询按预期工作:

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
Run Code Online (Sandbox Code Playgroud)

正如我所说,我已经在两个不同的网络和域上尝试过这个。一个是全新的域,它绝对具有 DNS 的所有默认设置。另一个已迁移到 Server 2012,因此 2003/2008 中的一些旧设置可能已结转。我得到了相同的结果。

禁用 EDNS 并dmscnd /config /enableednsprobes 0修复它。我看到很多关于 EDNS 在 Server 2003 中存在问题的搜索结果,但与我在 Server 2012 中看到的并不相符。这两个防火墙都没有 EDNS 问题。禁用 EDNS 应该只是一个临时的解决方法 - 它会阻止使用 DNSSEC,并可能导致其他问题。

我还看到了一些关于 Server 2008R2 和 EDNS 问题的帖子,但同样的帖子说 Server 2012 中的问题已修复,因此它应该可以正常工作。

我还尝试为 DNS 启用调试日志。我可以看到我期望的数据包,但它并没有让我深入了解它为什么返回 SERVFAIL。以下是 DNS 服务器调试日志的相关部分:

第一个数据包 - 从客户端查询到我的 DNS 服务器

10/16/2015 9:42:29 AM 0974 PACKET 000000EFF1BF01A0 UDP Rcv 172.16.0.254 a61e Q [2001 D NOERROR] AAAA (7)smtpgw1(3)gov(2)0)(2)ca
UDP 问题信息位于 000000EFF1BF01A0
  插座 = 508
  远程地址 172.16.0.254,端口 50764
  时间查询=4556080,排队=0,过期=0
  缓冲区长度 = 0x0fa0 (4000)
  消息长度 = 0x002e (46)
  信息:
    XID 0xa61e
    标志 0x0120
      QR 0(问题)
      操作码 0(查询)
      AA 0
      0
      RD 1
      RA 0
      0
      光盘 0
      公元1
      RCODE 0(无错误)
    QCOUNT 1
    帐号 0
    NSCOUNT 0
    帐户 1
    问题部分:
    偏移 = 0x000c,RR 计数 = 0
    名称“(7)smtpgw1(3)gov(2)on(2)ca(0)”
      QTYPE AAAA (28)
      QCLASS 1
    回答部分:
      空的
    权威部分:
      空的
    附加部分:
    偏移 = 0x0023,RR 计数 = 0
    名称“(0)”
      类型选择 (41)
      4096级
      TTL 0
      DLEN 0
      数据   
        缓冲区大小 = 4096
        Rcode Ext = 0
        Rcode 全 = 0
        版本 = 0
        标志 = 0

第二个数据包 - 从我的 DNS 服务器查询到他们的 DNS 服务器

10/16/2015 9:42:29 AM 0974 PACKET 000000EFF0A22160 UDP Snd 204.41.8.237 3e6c Q [0000 NOERROR] AAAA (7)smtpgw1(3)gov(2)0)on(2)
UDP 问题信息位于 000000EFF0A22160
  插座 = 9812
  远程地址 204.41.8.237,端口 53
  时间查询=0,排队=0,过期=0
  缓冲区长度 = 0x0fa0 (4000)
  消息长度 = 0x0023 (35)
  信息:
    XID 0x3e6c
    标志 0x0000
      QR 0(问题)
      操作码 0(查询)
      AA 0
      0
      0
      RA 0
      0
      光盘 0
      广告 0
      RCODE 0(无错误)
    QCOUNT 1
    帐号 0
    NSCOUNT 0
    帐户 0
    问题部分:
    偏移 = 0x000c,RR 计数 = 0
    名称“(7)smtpgw1(3)gov(2)on(2)ca(0)”
      QTYPE AAAA (28)
      QCLASS 1
    回答部分:
      空的
    权威部分:
      空的
    附加部分:
      空的

第三个数据包 - 来自他们的 DNS 服务器的响应(NOERROR)

10/16/2015 9:42:29 AM 0974 PACKET 000000EFF2188100 UDP Rcv 204.41.8.237 3e6c RQ [0084 A NOERROR] AAAA (7)smtpgw1(3)gov(2)0(2)0
UDP 响应信息位于 000000EFF2188100
  插座 = 9812
  远程地址 204.41.8.237,端口 53
  时间查询=4556080,排队=0,过期=0
  缓冲区长度 = 0x0fa0 (4000)
  消息长度 = 0x0023 (35)
  信息:
    XID 0x3e6c
    标志 0x8400
      QR 1(响应)
      操作码 0(查询)
      AA 1
      0
      0
      RA 0
      0
      光盘 0
      广告 0
      RCODE 0(无错误)
    QCOUNT 1
    帐号 0
    NSCOUNT 0
    帐户 0
    问题部分:
    偏移 = 0x000c,RR 计数 = 0
    名称“(7)smtpgw1(3)gov(2)on(2)ca(0)”
      QTYPE AAAA (28)
      QCLASS 1
    回答部分:
      空的
    权威部分:
      空的
    附加部分:
      空的

第四个数据包 - 从我的 DNS 服务器到客户端的响应 (SERVFAIL)

10/16/2015 9:42:29 AM 0974 PACKET 000000EFF1BF01A0 UDP Snd 172.16.0.254 a61e RQ [8281 DR SERVFAIL] AAAA (7)smtpgw1(3)2)gov(2)
000000EFF1BF01A0 处的 UDP 响应信息
  插座 = 508
  远程地址 172.16.0.254,端口 50764
  时间查询=4556080,排队=4556080,过期=4556083
  缓冲区长度 = 0x0fa0 (4000)
  消息长度 = 0x002e (46)
  信息:
    XID 0xa61e
    标志 0x8182
      QR 1(响应)
      操作码 0(查询)
      AA 0
      0
      RD 1
      RA 1
      0
      光盘 0
      广告 0
      RCODE 2(SERVFAIL)
    QCOUNT 1
    帐号 0
    NSCOUNT 0
    帐户 1
    问题部分:
    偏移 = 0x000c,RR 计数 = 0
    名称“(7)smtpgw1(3)gov(2)on(2)ca(0)”
      QTYPE AAAA (28)
      QCLASS 1
    回答部分:
      空的
    权威部分:
      空的
    附加部分:
    偏移 = 0x0023,RR 计数 = 0
    名称“(0)”
      类型选择 (41)
      4000级
      TTL 0
      DLEN 0
      数据   
        缓冲区大小 = 4000
        Rcode Ext = 0
        Rcode 全 = 2
        版本 = 0
        标志 = 0

其他注意事项:

  • 其中一个网络具有本机 IPv6 互联网访问,另一个没有(但 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。它没有相同的问题。

两个 VM 位于同一主机和同一网络上,因此消除了任何网络/防火墙问题。现在取决于补丁级别或作为域成员/域控制器的不同之处。

编辑 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 服务器没有呢?

Tim*_*ner 0

根据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”。