Windows 10 中 VPN 连接成功后自动添加路由

Windows 10 中 VPN 连接成功后自动添加路由

我正在尝试在 W10 上在 VPN 连接成功后执行自动“路由”命令。我根据这个简短的描述尝试了它这里它适用于 W7,但看起来非常相似,但我无法让它工作。

  • 我的 VPN 连接正常。它随时可以连接和断开,没有任何问题。
  • 我的路由命令没问题。如果我在连接 VPN 后手动启动它,一切正常。
  • 当然,我的 VPN 连接不使用远程网关作为默认网关。我想进行“拆分隧道”。

我调查了一下,Windows 事件 20225 在 W10 上仍然相同(RAS 连接建立)。所以这是正确的……为什么不触发路由命令?连接 VPN 后,我可以在应用程序事件查看器中看到以 RasClient 为源的 20225 事件。

当然,在尝试所有这些方法之前,我尝试使用-p路由命令上的参数“持久地”创建路由,但它不起作用,因为每次启动时添加此路由时 VPN 接口都不存在,所以这不是一个有效的选项。所以必须安排。

我使用提升的权限执行了该任务,结果相同,并且还选中了“使用提升的权限执行”复选框。该任务显示为“从未启动”。如果我尝试手动启动它,它会显示“任务计划程序服务不可用。任务计划程序将尝试重新连接到它”。但任务计划程序工作正常,其他任务可以手动安排或执行,并且它们正在运行。

有人成功实现了这个目标吗?

编辑 我尝试将触发器部分从“基本”改为“自定义”,并在 XML 字段中放置一个 XPath 过滤器以尝试搜索事件 ID:

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[(EventID=20225)]]</Select>
  </Query>
</QueryList>

但两者都不起作用。

问题是一样的。任务显示为“从未启动”。

编辑2 我在事件查看器中注意到,在成功完成 VPN 连接(ID 20225)后,总会有另一个可能相关的事件(ID 900)...也许一切都已设置好,但有东西阻止了触发器...我不知道。请看此屏幕截图(抱歉,屏幕截图是西班牙语):

事件

答案1

在 Win 10 上,电源外壳有一个可用的 cmdlet,可以在 VPN 连接上添加路由,并在 VPN 断开连接时再次删除它们:添加 VpnConnectionRoute. 无需指定接口 ID 即可工作。

基本语法如下:

Add-VpnConnectionRoute -ConnectionName "VPN 连接名称" -DestinationPrefix 10.0.0.0/16

输入该命令后,在VPN连接/断开连接时将自动创建/删除路由。

答案2

最后我还是没能让它工作……所以,我遗憾地决定寻找一个替代方案。我使用 rasdial 制作了一个批处理文件,它工作得很好。唯一的“问题”是路由命令需要以提升的权限启动。那是因为我将一个runas带有/savedcred参数的命令放在了一起,它只会要求输入一次密码,然后它就会自动工作。然后,对于 vpn,您可以输入您的密码(以明文形式!)或set mypass="*"每次都要求输入密码。

这是我的代码:

@echo off

cls
echo.

REM put your VPN connection name here
set myvpn="Your VPN name"
REM put your user here
set myuser="foo"
REM put your pass here. Leave * for asking
set mypass="testpass"
REM put your win admin user here
set winadmin="administrator"
REM put your network route here
set network="192.168.8.0"
REM put your network mask here
set mask="255.255.255.0"
REM put your gateway mask here
set gateway="192.168.1.1"

ipconfig | find /i %myvpn% > nul 2>&1

if %ERRORLEVEL% == 0 (

    echo "VPN already connected. Disconnecting..."
    echo.
    rasdial %myvpn% /disconnect
    runas.exe /user:%winadmin% /savedcred "route delete %network% mask %mask% %gateway%"

) else if %ERRORLEVEL% == 1 (

    echo "VPN not connected. Connecting..."
    echo.
    rasdial %myvpn% %myuser% %mypass%
    runas.exe /user:%winadmin% /savedcred "route add %network% mask %mask% %gateway%"
)

我希望这对某人有帮助。

相关内容