Резервирование каналов Интернет на FreeBSD 10

route_internetИтак, у меня имеется ADSL модем и 3G USB модем, подключенный через PPP. Задача такая: необходим постоянный доступ к сети Интернет. Когда есть на ADSL, пользуемся им. Когда ADSL отваливается – автоматически переключаемся на 3G. При появлении Интернета на ADSL, снова возвращаемся к нему.

ADLS модем имеет IP: 192.168.1.1
3G модем со статическим IP: 88.88.88.88
IP нашего хоста с FreeBSD: 192.168.1.2

Сначала пропишем статический маршрут на адрес-эталон, который у нас будет показателем того, что через ADSL модем можно лазить в интернет. У меня это 8.8.4.4

Пишем в /etc/rc.conf:

static_routes="pinghost"
route_pinghost="-host 8.8.4.4 192.168.1.1"

Создадим наш скрипт, который будет делать основную работу – проверять доступность канала и переключать маршруты

# vim ./reserv_chan.sh
#!/bin/sh
#Сюда будет сыпаться лог
LOGFILE="/var/log/internet.log"
#Наши шлюзы и другие переменные
GW1='192.168.1.1'
GW2='88.88.88.88'
re0='192.168.1.2'
dst1='8.8.4.4'
inet='0'
# Проверяем, пингуется ли наш 8.8.4.4
inet=$(ping -c 1 -S $re0 $dst1 | grep "64 bytes from" | awk '{print $2}' )
if [ "$inet" != "bytes" ];
 then
 #Если нет, тогда проверим, создана ли временная директория reserve.gw
 if [ -d /tmp/reserve.gw ];
 then
 #Если создана, ничего не делаем
 else
 #Если не создана, тогда меняем маршрут и создаем ее
 sh /root/route_3g.sh
 mkdir /tmp/reserve.gw
 echo `date +'%Y/%m/%d %H:%M:%S'` Internet connection changed to 3G >> $LOGFILE
 #192.168.1.10 - это наш почтовик, который будет слать уведомления о событиях на наш е-мейл
 sendEmail -f admin@mymail.ru -t admin@mymail.ru -u "primary failed" -m "primary failed" -s 192.168.1.10:25
 fi
else
 #Если пинг на 8.8.4.4 через 192.168.1.1 идет, тогда проверим, создана ли временная директория
 if [ -d /tmp/reserve.gw ];
 then
 #Если создана (т.е. мы сейчас на резервном 3G), удаляем и меняем маршрут на ADSL
 rmdir /tmp/reserve.gw
 sh /root/route_adsl.sh
 echo `date +'%Y/%m/%d %H:%M:%S'` Internet connection changed to ADSL >> $LOGFILE
 sendEmail -f admin@mymail.ru -t admin@mymail.ru -u "primary restored" -m "primary restored" -s 192.168.1.10:25
 fi
fi

Создадим файл для логов

# touch /var/log/internet.log

Теперь нам необходимо создать скрипты, которые будут менять маршруты (route_adsl.sh и route_3g.sh). Можно, конечно менять маршрут прямо в этом скрипте, но мне так удобнее под рукой иметь эти отдельные, чтобы вручную можно было переключить, если что.

# vim ./route_adsl.sh
/sbin/route del default
/sbin/route add default 192.168.1.1
#vim ./route_3g.sh
/sbin/route del default
/sbin/route add default 88.88.88.88

Далее мы сделаем скрипт, который будет через заданный интервал запускать reserv_chan.sh

# vim ./inet_check.sh
#!/bin/bash
while (true) do
sh /root/reserv_chan.sh;
sleep 3;
done;

Делаем все скрипты исполняемыми

# chmod +x ./*.sh

И осталось нам только добавить последний скрипт в cron, чтобы он стартовал при загрузке

# vim /etc/crontab
@reboot root sh /root/inet_check.sh

One thought on “Резервирование каналов Интернет на FreeBSD 10”

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2022

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!