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


17

(由于我的许多原始测试与新信息无关,因此重写了大部分问题)

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

对于某些域,当查询我的活动目录DNS服务器时,我得到SERVFAIL而不是NOERROR,没有结果。

我已经从运行DNS的几个不同的Server 2012R2域控制器中尝试过此操作。其中之一是一个完全独立的域,位于不同防火墙和Internet连接后面的不同网络上。

我知道导致此问题的两个地址是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修复它。我看到许多有关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 NOERROR] AAAA(7)smtpgw1(3)gov(2)on(2)ca(0)
0000000FF1BF01A0上的UDP问题信息
  插座= 508
  远程地址172.16.0.254,端口50764
  时间查询= 4556080,排队= 0,过期= 0
  Buf长度= 0x0fa0(4000)
  信息长度= 0x002e(46)
  信息:
    XID 0xa61e
    标志0x0120
      QR 0(问题)
      操作码0(查询)
      AA 0
      TC 0
      RD 1
      RA 0
      零0
      CD 0
      公元1年
      RCODE 0(无错误)
    数量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)”
      类型OPT(41)
      4096级
      TTL 0
      DLEN 0
      数据   
        缓冲区大小= 4096
        Rcode Ext = 0
        Rcode Full = 0
        版本= 0
        标志= 0

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

2015年10月16日9:42:29 0974数据包000000EFF0A22160 UDP Snd 204.41.8.237 3e6c Q [0000 NOERROR] AAAA(7)smtpgw1(3)gov(2)on(2)ca(0)
000000EFF0A22160上的UDP问题信息
  插座= 9812
  远程地址204.41.8.237,端口53
  时间查询= 0,已排队= 0,到期= 0
  Buf长度= 0x0fa0(4000)
  信息长度= 0x0023(35)
  信息:
    XID 0x3e6c
    标志0x0000
      QR 0(问题)
      操作码0(查询)
      AA 0
      TC 0
      RD 0
      RA 0
      零0
      CD 0
      公元0
      RCODE 0(无错误)
    数量1
    帐户0
    NSCOUNT 0
    人数0
    问题部分:
    偏移= 0x000c,RR计数= 0
    名称“(7)smtpgw1(3)gov(2)on(2)ca(0)”
      QTYPE AAAA(28)
      QCLASS 1
    解答部分:
      空的
    权限部分:
      空的
    其他部分:
      空的

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

2015年10月16日9:42:29 0974数据包000000EFF2188100 UDP Rcv 204.41.8.237 3e6c RQ [0084 A NOERROR] AAAA(7)smtpgw1(3)gov(2)on(2)ca(0)
000000EFF2188100上的UDP响应信息
  插座= 9812
  远程地址204.41.8.237,端口53
  时间查询= 4556080,排队= 0,过期= 0
  Buf长度= 0x0fa0(4000)
  信息长度= 0x0023(35)
  信息:
    XID 0x3e6c
    标记0x8400
      QR 1(回应)
      操作码0(查询)
      AA 1
      TC 0
      RD 0
      RA 0
      零0
      CD 0
      公元0
      RCODE 0(无错误)
    数量1
    帐户0
    NSCOUNT 0
    人数0
    问题部分:
    偏移= 0x000c,RR计数= 0
    名称“(7)smtpgw1(3)gov(2)on(2)ca(0)”
      QTYPE AAAA(28)
      QCLASS 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)
000000EFF1BF01A0处的UDP响应信息
  插座= 508
  远程地址172.16.0.254,端口50764
  时间查询= 4556080,已排队= 4556080,到期= 4556083
  Buf长度= 0x0fa0(4000)
  信息长度= 0x002e(46)
  信息:
    XID 0xa61e
    标记0x8182
      QR 1(回应)
      操作码0(查询)
      AA 0
      TC 0
      RD 1
      1区
      零0
      CD 0
      公元0
      RCODE 2(SERVFAIL)
    数量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)”
      类型OPT(41)
      4000级
      TTL 0
      DLEN 0
      数据   
        缓冲区大小= 4000
        Rcode Ext = 0
        Rcode Full = 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不返回任何答案,但是有一个授权部分。我尝试使用的其他大多数域也是如此,无论我使用哪种解析器。

那么,为什么缺少该权限部分?为什么在其他DNS服务器没有这样做的情况下,Windows DNS服务器却将其视为失败?


您是否正在从Exchange服务器执行这些测试?如果没有,我建议您这样做,以便您可以从Exchange的角度看它。您可能还想尝试从Exchange服务器运行SMTPDiag。我建议在Exchange服务器上执行网络捕获时运行它,以便您可以查看网络/ DNS活动的详细信息。SMTPDiag是一个旧工具,但是它是命令行工具,不需要任何安装,因此我认为它应该在所有版本的Exchange上都可以使用。- microsoft.com/en-us/download/details.aspx?id=11393
joeqwerty

某些网络设备无法识别并将拒绝EDNS数据包。您的网络团队最近是否引入了新设备/设置?为了消除这种可能性,请尝试解析google.com的AAAA记录,该记录应返回一个IPv6地址。
强线

@strongline EDNS数据包可以正常通过。Google的AAAA记录有效,我知道还有其他几个运行IPv6的站点也可以。最近唯一的机会就是摆脱我们的最后一台Server 2008R2 DC / DNS服务器,并替换为2012R2。
格兰特(Grant)

您的环境中是否以任何方式禁用了IPv6?
Jim B

@JimB既没有真正启用也没有禁用... IPv6堆栈正在服务器上运行,因为默认情况下它处于打开状态,具有任何默认配置。网关和Internet连接都没有IPv6。
格兰特(Grant)

Answers:


3

我已经研究了网络速度,并做了一些阅读。AAAA记录的请求不存在时,将返回SOA。事实证明,SOA是针对所请求的不同域的。我怀疑这就是Windows拒绝响应的原因。为mx.atomwide.com请求AAAA。lgfl.org.uk的响应SOA。我将看看我们是否可以在此信息上取得一些进展。编辑:仅供以后参考,暂时关闭“防止污染的高速缓存”将使查询成功。不理想,但是证明问题出在DNS记录中。RFC4074也是一个很好的参考-简介和部分。


我今天将尝试在我的环境中对此进行测试,但我认为您可能会有所收获!
格兰特(Grant)

另外,我已经编辑了您的链接-此处不允许签名和主题外链接,而且我也不想看到您原本出色的答案被删除。
格兰特(Grant)

0

根据KB832223

原因

出现此问题的原因是Windows Server DNS支持DNS扩展机制(EDNS0)功能。

EDNS0允许更大的用户数据报协议(UDP)数据包大小。但是,某些防火墙程序可能不允许大于512字节的UDP数据包。因此,这些DNS数据包可能会被防火墙阻止。

Microsoft具有以下解决方案:

解析度

要解决此问题,请更新防火墙程序以识别并允许大于512字节的UDP数据包。有关如何执行此操作的更多信息,请与您的防火墙程序的制造商联系。

Microsoft有以下建议可解决此问题:

解决方法

要变通解决此问题,请关闭基于Windows的DNS服务器上的EDNS0功能。为此,请执行以下操作:

在命令提示符处,键入以下命令,然后按Enter:

dnscmd /config /enableednsprobes 0

注意在此命令的“ enableednsprobes”之后键入0(零),而不是字母“ O”。


我看过这篇文章-我测试过的防火墙都通过了大的dns打包,没有问题,这可以在Linux上完美地证明。禁用edns会阻止DNSSEC的使用,因此尽管它可以解决问题,但它不是一个好的解决方案。
格兰特(Grant)

抱歉,我没有意识到Microsoft的指南也适用于Linux。出于好奇,您是否有通过防火墙运行的任何 Microsoft操作系统?
蒂姆·彭纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.