希望这是一个合适的提问地点。我在家里的 Windows 10 PC 上设置了 VPN 连接,这样我就可以加入办公室的网络。有一次我注意到我的互联网连接似乎非常慢,经过一番调查后发现 Windows 正在通过 VPN 路由所有非本地流量。
我了解了 VPN 连接 IPv4 属性中的“在远程网络上使用默认网关”复选框,并取消了该复选框的选中状态。这解决了问题,但只是暂时的。过了“一段时间”(不知道具体什么时候发生,我通常在几天内注意到)后,我的互联网连接再次变得缓慢,而且所有流量都通过 VPN 路由。
route print
在流量通过 VPN 时使用将显示:
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.10 4506
0.0.0.0 0.0.0.0 On-link 192.168.12.200 26
82.4.223.31 255.255.255.255 192.168.0.1 192.168.0.10 4251
127.0.0.0 255.0.0.0 On-link 127.0.0.1 4556
127.0.0.1 255.255.255.255 On-link 127.0.0.1 4556
127.255.255.255 255.255.255.255 On-link 127.0.0.1 4556
192.168.0.0 255.255.255.0 On-link 192.168.0.10 4506
192.168.0.10 255.255.255.255 On-link 192.168.0.10 4506
192.168.0.255 255.255.255.255 On-link 192.168.0.10 4506
192.168.12.200 255.255.255.255 On-link 192.168.12.200 281
224.0.0.0 240.0.0.0 On-link 127.0.0.1 4556
224.0.0.0 240.0.0.0 On-link 192.168.0.10 4506
224.0.0.0 240.0.0.0 On-link 192.168.12.200 26
255.255.255.255 255.255.255.255 On-link 127.0.0.1 4556
255.255.255.255 255.255.255.255 On-link 192.168.0.10 4506
255.255.255.255 255.255.255.255 On-link 192.168.12.200 281
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
0.0.0.0 0.0.0.0 192.168.0.1 Default
===========================================================================
我家用电脑的 IP 地址(静态分配)为 192.168.0.10,家用路由器的 IP 地址为 192.168.0.1。我通过 VPN 接入的网络是 192.168.12.0,由 DHCP 分配 IP 地址。
我看到它添加了一条使用 VPN 的路由,并为其指定了最低度量。我不知道“On-link”在此上下文中是什么意思。
该复选框仍未选中。如果我断开然后重新连接 VPN 连接,则一切都已修复:
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.10 281
82.4.223.31 255.255.255.255 192.168.0.1 192.168.0.10 26
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
192.168.0.0 255.255.255.0 On-link 192.168.0.10 281
192.168.0.10 255.255.255.255 On-link 192.168.0.10 281
192.168.0.255 255.255.255.255 On-link 192.168.0.10 281
192.168.12.0 255.255.255.0 192.168.12.1 192.168.12.200 26
192.168.12.200 255.255.255.255 On-link 192.168.12.200 281
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.0.10 281
224.0.0.0 240.0.0.0 On-link 192.168.12.200 281
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.0.10 281
255.255.255.255 255.255.255.255 On-link 192.168.12.200 281
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
0.0.0.0 0.0.0.0 192.168.0.1 Default
===========================================================================
只有 192.168.12.0 的流量通过 VPN 发送,这正是我想要的。
有谁知道是什么原因导致 Windows 突然决定忽略“不使用远程网关......”选项并添加路由?
是否有某种我可以永久添加的“负面路由”,可以有效阻止任何进入 VPN 的不需要的流量?
编辑以添加:我也尝试在 VPN IPv4 属性的同一页面中手动将度量设置得非常高,但这似乎没有效果,并且没有反映在输出中route print
。
编辑以添加:我还注意到了另一个有关连接 VPN 的奇怪行为。这都是使用内置的 Windows 10 客户端:
如果通过单击托盘中的网络图标来启动连接,选择 VPN 并单击其中的内联“连接”按钮,它通常会卡在“连接...”阶段一段时间然后失败。
如果我进入控制面板的“网络和 Internet 设置 -> VPN”部分并从那里启动连接,它会 100% 成功并且非常快。
我还一直在使用第三方实用程序 AutoVPNConnect,它会定期检查 VPN 是否处于活动状态,如果没有,则“重新拨号”。我找不到任何方法在 Windows 本身内可靠地实现此行为。我现在怀疑实用程序重新建立连接时会添加不需要的路由。我不相信它是故意这样做的。
Windows 中是否有多个用于“拨打”VPN 的 API,并且它们的功能略有不同?
编辑以添加:手动为本地网络接口分配度量值 1,harrymc 建议,似乎让问题至少在几天内消失,尽管route print
表明 Windows 实际上根本没有使用该值。将赏金授予该答案,因为建议似乎确实已经阻止了该问题,但我觉得我无法将任何东西标记为我的问题的实际“答案”,它仍然没有解释为什么会发生这种情况,或者为什么它已经停止,或者它是否会在将来再次出现。
答案1
当问题发生时我可以看到两个奇怪的事实:
- VPN 突然获得了一条默认路由 (
0.0.0.0
),这是您重新启动 VPN 时不存在的路由 - 本地路线的度量值不合理地高至 4500+。
由于您的 VPN 客户端未指定,我不知道它是否是背后的那个。它肯定是创建0.0.0.0
默认路由的那个,但这个路由的度量值非常合理26
。
因此我建议:
- 在您的本地网络中禁用 IPv6,以减少因素的数量。
1
在本地网络的属性中将本地 IPv4 连接设置为度量或“最佳”(禁用“自动度量”)。- 在 VPN 属性、网络选项卡、“Internet 协议 (TCP/IP)”属性、高级中,确认“在远程网络上使用默认网关”未勾选。在 DNS 选项卡中,确保已勾选“在 DNS 中注册此连接的地址”。
答案2
我相信您已经尝试过取消选中Automatic metric
并设置一个较低的值,但以这种方式失败了。
因此我建议三个方向:
- 编写一个批处理文件或其他文件来管理您的 VPN 连接——拨号/检查/重拨。
- 编写一个脚本来检查路由表,并在发生事情时将其改回。
- 检查的设置
AutoVPNConnect
,看是否有一些与路线相关的设置。
您的路由表很可能已被 更改AutoVPNConnect
,因此我建议您将其删除并使用第一种方法。
至少AutoVPNConnect
先删除,然后尝试手动连接/重新连接 VPN,看看问题是否再次出现。