我正在尝试回答以下问题:如果一台具有多个网络接口、网关和 DNS 服务器(例如,以太网适配器接口和 VPN 连接接口)的计算机尝试与自身通信,但不是通过“localhost”,而是通过其自己的(本地或合格)主机名,会发生什么情况。将使用哪个接口(或者更确切地说,哪个接口的 IP 地址)?
问题的背景是,在这种情况下,有时会使用错误的接口(通常是“错误的”VPN),如果 VPN 连接中断,这会导致我们的软件出现问题。对于这些情况,我想知道如何影响名称解析,以便首选以太网适配器的 IP。
我尝试过更改不同接口的路由度量,但这并没有给我带来任何明显可观察的行为。在我进行该实验的一台笔记本电脑(属于 AD 的一部分)上,到 VPN 接口的链路本地 IP 的路由度量和到以太网适配器 IP 的路由最初具有相同的度量,例如,“route print”将显示这两条路由(当然还有更多):
Active Routes:
Network Destination Netmask Gateway Interface Metric
1.2.3.4 255.255.255.255 On-link 1.2.3.4 276
2.3.4.5 255.255.255.255 On-link 2.3.4.5 276
假设 1.2.3.4 是 VPN 接口的 IP,2.3.4.5 是网络适配器的 IP。当我使用本地或合格主机名 ping 计算机时,它最初会解析 VPN 适配器的 IP。因此,我尝试降低或增加一个或另一个接口的指标。不幸的是,我没有得到明显可观察到的行为,但我突然得到了错误。如果 VPN IP 已解析,ping 将失败并出现错误,错误消息将指示主机 2.3.4.5(以太网 IP!)响应“目标主机不可访问”:
C:\Users\me>ping myhost
Pinging myhost.my.company.domain [1.2.3.4] with 32 bytes of data:
Reply from 2.3.4.5: Destination host unreachable
所以我的猜测是,既然 VPN IP 被解析了,那么就使用了 VPN 的网关,而 VPN 当然不知道另一个 IP。
下一次 ping 总是能解析以太网适配器的 IP,并能正常工作
C:\Users\me>ping myhost
Pinging myhost.my.company.domain [1.2.3.4] with 32 bytes of data:
Reply from 1.2.3.4: bytes=32 time<1ms TTL=128
[...]
即使在将指标重新设置为其原始(相同)值后,这种情况仍然会发生。我突然意识到,更改本地 IP 的路由可能走错了方向,但我可能应该更改 DNS 服务器的路由(或以其他方式更改 DNS 服务器优先级),但此时我决定停止实验,先开始阅读,以免弄乱我的配置。看来我的 Google foo 今天很糟糕,所以我最终在这里发帖。
任何帮助(或指向正确文档的指针)都值得感激。更改 hosts 文件可能可以满足我的要求,但我更喜欢更便携的解决方案(最重要的是,我想了解发生了什么!)。
答案1
除了路由指标之外,Windows 还有网络连接优先级的设置。
要更改连接优先级:
Network and Sharing Center
>Adapter Settings
- 按下Alt并从菜单中选择
Advanced
>Advanced Settings
- 在
Adapter and Bindings
选项卡中将首选连接重新排序到顶部
然后改变接口指标,您的首选路线具有较低的度量。
Ethernet adapter
>Properties
>TCP/IPv4
>Properties
General
>Advanced
- 取消选中
Automatic metric
- 增加价值
Interface metric
刷新路由表,通过打开窗口cmd
并输入以下内容进行操作:
route /f
然后重启Windows,以确保度量标准生效。应重建路由表并将度量标准分配给路由。
此时,如果您仍然有问题,请检查您的IPv6
指标。
如果接口在重新启动时恢复为自动,则可能必须添加持久路由:
route add -p [destination] [mask] [gateway] [metric] if [interface]