Резервирование каналов Интернет на 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”

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

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

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

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