На днях сбойнул провайдер в офисе, что навело меня на мысль сделать скрипт для крона, который бы автоматически переключал на резервный канал в случае сбоев с основным. К сожалению, в bash понимаю туго, но накидал тут скрипт из разных примеров. Прошу критики и советов, как правильно реализовать.
Сервер, на котором все это крутится, является интернет шлюзом и раздает интернет в офис через iptables/NAT.
Что собственно хочу сделать. Оба интернет-канала постоянно включены на шлюзе, но резервный должен использоваться только в случае сбоев на основном. Скрипт должен проверять наличие доступа до нескольких хостов, если ничего не получается, врубать резервный канал, меняя настройки iptables. В следующий запуск скрипт пытается включить обратно основной канал и снова проверяет доступность хостов. Если они доступны, включает основной канал, блокирует резервный, иначе - оставляет резервный.
Основные вопросы:
- как правильно запретить использование поднятого интерфейса (т.е. чтобы резервный канал, будучи активным, не передавал трафик кроме служебного)?
- можно ли внутри скрипта передавать аргументы другому скрипту и как правильно это делать?
- много раз видел, как на домашней машине под оффтопиком вылезают сообщения от провайдера о плановых работах. Используется какая-то сетевая служба Windows. Можно ли посылать подобные сообщения с Linux-сервера в локальную сеть, чтобы менеджеры (на WindowsXP) явно видели, что сидят на резервном канале?
Заготовка скрипта:
#!/bin/bash
#Переменные
p=0
#1) контрольные адреса
check=" ya.ru
google.com"
#2) каналы провайдеров
WAN1=ppp0 #основной
WAN2=ppp1 #резервный
#3) скрипты iptables
sh=/root/scripts/firewall.sh
#Переключение на основной канал
if [ -e /dev/$WAN1 ]
then route add default gw $WAN1
else route add default gw $WAN2 && sh $sh $WAN2 && exit 0 #тут пытаюсь передать аргумент вызываемому скрипту
fi
#Проверка доступности хостов
for ips in $check
do
echo $ips
i=$(/bin/ping -c 4 $ips | grep "received" | awk '{print $4}')
let "p = p + i"
done
if [ p == 0 ]
then route add default gw $WAN2 && sh $sh $WAN2
else sh $sh $WAN1 && exit 0
fi
exit 0