Windows 服务器忽略私有接口上的 DNS 解析

Windows 服务器忽略私有接口上的 DNS 解析

我有一台具有两个接口的 Windows 2012 服务器 - 面向公共互联网和私人接口。

私有接口使用我们的内部 DNS 服务器。此接口没有网关。静态 IP - 不是 DHCP。

我想禁用公共接口,因为我们使用代理来传输传出流量。

禁用它后,我发现 DNS 解析失败:

  • 我无法 ping foo.external.com - 找不到主机

  • 但是,我可以 nslookup,注意到它连接到我们的内部 DNS,并成功解析 foo.external.com

  • ipconfig /displaydns 确实显示了正确的条目。我完全搞不懂为什么 ping 不直接使用此条目。

  • 如果我手动将“1.1.1.1 foo”条目添加到本地主机文件作为实验,并尝试 ping foo,它会失败 - 无法解析主机。foo.external.com 和“foo.external.com.”也是如此。ping“foo.external.com”或“foo.external.com.”也会失败。

  • 但是,如果我重新启用公共接口,一切就都正常了。包括 hosts 文件。我可以 ping “foo”(解析方面)。禁用它,它又会停止工作。

我已经尝试了所有重启、ipconfig /flushdns、nbtstat -R 等操作。

a) 尽管 Windows 能够与其 DNS 服务器通信并缓存结果(如 ipconfig /displaydns 所示),为什么在公共接口被禁用时 ping(和我们的应用程序)无法正确解决问题。

b) 为什么私有接口的 hosts 文件被忽略了?

非常感谢。

答案1

快速谷歌搜索返回有同样问题的用户:

用户进行了 Wireshark 捕获并发现,当尝试 ping 主机时,没有执行 DNS 查询。

对于这种行为的解释是:

我相信 nslookup 在 DNS 端口上打开 winsock 连接并发出查询,而 ping 使用 DNS 客户端服务。您可以尝试停止此服务,看看这是否有区别。

一些将重新初始化各种网络状态的命令:

将 WINSOCK 条目重置为安装默认值:netsh winsock reset catalog
将 TCP/IP 堆栈重置为安装默认值:netsh int ip reset reset.log
刷新 DNS 解析器缓存:ipconfig /flushdns
更新 DNS 客户端注册并刷新 DHCP 租约:ipconfig /registerdns
刷新路由表:(route /f需要重新启动)

答案2

您的内部 DNS 服务器是否与您的私有接口位于同一子网?如果不是,那么您的服务器将不知道到您的 DNS 服务器的路由,并且您的 DNS 查询将失败。在您的私有网络设置中添加网关,或添加静态路由,以便您的私有 NIC 知道它可以从中访问什么。

相关内容