Сейчас я вкратце опишу, как я сделал у себя резервирование Интернет каналов на Debian.
Основной скрипт, который мониторит доступность интернета и переключает маршруты выглядит так:
# cat ./reserv_chan
####################################################################################################################
#!/bin/bash
# Доступность этого хоста будет означать корректную работу основного канала
HOST="8.8.4.4"
# Файл-флаг. Появляется при переключении на резервный канал
LOCKFILE="/tmp/internet.lock"
# Файл журнала
LOGFILE="/var/log/internet.log"
# Пингуем проверочный хост через основной канал
ping -I eth0 -c 3 -n -q ${HOST} > /dev/null
# Если возникла ошибка (хост не доступен)
if [ $? -ne "0" ]; then
# Если нет файла-флага
if [ ! -f ${LOCKFILE} ]; then
# Меняем маршрут по умолчанию в основной таблице роутинга
/root/route_3g
# Создаём файл флаг
touch ${LOCKFILE}
# Делаем запись в файл журнала
echo `date +'%Y/%m/%d %H:%M:%S'` Internet connection changed to 3G >> ${LOGFILE}
fi
# Если же всё хорошо
else
# Если есть файл-флаг
if [ -f ${LOCKFILE} ]; then
# Меняем маршрут по умолчанию в основой таблице роутинга
/root/route_lan
# Удаляем файл-флаг
rm -f ${LOCKFILE}
# Записываем событие в файл журнала
echo `date +'%Y/%m/%d %H:%M:%S'` Internet connetction changed to LAN >> ${LOGFILE}
fi
fi
################################################################
fi
fi
fi
Скрипты изменения маршрута:
# cat ./route_3g
route add default gw 10.0.0.1
# cat ./route_lan
route del default
И сам скрипт, который мы закинем в cron (он будет каждые 5 секунд проверять доступность назначенного узла):
# cat ./inet_check
while (true)
do /root/reserv_chan;
sleep 5;
done;
Запишем его в cron:
# crontab -e
@reboot /root/inet_check
На всякий случай в я прописал в /etc/network/interfaces
up route add -net 8.8.4.4/32 gw 192.168.1.1 dev eth0
Чтобы наш проверочный хост (8.8.4.4) пинговался именно через eth0, хоть эту и указывается в скрипте (ping -I eth0)
Главное, что в /etc/network/interfaces у нас 192.168.1.1 был просто gateway, а не defaultgateway. Иначе нужно будет изменять переключающие скрипты. Вот и все. Теперь при пропадании 8.8.4.4 на eth0 мы переключимся на 3G и обрачно, когда интернет появится на канале Lan.