Tunnel Start/Stop Automatik

Tom Green koe_fue at gmx.de
Mi Okt 14 17:12:31 CEST 2015


Hi,

Update V0.2. Wer mag, kann mal drüberschauen.

-> Fehlauslösung infolge selbständigen openvpn Tunnel Auf/Abbau ->
Wartet jetzt bei nicht existenten Tunnel n sec auf Tunnelaufbau vor dem ping
-> logger korrigiert, Debug Möglichkeiten verfeinert
-> Typos korrigiert.

Gruß
Torben

-----------
#!/bin/bash

IF="tun0"                      # Interface used for ping
ping1_target="8.8.8.8"         # IP no. 1 used for ping
ping2_target="82.165.229.31"   # IP no. 2 used for ping
ping_interval="5"              # waiting time in-between two pings
switchback_interval="1000"     # waiting time for interface to recover
before probing again
start_grace="10"               # waiting time to allow for tunnel restart
logfile="/tmp/openvpn-mon.log" # logfile for debug

openvpn_stop-cmd () {             # command used disabling tunnel
 service openvpn stop             # ubuntu
 #/etc/init.d/openvpn stop         # debian
 #killall openvpn                  # hardcore
}

openvpn_start-cmd () {             # command used enabling tunnel
 service openvpn start             # ubuntu
 #/etc/init.d/openvpn start         # debian
 #openvpn /etc/openvpn/*.conf &     # hardcore
}

ping1 () {
    echo "$(date): ping -q -c1 ${ping1_target} -I $IF" &>> $logfile
    ping -q -c 1 ${ping1_target} -I $IF &>>/dev/null    #&>> $logfile
    ping1_ExitCode=$?
    echo "$(date): Exit Status: ${ping1_ExitCode}" &>> $logfile
}

ping2 () {
    echo "$(date): ping -q -c1 ${ping2_target} -I $IF" &>> $logfile
    ping -q -c 1 ${ping2_target} -I $IF &>> /dev/null   #&>> $logfile
    ping2_ExitCode=$?
    echo "$(date): Exit Status: ${ping2_ExitCode}" &>> $logfile
}


while true
do
    # wait for interface build-up, if interface not present
    if [ ! -h "/sys/class/net/$IF" ]; then
        echo "$(date): Interface $IF not detected. Waiting
${start_grace} seconds." &>> $logfile
        sleep ${start_grace}
    fi

    # perform ping
    ping1
    ping2

    # check if ping successful
    if ([[ ${ping1_ExitCode} -eq 0 ]] || [[ ${ping2_ExitCode} -eq 0 ]]);
then
        sleep ${ping_interval}
    else
        logger -t $0 ${ping1_target} and ${ping2_target} not reached via
interface $IF.
        echo "$(date): ${ping1_target} and ${ping2_target} not reached
via interface $IF." &>> $logfile

        if [ -h "/sys/class/net/$IF" ]; then
            logger -t $0 Stopping interface $IF.
            echo "$(date): Stopping interface $IF." &>> $logfile
            openvpn_stop-cmd &>> $logfile
        fi

        sleep ${switchback_interval}
        logger -t $0 Restoring interface $IF to probe for recovery.
        echo "$(date): Restoring interface $IF to probe for recovery."
&>> $logfile
        openvpn_start-cmd &>> $logfile
    fi
done




Mehr Informationen über die Mailingliste franken-dev