两个 Windows VPN 同时使用:哪个配置文件保留默认路由?
两个 Windows VPN 配置文件争抢同一条默认路由。取消勾选一个复选框,补上它原本覆盖的前缀,并在信任两者之前检查 DNS。
接入第二条隧道后,第一条便沉寂下来,而两个客户端仍都报告连接正常。Windows 只能给出一个默认路由,任何声称拥有它的配置文件都会从另一个手里夺走它。症状看起来像 VPN 故障,实则是两个配置文件之间的路由之争。决定哪条隧道应当拥有这条路由,其余配置自然随之而定。
只能有一个条目成为最佳默认路由
IPv4 路由表对于没有更具体匹配的目标只保留一条胜出的路由。安装自己路由的 VPN 配置文件一连接就会替换先前的路由,原本进入第一条隧道的流量改从第二条流出。第一条隧道仍在运行;消失的是任何本会用它访问普通目标的报文。
客户端状态图标无法显示这一点。它只报告隧道已经建立,而不报告哪些前缀仍指向该隧道,于是用户看到两个绿色图标和某个应用中的超时。发生故障时阅读 route print -4 比任何 VPN 日志都更有信息量。
名称解析是第二个、独立的冲突,仅修改路由表并不能解决它。
复选框安装了什么,又移除了什么
该选项位于每个 VPN 配置文件适配器属性的 IPv4 高级设置中,表述为在远程网络上使用默认网关。启用时,每次连接都会添加一条经由隧道的默认路由,并把该接口排入普通流量的序列。禁用时,Windows 保留隧道自身子网的路由,其余表项维持原状。
多数人正是在取消勾选时卡住。远程站点通常不止一个前缀,而这些前缀都不在适配器子网内,于是文件服务器和管理地址不再响应。复选框并没有破坏隧道;它移除的是那条覆盖一切的宽路由。
混合配置既正当又常见:公司配置文件保留勾选作为全隧道,实验室配置文件则被拆分,以免顶掉公司的默认路由。
按每条隧道必须承载的内容来选择
三个问题决定布局。这条隧道需要承载普通互联网流量,还是只承载自身站点内的地址?两个站点使用的私有网段是否互不重叠?如果配置文件由雇主管理,你是否被允许改动它的路由行为?
如果一条隧道必须是全隧道,它就拥有默认路由,另一条必须拆分。如果两者都不需要普通互联网流量,就在两边都取消勾选,让物理适配器保留默认路由。如果网段重叠,请停下:172.22.0.0/16 不可能既指公司侧的一台机器又指实验室侧的另一台,任何复选框都解决不了。
把决定记录在配置文件名称旁边。否则下个季度新增的第三个 VPN 会把调查从头再做一遍。
补上缺失的前缀并验证结果
对每条拆分隧道,显式添加远程网段,使用该适配器上显示的对端地址,而不是服务器的公网地址:
> route add 172.22.0.0 mask 255.255.0.0 172.20.4.1
> route print -4
> Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Sort-Object RouteMetric
PPP 适配器使用自己的对端地址作为下一跳,而 TAP 适配器通常使用该接口上显示的网关,所以请阅读适配器详情,而不是照抄指南里的数字。只有确认路由正确后再添加永久标志,并在添加替换项之前删除旧的永久条目。受管理的客户端可能自行安装并保护自己的路由,此时必须由配置文件所有者来做改动。
DNS 需要单独处理一遍。两条隧道都可能推送解析器,而 Windows 按接口保留带优先次序的列表,因此属于第二个网络的名称可能被送到第一个网络的解析器。在选择修复方案之前,先看每个适配器实际收到了什么:
> Get-DnsClientServerAddress -AddressFamily IPv4
> Resolve-DnsName files.corp.internal -Server 172.20.4.1
按域名的名称解析策略通常优于替换全局解析器列表,因为该列表由机器上的每个应用共享,悄悄改动它会挪动无关的查询。
用四项检查验收配置:在每个远程网络中按地址访问一个资源、在各自网络中做一次名称查询、互联网默认路由仍指向物理适配器,以及在第二条连接建立后仍存活的远程桌面会话。