为了解决 DNS 污染的问题,我是通过 ChinaDNS 来保证 DNS 的准确性和速度的,同时,把谷歌的 DNS 列入静态路由走 OpenVPN 出国。

但是之前的付费 VPN 服务虽然质量不错,但总是避免不了时间久了服务器 ip 需要变更的情况,表现出来的现象就是所有国外网站全部 DNS 解析超时,国内网站访问正常,以前碰到这个时候,就需要手动登录 EdgeRouter Lite 的控制台,修改 OpenVPN 的配置,长期下来还是有点麻烦的,所以这次考虑把 OpenVPN 的服务器端放到自己位于 Linode 日本的 VPS 上,因为是自用的 VPS,所以稳定性还是不错的。

VPS 使用的是 CentOS 7 系统,通过 Docker 管理安装的组件,所以这次还是通过 Docker 安装 OpenVPN。

1. 安装 OpenVPN Docker 版本

1
2
3
4
5
6
7
# 创建 Volume Data Container
$ docker run --name ovpn-data kylemanna/openvpn /bin/true
# 初始化配置
$ docker run --volumes-from ovpn-data --rm kylemanna/openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM:PORT
$ docker run --volumes-from ovpn-data --rm -it kylemanna/openvpn ovpn_initpki
# 运行 OpenVPN
$ docker run --volumes-from ovpn-data -d -p 2525:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

2. 生成客户端配置

1
2
3
4
# 生成配置
$ docker run --volumes-from ovpn-data --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
# 提取配置
$ docker run --volumes-from ovpn-data --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn

3. 配置 EdgeRouter Lite

1. 把 CLIENTNAME.ovpn 保存到 EdgeRouter Lite 上

1
2
3
scp server:~/CLIENTNAME.ovpn router:~/CLIENTNAME.ovpn
ssh router
mv CLIENTNAME.ovpn /config/auth/linode.ovpn

2. 修改 OpenVPN 配置文件

1
2
vi linode.ovpn
# 在最后一行那移除 redirect-gateway def1,换上 route-nopull

3. 配置 vtun0 接口

1
2
3
4
configure
set interfaces openvpn vtun0 config-file /config/auth/linode.ovpn
commit
save

好了,稍等片刻,EdgeRouter Lite 就会自动连接到 Linode 服务器上了,配上 DNS 的静态路由投 vtun0 接口即可。

需要注意的是,因为 DNS 被配置走 vtun0,所以如果 OpenVPN 是用域名连接的话,是永远连接不上的,因为解析不了,所以在修改 OpenVPN 配置文件的时候,记得把 remote 中的域名换成 ip。