yingfeng
心明若鏡,不將不迎

Linxu系统开机自动连接OpenVPN服务器

之所以折腾这玩意,是因为有云端的服务器有一些服务需要和本地的服务器交互,而这个流量不希望它通过互联网来走,由于本地出口路由器上架设有OpenVPN服务,遂通过其将云服务器与本地的网络打通。
有这种需求的小伙伴应该不多,我在网络上没有查到太多的教程,发现都说比较乱,所以在自己折腾好了之后,整理了以下发出来,也算是一个备份。

声明:

本文仅介绍利用OpenVPN技术实现云端服务器与本地网络的加密隧道传输的实现方式,旨在为读者提供技术参考和学习。

我们不对任何人因使用本文中提到的技术或工具而产生的任何法律纠纷、侵权行为或其他不良后果承担任何责任。任何人通过阅读本文、下载相关资源或使用本文所述技术和工具,即视为同意此免责声明的所有条款和条件。

一、服务端的搭建与配置文件获取

这个就直接略过不提了,网络上的教程多的是。而且现在很多路由器上就可直接实现这些功能,所以这里就直接跳过了。

二、OpenVPN客户端的安装

在Linux系统上安装OpenVPN客户端通常是非常简单的,因为主流的Linux发行版(如Debian、Ubuntu、Fedora、CentOS等)都在默认的源中提供了OpenVPN的官方软件包。所以大多数情况下只要使用对应系统的包管理器即可直接安装,这里就以Debian系为例,安装OpenVPN客户端只需要输入2个命令即可。

sudo apt-get update
sudo apt-get install openvpn

安装完毕后可以用下面的命令测试下openvpn客户端是不是成功安装好了,如果正常的返回了OpenVPN客户端软件的信息,那就是安装成功了

openvpn --version

三、测试连接OpenVPN

首先将你的openvpn的配置文件上传到服务器上,这个有很多种姿势,我个人比较推荐使用“rz”命令直接上传文件,大多数Linux发行版都有预装lrzsz这个工具,如果没有可以自己安装他,这和也不展开了。

这里我多嘴提一句,配置文件建议单独放置在一个文件夹中,不要到处乱放,避免以后运维时误删除。

将文件上传到服务器后,就使用以下命令可以连接到OpenVPN了。

sudo openvpn --config /root/.config/openvpn/openvpn-config.ovpn
#/etc/openvpn/openvpn-config.ovpn是你上传的openvpn配置文件的具体路径

输入这条命令后,openvpn就会根据配置文件去连接VPN,会要求你输入连接VPN所用的账号和密码,输入对应的账号密码即可连接到OpenVPN。
到了这一步已经可以连接到OpenVPN了,整个需求已经实现了1/3。

如果连接OpenVPN的时候出现“openvpn Fatal TLS error (check_tls_errors_co)”错误,而且你使用的OpenVPN又是Openwrt等路由器上带的O喷VPN服务,那么大概率是服务端支持的TLS版本太旧导致TLS版本不匹配造成的,如果无法更新服务端的配置,只能让开启客户端对旧版本TLS协议的支持。

通过编辑“/etc/ssl/openssl.cnf”配置文件,找到 [system_default_sect] ,一般是在最末尾,就像下面这样:

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2

然后在将其中的“MinProtocol = TLSv1.2”修改为1.0即可(这里的意识是说将最低的TLS支持设置为TLSv1.0版本,较低版本的TLS协议存在一些安全漏洞,是否要使用这个就看你自己的取舍了),就像下面这样:

[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=2

四、记住账号密码

由于后续我们要让OpenVPN开机自动连接,总不可能每次都来输入密码,所以还需要一些操作让OpenVPN连接的时候可以记住密码,这样就不用每次都来输入密码了。
首先我们要先创建一个txt文件,用于存储OpenVPN的账号和密码。
这个文件放置的位置随意,名称也可以随意取,但为了方便管理建议和OpenVPN的配置文件放在同一个文件夹下,且为了避免各种不必要的问题,建议文件名不要有中文和特殊字符。
文件内的内容很简单,第一行填用户名,第二行填密码,就像下面这样:

user01
password

这里我多嘴提一句,账号和密码是明文存储在服务器上的,为了安全起见,建议使用随机生成的密码。

然后我们要在编辑之前上传上来的ovpn配置文件,在配置文件中的“auth-user-pass”这一行后面加上刚才创建的密码文件路径(这里要注意,一定要写上绝对路径,不能因为文件在统一目录下就只写文件名,否则只能在同目录下执行才能找放到这个文件),就像下面这样:

.....
auth-user-pass /root/.config/openvpn/user-password.txt
.....

修改配置文件后,我们还要将配置文件的后缀由原来的“ovpn”修改为“conf”这种基础操作也不展开说了,相信你都有自己的云服务器了,这种操作应该都会。
修改好后我们再测试一次VPN的连接,同样是使用和第三步中一样的方式来测试,不过此时我们配置文件的后缀名已经变了,这个要注意一下。

五、添加服务

如果我们还要实现开机自动连接VPN,还需要将OpenVPN的这个连接做为服务。
首先我们要在“/etc/systemd/system/”目录下创建一个systemd单元文件,文件后缀为“.service”,文件名可以随意取。

sudo vim /etc/systemd/system/openvpn-myconfig.service

文件的内容如下所示:

[Unit]
Description=OpenVPN-myconfig
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /root/.config/openvpn/openvpn-config.conf

[Install]
WantedBy=multi-user.target

其中“ExecStart=/usr/sbin/openvpn –config”后面的文件路径要是你的OpenVPN配置文件的路径,根据实际情况填写

最后就是要启用我们添加的服务,将其设置为开机自启,其中“openvpn-myconfig.service”是前面创建的文件的文件名

sudo systemctl enable openvpn-myconfig.service

服务启用后,我们就可以测试使用这个服务能不能连接到OpenVPN了。使用下面的命令启用服务,其中“openvpn-myconfig.service”为服务名称,是前面创建的文件的文件名

sudo systemctl start openvpn-myconfig.service

如果可以成功连接到OpenVPN了,那就基本就大功告成了,尝试重启一下服务器看看OpenVPN能不能自动连接吧。

如果发现手动启动服务可与连接,但是开机之启动无效,可能是OpenVPN服务本地没有启动,可以将OpenVPN服务也设为开机自启动试试,命令如下

sudo systemctl enable openvpn

友情提示:服务器重启前请确认重启服务器对业务造成的影响,以决定是否重启服务器

六、一些进阶配置

如果因为网络因素或者各种原因,可能会造成VPN中断,而中断后我们希望服务器可以自己主动去连接OpenVPN,因此为了保证服务器可以一直连接着OpenVPN,我们还需要对OpenVPN的配置文件做一些小小的改动。

编辑OpenVPN的配置文件,在配置文件中添加下面的配置

persist-key
persist-tun
keepalive 10 60

此处的几个配置用途如下:

persist-key: 客户端在重新连接时保持SSL/TLS加密所使用的私钥不变,确保在重新连接时不会生成新的密钥。

persist-tun: 客户端在重新连接时保持TUN/TAP设备不变,有助于保持连接的连续性,避免在重新连接时改变网络设置。

keepalive 5 30: 设置OpenVPN连接的保活机制,其中第一个数字5表示每5秒发送一次保活包,第二个数字30表示如果在30秒内没有收到响应则认为连接断开。

本文发布于:yingfeng Blog>>Linxu系统开机自动连接OpenVPN服务器,转载请注明出处。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址