Linux / Unix检查VPN连接是否处于活动状态

我有一个代码,检测OpenVPN连接是否打开或closures:

if echo 'ifconfig tun0' | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00" then echo "VPN up" else echo "VPN down" fi exit 0 

现在我试图重新编写代码来使用PPTP或IPSEC连接。 我试过做:

 if echo 'ifconfig ppp0' | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00" 

或与ipsec相同,但不起作用。 有没有其他方法来检测PPTP或IPSEC连接?

这个echo是错误的。 正如@unwind所说,单引号(')应该是backtics(`)。 你当前的代码是发送文字值ifconfig ppp0 grep,这没有任何用处。

但是你实际上并不需要背后的东西。 您可以将ifconfig的输出发送到grep目录; 使用echo不会给你任何东西:

 if ifconfig ppp0 | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00"; then echo ppp connection is up fi 

以下脚本将:

  • 每5分钟运行一次ISPConnectivity.sh脚本。 这将意味着VPN隧道将不会停机超过5分钟。
  • 检查tun接口是否关闭,如果是,则启动vpn脚本。
  • 如果tun0接口启动,请检查连通性。 它在2个公网IP上进行ping测试(如果我从1个IP测试中得到一个响应,我认为这是成功的),并且都必须运行vpn脚本失败。 我在多台主机上运行了ping测试,以防止ping测试在1个IP上失败时启动vpn脚本。
  • 将所有失败输出发送到我的主目录中的文件。 我不需要看是否有任何测试成功。

sudo crontab的内容:

 */5 * * * * /home/userXXX/ISPConnectivity.sh >> /home/userXXX/ISPConnectivity.log 2>&1 

ISPConnectivity.sh脚本的内容:

 #!/bin/bash # add ip / hostname separated by white space #HOSTS="1.2.3.4" HOSTS="8.8.8.8 4.2.2.4" # no ping request totalcount=0 COUNT=4 DATE=`date +%Y-%m-%d:%H:%M:%S` if ! /sbin/ifconfig tun0 | grep -q "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00" then echo $DATE tun0 down sudo /home/userXXX/startVPN.sh start else for myHost in $HOSTS; do count=`ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }'` totalcount=$(($totalcount + $count)) done if [ $totalcount -eq 0 ] then echo $DATE $totalcount "fail" sudo /home/userXXX/startVPN.sh start #else # echo $DATE $totalcount "pass" fi fi 

我正在考虑更灵活的解决方案,例如:

 MyIP=$(curl http://api.ipify.org/?format=text) if [ "$MyIP" != "MYORYGINALIP" ] then echo "IPSEC VPN is Running - " $MyIP else echo "IPSEC VPN is Not Running - " $MyIP fi exit 0 

那个怎么样? 我可以改进它吗?