我已经在多个 ubuntu 22.04LTS 服务器(仅限 CLI)上测试过它,到目前为止证明它不稳定。我创建了一项新服务,它运行一个 shell 脚本来启动 Palo Alto Networks globalprotect VPN 客户端并自动连接回我们的数据中心。该脚本每分钟循环一次以 ping 数据中心内的 IP 地址,并在发生故障时重新连接 VPN 客户端。我使用代码尝试了几种方法,但到目前为止它还不稳定。有时它可以稳定,直到我重新启动,然后它就不起作用了。服务或脚本正在缓冲 globalprotect 客户端的多个实例,这使其无法再连接到 VPN。这是服务文件:
cat /etc/systemd/system/myVpn.service
[Unit]
Description=My Vpn Connection
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/myvpn.sh
ExecStop=/bin/sh -c 'globalprotect disconnect'
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
脚本如下:
cat /usr/local/bin/myvpn.sh
#!/bin/bash
#Variables
ping_targets="x.x.x.x"
failed_hosts=""
#Start gp client vpn and log the event
globalprotect connect -p x.x.x.x -u xxxx
echo "myVpn.service: ## Starting globalprotect ##" | systemd-cat -p info
#Check connectivity every minute
while :
do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "myVpn.service: ${TIMESTAMP} checking opmgr central reachable over vpn" | systemd-cat -p info
ping -c 1 x.x.x.x > /dev/null
if [ $? -ne 0 ]; then
if [ "$failed_hosts" == "" ]; then
failed_hosts="x.x.x.x"
else
failed_hosts="$failed_hosts, 'x.x.x.x'"
fi
fi
if [ "$failed_hosts" != "" ]; then
globalprotect connect -p x.x.x.x -u xxxx
echo "myVpn.service: ## Reconnecting due to packet loss ##" | systemd-cat -p info
fi
sleep 60
done
出于安全原因,我删除了用户名和 IP 地址,并用 x 替换它们。我非常感谢任何反馈或建议。当我的第一个测试服务器整个周末都很稳定,而昨天它也失去了 VPN 连接时,这令人沮丧。这是否最好作为 crontab 作业而不是服务来完成?