web-dev-qa-db-ja.com

Linux / Unixは、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接続を検出する他の方法はありますか?

6
Spyder

次のスクリプトは次のようになります。

  • 5分ごとにISPConnectivity.shスクリプトを実行します。これは、VPNトンネルが5分以上ダウンしないことを意味します。
  • Tunインターフェイスがダウンしているかどうかを確認し、ダウンしている場合はvpnスクリプトを開始します。
  • Tun0インターフェースが稼働している場合は、接続を確認してください。 2つのパブリックIPでpingテストを実行し(テストしたIPの1つから1つでも応答があった場合、これは成功したと見なします)、すべてが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
3
labatman

その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
larsks

Nmcliコマンドを使用して、VPNが実行されているかどうかを確認することもできます。

nmcli c show --active | grep vpn

1
pioupiou

私は実際にもっと柔軟なソリューションを検討しています。例:

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

そのことについて何?どうにかして改善できますか?

0
Spyder