#!/bin/sh # # gwbackup - Automatic backup of default gateway. # v2.3 (watching state of both connections) # lunix@haluz.net WATCH_IP="1.1.1.1" #check reachability of this address (could be identical with PRI_GW) PERIOD="10" #interval between checks in seconds COUNT="5" #number of packets (all of them needs to be lost to activate backup) PING=`which ping` LOGGER=`which logger` LOG_OPT="" #default null, -s for debugging PRISTATE=0 #default state of primary connection UP (0 ping vraci kdyz je UP) SECSTATE=0 #default state of secondary connection UP GWSTATE=0 #default gw state (0=primary, 1=secondary) $LOGGER $LOG_OPT -t "gwbackup" "Version 0.3 STARTED - watching $WATCH_IP" while [ 1 ]; do $PING -c $COUNT -I eth0.17 -q $WATCH_IP > /dev/null PRISTATENEW=$? $PING -c $COUNT -I eth0.20 -q $WATCH_IP > /dev/null SECSTATENEW=$? #zmena v nejakem stavu if [[ $PRISTATENEW != $PRISTATE ]] || [[ $SECSTATENEW != $SECSTATE ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "STATE CHANGE (ACTION OR INFO should follow)! DEBUG (old/new): pri $PRISTATE/$PRISTATENEW, sec $SECSTATE/$SECSTATENEW" #bezi primar - je to easy if [[ $PRISTATENEW == 0 ]] ; then #AKCE: nabeh primar ted? if [[ $PRISTATE == 1 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "INFO: primary modem down->UP" $LOGGER $LOG_OPT -t "gwbackup" "ACTION: ip ro table 17 default" /etc/routing/setup_tables.sh GWSTATE=0 fi #INFO: bezi sekundar a nabeh ted? if [[ $SECSTATE == 1 ]] && [[ $SECSTATENEW == 0 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "INFO: secondary modem down->UP" fi #INFO: nebezi sekundar a upad ted? if [[ $SECSTATE == 0 ]] && [[ $SECSTATENEW == 1 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "INFO: secondary modem up->DOWN" fi else #primar nebezi, co ted? #INFO: nebezi sekundar a upad ted - zahlasit, ze je down if [[ $SECSTATE == 0 ]] && [[ $SECSTATENEW == 1 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "INFO: secondary modem up->DOWN" fi #upad primar ted? if [[ $PRISTATE == 0 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "INFO: primary modem up->DOWN" #bezi sekundar? if [[ $SECSTATENEW == 0 ]] ; then #nabeh ted? if [[ $SECSTATE == 1 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "INFO: secondary modem down->UP" fi $LOGGER $LOG_OPT -t "gwbackup" "ACTION: ip ro table 20 default (primary modem down, secondary modem running)" /etc/routing/setup_tables_backup.sh GWSTATE=1 else $LOGGER $LOG_OPT -t "gwbackup" "INFO: nothing to do, both modems down, we are doomed!!!11111111" fi else #primar upad uz driv #AKCE: bezi sekundar a nabeh ted? if [[ $SECSTATE == 1 ]] && [[ $SECSTATENEW == 0 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "INFO: secondary modem down->UP" #neni nahodou uz gateway prepla? (opakovane vypadky sekundaru pri spadlem primaru) if [[ $GWSTATE != 1 ]] ; then $LOGGER $LOG_OPT -t "gwbackup" "ACTION: ip ro table 20 default (primary modem down, secondary modem running - 2)" /etc/routing/setup_tables_backup.sh GWSTATE=1 fi fi fi fi #ulozit zmeny ve stavu PRISTATE=$PRISTATENEW SECSTATE=$SECSTATENEW fi sleep $PERIOD done