我有许多加入 Windows 2012 R2 域的多宿主 Windows 10 客户端虚拟机。以太网 1 连接到具有域控制器的 LAN(没有转发器,也无法访问根服务器),以太网 2 连接到可以访问互联网的 LAN,以太网 0 和以太网 3 的介质均已断开连接。域控制器的记录查询返回正常,但互联网的记录查询需要 10 秒,再加上我的 ISP 的 DNS 服务器返回响应所需的时间。如果我直接通过nslookup
名称查询我的 ISP 的 DNS 服务器,名称会立即解析(< 1 秒),如果我在不指定 DNS 服务器的情况下运行,nslookup
查询会超时,并且名称永远不会解析,如果我尝试 ping DNS 名称,则需要 10 秒以上才能解析名称。
我查看了 Technet,但似乎还没有关于 Windows 10 的任何文档。我发现的最好的是:
http://blogs.technet.com/b/networking/archive/2009/06/26/dns-client-resolver-behavior.aspx http://blogs.technet.com/b/stdqry/archive/2011/12/15/dns-clients-and-timeouts-part-2.aspx
这意味着我应该期望我的客户端查询以太网 1 的主 DNS 服务器,等待 1 秒钟以等待响应超时,然后查询以太网 1 的辅助 DNS 服务器和以太网 2 的主 DNS 服务器,但这似乎没有发生。文档继续说,10 秒后(以及超过 3 轮超时时间更长的 DNS 查询)所有适配器的 DNS 解析将完全失败,但客户端的行为给人的印象是它甚至花了 10 秒钟才尝试使用第二个适配器的 DNS 服务器。
如果没有我(或您)打开 Wireshark 并嗅探线路,或者盲目修改,HKLM\System\CurrentControlSet\Services\dnscache\Parameters\DNSQueryTimeouts
是否有人知道 Windows 10 应该如何运行,更重要的是,我该如何配置行为?我愿意忍受约 1 秒的解析时间,但 10 秒太残酷了。
ipconfig
Ethernet adapter Ethernet1:
Connection-specific DNS Suffix . : intranet.mydomain.net
Description . . . . . . . . . . . : Intel(R) 82574L Gigabit Network Connection #2
Physical Address. . . . . . . . . : 00-0C-29-CC-E8-93
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::999b:3e21:749b:6f55%7(Preferred)
IPv4 Address. . . . . . . . . . . : 10.2.0.20(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Lease Obtained. . . . . . . . . . : Sunday, September 6, 2015 8:17:00 AM
Lease Expires . . . . . . . . . . : Sunday, September 13, 2015 8:17:00 AM
Default Gateway . . . . . . . . . :
DHCP Server . . . . . . . . . . . : 10.2.0.2
DHCPv6 IAID . . . . . . . . . . . : 83889193
DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-1D-74-AB-6A-00-0C-29-CC-E8-89
DNS Servers . . . . . . . . . . . : 10.2.0.1
10.2.0.2
NetBIOS over Tcpip. . . . . . . . : Enabled
Ethernet adapter Ethernet2:
Connection-specific DNS Suffix . : internet.mydomain.net
Description . . . . . . . . . . . : Intel(R) 82574L Gigabit Network Connection #3
Physical Address. . . . . . . . . : 00-0C-29-CC-E8-9D
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::944:ded1:dc53:cec4%6(Preferred)
IPv4 Address. . . . . . . . . . . : 192.168.1.116(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained. . . . . . . . . . : Sunday, September 6, 2015 8:17:04 AM
Lease Expires . . . . . . . . . . : Monday, September 7, 2015 8:17:04 AM
Default Gateway . . . . . . . . . : 192.168.1.1
DHCP Server . . . . . . . . . . . : 192.168.1.1
DHCPv6 IAID . . . . . . . . . . . : 83889193
DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-1D-74-AB-6A-00-0C-29-CC-E8-89
DNS Servers . . . . . . . . . . . : 75.75.75.75
75.75.76.76
8.8.8.8
NetBIOS over Tcpip. . . . . . . . : Enabled
nslookup
C:\Users\username>nslookup www.google.com 75.75.75.75
Server: cdns01.comcast.net
Address: 75.75.75.75
Non-authoritative answer:
Name: www.google.com
Addresses: 2607:f8b0:4001:c07::69
74.125.196.106
74.125.196.104
74.125.196.147
74.125.196.105
74.125.196.99
74.125.196.103
C:\Users\username>nslookup www.google.com
DNS request timed out.
timeout was 2 seconds.
Server: UnKnown
Address: 10.2.0.1
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to UnKnown timed-out
更新
以防其他人想知道,我将具有相同网络适配器配置的 Win7 SP1(无补丁)VM 添加到域中,将其移至与其他 VM 相同的 OU,并在客户端上更新组策略以防万一。它能够立即解析来自 DC 的 DNS 服务器和我的 ISP 的 DNS 查询。因此,这似乎是 Windows 10 DNS 客户端特有的行为。
更新 2
所以事情变得越来越奇怪。看起来 Win10 默认会并行发出查询,但它不会将响应传递给请求它的任何进程,直到所有查询超时。出于某种原因,我的第二个域控制器上的 DNS 服务器无法正常工作。有人知道如何禁用此行为吗?
答案1
微软在 Windows 10 中对 DNS 解析器进行了大幅修改或重写。
最大的变化是同时向所有适配器发出 DNS 查询,然后取第一个到达的答案。不幸的是,新代码包含错误和遗漏,似乎它不是取第一个答案,而是等待所有答案。如果其中一个 DNS 查询超时,这意味着在 DNS 解析之前需要等待 10 秒钟。
这个错误无疑将在 Windows 10 的未来更新中得到修复。在此之前,为了尽可能地将行为恢复到以前的 Windows 版本,存在以下注册表修改:
禁用智能名称解析(双字)
在注册表项中
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient
。
值为 1 表示禁用,0 表示启用智能解析。
从关闭智能多宿主名称解析:
指定多宿主 DNS 客户端应优化跨网络的名称解析。此设置通过在所有网络上发出并行 DNS 链接本地多播名称解析 (LLMNR) 和 TCP/IP 上的 NetBIOS (NetBT) 查询来提高性能。如果收到多个肯定响应,则使用网络绑定顺序来确定要接受哪个响应。如果启用此策略设置,DNS 客户端将不会执行任何优化。将首先在所有网络上发出 DNS 查询。如果 DNS 查询失败,则将发出 LLMNR 查询,如果 LLMNR 查询失败,则发出 NetBT 查询。如果禁用此策略设置或未配置此策略设置,则在发出 DNS LLMNR 和 NetBT 查询时将优化名称解析。
禁用ParallelA和AAAA(双字)
在注册表项中
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
。
值为 0 表示启用,值为 1 表示禁用 DNS A 和 AAAA 查询在所有配置的 DNS 服务器上并行执行,理论上最快的响应会被首先接受。
答案2
与 Windows 8 相比,Windows 10 中的 SMHNR 略有变化。在 Windows 10 中,您无法通过注册表将其关闭。
对于 Windows 10,您可以使用“本地策略”停用该功能。请按照以下步骤操作:
- 按 WIN+R 并输入 gpedit.msc
- 展开管理模板 展开网络
- 单击DNS客户端双击“关闭智能多宿主名称解析”
- 勾选“已启用”
- 单击“全部应用”,然后单击“确定”
答案3
由于您的域 DNS 服务器无法访问根服务器,并且您没有设置转发,因此您需要从 DNS 服务器中删除无法访问的根提示,以加快查询其未托管的地址的速度。这应该会加快超时速度,进而加快客户端解析速度。否则,它会在放弃之前继续尝试联系根服务器。
在 2008 R2 上删除根提示的步骤是记录在这里。