从配置文件而不是从路由表清除 Windows VPN 路由
删除活动条目并不会删除重新创建它的指令。先找到拥有该路由的配置文件或策略,再在那里修改。
删除这条路由,看着它消失,下一次连接又把它带回。这不是删除命令失败,而是另一个对象在恢复该条目。你的命令作用于活动路由表,而别的东西持有一条保存的指令,每次连接都会重新安装这条路由。在第三次删除同一条目之前,先找到它的所有者。
再次删除之前先确定所有者
在路由仍然存在时,记录确切的目标前缀、活动接口和配置文件名称。然后到持有它的作用域里查看目标配置文件,因为单用户连接列表和所有用户连接列表是两个不同的对象。检查是否还有脚本、VPN 服务或设备管理也在安装该条目,当显而易见的拥有者都解释不了时,翻查启动项。由计划任务添加的路由会按定时器回来,而不是随连接回来。
时序能很快缩小范围。只在重连时回来的路由指向配置文件;在连接保持期间就回来的路由指向脚本、服务或策略刷新。
删除保存的路由,而不是活动路由
对原生配置文件,删除需要连接名称和目标前缀;当连接属于全局电话簿时,还要加上所有用户开关。先预览,因为 cmdlet 支持预览,而预览不花任何代价:
Remove-VpnConnectionRoute -ConnectionName 'Office VPN' -DestinationPrefix '10.77.0.0/24' -WhatIf
Remove-VpnConnectionRoute -ConnectionName 'Office VPN' -DestinationPrefix '10.77.0.0/24'
这样删除的是保存的指令,而不是相匹配的活动条目,正是这一差别让改动在重连后依然存在。从路由表删除只能买到下一次连接之前的时间。Microsoft 把这个 cmdlet 记录为从 VPN 连接中删除路由,而那正是你想改的对象。
请读输出,不要假设它已经生效。cmdlet 会报告它修改了哪个连接,下一步要从保存的配置而不是活动路由表去确认改动。
把保存的路由读回来
问配置文件现在持有哪些路由,因为保存的集合才是权威答案,路由表只是一份副本。连接对象带着自己的路由列表:
Get-VpnConnection -Name 'Office VPN' | Select-Object -ExpandProperty Routes
Get-VpnConnection -AllUserConnection | Select-Object Name, Routes
仍然出现在该集合里的前缀,无论从路由表删了多少次,下次连接都会回来。已经离开集合却仍留在路由表里的前缀另有所有者,这会把你送回时序那个问题。
在连接保持期间比较两份列表。出现在活动路由表、却不在保存集合里的前缀,是指向脚本和策略的情形;两边都有的前缀,则是配置文件拥有的情形。这个比较就是全部诊断,代价是一次重连。
当管理策略拥有这条路由
由设备管理下发的配置文件不归你编辑,本地改动会在下一次策略刷新时被替换。征兆是成功删除后保存的路由又出现,或者不借助你没有的提权就无法修改配置文件。在继续把时间花在 cmdlet 上之前,先确认设备的注册状态。
纠正措施属于策略:在管理控制台的 VPN 配置文件定义里删除该前缀,或在部署它的组策略里删除。请该策略的所有者确认改动,而不是再次编辑本地副本。这样一来设备会在下次刷新时与策略一致,路由消失的理由也能撑过下一次部署。
记录是什么拥有它
写下所有者、作用域和确切的命令,让下一个人不必从头重做调查。记录条目是否回来、由什么触发,因为那正是所有者被正确识别的证据。策略刷新后回来的路由告诉你:策略仍然是这样规定的。
删除活动路由是判断这条路径是否重要的正当快速测试。它不是配置变更,也不该被记录成配置变更。真正算数的是在指令所在之处做的那次改动。