openvpn的PAC绕过大陆模式实现方法详解

简介

之前写过openvpn客户端证书上配置路由来达到提速和分流的目的,总觉得写的不是很详细,还是有一些

没讲清楚的地方。openvpn不做过多介绍,大致就是基于openSSL库的应用层VPN虚拟网络的实现,是基于SSL

协议。正常情况之下呢,VPN隧道连接成功后会自动增加路由条目,并且把网关地址设置成VPN的地址,这样所

有的流量都会通过VPN来传送。这样的话就不利于我们办公环境,如果要兼并VPN隧道和本地网络分流,让该走

的流量指定到需要走的路由,这就需要我们人工手动添加路由表增加路由条目来实现。

 

这个需求就有点像v2ray或者ssr当中的PAC模式了,但openvpn不具备天然的功能。

 

先往下看一下参数的介绍

 

参数介绍

控制着Openvpn自定义路由的三个参数

route-nopullvpn_gatewaynet_gateway来决定路由

 

route-nopull

客户端的证书中加入这个参数后,openvpn 连接后不会添加路由,也就是不会有任何网络请求走 openvpn

,所有的流量都由本地转发(单独使用这条参数无意义)。

route-nopull

 

vpn_gateway

在客户端的证书中加入 route-nopull 后,所有出去的访问都不从 openvpn 出去,这里用到 vpn_gateway

参数使指定的IP访问走 openvpn 出去。例如:

route-nopull
route 192.168.1.0 255.255.0.0 vpn_gateway
route 10.0.0.0 255.255.0.0 vpn_gateway

 

net_gateway

这个参数和 vpn_gateway 相反,表示在默认出去的访问全部走 openvpn 时,强行指定部分IP访问不通过

openvpn出去。max-routes 参数表示可以添加路由的条数,默认只允许添加100条路由,如果少于100条路由可不

加这个参数。例如:

max-routes 1000
route 192.168.1.0 255.255.255.0 net_gateway

参数都介绍完了,下面就开始看实操部分,具体怎么实现,openvpn的路由条目怎么写

 

实例

官方的配置文件的写法,有兴趣的也可以研究一下

https://github.com/OpenVPN/openvpn/blob/master/sample/sample-config-files/server.conf

 

客户端修改

只需要手动的修改本地的配置文件即可,服务端那边不需要做修好。适合客户端数量较多并且网络条件复

杂,定制化路由需求。比如打开openvpn生成的配置文件1.ovpn进行演示,添加如下的路由条目。

第一种写法

route-metric 150
route-nopull
route 10.0.0.0 255.255.0.0 vpn_gateway

route-nopull:是不默认建立路由表(即不会出现所有流量经过VPN)
route:目标的IP和目标的子网掩码,利用vpn_gateway语句允许通过VPN流量

 

第二种写法

max-routes 1000
route 192.168.1.0 255.255.255.0 net_gateway

max-routes:则表示可以增加的路由条数

roote:这里写的是本地IP和子网掩码,利用net_gateway语句不通过VPN流量

使用语句不能添加 route-nopull

可以给不代理的国内IP段加进去,这里是国内IP段的列表

 

我使用的是第一种写法

具体修改

服务端修改

在服务器端上配置可以推送的全局路由,这样额好处则省却了客户端上进行配置,客户端不用修改任何

配置,配置推送全局路由,适合网络条件相似的环境。修改配置文件

vi /etc/openvpn/server/server.conf

在openvpn服务器配置文件中加入

push "route 172.16.0.0 0.0.0.0 net_gateway"
push "route 192.168.2.0 255.255.255.0 net_gateway"
push "route 192.168.1.0 255.255.255.0 net_gateway"
push "route 192.168.0.0 255.255.255.0 net_gateway"

查看openvpn进程ID,得到的进程ID值后

pidof openvpn

用kill命令结束掉

kill -9 ID值

最后重启服务

openvpn --daemon --config /etc/openvpn/server/server.conf

 

查看路由

最后我们查看路由表的变化,windows可以用这以下两套条命令查看

netstat -nr

route print

没连上之前我们的路由表情况

连上之后

THE END