openvpn 与 systemd:重新连接

openvpn 与 systemd:重新连接

我正在使用 openvpn 作为服务启用。它运行良好,但一旦分配了新的 IP 地址或失去连接,我就无法再访问互联网了。然后我必须 systemctl restart[电子邮件受保护]手动。我该如何解决这个问题,这样我就不必每次都以 root 身份登录并手动重新启动服务?

[root@arch paul]# cat /etc/openvpn/ipredator.conf 
client
dev tun0
proto udp
remote pw.openvpn.ipredator.se 1194
resolv-retry infinite
nobind

auth-user-pass /etc/openvpn/ipredator.auth
auth-retry nointeract

ca [inline]

tls-client
tls-auth [inline]
ns-cert-type server

keepalive 10 30
cipher AES-256-CBC
tls-cipher TLSv1:!ADH:!SSLv2:!NULL:!EXPORT:!DES:!LOW:!MEDIUM:@STRENGTH
persist-key
persist-tun
comp-lzo
tun-mtu 1500
mssfix
passtos
verb 3

<ca>
-----BEGIN CERTIFICATE-----
###censored###
-----END CERTIFICATE-----
</ca>

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
###censored###
-----END OpenVPN Static key V1-----
</tls-auth>

答案1

在我的系统上,systemd 配置文件位于并涵盖所有@客户端配置。在该部分中,您可以添加:/usr/lib/systemd/system/[email protected][Service]

Restart=on-failure 
RestartSec=10

...退出时重新启动服务(重试连接),在此示例中延迟 10 秒等待。

然后运行systemctl daemon-reload以使用更改刷新 systemd。

答案2

尝试将其添加到您的 .ovpn 配置中

server-poll-timeout 4

参考:https://openvpn.net/vpn-server-resources/troubleshooting-client-vpn-tunnel-connectivity/

或者您可以向 cron 作业添加一个简单的 bash 脚本,如果连接丢失,该脚本将自动重新启动 openvpn。该脚本可能如下所示:

#!/bin/bash
# Makes sure that openvpn service is running all times.
# Add this to a cronjob that will run every minute
set -o pipefail
if $(/sbin/ip add | grep tun | grep inet)
then
echo "OpenVPN service is already running"
else
systemctl restart [email protected]
echo "Restarted OpenVPN service"
fi

相关内容