скрипт смены каналов провайдеров


hatchet - Posted on 28 Май 2009

назрела необходимость подобного скрипта. ногами не бить - скрипт пилотный, лучше помогайте советом! линсоветом.
p.s. начинать читать с первого elif

#!/bin/bash
GW_PRIM='192.168.4.1' #наш главный шлюз
GW_RES='192.168.4.2'  #наш резервный шлюз
test_host='78.109.22.22' #появляется только при переходе на резервный канал
HOST1='ya.ru' #хосты для проверки 
HOST2='google.com'
HOST3='ukr.net'
R1='ok'
R2='false'
log='/tmp/gw_change.log'
OK="Всё ок - ничё не делаем"
BAD="Каналья нет!!! Пробуем что-то делать"
 
if [ -f /tmp/gw_change ]
 
then
{
        if /bin/ping -c 3 $test_host &> /dev/null
        then
        {
        route del default && echo удаляем резервный маршрут
        route add default gw $GW_PRIM && echo добавляем основной маршрут
        rm -f /tmp/gw_change && echo удаляем фаил индикатор
        route del -host $test_host  gw $GW_PRIM && echo удаляем статический маршрут
        : > /tmp/gw_change.log
        }
 
        fi
}
elif /bin/ping -c 3 $HOST1 &> /dev/null && echo $HOST1 $R1
 
then echo $OK
 
elif
{
 echo $HOST1 $R2
/bin/ping -c 3 $HOST2 &> /dev/null && echo $HOST2 $R1
}
 then echo $OK
 
elif
{
 echo $HOST2 $R2
 /bin/ping -c 3 $HOST3 &> /dev/null && echo $HOST3 $R1
}
 then
echo $OK
 
else
{
echo $HOST3 $R2
route del default && echo "удаляем основной маршрут" >> $log
route add default gw $GW_RES && echo "добавляем резервный маршрут" >> $log
route add -host $test_host  gw $GW_PRIM && echo "добавляем статический маршрут" >> $log
echo > /tmp/gw_change
#mailx -s "ВНИМАНИЕ резервный канал на `hostname`" postmaster
echo $BAD $log
cat /tmp/gw_change.log | mailx -s "ВНИМАНИЕ резервный канал на `hostname`" postmaster
}
 
fi

Рабочая вещь, пригодится.

<совет>
использовать pfsync+carp для таких вещей и перестать изобретать велосипед.

ping -I eth1 -c3 -i3 ya.ru &>:
ping -I eth2 -c3 -i3 ya.ru &>:
Тут пинг идет через разные интерфейсы (-I), -i - интервал между пингами, надо ставить побольше, а то будут ложные срабатывания, &>: - замена конструкции "&> /dev/null" (":" - это пустота).

Не совсем согласен
А если шлюз для локальной сети не напрямую подключён к инету
а есть еще два сервера отдельных подключённых к провайдерам
и интерфейс один?
Этот вариант был рассмотрен и отброшен.
Спасибо.

Для моих нужд подойдет. Спасибо буду пробовать.

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.