Windows如何确定解析名称时使用哪个DNS服务器?


41

Windows使用哪种算法来决定要查询哪个DNS服务器以解析名称?

假设我有多个接口,所有接口都处于活动状态,一些未指定dns服务器,有些被告知要自动确定,有些则手动指定(在ipv4和接口ipv6接口中)。

我正在寻求这个一般问题的答案,希望我知道如何解决Windows Vista中的一个更具体的问题-我有两个接口,一个是较低指标,一个是手动指定的DNS服务器。nslookup使用 DNS服务器并正确解析名称。但是,所有其他应用程序都无法解析名称,除非我手动为其他接口指定DNS服务器,然后这些应用程序将使用该服务器。指定后,nslookup还将使用为此接口指定的DNS服务器。

谢谢

Answers:


27

如果我没记错的话,这取决于网络连接文件夹中“高级设置”中的NIC绑定顺序。您可以通过更改各种NIC的绑定顺序并运行nslookup作为测试来进行验证。

为了扩大我的答案,引用了Evan链接的文章,这是该文章的摘录:

DNS客户端服务按以下顺序查询DNS服务器:

  1. DNS客户端服务将名称查询发送到首选适配器的DNS服务器列表上的第一个DNS服务器,并等待一秒钟以进行响应。

  2. 如果DNS客户端服务在一秒钟内未收到第一台DNS服务器的响应,则会将名称查询发送到仍在考虑中的所有适配器上的第一台DNS服务器,并等待两秒钟以进行响应。

  3. 如果DNS客户端服务在两秒钟内未收到任何DNS服务器的响应,则DNS客户端服务会将查询发送到仍在考虑中的所有适配器上的所有DNS服务器,并等待另外两秒钟以响应。

  4. 如果DNS客户端服务仍然没有收到来自任何DNS服务器的响应,它将名称查询发送到仍在考虑中的所有适配器上的所有DNS服务器,并等待四秒钟以进行响应。

  5. 如果DNS客户端服务未从任何DNS服务器接收到响应,则DNS客户端会将查询发送到仍在考虑中的所有适配器上的所有DNS服务器,并等待八秒钟以获取响应。

步骤1中的首选适配器是在绑定顺序中首先列出的适配器。


4
尽管我不知道上述新过程不适用于Windows 10,但在Windows 10中此过程已更改,请参阅此博客 -blogs.technet.microsoft.com/networking/2015/08/14/…
罗伯特·

14

在Windows 10(和Windows Server 2016)中,必须按所需顺序更新每个接口的指标。

  1. 转到控制面板>网络和Internet>网络连接
  2. 右键单击所需的连接(高优先级连接)
  3. 单击属性> Internet协议版本4
  4. 单击属性>高级
  5. 取消选中“自动指标”
  6. 在“接口指标”中输入10
  7. 点击确定

参考文献:

我在局域网中使用了10个,在WLAN中使用了20个,对VPN接口使用了100个(我更喜欢在工作中使用本地DNS,其他情况可能是相反的)。请记住,较低的指标=较高的优先级

请参阅Microsoft支持中这篇文章,以获取有关IPv4路由的自动度量功能的说明


+1对于Windows 10上的我来说,这是唯一的解决方案,谢谢。
GµårÐïåñ

度量标准修改仅影响路由选择。它不会影响将使用哪个DNS服务器。
尤鲁夫

14个投票和个人经历不同意,我同意不应该这样,但是Microsoft的开发人员似乎已经用这种方式进行了编码。
雅各布·埃文斯

8

本页介绍Windows用于执行DNS查询的算法。它的深度不足以为您提供所有正在寻找的答案,但是花点时间嗅探一下,这篇文章应该是您确定特定情况下所需要发生的一切。


3

我有完全一样的问题。我花了一天的时间来弄清楚。现在我知道了,它就像一种魅力。

如果您有多个网卡,并且在每个网卡中都指定了DNS服务器。您知道最后将使用什么DNS服务器吗?

好吧,您可以通过练习进行检查。

nslookup 192.168.3.6

这样您就可以看到您的PC实际使用的服务器

问题是-从什么取决于哪个DNS服务器窗口选择使用以及如何更改它。

当我们使用VPN客户端时,我们特别需要它。

来自qwerty2010答案是正确的。但是,只有在控制面板中有NIC时,才可以使用它-网络和共享中心-更改适配器设置-NIC列表

仅当您看到负责您的VPN客户端的网卡时,您才可以使用图形方式将您想要使用的dns服务器(在特定网卡上指定)指向Windows。

因此,您转到网络和共享中心->更改适配器设置->高级->高级设置->,然后使用您要使用的DNS将网卡上移。(向上,您需要将其抬起)。

但是,例如,如果您使用Shrew vpn客户端-您将没有任何网卡。

你是做什么。

您打开注册表。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

然后您在子文件夹0000、0001等中查找

DriverDesc = Shrew Soft Virtual Adapter

精细。然后复制到剪贴板

NetCfgInstanceId = {B498E7DE-7257-48F6-AD32-60E470030F05}

现在你去

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage]

然后你打开key = Bind。您会看到这样的列表

\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

您所要做的就是放到顶部

\Device\{B498E7DE-7257-48F6-AD32-60E470030F05}
\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

就这样。无需重启。

现在,当您使用vpn连接时,您的Windows将使用在shrew vpn nic中指定的DNS。


0

因为这可能对您或其他人有帮助,所以您可以禁用Windows循环使用列出的dns,以使dns的使用更加可预测。尝试RoundRobin=0HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters参考)中设置来禁用dns轮询。

还有一个用于旋转服务器的“超时”,您也可以尝试将其设置为零

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0

根据提到的“参考”(链接),这适用于配置DNS服务器,以便按照从一个查询到另一个查询的排序顺序为某些查询的FQDN提供多个IP地址。这与有关DNS解析器(客户端)如何选择要查询的DNS服务器的问题无关。
Thomas Urban

-13

它不是随机决定的。您已连接到路由器,该路由器从具有DNS服务器的公司那里获得IP。他们会收到您的请求,除非您将IP手动更改为另一个DNS,例如:OpenDns。或者,也许您决定拥有自己的DNS服务器。那也行。只需在网络中心输入IP地址,一切就可以了。是的,您必须手动设置这些设置。

您也可以在C:\Windows\System32没有扩展名的“主机”中调整文件。它允许您重定向URL请求,而不是发送到标准DNS。到本地服务器(必须正在运行并且正在监听端口80)


18
基本上您在这里所说的一切都是错误的
MDMarra 2009年

3
还有一个-1,甚至提到主机文件中令人讨厌的可憎性。
Maximus Minimus,

信息量
丰富的方式MarkM

4
@WebDevHobo-评论中确实有太多要纠正的地方,但是我会谈重点。1)OP的计算机具有多个接口(很可能是单独的NIC),每个计算机上都定义了不同的DNS。在问题的上下文中,他显然正在运行一些内部DNS服务器,或者具有一些首选的外部DNS服务器-此框可能是多宿主的。2)如果您在该地址池的DHCP服务器配置中使用DHCP,则无需手动设置内部DNS服务器的地址。3)主机文件的路径为c:\ windows \ system32 \ drivers \ etc
MDMarra

3
在这种情况下,或者几乎永远不要使用HOSTS文件,除非您正在进行本地开发并使用HOST标头之类的东西并且需要FQDN在本地解析。无论使用HOSTS文件进行名称解析还是使用DNS服务器,服务器都不需要运行端口80。只需在URL末尾附加:port_number即可。HOSTS并不关心端口,就像DNS一样,它并不关心端口,它是一种将主机名转换为IP地址的方法,仅此而已。
MDMarra
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.