在某些时候,服务器下发的配置文件不一定是我们想要的,特别是我们本地网络环境复杂的情况下,我们并不希望 OpenVPN 代理我们的所有流量。我们希望内外网分开。

对于 OpenVPN 来说,默认是全局代理,也就是说,不管什么流量,他都会转发到代理服务器上。如果代理服务器下发的配置没有路由表,我们所有的路由都被转发了,在访问某些网站的时候特别慢,岂不是很难受?

因此,我们需要手动设置路由记录。

在 OpenVPN 的配置文件中有这样几条配置项。

一、route-nopull

当客户端加入这个参数后,openvpn 连接后不会请求远端路由表,就不会添加任何一条路由到本地路由表中。也就是不会有任何网络请求走OpenVPN 。相当于仅获取 IP 地址。

二、vpn_gateway

当客户端加入 route-nopull 后,因为没有路由表信息,所以没有出接口路由。但是我们可通过添加 route 记录和 vpn_gateway 参数使部分 IP 访问走 OpenVPN。

route IP段        子网掩码      vpn_gateway
route 192.168.1.0 255.255.0.0 vpn_gateway
route 172.121.0.0 255.255.0.0 vpn_gateway

三、net_gateway

这个参数和 vpn_gateway 相反,在默认出去的访问全部走 Openvpn 时,强制部分 IP 访问不通过 OpenVPN 代理。

route IP段        子网掩码      net_gateway
route 172.121.0.0 255.255.0.0 net_gateway

四、max-routes

该参数表示可以添加路由的条数,OpenVPN 默认只允许添加100条路由,如果需要添加的路由数少于100可不加这个参数。

max-routes 1000

一般来说,默认这些参数设置就足够了。但是有的时候,你架不住对端服务器下发的参数奇葩。虽然加了route-nopull 参数某种程度上来说,的确是拒绝了远端下发路由表。但是 metric 这个参数还是接收的。这一次碰到了一个奇葩的问题。明明设置需要代理的路由表,但是 OpenVPN 启动后仍然是全局代理。检查了系统路由表后发现:

default via 172.19.3.221 dev tun0 proto static metric 50 
default via 192.168.10.1 dev enp3s0 proto dhcp metric 100 
58.154.160.0/19 via 172.19.3.221 dev tun0 metric 50 
58.154.192.0/18 via 172.19.3.221 dev tun0 metric 50 
58.195.85.192/28 via 172.19.3.221 dev tun0 metric 50 
58.200.30.128/25 via 172.19.3.221 dev tun0 metric 50 
118.202.0.0/19 via 172.19.3.221 dev tun0 metric 50 
118.202.32.0/20 via 172.19.3.221 dev tun0 metric 50 
172.19.3.221 dev tun0 proto kernel scope link src 172.19.3.222 
192.168.10.0/24 dev enp3s0 proto kernel scope link src 192.168.10.132 metric 100 
202.118.0.0/19 via 172.19.3.221 dev tun0 metric 50 
202.199.0.0/20 via 172.19.3.221 dev tun0 metric 50 
202.206.16.0/21 via 172.19.3.221 dev tun0 metric 50 
210.30.192.0/20 via 172.19.3.221 dev tun0 metric 50 
210.30.199.12 via 192.168.10.1 dev enp3s0 metric 50 
211.137.22.128/25 via 172.19.3.221 dev tun0 metric 50 
219.216.64.0/18 via 172.19.3.221 dev tun0 metric 50 

就因为 OpenVPN 设置的 metric 比系统获取的少,导致路由选择时优先级比较高,系统默认代理出口。

查了半天,在某个不知名的小角落查到了资料,OpenVPN 有个设置是 route-metric。这个参数设置了路由的跳数。修改完,终于可以内外网分开代理了。(小声BB这个有毒的 OpenVPN 服务器是东北大学的回校 VPN

附东北大学OpenVPN配置(学生版)

client
dev tun
proto tcp

route-nopull
route-metric 150
route remote_host 255.255.255.255 net_gateway
route 58.154.160.0 255.255.224.0 vpn_gateway
route 58.154.192.0 255.255.192.0 vpn_gateway
route 58.195.85.192 255.255.255.240 vpn_gateway
route 58.200.30.128 255.255.255.128 vpn_gateway
route 118.202.0.0 255.255.224.0 vpn_gateway
route 118.202.32.0 255.255.240.0 vpn_gateway
route 202.118.0.0 255.255.224.0 vpn_gateway
route 202.199.0.0 255.255.240.0 vpn_gateway
route 202.206.16.0 255.255.248.0 vpn_gateway
route 210.30.192.0 255.255.240.0 vpn_gateway
route 219.216.64.0 255.255.192.0 vpn_gateway
route 211.137.22.128 255.255.255.128 vpn_gateway

remote stu.vpnhost.neu.edu.cn 80
remote stu.vpnhost.neu.edu.cn 443
remote stu.vpnhost.neu.edu.cn 587
remote stu.vpnhost.neu.edu.cn 8080
remote-random
resolv-retry infinite
nobind
persist-key
auth-user-pass
key-direction 1
comp-lzo
verb 4

参考链接:Openvpn客户端路由配置

分类: 运维

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注