![更改域控制器上的 DNS 服务器超时会修复外部 DNS 解析失败 - 为什么?](https://linux22.com/image/680244/%E6%9B%B4%E6%94%B9%E5%9F%9F%E6%8E%A7%E5%88%B6%E5%99%A8%E4%B8%8A%E7%9A%84%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%B6%85%E6%97%B6%E4%BC%9A%E4%BF%AE%E5%A4%8D%E5%A4%96%E9%83%A8%20DNS%20%E8%A7%A3%E6%9E%90%E5%A4%B1%E8%B4%A5%20-%20%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F.png)
本周,我在我们的主站点遇到了一个令人困惑的拦截器,我想了解根本原因。从流程上讲,我的故障排除失败了,一个令人困惑的配置更改解决了我的问题。
抱歉,文字太多了,但如果有人能帮助我,我想越详细越好。
TL;DR:我们的外部 DNS 查找失败,来自域计算机和域控制器,直到我将 DNS 转发器解析超时从默认的 3 秒调整为 10 秒。即使我手动指定了外部服务器,NSLookup 中的查找也会失败。详情如下。
周五,我将两个新域控制器/DNS/DHCP 服务器的地址与两个旧 DNS/DHCP/AD 控制器的地址进行了交换。旧服务器是 Windows 2008 R2,新服务器是带 SP1 的 2012 R2,已完全修补到最新的 Windows 更新。我还备份了 DHCP 设置(使用 Windows Powershell)并将其还原到新的 DHCP 服务器,并与新的 Windows DHCP 负载平衡建立了故障转移关系。
我重新启动,运行 dcdiag /fix,并验证 DHCP 和 DNS 查找。一切似乎都运行正常。我在接下来的几天里进行了检查,以确保 DHCP 服务器传输正常工作,并且机器获得了适当的租约。我不记得我尝试的 DNS 查找是否包括外部站点,但我认为我确实尝试过 nslookup www.google.com,它在更改后的星期五就起作用了。
周日,一名用户首次报告了访问网络时出现的问题。周一,这个问题已经蔓延开来。用户无法访问互联网,或者只能间歇性地访问。此外,我们的 IP 电话出现静电,与我们之前看到的严重拥塞的情况类似。VoIP 电话位于单独的 VLAN 上,除了查找用户目录条目外,不会连接到我们的 DNS 服务器或防火墙。除了电话症状外,问题似乎仅与 DNS 有关。我们运行的是裂脑 DNS 服务器,因此我们的外部托管站点(具有本地 DNS 条目)运行良好且加载迅速。我还可以通过 SSH 连接到外部服务器。本地任何服务器之间都没有数据包丢失,我们到远程站点的 VPN 隧道运行良好。通过 VPN 连接到我们的远程站点,我可以正常访问互联网 - 远程站点的 DNS 服务器也是运行 2012 R2 的域控制器。
使用工作站和 DC 上的 DNS 查找,我尝试了各种查找。内部查找很好,外部查找失败。在两个新的 DNS 服务器上,外部 DNS 转发器都设置为我们的 ISP 和 Google 公共 DNS。DNS 根提示也已启用。我通过打开 NSLookup、输入服务器 8.8.8.8,然后尝试几个网站(www.google.com、www.microsoft.com)来指定外部 DNS 服务器。它们失败了,报告了 4 个 DNS 服务器超时。我还尝试手动将 DNS 服务器设置为我已知正常工作的 DC(远程站点中的 DC),但没有成功。
我尝试在具有新 IP 地址的旧 DC 上进行类似测试,故障没有变化。我确认本地 DC 上的 DNS 服务器已设置为另一个 DC 作为主服务器,正如 Microsoft Technet 所建议的那样。最后,为了缩小问题范围,我关闭了旧 DC。
我首先怀疑是防火墙的问题。我们有一条防火墙规则,允许 DNS UDP 和 TCP 在端口 53 上从任意端口/到任意端口进行通信。此规则启用了 IPS。我确实看到了一个关于来自一个 DC 的 UDP 洪水的警报,以及来自域控制器的一些被阻止的 BootP 数据包。我关闭了该规则的 IPS,警报消失了,但症状没有得到解决。但是,过去我看到我们的防火墙在长时间打开时会出现一些奇怪的行为,所以我尝试重新启动它,但行为没有任何变化。我还将电缆从防火墙换到了我们的交换机,并将调制解调器重新启动到我们的主要 ISP。
研究让我注意到了EDNS 导致某些防火墙出现问题。我通过输入以下内容关闭了两个新 DC 上的 EDNS
dnscmd /config /EnableEDNSProbes 0
在两个域控制器上并重新启动 DNS 服务器服务。行为没有变化。
我尝试在两个域控制器上添加和更改 DNS 转发器的顺序,但行为没有任何变化。
我尝试更改我使用的 ISP——我们有 2 个独立的 ISP。在防火墙中,我更改了优先顺序,并使用 tracert 验证我已连接到正确的 ISP。我尝试了相同的 nslookups,手动将 DNS 服务器指定为 8.8.8.8,并在我的本地工作站和域控制器上都遇到了相同的失败。间歇性地,我在域控制器上成功查找,但并非始终如一。
防火墙上的数据包捕获显示查询已到达防火墙,但我没有看到来自外部 DNS 服务器的响应。
我还尝试了 dcdiag /testdns,它报告说两个域控制器上的所有转发服务器都失败了,并且所有根提示都失败了。
最后,作为最后的努力,我不认为这会有任何帮助,而是将两个域控制器上的 DNS 转发器查找超时时间从默认的 3 秒增加到 10 秒,方法是转到域控制器属性 | 转发器 | 编辑,并将“转发查询超时前的秒数”更新为 10。立即,一切开始正常工作。唯一的另一个相当新的变化——我几分钟前刚刚重新打开了旧的 DC。
- 为什么更改此超时会解决问题? 有可能吗?
- 为什么使用 nslookup 手动指定服务器实际上似乎并未测试与外部服务器的连接?域控制器上的 DNS 转发查询超时为什么与我的 Windows 桌面客户端有关?我是否误解了 Windows 7 和 Server 2012 R2 版本的 nslookup 中的此选项?
- 这真的解决了问题吗,还是只是巧合?这是一个即时解决方案,所以我不愿意相信这不是解决办法。我打开了浏览器并刷新它——只要我更改配置,它就起作用了。
- 我是否应该在其他地方寻找故障,例如我的交换机?是否有可能某些表已从存储的 DNS 查询中填满?交换机是电话/互联网之间的共同因素,但 DNS 查找失败和内部良好的网络访问这一狭窄问题让我忽略了这一点。
还有一个细节:现在当我打开 DNS 服务器属性时,在转发器下,它再次显示超时设置为“3 秒”,尽管我从未将其改回。
这一切真的让我怀疑自己将来诊断此类问题的能力。我知道要检查 DNS 服务器,因为最近发生了变化,但我真的不明白为什么我的 NSLookup 与手动指定的 DNS 服务器失败会超时——如果这真的是解决办法,那么它就让我走上了错误的故障排除之路。我预计,当我的 nslookup 与手动指定的服务器查询失败时,一定是防火墙问题,而不是域控制器上的配置问题。