Переключение между двумя операторами Интернета

У меня имеется два оператора, которые предоставляют доступ в Интернет. Хочется, чтобы при пропадании связи на одном канале включался автоматически другой. На Cisco естественно денег не дают. Заводим оба оператора на шлюз и пишем скрипт. Немного погуглив нашел такой скрипт, он не идеален, но вполне успешно справляется со своей ролью.


#!/bin/bash
# Это функция переключает маршруты
chroute ()
{
route del default
route add default gw $1
}

# Это переменные, которые определяют что пингуем и маршруты
PHOST="999.999.999.999" # это ип шлюза первого провайдера. можно и ип какого-нить сайта прописать
ROUTE2="888.888.888.888"  # это адрес шлюза второго прова. нужно для смены роута
ROUTE1="999.999.999.999" # это адрес шлюза первого прова. нужно для смены роута
PRES=`ping -c10 -q $PHOST | grep 'packet loss' | awk '{print $6}'` # пинганули и смотрим результат. А результатов может быть несколько: а) ни один из пакетов не дошел до  места б) вообще маршрута нет к этой сети в) не все пакеты дошли (это не реализованно)

# Если маршрута нет, то считаем, что все плохо.
if [ -z $PRES ];
then PRES='100%'
fi

# Прежде, чем менять маршруты смотрим - а сейчас какой маршрут установлен? 
INT=`netstat -rn | tail -1 | awk '{print $1}'`
if [ $INT = '0.0.0.0' ];
then INT=`netstat -rn | tail -1 | awk '{print $8}'`;
else INT='ethXX'   #имя сетевого интерфейса второго провайдера
fi

case $INT in
'ethYY') PANIC=0 # Это правильный пров. Тут все без паники
;;
'ethXX') PANIC=1 # Это неправильный пров. Паникуем.
;;
*)      PANIC=3 # По ходу вообще маршрутов нет! 
chroute $ROUTE1 ;;
esac

# Тут небольшая некрасивость. Функционал раньше был больше. Сейчас урезал. Осталось некрасивость. Но все работает.
case $PANIC in
0) if [ $PRES != '0%' ];
then
chroute $ROUTE2;
echo "Vkluchen rezervn kanal"  | /bin/mail -s "ERROR Internet" "admin@mail";
 fi
;;
 1) if [ $PRES = '0%' ];
then
chroute $ROUTE1;
echo "Vkluchen osnovnoi kanal"  | /bin/mail -s "OK Internet" "admin@mail";
fi
;;


Ну и в crontab добавляем запуск скрипта

## Балансировка между каналами
*/5 9-21 * * *  root /root/balans.sh

Я запускаю скрипт каждые 5 минут с 9 утра до 9 вечера каждый день, связано с графиком работы компании, ну и ночью настроена загрузка обновлений и прочих приятностей, если они не загрузятся в следствии не работы основного безлимитного канала — ничего страшного.
  • 0
  • 07 ноября 2011, 10:48
  • admin

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Яндекс.Метрика