![更改网络接口(例如 VPN)的度量标准](https://linux22.com/image/498780/%E6%9B%B4%E6%94%B9%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%EF%BC%88%E4%BE%8B%E5%A6%82%20VPN%EF%BC%89%E7%9A%84%E5%BA%A6%E9%87%8F%E6%A0%87%E5%87%86.png)
Windows 使用什么算法来决定查询哪个 DNS 服务器来解析名称?
假设我有几个接口,全部处于活动状态,一些没有指定 DNS 服务器,一些被告知自动确定,一些手动指定(在接口 ipv4 和接口 ipv6 中)。
我要求回答这个一般性问题,希望我知道如何解决 Windows Vista 中更具体的问题 - 我有两个接口,一个是较低的度量标准,另一个是手动指定的 DNS 服务器。nslookup 使用这DNS 服务器并正确解析名称。但是,除非我手动为其他接口指定 DNS 服务器,然后应用程序使用该服务器,否则所有其他应用程序都无法解析名称。一旦指定,nslookup 也会使用为该其他接口指定的 DNS 服务器。
谢谢
答案1
如果我没记错的话,它是由网络连接文件夹中的高级设置中的 NIC 绑定顺序决定的。您可以通过更改各个 NIC 的绑定顺序并运行 nslookup 作为测试来验证它。
为了扩展我的答案,引用Evan 链接的文章,以下是该文章的摘录:
DNS 客户端服务按以下顺序查询 DNS 服务器:
DNS 客户端服务将名称查询发送到首选适配器的 DNS 服务器列表中的第一个 DNS 服务器,并等待一秒钟以获得响应。
如果 DNS 客户端服务在一秒钟内没有收到来自第一个 DNS 服务器的响应,它会将名称查询发送到所有仍在考虑的适配器上的第一个 DNS 服务器,并等待两秒钟以获得响应。
如果 DNS 客户端服务在两秒钟内没有收到来自任何 DNS 服务器的响应,DNS 客户端服务会将查询发送到所有仍在考虑的适配器上的所有 DNS 服务器,并再等待两秒钟以获得响应。
如果 DNS 客户端服务仍然没有收到来自任何 DNS 服务器的响应,它会将名称查询发送到所有仍在考虑的适配器上的所有 DNS 服务器,并等待四秒钟以获得响应。
如果 DNS 客户端服务没有收到任何 DNS 服务器的响应,DNS 客户端会将查询发送到所有仍在考虑的适配器上的所有 DNS 服务器,并等待八秒钟以获得响应。
步骤 1 中的首选适配器是按绑定顺序首先列出的适配器。
答案2
在 Windows 10 中,您必须按照所需的顺序更新每个接口的度量。
- 转至控制面板 > 网络和 Internet > 网络连接
- 右键单击所需的连接(更高优先级的连接)
- 单击属性 > Internet 协议版本 4
- 单击属性 > 高级
- 取消选中“自动指标”
- 在“接口度量”中输入 10
- 单击“确定”
参考:
我为我的 LAN 设置了 10,为 WLAN 设置了 20,为 VPN 接口设置了 100(我更喜欢在工作中使用本地 DNS,其他人可能正好相反)。记住指标越低 = 优先级越高。
请参阅 Microsoft 支持中的此文章IPv4 路由的自动度量功能说明。
我怀疑这有效是因为路由选择的一部分是设置具有最高度量优先级(最低数字)的接口的源 IP,因为您没有对所有连接使用相同的 IP 地址,而双宿主 BGP 连接将使用相同的源 IP,但根据目标 IP 选择不同的下一跳网关。
对于服务器,安装 DNS 服务并做一些有目的/智能的事情,我不同意在服务器操作系统上这样做。
答案3
具体来说,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
然后,设置网络接口的度量
(注意:确保您从管理 PowerShell 控制台执行此操作)
C:\> Set-NetIPInterface -InterfaceAlias "MY VPN" -InterfaceMetric 10
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
接口度量的测试效果
在此示例中,在更改指标值之前,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
例子真好!:)
更改网络接口上的度量后,我现在可以看到与我的 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
答案4
我也遇到了同样的问题。我花了一天时间才弄清楚。
如果您有多张网卡,并且在每个网卡上都指定了一个 DNS 服务器,您知道将使用哪个 DNS 服务器吗?
嗯,你可以用以下方法检查一下:
nslookup 192.168.3.6
因此您可以看到您的 PC 实际使用的服务器。
问题是:Windows 如何选择使用哪个 DNS 服务器以及我们如何更改它。
当我们使用 VPN 客户端时我们尤其需要它。
这回答从qwerty2010是正确的。但您只能在控制面板 - 网络和共享中心 - 更改适配器设置 - nics 列表中有 NIC 时使用它
只有当您看到负责您的 VPN 客户端的 nic 时,您才可以使用图形方式。
因此,您进入网络和共享中心->更改适配器设置->高级->高级设置->然后移动向上您想要使用的 DNS 的 nic。
但是例如如果您使用 Shrew vpn 客户端 - 那么您将没有任何 nics。
你要做什么?打开注册表。
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。