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

Art*_*cto 62 networking domain-name-system windows windows-vista

Windows 使用什么算法来决定它将查询哪个 DNS 服务器以解析名称?

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

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

谢谢

joe*_*rty 39

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

为了扩展我的回答,引用Evan 链接的文章,以下是所述文章的摘录:

DNS Client 服务按以下顺序查询 DNS 服务器:

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

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

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

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

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

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

  • 这个过程在 Windows 10 中发生了变化,虽然我不知道新过程我知道以上不适用于 Windows 10,请参阅此博客 - https://blogs.technet.microsoft.com/networking/2015/08 /14/adjusting-the-network-protocol-bindings-in-windows-10/ (6认同)
  • 解释更改的 Microsoft 博客文章的存档版本:2015-08-14,Kaushik Ainapure,_“调整 Windows 10 中的网络协议绑定”_,https://web.archive.org/web/20190106092511/https:// /blogs.technet.microsoft.com/networking/2015/08/14/ adjustment-the-network-protocol-bindings-in-windows-10/另请参阅:相关问题:https://superuser.com/questions/1140216 /cant-change-network-connection-priority-in-windows-10 (2认同)

Jac*_*ans 23

在 Windows 10 中,您必须按所需顺序更新每个接口的指标。

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

参考:

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

请参阅 Microsoft 支持中这篇文章,了解 IPv4 路由的自动度量功能的说明

我怀疑这是可行的,因为路由选择的一部分是然后设置具有最高度量优先级(最低数字)的接口的源 IP,因为您没有对所有连接使用相同的 IP 地址,而双宿主 BGP 连接会使用相同的源 IP,但选择不同的下一跳网关待定目标 IP。

对于Server,安装DNS服务并做一些有目的/智能的事情,我不同意在Server OS上这样做。

  • 修改Metric仅影响路由选择。它不会影响将使用哪个 DNS 服务器。 (4认同)

Jon*_* B. 13

为了具体回答这个问题,Windows 使用与排名最高的网络接口关联的第一个 DNS 记录(InterfaceMetric值越低,排名越高)。下面的示例显示了如何获取和更改该界面排名值。当接口上没有配置手动 DNS 服务器时,Windows 依赖于与网络接口关联的任何 DHCP 服务器提供的 DNS 服务器。

出现此问题的一种常见情况是,当您有一个或多个 VPN 为为该虚拟网络定义的资源提供 DNS 服务器时。

但是,由 WiFi 路由器分配的公共 DNS 服务器占了先例,要么声称主机不存在,要么以意外的 IP 地址进行响应。

为了解决这个问题,我们需要通过指定其关联的“度量”来明确规定哪个网络接口应该优先。 (目前,这个指标似乎只能通过 PowerShell 设置……见下文

更改网络接口的指标(例如,VPN)

首先,列出本地接口及其指标

C:\> Get-NetIPInterface | Select-Object -Property InterfaceAlias, InterfaceMetric | Sort-Object -Property InterfaceMetric

InterfaceAlias               InterfaceMetric
--------------               ---------------
vEthernet (DockerNAT)                     15
Npcap Loopback Adapter                    25
Ethernet 11                               25
Local Area Connection* 1                  25
Local Area Connection* 2                  25
Npcap Loopback Adapter                    25
Ethernet 2                                35
Wi-Fi                                     55
Bluetooth Network Connection              65
Loopback Pseudo-Interface 1               75
MY VPN                                   200   <--- There's my NIC with my fave DNS
vEthernet (Default Switch)              5000
Run Code Online (Sandbox Code Playgroud)

然后,设置网络接口的度量

(注意:确保从管理 PowerShell 控制台执行此操作)

C:\>  Set-NetIPInterface -InterfaceAlias "MY VPN" -InterfaceMetric 10
Run Code Online (Sandbox Code Playgroud)
C:\> Get-NetIPInterface | Select-Object -Property InterfaceAlias, InterfaceMetric | Sort-Object -Property InterfaceMetric

InterfaceAlias               InterfaceMetric
--------------               ---------------
MY VPN                                    10   <--- Awesome!!! My fave DNS is now on top!!
vEthernet (DockerNAT)                     15
Npcap Loopback Adapter                    25
Ethernet 11                               25
Local Area Connection* 1                  25
Local Area Connection* 2                  25
Npcap Loopback Adapter                    25
Ethernet 2                                35
Wi-Fi                                     55
Bluetooth Network Connection              65
Loopback Pseudo-Interface 1               75
vEthernet (Default Switch)              5000
Run Code Online (Sandbox Code Playgroud)

接口度量的测试效果

在此示例中,在更改指标值之前,ping 一个也具有公开定义 IP 的本地资源将返回其公共 IP(而不是我的 VPN 的 DNS 服务器返回的内部 IP)。

坏的例子!:(

> ping 10640-TEST

Pinging 10640-TEST.example.com [XX.163.171.155] with 32 bytes of data:
Reply from XX.163.171.155: bytes=32 time=80ms TTL=45
Reply from XX.163.171.155: bytes=32 time=76ms TTL=45
Run Code Online (Sandbox Code Playgroud)

好例子!:)

更改网络接口上的指标后,我现在可以看到从与我的 VPN 关联的 DNS 服务器返回的预期内部 IP 地址:

> ping 10640-TEST

Pinging 10640-TEST.example.com [192.168.100.44] with 32 bytes of data:
Reply from 192.168.100.44: bytes=32 time=42ms TTL=127
Reply from 192.168.100.44: bytes=32 time=52ms TTL=127
Run Code Online (Sandbox Code Playgroud)

  • +1 用于展示如何使用 Powershell 执行此操作。 (2认同)

Eva*_*son 8

本页介绍了 Windows 用于执行 DNS 查询的算法。它不够深入,无法为您提供您正在寻找的所有答案,但是需要一些时间使用嗅探器,这篇文章应该是您确定特定情况下发生的事情所需的全部内容。


小智 7

我有完全相同的问题。我花了一天时间试图弄清楚。

如果您有多个网卡,并且在每个网卡中指定一个 DNS 服务器,您知道将使用哪个 DNS 服务器吗?

好吧,你可以用以下方法检查:

nslookup 192.168.3.6
Run Code Online (Sandbox Code Playgroud)

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

问题是:Windows 如何选择使用哪个 DNS 服务器以及如何更改它。

当我们使用 VPN 客户端时尤其需要它。

qwerty2010的答案是正确的但只有当您在控制面板 - 网络和共享中心 - 更改适配器设置 - 网卡列表中有网卡时才能使用它

仅当您看到负责 VPN 客户端的网卡时,您才可以使用图形方式。

因此,您进入网络和共享中心 -> 更改适配器设置 -> 高级 -> 高级设置 -> 然后使用您想要使用的 DNS向上移动网卡。

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

你做什么工作?你打开注册表。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
Run Code Online (Sandbox Code Playgroud)

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

DriverDesc = Shrew Soft Virtual Adapter
Run Code Online (Sandbox Code Playgroud)

然后你复制到剪贴板

NetCfgInstanceId = {B498E7DE-7257-48F6-AD32-60E470030F05}
Run Code Online (Sandbox Code Playgroud)

现在你走了

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage]
Run Code Online (Sandbox Code Playgroud)

然后你打开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}
Run Code Online (Sandbox Code Playgroud)

您所要做的就是将其放在顶部

\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}
Run Code Online (Sandbox Code Playgroud)

就这样。无需重新启动。

现在,当您使用 VPN 连接时,您的 Windows 将使用 Shrew VPN NIC 中指定的 DNS。