Тестировал на FreeBSD, думаю на Linux он должен работать тоже нормально.
Суть работы простая, пингает два хоста, и если ни один из них не доступен переключается на запасной канал, как только основной канал опять доступен переключается на него обратно.
#!/bin/sh
#
# change-isp.sh
#
PING_HOST1=8.8.8.8
PING_HOST2=8.8.4.4
MAIN_IP=1.1.1.1
MAIN_GW=1.1.1.2
BACKUP_GW=2.2.2.2
CHANNEL_FILE=/tmp/CUR_CHANNEL
CUR_CHANNEL=`cat $CHANNEL_FILE`
LOG=/var/log/change-isp.log
png1=`ping -S $MAIN_IP -c 10 $PING_HOST1 | grep % | awk '{ print $7 };'`
png2=`ping -S $MAIN_IP -c 10 $PING_HOST2 | grep % | awk '{ print $7 };'`
if [ $png1 = '100.0%' ] && [ $png2 = '100.0%' ];
then
if [ "$CUR_CHANNEL" = "0" ] ; then
echo `date +"%D - %T"` "> Change to backup channel" | tee $LOG
echo 1 > $CHANNEL_FILE
route change default $BACKUP_GW
fi
else
if [ "$CUR_CHANNEL" = "1" ] ; then
echo `date +"%D - %T"` "> Change to main channel" | tee $LOG
echo 0 > $CHANNEL_FILE
route change default $MAIN_GW
fi
fi
Комментариев нет:
Отправить комментарий