在之前的文章 Pritunl: 网关与 DNS 设置 中我提到可以使用 pull-filter 来阻止 OpenVPN 覆盖本地网关,从而使得我们在接入私网的同时,走本地的网关上公网。但是 pull-filter 这个配置属性要在 OpenVPN 2.4 版本及以上才有。在 Ubuntu 16.04 中通过 apt 直接安装的 OpenVPN 是 2.3 版本的,更高的版本需要我们手动安装。

这里我参考了 Manually Installing OpenVPN 2.4.7 On Ubuntu 16.04 Xenial 一文中的方法,其核心思路是从源代码安装。

首先我们需要从官方网站下载源代码,可以使用 wget 下载

官网上已经出到了 2.5 以上的版本,但是其实我用不着那么高的版本,这里仍然以 2.4.7 这个版本为例。

1
2
3
4
$ wget https://swupdate.openvpn.org/community/releases/openvpn-2.4.7.tar.gz
$ tar xfz openvpn-2.4.7.tar.gz
$ cd openvpn-2.4.7
$ ./configure

上面的命令完成了源代码的下载,解压缩以及配置。./configure 命令还会检查变异需要的环境,如果提示缺少某个工具,可以自行安装。

./configure 命令通过之后,我们可以进行编译了:

1
2
3
4
$ ./configure 
$ make
$ make install
$ openvpn —-version

这里的 make install 会将编译好的二进制文件 openvpn 放到 /usr/local/sbin 文件夹,而如果你之前安装过 openvpn,旧的 openvpn 可能安装在 /usr/sbin 中,这个可能会遮蔽新安装的 openvpn。我们可以选择下面的操作

1
2
$ mv /usr/sbin/openvpn /usr/sbin/openvpn.old
$ sudo ln -s /usr/local/sbin/openvpn /usr/sbin/openvpn