根据 IP 地址进行 VPN 分流(详细,亲测,通用)

根据 IP 地址进行 VPN 分流(详细,亲测,通用)

背景

不在学校的时候需要使用实验室的服务器,但是实验室的服务器只能在校园网内访问,因此在校外就需要使用学校的 VPN,但是打开 VPN 以后会默认将所有流量都走 VPN,如果学校的网络较慢或者访问不了某些网站,就很不方便了。

那么,有没有办法通过自定义规则,只在访问实验室服务器 IP 的时候通过 VPN,访问 Google 等别的网站还是用本机原有的网络呢?因此我的目标是根据 IP 地址进行 VPN 分流:实验室的服务器 IP 使用学校 VPN,其他 IP 地址不使用学校 VPN。

经过一翻摸索,只需要将 VPN 的默认网关关闭,让访问外部网站的流量不再走 VPN,然后在路由表中为实验室的服务器 IP 添加一条路由到 VPN 的特殊规则即可。

下面详细介绍操作步骤,只需要 3 步即可。

步骤

添加 VPN

第一步当然添加学校的 VPN,如果已经添加过可以直接跳过看第 2 步。

使用 windows 内置的 VPN 客户端:设置-网络和 Internet-VPN-添加 VPN。

填写 VPN 服务器地址、用户名和密码等,在 连接名称 里面给这个 VPN 起个名字,**但最好起个英文名称!**用中文名可能会有意想不到的问题,比如与系统代理共存:中文 VPN 名称/校网客户端 + 代理 = Boom?锟斤拷!

请添加图片描述

保存以后打开 VPN,此时应该可以访问学校内网的服务器了。

(这一部分可以跳过)

如果想要了解一点原理,Windows 系统在 CMD 或者 powershell 当中使用 ipconfig /all 可以查看一下本机中的所有网络接口。可以发现里面有一个 VPN 对应的适配器,其中 IPv4 地址一项是这个 VPN 适配器对应的接口地址(Interface)。

请添加图片描述

对比一下开启 VPN 前后的路由表,Windows 系统在 CMD 或者 powershell 当中查看路由表的命令是 route print

>>> route print # 开启 VPN 前
...
IPv4 路由表
===========================================================================
活动路由:
         网络目标           网络掩码               网关              接口   跃点数
          0.0.0.0          0.0.0.0         192.168.31.1    192.168.31.54   8615
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
...
===========================================================================
...

>>> route print # 开启 VPN 后
...
IPv4 路由表
===========================================================================
活动路由:
         网络目标           网络掩码               网关              接口   跃点数
          0.0.0.0          0.0.0.0       192.168.31.1    192.168.31.54     12840
          0.0.0.0          0.0.0.0            在链路上    111.186.xx.xxx     46
     111.186.xx.0  255.255.255.255       192.168.31.1    192.168.31.54     4281
   111.186.xx.xxx  255.255.255.255            在链路上    111.186.xx.xxx    301
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1   4556
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1   4556
...
===========================================================================
...

对比一下可以发现,开启 VPN 以后,多了目标 IP 为 0.0.0.0 的规则,默认将所有流量都路由到 VPN 适配器对应的接口。为什么不是根据原来的那条 0.0.0.0 的规则发往 192.168.31.54?因为跃点数(Metric)代表了路由的优先级,越小的优先级越高。新加的这条规则跃点数很低,优先级高,原来的规则就失效了。

活动路由:
         网络目标           网络掩码               网关              接口   跃点数
          0.0.0.0          0.0.0.0            在链路上    111.186.xx.xxx     46

关闭 VPN 的默认网关

添加好 VPN 以后,我们需要关闭 VPN 的默认网关设置,就是让访问外部网站的流量不再走 VPN,换句话说,就是删除 IPv4 路由表当中的这一条:

活动路由:
         网络目标           网络掩码               网关              接口   跃点数
          0.0.0.0          0.0.0.0            在链路上    111.186.xx.xx     46

理论上用 route delete 命令可以直接删除路由表中的表项,但是方便起见我们可以直接在控制面板里面关闭。

打开控制面板:控制面板\网络和 Internet\网络连接

选择 VPN 对应的网络连接,名称是第 1 步当中起的 VPN 名称,右键选择属性:

请添加图片描述

在属性面板选择”高级“标签页,然后选择 IPv4(Internet 协议版本 4),选择”属性“:

请添加图片描述

再选择”高级“:

请添加图片描述

看到里面有一个”在远程网络上使用默认网关“,默认应该是勾选上的,我们取消这个勾选,然后”确定“:

请添加图片描述

关闭以后重新打开 VPN,这时候所有的流量都默认不走 VPN 了,试一下学校内部的网站或者是服务器应该是无法访问的状态,其它网站应该是使用本机原本的网络能够正常访问的。

如果这个时候看一下路由表,会发现目标地址 0.0.0.0 的规则只剩下原本的那条了:

IPv4 路由表
===========================================================================
活动路由:
          网络目标        网络掩码                网关             接口   跃点数
          0.0.0.0          0.0.0.0     192.168.31.1       192.168.31.54   8615
        111.0.0.0        255.0.0.0            在链路上    111.186.xx.xxx     46
     111.186.xx.0  255.255.255.255     192.168.31.1       192.168.31.54     56
   111.186.xx.xxx  255.255.255.255            在链路上    111.186.xx.xxx    301
  111.255.255.255  255.255.255.255            在链路上    111.186.xx.xxx    301
...
===========================================================================
永久路由:
  无
===========================================================================

配置路由表

第三步就是向路由表中添加自定义的规则,将学校内网想要访问的 IP 地址路由给 VPN 适配器。

Windows 系统用管理员模式启动在 CMD 或者 powershell:

首先查看 VPN 适配器的网络接口号,用 route print 命令,在开头的接口列表当中,可以找到 VPN 名称对应的接口号(需要在 VPN 打开的才能找到),这里假设是 42

请添加图片描述

接着用 route 命令添加自定义规则,例如添加想要访问的 IP 地址是 123.123.123.123,IF 后面跟的是上面找到的 VPN 适配器的网络接口号是:

route add -p 123.123.123.123 MASK 255.255.255.255 0.0.0.0 IF 42

-p 参数代表永久添加,系统重启以后仍然保留,MASK 255.255.255.255 代表完全匹配这个 IP 地址,这条命令会将目标地址是 123.123.123.123 的流量发送到指定的网络接口 42,走 VPN。

请添加图片描述

如果有”操作完成!“的提示则代表添加成功。添加完成后,就可以直接访问学校内网指定的服务器了。这时候访问其他网站还是走原来的网络,没有经过 VPN。

(这一部分可以跳过)

检查路由表可以发现这时候多了一条永久路由,由于跃点数(METRIC)设置成了 1,因此这条规则的优先级是最高的:

>>> route print
...
IPv4 路由表
===========================================================================
活动路由:
         网络目标          网络掩码             网关               接口    跃点数
          0.0.0.0          0.0.0.0     192.168.31.1    192.168.31.54   8615
        111.0.0.0        255.0.0.0            在链路上    111.186.xx.xxx     46
     111.186.xx.0  255.255.255.255     192.168.31.1    192.168.31.54     56
...
===========================================================================
永久路由:
  网络地址           网络掩码                    网关地址    跃点数
   123.123.123.123  255.255.255.255            在链路上        1
===========================================================================
...

我们还可以用 tracert 工具查看某个 IP 或者网址的路由路线来确定是否走了 VPN:

tracert 123.123.123.123

比如下面这个路由路线,第一跳发往的是与上面 VPN 相关的地址 111.186.xx.xxx,说明访问这个 IP 走的是 VPN。

请添加图片描述

参考

Windows 路由表根据 IP 段进行 VPN 分流

Windows 路由表详解 - 博客园

How to Add a Static TCP/IP Route to the Windows Routing Table

How to use Tracert/Traceroute

中文 VPN 名称/校网客户端 + 代理 = Boom?锟斤拷!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值