Linux / Unix检查VPN连接是否为Active / Up

时间:2015-05-05 11:48:24

标签: linux unix ubuntu ssh vpn

我有一个代码可以检测OpenVPN连接是启动还是关闭:

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连接?

5 个答案:

答案 0 :(得分:2)

以下脚本将:

  • 每5分钟运行一次ISPConnectivity.sh脚本。这意味着VPN隧道不会停机超过5分钟。
  • 检查tun接口是否已关闭,如果是,则启动vpn脚本。
  • 如果tun0接口已启动,请检查连接。它对2个公共IP进行ping测试(如果我从其中一个测试的IP中获得一个响应,我认为这是成功的),并且都必须无法运行vpn脚本。我在多个主机上运行ping测试,以防止在1个IP上ping测试失败的情况下启动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

答案 1 :(得分:1)

echo声明是错误的。正如@unwind所说,单引号(')应该是后缀(`)。您当前的代码将文字值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

答案 2 :(得分:1)

您还可以使用nmcli命令进行检查,以检查VPN是否正在运行。

  

nmcli c显示--active | grep vpn

答案 3 :(得分:0)

我实际上正在研究更灵活的解决方案,例如:

    <div class="DTTT btn-group">
    <a class="btn xls_icon_class downLoadIcon_dataTable"

id="ToolTables_documentos_0" data-original-title="">
    <span></span>
    <div style="left: 0px; top: 0px; width: 16px; height: 16px; position: 

absolute; z-index: 99;">
    <embed name="ZeroClipboard_TableToolsMovie_1" width="16" height="16" 

align="middle" id="ZeroClipboard_TableToolsMovie_1" pluginspage="http://www.macromedia.com/go/getflashplayer" 

src="/factemipf_static/swf/copy_csv_xls_pdf.swf" type="application/x-

shockwave-flash" wmode="transparent" flashvars="id=1&amp;width=16&

amp;height=16" allowfullscreen="false" allowscriptaccess="always" 

bgcolor="#ffffff" quality="best" menu="false" loop="false"></div></a></div>"
那怎么样?我能以任何方式改进吗?

答案 4 :(得分:-2)

ip路由列表表220,如果显示的是IP地址->已建立VPN连接,无->没有VPN

if [“ 0” == ifconfig | grep wlan0 | wc -l];然后回显“ NO wlan0 has no VPN”;否则回显“是wlan0具有VPN”; fi