你连上办公室的 VPN,浏览器里每个页面都开始走那条网络:文件服务器很快,其他一切都变慢、被过滤或干脆没了。客户端没出错,是配置文件要求了全局隧道。阻止它的开关,是现代化“设置”应用不显示的一个对话框里的一个复选框,而每次连接网关又会重新说了算。本文按 Windows 界面实际呈现的顺序来走,然后再讲路由表看起来正确之后仍然失败的检查。

从适配器属性开始,而不是从“设置”开始

“设置”应用把配置文件列在“网络和 Internet”下面,然后是 VPN,但它只提供常规选项。默认网关的决定在适配器上。用 Win+R 和 ncpa.cpl 打开经典适配器列表,右键单击 VPN 连接,选择“属性”,选择“Internet 协议版本 4”,再次选择“属性”,然后选择“高级”。取消勾选在远程网络上使用默认网关,并确认从这三个对话框中退出。

测试前先重新连接,因为复选框是在建立隧道时应用的,而已有会话会保留它建好的路由表。如果客户端断开时看不到适配器,先连接一次再重新打开窗口。安装 TAP 或 Wintun 适配器却没有 IPv4 属性页的厂商客户端根本没有这个对话框;对它们来说,同样的决定在客户端自己的设置里,是一个拆分隧道选项,适配器上的复选框是找错地方了。

用 PowerShell 做同样的改动

对于在 Windows VPN 存储中创建的配置文件,这个设置可以脚本化,如果机器经常重装,这正是你想要的:

Set-VpnConnection -Name "Office" -SplitTunneling $true
Get-VpnConnection -Name "Office" | Select-Object Name,SplitTunneling

该 cmdlet 只能访问那个存储中的配置文件。第三方客户端添加的连接不会出现,命令会因名称错误失败,看起来像打错了字。也要注意这个开关不做什么:它阻止客户端安装默认路由,但不会删除网关在连接时推送的路由,所以很多网络中下一节仍然需要。

当网关把默认路由推回来

先读路由表。两条度量值不同的默认项,说明配置文件改动生效了,而推送的路由仍然把它替换掉了:

route print -4
Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Sort-Object RouteMetric
Get-NetAdapter | Select-Object Name,ifIndex

删掉属于隧道的默认路由,保留物理那条。用第三条命令里的接口索引,而不是适配器别名,因为传别名的脚本一显示名变化就会断:

Remove-NetRoute -DestinationPrefix 0.0.0.0/0 -InterfaceIndex 21 -Confirm:$false
route delete 0.0.0.0 10.8.0.1

删除会把办公室一起带走,所以要通过隧道网关把公司前缀加回来。这一行最容易被跳过,也正是拆分隧道改成功之后反而出现“VPN 不工作了”的原因:

route add 10.0.0.0 mask 255.0.0.0 10.8.0.1 metric 5 if 21

这些都不会在重新连接后保留,这是诚实的行为而不是缺陷:适配器被重建,客户端重新应用配置文件和网关商定的内容。如果默认路由每次都回来,说明网关被配置为拒绝拆分隧道,会继续推送它,或者直接断开会话。那是网络运营方的策略,请求应该提到那里,而不是写一个每次连接都对着干的本地脚本。

重新连接一次后,再检查 DNS、IPv6 和度量值

删除一条 IPv4 默认路由,并不能证明另一协议族或名称解析没问题。隧道可以承载 IPv6,而 IPv4 默认路由仍留在本地;被推送的解析器列表可以让内部名称继续可用,而使用它的查询却走了另一条路。宣布完成之前,三项都要查:

Get-NetRoute -DestinationPrefix ::/0
Get-DnsClientServerAddress -InterfaceAlias "Office"
Get-DnsClientNrptPolicy

如果每次连接状态都会回退,就把命令移到连接时的动作里,而不是手动改路由表:用连接事件触发的计划任务,或者客户端自带的拆分隧道设置(如果有的话)。把接口索引放在变量里,运行时再查,因为添加或移除适配器时它可能变。

想清楚你放弃了什么

本地互联网流量不再被办公室检查或过滤,只通过隧道发布的内容现在需要自己的路由。有些组织把拆分隧道视为违反策略,所以在改动受管设备之前先确认;被推送的默认路由有时是强制手段,而不是意外。Set-VpnConnection 文档列出了拆分隧道参数以及它适用的配置文件类型。

然后按固定顺序验证:默认路由归谁、普通浏览、一个按地址访问的公司主机、一个内部名称,以及重新连接一次后的同样四项。如果浏览正常而公司主机失败,缺的是前缀路由,不是你删掉的默认路由,修这个比重建配置文件便宜得多。

相关文章