如何使 Windows VPN 路由选择性流量(按目标网络)?

Leg*_*las 175 networking windows vpn routing

我想使用 Windows VPN 但仅用于特定网络,因此它不会接管我的整个网络连接。

例如,不要让 VPN 成为默认路由,而是让它成为 192.168.123.0/24 的路由

(我可以看到在这个问题中有一个针对 Ubuntu 的解决方案,但有时我也必须在 Windows 上执行此操作)

这是否可以自动化,以便每当我连接到 VPN 时它都会这样做?

TRS*_*-80 166

您可以通过转到 VPN 的属性、Networking选项卡、Internet Protocol (TCP/IP)属性、Advanced、取消勾选来关闭接管整个连接Use default gateway on remote network。这可能会或可能不会留下路由,192.168.123.0/24具体取决于 VPN 服务器的设置。如果没有,您每次都必须手动添加路由,尽管您可以将其放入批处理文件中。

要手动添加路由,请运行(以管理员身份):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254
Run Code Online (Sandbox Code Playgroud)

此示例将192.168.0.12通过 VPN 网关创建到 IP 的持久路由(无需在重新启动后运行该命令)10.100.100.254

有关更多信息,请访问http://technet.microsoft.com/en-us/library/bb878117.aspx

  • 就个人而言,我发现关闭复选框就足够了。我不必添加任何路线。我通过大量的跟踪验证了一切都在我期望的地方进行。 (18认同)
  • “您必须手动添加路线”......如何?有人如何强制“192.168.10.123”通过VPN,但没有别的? (3认同)
  • 请澄清。哪些流量通过 VPN 路由?是否只是针对 VPN 服务器 IP 的流量?例如,如果 VPN 连接转到“my.domain.com”,那么这是否意味着客户端上到“my.domain.com”的所有流量都通过 VPN,而其他所有流量都转到默认网关? (3认同)
  • 同样,这个复选框就是所需要的。 (2认同)
  • 我使用“route print”命令,并验证Windows 7生成的路线是完全错误的。它没有将发送到我的 VPN IP 的流量发送到 VPN...而是将其发送到我的本地网关。表中还有一些循环条目。我删除了 Windows 创建的路由,然后手动添加了正确的路由,以便我的 VPN 服务器的 IP 地址条目将使用 VPN 的网关和客户端的本地 IP 作为接口。然后,到我的 VPN 服务器的流量成功地通过 VPN 隧道路由,并且所有其他流量均未按预期受到影响。效果很好。 (2认同)

Der*_*ter 24

在 Windows 8+ 中使用Add-VpnConnectionRoute cmdlet。

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
Run Code Online (Sandbox Code Playgroud)

  • 要删除路由,您可以使用具有相同语法的“Remove-VpnConnectionRoute”。遗憾的是没有`Get-VpnConnectionRoute`,但是要查看路由,您可以执行`(Get-VPNConnection -ConnectionName '...').Routes`。 (3认同)

小智 21

我成功地使用了@TRS-80的技术来实现这一点。

我在家工作,我的电子邮件必须通过 VPN 连接到公司网络(我讨厌网络邮件!!)。

同时,我需要不断地浏览信息,还需要 youtube 来播放我的背景音乐……现在你绝对不想通过 VPN 播放 youtube,因为这听起来像机器人唱歌!!!:)

我所做的只是关注@TRS-80:

VPN 属性,网络选项卡,“Internet 协议 (TCP/IP)”属性,高级,取消勾选“在远程网络上使用默认网关”

然后做了我自己的:

在 DNS 选项卡下,勾选“在 DNS 中注册此连接地址”

一切顺利!


Way*_*yne 10

当然,此答案并未反映您的要求,但我专门为此目的使用了 VM。这样,只有虚拟机内部的网络受路由限制。

您可能会从其他人那里找到一些更好的答案,但至少这可能会给您一些考虑,因为它是创建 VM 后的简单解决方案。


小智 10

像我这样对网络不太了解的新手的“简短”指南。这里没有太多新内容,但总结了以前的答案和其他相关主题中描述的所有好的选项。整个过程包括3个基本步骤:

1) 使所有流量不通过 VPN。为此,您必须取消Use default gateway on remote network选中 VPN 设置中的复选框。确保为 IPv4 和 IPv6 取消选中此复选框。通常我只是完全禁用 VPN 连接的 IPv6 协议。

(!)(有时)可能取消选中该复选框足以进行正常工作 - 根据我的经验,可以在建立 VPN 连接后自动添加必要的路由(将通过 VPN 引导必要的流量)。我不知道这些规则的确切配置位置和方式,但存在这种情况 - 可能是 VPN 网络管理员完成的一些魔术。

2) 仅通过 VPN 传输必要的流量。为此,您需要定义路由。在这里你有 3 个选择:

2.1)通过VPN网关添加永久路由:

route -p add a.b.c.d/<CIDR> w.x.y.z 或者 route -p add a.b.c.d mask e.f.g.h w.x.y.z

其中 'VPN 网关' = '您在 VPN 网络上的 IP' =w.x.y.z和目标地址/网络 = a.b.c.d。您可以w.x.y.z通过执行ipconfig和查找您的 VPN 连接名称来找到,或者,如果您使用 PowerShell,您可以通过执行获得紧凑的输出ipconfig | grep -A5 PPP(在找到每个 PPP 连接后将输出 5 行)。

缺点:如果您的 VPN IP 发生变化,您将不得不重新创建路由。

2.2)通过VPN网络接口添加永久路由:

route -p add a.b.c.d/<CIDR> 0.0.0.0 IF <interface number>

哪里a.b.c.d是目标地址/网络,interface number是您的 VPN 连接的标识符。这个 ID 可以通过执行找到netstat -rn,或者,为了更紧凑的输出,netstat -rn | grep -A10 'Interface List'.

优点:如果您的 VPN 地址 ( w.x.y.z) 发生变化,则无需更改任何内容。

缺点:如果您删除 VPN 连接,则需要使用新 ID 重新创建路由。

2.3) 使用 PowerShell cmdlet:

Add-VpnConnectionRoute -ConnectionName '<VPN connection name>' -DestinationPrefix a.b.c.d/<CIDR>

优点:每次建立VPN连接时添加必要的路由,每次断开连接时删除。

缺点:没有Get-VpnConnectionRoutescmdlet,因此很难管理这些规则。

3) 检查并确保路由按预期工作!

如果添加了持久路由,则可以通过执行来检查它们netstat -rn | grep -A10 'Persistent Routes'

最后,tracert针对应该通过 VPN 访问的 IP 地址和应该在没有 VPN 的情况下工作的 IP 地址运行一些命令。


小智 8

我发现它需要在路由命令中直接指向接口。没有它,Windows 将使用主网卡接口,而不是 VPN。就我而言,它看起来像

route -p add 192.168.10.187 mask 255.255.255.255 0.0.0.0 IF 26
::           ^destination        ^mask           ^gateway   ^interface
Run Code Online (Sandbox Code Playgroud)

注意'IF 26'。


归档时间:

查看次数:

334597 次

最近记录:

6 年,1 月 前