Два провайдера : BeeLine и QWERTY. Канал по умолчанию через BeeLine. При проблеме на канале BeeLine - маршрут по умолчанию переходит в QWERTY . При восстановлении связи в BeeLine - маршрут восстановится . Скрипт стырен из инета (ссылка будет в конце) и мной переработан, по умолчанию на Debian не работал. Итак - забирайте поделие, кому надо :
Код:
#!/bin/sh
# Основной BeeLine
GW1=10.0.0.1 (свой подставляете !!!)
# Резервный QWERTY
GW2=10.0.0.2 (свой подставляете !!!)
# Устанавливаем в переменную время и дату в нужном нам формате
DT=`date +"%T %d.%m.%Y"`
# Для проверки каналов интернет на работоспособность используем пинг на сервисы Google, разные IP для разных каналов
# вы можете использовать свои эталонные адреса для проверки
# Проверяем добавлены ли маршруты на эталонные IP для проверки, если нет, то добавляем
check_node=`netstat -rn | grep "8.8.8.8" | awk '{print $1}'`
if [ "$check_node" != "8.8.8.8" ]; then
# добавляем маршрут для Google через основной канал для проверки
/sbin/route add 8.8.8.8 gw $GW1
# и через резервный канал
/sbin/route add 8.8.4.4 gw $GW2
fi
# Проверяем, если включен основной интернет и файл состояния установлен на резервный канал, то стираем файл состояния
# Такая ситуация может возникнуть, например, если сервер был на резервном и потом его резко выключили,
# А после включения опять включился основной канал (маршрут по-умолчанию)
check_gw=`ip r | grep default | awk '{print $3}'`
if [ "$check_gw" = "10.0.0.1" ]; then
if [ -f /tmp/.inet_reserv_work ]; then
/bin/rm /tmp/.inet_reserv_work
/bin/echo Стираем файл .inet_reserv_work $DT, так как шлюз $GW1, а не резервный $GW2! >> /var/log/inet_change.log
fi
fi
# Проверяем работает ли основной канал
is=`/bin/ping -c 7 8.8.8.8 | grep -c "64 bytes"`
if (/usr/bin/test $is -gt "4") then
# Если основной канал работает и файл состояния резервного канала существует, то стираем файл состояния и переключаемся
# на основной канал, пишем запись в лог и отправляем письмо администратору о переключении
if [ -f /tmp/.inet_reserv_work ]; then
/sbin/route del default
/sbin/route add default gw $GW1
/bin/rm /tmp/.inet_reserv_work
/bin/echo Основной канал включен $DT >> /var/log/inet_change.log
echo "$DT Переключились на BeeLine" | mail -s "Интернет переключился на BeeLine" admin@padonak.su
else
exit
fi
else
# Если основной не работает, то проверяем резервный и переключаемся на него
is2=`/bin/ping -c 7 8.8.4.4 | grep -c "64 bytes"`
if (/usr/bin/test $is -gt "4" || /usr/bin/test $is2 -gt "4") then
if ! [ -f /tmp/.inet_reserv_work ]; then
/sbin/route del default
/sbin/route add default gw $GW2
/usr/bin/touch /tmp/.inet_reserv_work
/bin/echo Резервный канал [QWERTY] включен $DT >> /var/log/inet_change.log
echo "$DT Переключились на QWERTY" | mail -s "Интернет переключился на QWERTY" admin@padonak.su
fi
fi
fi
Ну и добавить этот скрипт в крон на выполнение. Я поставил проверку раз в 15 минут. Не думаю что это нужно в домашних условиях делать чаще.
Код:
### Переключение каналов
*/15 * * * * root cd /root/bin/ && ./inet_change.sh > 1>/dev/null 2>&1
взято там
>>>
_________________
Моя характеристика с детского сада: Хорошо кушает, спит, гуляет! Прошло много лет, ничего не изменилось.