Имеется прокси-сервер на openSUSE 12.1:
eth0 - сетевой интерфейс с интернетом от основного провайдера
eth1 - сетевой интерфейс в локальную сеть
ppp0 - резервный канал реализуемый 3G модемом от Мегафона, работающий через wvdial
Нужно написать скрипт, чтобы при потере интернета на eth0 от основного провайдера он переключал на мегафон ppp0, а при появлении интернета на eth0 переключал обратно.
Пример скрипта (/usr/local/scripts/check_internet.sh):
################################################################
#!/bin/sh
# Доступность этого хоста будет означать корректную работу основного канала
# 8.8.8.8 это DNS от Google. За его доступность можно не беспокоиться
# А значит вероятность ложного срабатывания минимальна
HOST="8.8.8.8"
# Файл-флаг. Появляется при переключении на резервный канал
LOCKFILE="/tmp/check_internet.lock"
# Файл журнала
LOGFILE="/var/log/check_internet.log"
# Пингуем проверочный хост через основной канал
ping -I eth0 -c 3 -n -q ${HOST} > /dev/null
# Если возникла ошибка (хост не доступен)
if [ $? -ne "0" ]; then
# Если нет файла-флага
if [ ! -f ${LOCKFILE} ]; then
# Меняем маршрут по умолчанию в основной таблице роутинга
ip route del default
ip route add default dev ppp0 metric 10
# Создаём файл флаг
touch ${LOCKFILE}
# Делаем запись в файл журнала
echo `date +'%Y/%m/%d %H:%M:%S'` Internet connection changet to MEGAFON >> ${LOGFILE}
fi
# Если же всё хорошо
else
# Если есть файл-флаг
if [ -f ${LOCKFILE} ]; then
# Меняем маршрут по умолчанию в основой таблице роутинга
ip route del default
ip route add default via 172.168.0.1 metric 10
# Удаляем файл-флаг
rm -f ${LOCKFILE}
# Записываем событие в файл журнала
echo `date +'%Y/%m/%d %H:%M:%S'` Internet connetction changed to INTERNET >> ${LOGFILE}
fi
fi
################################################################
Этот скрипт нужно запускать каждую минуту. Для этого в "/etc/crontab" (подробнее о crontab) нужно добавить строку:
* * * * * root /usr/local/scripts/check_internet.sh
По мотивам группы Linux в VK и ylsoftware.com
Полезная вещь. Нубский вопрос: я правильно понял, что "172.168.0.1" - это адрес шлюза на роутере (основного канала), через который и работает инет, через "eth0" ?
ОтветитьУдалить3G модем соответственно также должен быть всегда подключен...
От тебя-то и нубский? ;)
УдалитьЕсли я правильно понял твой вопрос, то - да ) только сам РОУТЕР - частный случай
возврат на основной, канал, когда упадёт резерв - криво как-то.
ОтветитьУдалитьНе для всех подойдет. У Вас Возврат на основной только , когда падает резерв. :-(
ОтветитьУдалитьУ меня не пингуется основной канал если нет в таблице
ОтветитьУдалить