需求分析
openvpn在调研时不支持分流配置,需求是openvpn的开启不要影响现有的网络环境。在经过调研,发现 openvpn配置文件可以使用一些指令来指定访问某些地址的路由经过openvpn的设备,这样就可以实现了流量分流。
配置指令说明
这里主要用到了下面的参数
指令 | 说明 |
---|---|
dhcp-option | 添加额外的网络参数,可以是在客户端配置,或者服务端推送,这里有指定 DNS |
redirect-gateway def1 | 使用这个 def1 flag 可以使用0.0.0.0/1 and 128.0.0.0/1 来覆盖默认路由,这里的好处是不会擦除原有的默认网关 |
route | 可以在建立连接后,自动添加一些路由,并且在TUN/TAP设备关闭后,自动销毁 |
gateway | 默认来自 第二参数或者默认网关,第二参数为 vpn_gateway 指远端的vpn地址 net_gateway 指 per-existing IP默认网关 |
route-nopull | 当在客户端使用时,此选项有效禁止从Server将路由添加到客户端的路由表中,但是请注意,此选项仍然允许 Server 设置TCP/IP 客户端TUN/TAP接口的属性 (这里主要用作创建openvpn自己的网络接口)。 |
pull-filter | 忽略server端push 的资源,这些选项就是来自 —pul 或者其他选项的,例如其他选项 dhcp-option/route/gateway 等。 |
最终的配置为
text
|
|
在修改配置后的路由如下
bash
|
|
在不修改配置的路由表如下
bash
|
|
可以看到会多一条 0/1
路由。
有了这些参数就可以成功的模拟一个反向分流的配置
问题:和其他vpn一起使用时,无法解析dns
如下所示
bash
|
|
这里以 MacOS 说明如何解决,使用 scutil 配置操作系统的dns解析
bash
|
|
查看 DNS 配置
bash
|
|