设置:
- 两个 BIND9 名称服务器(在 Debian 9.6 上运行)
- Windows 7 工作站作为 DHCP 客户端,通过 DHCPD 获取两个名称服务器(
option domain-name-servers 10.0.0.1, 10.0.0.2;
)
现在,至少有一次发生了一件奇怪的事情:其中一个名称服务器出现故障,一个盒子也出现故障,突然间所有 Windows 7 工作站都完全失去了 DNS 解析。这种情况与简介中描述的情况相同https://morgansimonsen.com/2012/07/03/will-if-fail-over-or-just-fail-some-dns-empirical-testing/。
我做过类似的测试之后(事件发生后):让 Windows 7 获取两个名称服务器,几秒钟后关闭其中一个,然后通过nslookup
浏览器打开一些互联网网站测试名称解析。
nslookup
完全迷失了,无法解决任何问题,但浏览器继续运行。
在最初的情况下,从一个名称服务器发生故障到工作站失去名称解析之间可能已经过去了相当长一段时间。
为什么会发生这种情况?我如何确保这种情况不再发生?
我是否被迫继续为 Win7 客户端使用单个名称服务器?
答案1
所有 Windows 7 工作站都完全失去了 DNS 解析。
nslookup
完全迷失了,无法解决任何问题,但浏览器继续运行。
这些说法相互矛盾。之所以发生这种情况,是因为nslookup
是一个诊断工具:
显示可用于诊断域名系统 (DNS) 基础结构的信息。在使用此工具之前,您应该熟悉 DNS 的工作原理。
通常程序会调用例如DnsQuery_A()
带选项的功能DNS_QUERY_STANDARD
。解析器首先检查其本地缓存(包括文件中指定的名称hosts
),然后按顺序尝试使用所有 DNS 服务器。如果名称未缓存且第一个服务器已关闭,则 DNS 解析需要更长时间。
但,作为诊断工具,nslookup
忽略hosts
文件并选择第一个默认服务器除非你手动选择另一个 DNS 服务器。
Usage:
nslookup [-opt ...] # interactive mode using default server
nslookup [-opt ...] - server # interactive mode using 'server'
在会话期间,您可以更改服务器以查看哪个服务器已关闭。在您的环境中,以下测试会话可能表明服务器存在问题10.0.0.1
:
Default Server: [10.0.0.1]
Address: 10.0.0.1
> google.com
Server: [10.0.0.1]
Address: 10.0.0.1
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to [10.0.0.1] timed-out
即使解决方案有效,但10.0.0.2
仍在回答:
> server 10.0.0.2
Default Server: [10.0.0.2]
Address: 10.0.0.2
> google.com
Server: [10.0.0.2]
Address: 10.0.0.2
Non-authoritative answer:
Name: google.com
Addresses: 2a00:1450:400f:80d::200e
216.58.211.142
答案2
等一下,不要用 nslookup 测试。Windows (7) nslookup 在进程启动时绑定到一台服务器,并且不会自行更改。关闭 CMD,等待一段时间(默认为 300 秒)然后重试。