我正在使用 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