多宿主Windows 10 DNS解析超时


11

我有许多加入Windows 2012 R2域的多宿主Windows 10客户端VM。以太网1通过域控制器(没有转发器,也没有对根服务器的访问)连接到LAN,以太网2连接到可以访问Internet的LAN,以太网0和以太网3都断开了媒体连接。从域控制器中查询记录的查询可以很好地返回,但是从Internet上查询记录需要10秒钟,而我的ISP的DNS服务器要花很长时间才能返回响应。如果我直接通过nslookup名称查询ISP的DNS服务器会立即得到解析(<1秒),如果我nslookup没有指定DNS服务器就运行,查询就会超时并且名称永远不会解析,如果我尝试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

这表示我应该期望我的客户端向Ethernet1的主DNS服务器查询,等待1秒钟以获取对超时的响应,然后向Ethernet1的辅助DNS服务器和Ethernet2的主DNS服务器查询,但这似乎没有即将发生。该文档继续说,在10秒钟后(以及更长的超时时间又进行了3轮以上的DNS查询),所有适配器的DNS解析都将完全失败,但是客户端的行为给人的印象是,即使尝试将DNS服务器用于第二个适配器。

没有我(或您)打开Wireshark来监听线路,或者盲目地进行修改,HKLM\System\CurrentControlSet\Services\dnscache\Parameters\DNSQueryTimeouts是否有人知道Windows 10应该如何运行,更重要的是,我如何去配置行为?我愿意以〜1秒的解析时间生活,但10秒相当残酷。

IP配置

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服务器无法正常工作。有谁知道如何禁用此行为?

Wireshark数据包跟踪


看一下这个问题:superuser.com/questions/966017/…haarymc指出Windows 10 DNS解析程序已得到重大修改,并指出了一些可能的解决方案。
布兰登·哈维尔2015年

我将从提到的DisableSmartNameResolution开始。
布兰登·泽维尔

布兰登,似乎将DisableSmartNameResolution设置为1(而不是链接所建议的0)是可行的!如果您想发布它作为答案,我将授予该代表。谢谢!
马特

大声笑,这么多的预测。一定要为布兰登·泽维尔(Brandon Xavier)在这里发现问题而感到生气,当他重新发表评论作为答案时,他将获得+100的代表,并且您也可以阅读自己的引文。
马特

1
这是有关此新功能以及它如何从Windows 8.1更改为Windows 10的另一个很好的链接。medium.com
@

Answers:


11

Microsoft已在Windows 10中进行了实质性修改或重写了DNS解析器。

最大的变化是并行向所有适配器发出DNS查询,然后采用第一个答案。不幸的是,新代码包含错误和遗漏,似乎它等待所有答案而不是得到第一个答案。如果其中一个DNS查询超时,则意味着在解析DNS前需要等待10秒钟。

毫无疑问,此错误将在Windows 10的将来更新中修复。在此之前,要使行为尽可能地返回以前的Windows版本,请进行以下注册表修改:

DisableSmartNameResolution(DWORD)

在注册表项中 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查询时将优化名称解析。

DisableParallelAandAAAA(DWORD)

在注册表项中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
值为0表示启用,值为1表示禁用DNS A和AAAA查询以在所有已配置的DNS服务器上并行执行,从理论上讲,最快的响应将首先被接受。


1
只是想补充一点,我在Win 10.0.10586上并且HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient不存在。同样,DisableParallelAandAAAA不存在,但是键确实存在,因此可以添加它。
Mahdi

这已经解决了Windows 10上的VPN split-dns问题。当连接到vpn(即使用Cisco客户端)时,由于这两个功能,仅在某些时间使用了vpn的dns。通过禁用这两个选项(智能名称解析和并行dns查询),它可以可靠地使用VPN的dns。此外,它还解决了在不安全/不受信任的wi-fi网络(例如,使用Windows 10的咖啡店)中出现的“ dns泄漏”问题。您的dns查询现在将通过vpn而不是有时去咖啡店的dns。非常感谢您提供此解决方案!
truemedia

2
方便的PowerShell版本,适用于任何需要这样做的人(我们在Stack Exchange): Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -Type DWordSet-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name DisableParallelAandAAAA -Value 1 -Type DWord
Nick Craver

2
这些注册表项对我的Windows10没有任何影响,起作用的是:Press WIN+R and write gpedit.msc Expand Administrative templates Expand Network Click DNS-client Double-click "Turn off smart multi-homed name resolution" Check the box called "Enabled" Click "Apply all" and then "OK"
Julien

1

资源

与Windows 8相比,Windows 10的SMHNR略有变化。在Windows 10中,无法通过注册表将其关闭。

对于Windows 10,您可以使用“本地策略”停用该功能。请按照以下步骤进行操作:

  • 按WIN + R并写入gpedit.msc
  • 展开管理模板展开网络
  • 单击DNS客户端双击“关闭智能多宿主名称解析”
  • 选中名为“启用”的框
  • 点击“全部应用”,然后点击“确定”

Julien,我并不是说路径没有在注册表中移动,而是在更新本地策略中的设置时,绝大多数操作是在更改注册表(通过本地策略编辑器进行)。实际上,这是找出注册表的哪一部分直接针对特定设置进行修改的一种非常常用的方法。运行ProcMon(来自Sysinternals)并进行更改,然后确定哪个配置单元中的有效注册表路径从什么更新为什么。
thepip3r

0

由于您的域DNS服务器无权访问根服务器,并且您没有进行转发设置,因此您需要从DNS服务器中删除无法访问的根提示,以加快对其未托管的地址的查询。这样可以加快超时时间,进而加快客户端解析速度。否则,它将继续尝试在放弃之前联系根服务器。

此处记录了删除2008 R2根提示的过程。


感谢您的答复,但是这个问题是关于客户端的行为,而不是域控制器的DNS服务器的行为,如“ ...是否有人知道Windows 10的行为,更重要的是,我如何配置Windows 10?行为”
马特

很公平。听起来由于非最佳配置,客户端正在采用这种方式。您是否有任何非Windows 10客户端表现不同?
GuitarPicker

不,我还有其他Win10 VM客户端,它们连接了Ethernet3(基于VPN的互联网访问和DNS服务器1.2.3.4),而不是Ethernet2,并且它们的行为相同。以及如何将两个网络都带有DNS服务器的多宿主客户端视为非最佳客户端?
马特

1
GuitarPicker,我想你的非Win10客户端建议,它看起来像这样的行为是特定于Windows 10
马特

@harrymc的答案似乎可以解决客户端的问题。我实际上是在阅读您的评论之后并在阅读他的答案之前找到它的。微软出奇地安静地记录了它。我的解决方案可能会为您增加所有客户的解决时间,但是他的回答可以解释客户之间的差异。
GuitarPicker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.