(重写了这个问题的大部分内容,因为我的许多原始测试与新信息无关)
我在使用 Server 2012R2 DNS 服务器时遇到了问题。这些问题最大的副作用是 Exchange 电子邮件无法发送。Exchange 在尝试 A 记录之前会查询 AAAA 记录。当它看到 AAAA 记录的 SERVFAIL 时,它甚至不会尝试 A 记录,而是直接放弃。
对于某些域,当查询我的活动目录 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
解决这个问题。我看到很多搜索结果都说 EDNS 是 Server 2003 的问题,但与 Server 2012 中的情况不相符。两种防火墙都没有 EDNS 问题。不过,禁用 EDNS 应该只是一种临时解决方法 - 它会阻止使用 DNSSEC,并可能导致其他问题。
我也看到过一些关于 Server 2008R2 和 EDNS 问题的帖子,但这些帖子也说问题在 Server 2012 中已经得到修复,所以它应该可以正常工作。
我还尝试启用 DNS 的调试日志。我可以看到我预期的数据包,但它并没有让我深入了解它为什么返回 SERVFAIL。以下是 DNS 服务器调试日志的相关部分:
第一个数据包 - 从客户端到我的 DNS 服务器的查询
2015 年 10 月 16 日上午 9:42:29 0974 数据包 000000EFF1BF01A0 UDP Rcv 172.16.0.254 a61e Q [2001 D 无错误] AAAA (7)smtpgw1(3)gov(2)on(2)ca(0) UDP 问题信息位于 000000EFF1BF01A0 插座 = 508 远程地址 172.16.0.254,端口 50764 时间查询=4556080,排队=0,过期=0 缓冲区长度 = 0x0fa0 (4000) 消息长度 = 0x002e (46) 信息: XID 0xa61e 标志 0x0120 QR 0(问题) 操作码 0(查询) AA 0 热电偶 0 第一轮 类风湿关节炎 0 零 光盘 0 广告 1 RCODE 0(无错误) 数量 1 帐户 0 NSCOUNT 0 数量 1 问题部分: 偏移量 = 0x000c,RR 计数 = 0 名称“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q类型 AAAA (28) 1级 解答部分: 空的 权限部分: 空的 附加部分: 偏移量 = 0x0023,RR 计数 = 0 姓名“(0)” 类型选择 (41) 4096 类 TTL 0 DLEN 0 数据 缓冲区大小 = 4096 Rcode 扩展 = 0 Rcode 满 = 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)gov(2)on(2)ca(0) 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 类风湿关节炎 0 零 光盘 0 广告 0 RCODE 0(无错误) 数量 1 帐户 0 NSCOUNT 0 数量 0 问题部分: 偏移量 = 0x000c,RR 计数 = 0 名称“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q类型 AAAA (28) 1级 解答部分: 空的 权限部分: 空的 附加部分: 空的
第三个数据包 - 来自其 DNS 服务器的响应(无错误)
2015 年 10 月 16 日上午 9:42:29 0974 数据包 000000EFF2188100 UDP Rcv 204.41.8.237 3e6c RQ [0084 A 无错误] AAAA (7)smtpgw1(3)gov(2)on(2)ca(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 类风湿关节炎 0 零 光盘 0 广告 0 RCODE 0(无错误) 数量 1 帐户 0 NSCOUNT 0 数量 0 问题部分: 偏移量 = 0x000c,RR 计数 = 0 名称“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q类型 AAAA (28) 1级 解答部分: 空的 权限部分: 空的 附加部分: 空的
第四个数据包 - 我的 DNS 服务器对客户端的响应(SERVFAIL)
2015 年 10 月 16 日上午 9:42:29 0974 数据包 000000EFF1BF01A0 UDP Snd 172.16.0.254 a61e RQ [8281 DR SERVFAIL] AAAA (7)smtpgw1(3)gov(2)on(2)ca(0) UDP 响应信息为 000000EFF1BF01A0 插座 = 508 远程地址 172.16.0.254,端口 50764 时间查询=4556080,排队=4556080,到期=4556083 缓冲区长度 = 0x0fa0 (4000) 消息长度 = 0x002e (46) 信息: XID 0xa61e 标志 0x8182 QR 1(响应) 操作码 0(查询) AA 0 热电偶 0 第一轮 放射科 1 零 光盘 0 广告 0 RCODE 2(服务器故障) 数量 1 帐户 0 NSCOUNT 0 数量 1 问题部分: 偏移量 = 0x000c,RR 计数 = 0 名称“(7)smtpgw1(3)gov(2)on(2)ca(0)” Q类型 AAAA (28) 1级 解答部分: 空的 权限部分: 空的 附加部分: 偏移量 = 0x0023,RR 计数 = 0 姓名“(0)” 类型选择 (41) 4000 级 TTL 0 DLEN 0 数据 缓冲区大小 = 4000 Rcode 扩展 = 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
。 它没有同样的问题。
两个虚拟机都位于同一主机和同一网络上,因此消除了任何网络/防火墙问题。现在,问题的关键在于补丁级别或域成员/域控制器。
编辑于 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
不返回任何答案,但确实有权限部分。我尝试的大多数其他域名也是如此,无论我使用哪种解析器。
那么,为什么缺少该权限部分?为什么其他 DNS 服务器不将其视为故障,而 Windows 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 数据包。有关如何执行此操作的详细信息,请联系防火墙程序的制造商。
微软提出了以下解决该问题的建议:
解决方法
要解决此问题,请关闭基于 Windows 的 DNS 服务器上的 EDNS0 功能。为此,请执行以下操作:
在命令提示符下,键入以下命令,然后按 Enter:
dnscmd /config /enableednsprobes 0
注意:在此命令中的“enableednsprobes”后输入 0(零)而不是字母“O”。