Tunnel Start/Stop Automatik

Tom Green koe_fue at gmx.de
Di Okt 13 19:24:54 CEST 2015


Kleines Update V0.11:
- 2 fach Ping aus Stabilitätsgründen
- Status ins Syslog
- Kommentarzeilen entfernt

----------------
#!/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_intervall="5"           # waiting time in-between two pings
switchback_intervall="1000"  # waiting time for interface to recover
before probing again
tunnel_grace="10"            # waiting time to allow for tunnel restart

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 "ping -q -c1 ${ping1_target} -I $IF"
    ping -q -c 1 ${ping1_target} -I $IF >> /dev/null
    ping1_ExitCode=$?
#    echo "Exit Status: ${ping1_ExitCode}"
}

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


while true
do
 ping1
 ping2
 if ([[ ${ping1_ExitCode} -eq 0 ]] || [[ ${ping2_ExitCode} -eq 0 ]]); then
#       echo "${ping_target} reached via $IF"
         sleep ${ping_intervall}
        else
         logger -t "OPENVPN Monitoring:" "${ping1_target} and
${ping2_target} not reached via $IF. Stopping interface $IF."
         openvpn_stop-cmd
         sleep ${switchback_intervall}
         logger -t "OPENVPN Monitoring:" "Restoring $IF to probe for
recovery."
         openvpn_start-cmd
         sleep ${tunnel_grace}
        fi
done


 



On 13.10.2015 17:41, Tom Green wrote:
> Hallo Zusammen,
>
> Anbei ein erster Rohentwurf für ein Skript, dass den VPN-Tunnel vom
> Gateway ins Internet überwacht. Der Tunnel wird, falls nicht pingbar,
> deaktiviert, um olsr über das dynamic gw plugin ein Re-Routing zu
> ermöglichen. Nach einer gewissen Zeit, wird der Tunnel wieder
> aufgebaut und wieder auf Funktion überprüft.
>
> Das Skript ist -wie bei mir üblich- sehr einfach gehalten:
> - Über den Tunnel wird 8.8.8.8 gepingt
> - Wenn ping erfolgreich -> Warte 5 Sekunden
> - Wenn ping nicht erfolgreich -> Baue Tunnel ab -> warte 1000 Sekunden
> -> Baue Tunnel wieder auf -> Warte 5 Sekunden auf Tunnelaufbau
>
> Danach wird in einer Endlosschleife erneut gepingt / beprobt. Das
> Spiel beginnt jedesmal von vorne.
>
> Als Diskussionsgrundlage.
>
> Gruß
> Torben
>
> monitor_ovpn-tun.sh:
> #!/bin/bash
>
> IF="tun0"                   # Interface used for ping
> ping_target="8.8.8.8"       # IP used for ping
> ping_intervall="5"          # waiting time in-between two pings
> switchback_intervall="1000" # waiting time for interface to recover
> before probing again
> tunnel_grace="5"            # waiting time to allow for tunnel restart
>
> 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
> }
>
> Geben-Sie-mir-ein-Ping-Vassil () {
> #    echo "ping -q -c1 ${ping_target} -I $IF"
>     ping -q -c 1 ${ping_target} -I $IF >> /dev/null
>     ping_ExitCode=$?
> #    echo "Exit Status: ${ping_ExitCode}"
> }
>
> while true
> do
>  Geben-Sie-mir-ein-Ping-Vassil
>  if [ ${ping_ExitCode} -eq 0 ]; then
> #         echo "${ping_target} reached via $IF"
>          sleep ${ping_intervall}
>         else
>          echo "${ping_target} not reached via $IF. Stopping interface
> $IF."
>          # defaultroute = $(ip route show table fff | grep default |
> grep $IF)
>          # ip delete $defaultroute
>          openvpn_stop-cmd
>          sleep ${switchback_intervall}
>          echo "Restoring $IF to probe for recovery."
>          openvpn_start-cmd
>          sleep ${tunnel_grace}
>         fi
> done
>
>
>
>

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20151013/37cf2587/attachment-0002.html>


Mehr Informationen über die Mailingliste franken-dev