当前位置: 首页 > news >正文

根据 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   8615127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331127.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     128400.0.0.0          0.0.0.0            在链路上    111.186.xx.xxx     46111.186.xx.0  255.255.255.255       192.168.31.1    192.168.31.54     4281111.186.xx.xxx  255.255.255.255            在链路上    111.186.xx.xxx    301127.0.0.0        255.0.0.0            在链路上         127.0.0.1   4556127.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   8615111.0.0.0        255.0.0.0            在链路上    111.186.xx.xxx     46111.186.xx.0  255.255.255.255     192.168.31.1       192.168.31.54     56111.186.xx.xxx  255.255.255.255            在链路上    111.186.xx.xxx    301111.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   8615111.0.0.0        255.0.0.0            在链路上    111.186.xx.xxx     46111.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?锟斤拷!


http://www.mrgr.cn/news/29728.html

相关文章:

  • 深度学习 之 常见损失函数简介:名称、作用及用法
  • vue 2表格滚动加载
  • 【VUE】快速上手
  • 心觉:不能成事的根本原因
  • 龙海家园的免费停车点探寻
  • 【C语言】带你手把手拿捏指针(3)(含转移表)
  • 中、美、德、日制造业理念差异
  • Linux常见查看文件命令
  • 数学学习记录
  • vue获取最近7天时间;获取任意时间段时间
  • Flutter 优化技巧分享
  • 基于python+django+vue的医院预约挂号系统
  • Mobile net V系列详解 理论+实战(1)
  • python中网络爬虫框架
  • 拦截器Interceptor
  • 一些学习three的小记录
  • A股上市公司企业创新能力、质量、效率-原始数据+dofile+结果(2006-2023年)
  • 策略模式结合反射在电商支付系统中的深入应用与实战解析
  • SIP Servlets学习
  • Android RecyclerView 缓存机制深度解析与面试题