我有一个使用 Windows 7 的用户,他正在尝试访问 DNS 名称为 windows.cs 的本地服务器。我们有两个内部 DNS 服务器。DHCP 服务器将两个内部 DNS 服务器分配给用户作为主 DNS 服务器和辅助 DNS 服务器,然后将我们的 ISP DNS 分配给用户作为第三 DNS 服务器。
用户时不时无法访问 windows.cs 上的网站。如果我 ping 它,它会说无法解析主机名。我刷新了 DNS 缓存,然后当我显示 DNS 缓存时,它有以下内容:
windows.cs-名称不存在
但是,如果我使用 nslookup(默认情况下查询主 DNS 服务器(我们的内部服务器))并且我查询 windows.cs,它会返回正确的 IP 地址。
那么,为什么 Windows 无法使用 ping 解析主机名,但使用 nslookup 工具却可以?我该如何解决这个问题?
答案1
从您所说的内容来看,对 windows.cs 的请求似乎时不时会转到 ISP 的 DNS 服务器。然后,nxdomain 结果会被 Windows 的 DNS 客户端缓存,因此可用于使用 Web 浏览器、ping 等进行的任何重试。清除缓存 (ipconfig /flushdns) 应该会强制 Windows DNS 客户端重试查询,但不能保证它不会再次转到 ISP DNS 服务器。
ping 无法解析主机名而 nslookup 可以的原因是 nslookup 是一个绕过 Windows DNS 客户端的低级工具。它使用您指定的任何 DNS 服务器(默认情况下为第一个),并即时执行查询。您可以通过在server <host>
nslookup 提示符下键入来更改它查询的 DNS 服务器,其中 host 是 IP 或 FQDN。
但是,Windows DNS 客户端只会查询缓存中不存在的条目(或已过期的条目)。否则,它会返回缓存的结果。
目前还不清楚 Windows 客户端使用 ISP DNS 服务器的原因。也许它最近无法解析本地服务器(可能是由于位于另一个网络上),也许本地服务器返回了错误。或者,也许它在“高级 TCP/IP 设置”>“DNS”下排序不正确。
我个人更喜欢在工作站上仅使用本地 DNS 服务器地址(通过 DHCP 传播),以简化配置并避免此类问题。我很想知道在台式机上设置 ISP DNS 服务器背后的理由。我无法想象有任何有效的性能原因,就冗余而言,在大多数网络上两个就足够了(如果没有,请添加第三个)。
答案2
由于特性和缺陷,结果nslookup
与不同ping
nslookup
。然而,它们与你的主要问题并不相关,因为你的主要问题就是你违反了以下规则:您的后备代理 DNS 服务器必须提供与您的主 DNS 命名空间相同的 DNS 命名空间视图。您的 ISP 的代理 DNS 服务器不提供与您 LAN 上的自己的代理 DNS 服务器相同的 DNS 命名空间视图。
似乎又有一位系统管理员违反了我的 ISP 提供并记录了它,所以我必须用它。谬误。☺
答案3
TL;DR 版本: IPv6在我的例子中导致了 DNS 查询问题,停用它可以解决 DNS 查询问题。
我在开发机器上遇到了同样的问题。每当我登录到公司网络时,我都无法解析内部主机名,但可以解析所有外部主机名/URI。我确实检查了 VPN 连接上分配的 DNS 服务器,它们显示公司 DNS 服务器配置为主服务器和辅助服务器。我也可以使用,nslookup
但必须手动更改服务器server X.X.X.X
才能获得 DNS 解析。
最后我发现 IPv6 导致了名称解析问题:每次 DNS 查询时都会查询 IPv6 DNS,而不是 IPv4 公司 DNS 服务器。停用 IPv6 后,您必须这样做,ipconfig /flushdns
否则之前查询的地址可能仍无法解析。
答案4
我能够通过删除 DNS 记录并运行 flushdns 和 registerdns 命令来轻松解决问题,这样就可以解决问题。原因在于 DNS 本身的 agein。租约到期后,DNS 没有删除记录,也没有续订,因此无法解析名称,因为它已被出售。我希望这能帮助您解决问题。