К основному контенту

Два канала интернет

Два сервера на FreeBSD 11.1, два канала интернет от двух разных провайдеров.

На файрволе блокируем хождение по отключившемуся каналу к провайдеру ???

route del default
route add default  XX.XX.XX.XX
route change default XX.XX.XX.XX


#!/bin/sh

ifP="xxx"
GW_prov=XX.XX.XX.XX
GW_reserv=XX.XX.XX.XX

dt1=`date "+%Y-%m-%d %H:%M:%S"`

#is=`/sbin/ping -c 7 $GW_prov | grep -c "64 bytes"`
is=`/usr/local/sbin/hping -1 -I $ifP -c 7  $GW_prov | grep -c "len=46"`
if (/bin/test $is -gt "4"); then

    check_gw=`netstat -nr | grep default | awk '{print $2}'`
    if [ "$check_gw" !=  "$GW_prov" ]; then
      /sbin/route change default $GW_prov
      sleep 10
      /usr/scripts/msgs/sendmsg.sh "Gate02 switch to Provider Channel"
      echo $dt1 >> /var/log/switches_log
      echo  "Gate02 switch to Provider Channel" >> /var/log/switches_log
    else
    fi

else
    check_gw1=`netstat -nr | grep default | awk '{print $2}'`
    if [ "$check_gw1" !=  "$GW_reserv" ]; then
      /sbin/route change default $GW_reserv
      sleep 10
      /usr/scripts/msgs/sendmsg.sh "Gate02 switch to Reserve Channel"
      echo $dt1 >> /var/log/switches_log
      echo  "Gate02 switch to Reserve Channel" >> /var/log/switches_log
    else
    fi

fi

переменные содержат:
- имя интерфейса к провайдеру;
- адрес шлюза провайдера;
- адрес второго канала (в моем случае это второй шлюз freebsd к другому провайдеру. и да, у        меня два отдельных шлюза к двум провайдерам);
- переменная содержащая текущее время (нужно для логов и отсылки в телеграм-бот);
- переменная содержащая количество ответов пинга. поскольку стандартная команда пинг            отказалась работать, через выбираемый интерфейс (несмотря на ключ -I) пришлось                    поставить hping из пакетов, там все ок с выбираемым интерфейсом.

Далее проверяется количество ответов пинга, если больше 4 - все ок, то проверим вдруг мы на резервном канале, и если  на резервном, то переключаем шлюз на  основной (GW_prov), отправим телеграмм-боту сообщение, что переключились на основной и запишем в лог, а если на основном то завершаем скрипт.

Если в результате проверки ответов пинга, их количество меньше 4, то проверяем вдруг уже переключены на резервный, если не переключены, меняется шлюз по умолчанию на резервный (GW_reserv) отправляем сообщение телеграмм-боту и пишем в лог.

Далее скрипт подвешиваем в крон, каждые 5 мин идет проверка 

PS можно конечно еще проверять доступность и резервного канала... но мне показалось это уже перебор... хотя может и надо, позже буду посмотреть.



Комментарии

Популярные сообщения из этого блога

Многономерной транк от Датагруп к Elastix 2.5

В очередной раз украли кабель укртелекома, и восстановление "через полгода", но городские надо. Поскольку есть сервер Elastix2.5, решение очевидно sip-trunk. Укртелеком на вопрос sip-trunk "отморозился" причиной "он нестабилен, он ненадежен, и т.п., берите облачную атс" (зачем мне облачная атс?) Побывав на IT-Forum2018, встретил (единственного!!!! на весь форум) оператора/провайдера Датагруп, выяснил, что возможность подключить транк есть и подходит под мои условия(nat,отсутствие "белого ip") ТЗ;  -sip-trunk на 3 номера и 10 голосовых сессий; -атс на базе Elastix2.5. После заключения всех договоров и оплаты подключения, получен заветный конверт с логином паролем и адресом подключения (и иными параметрами подключения), 1) создаем транк: меню Trunk / Add SIP trunk Рис.1 Создаем  (Рис.1) Trunk Name : "имя транка",  Outbound CallerID : логин из конверта Рис.2 Далее (Рис.2) Trunk Name : "имя транка...

FreeBSD полезности

Приглашение командной строки bash В файле /etc/profile добавляется строка PS1="\h\\$ "; export PS1 в этом виде: \h - имя компьютера до первой точки; \\$ - если UID пользователя 0 (su/root), то будет выведен символ # , иначе $; можно использовать и другие символы: \u - имя юзера; \H - полное имя компьютера; \d -текущая дата " день недели месяц число"; \n - символ новой строкиж; \r - возврат карретки; \t - время в 24 формате (ч:м:с); \T - время в 12 формате; \w - текущий каталог с полным путем; \W - название текущего каталога; $() - внешняя команда в скобках, например (date). Ошибка при запуске MC common.c: unimplemented subshell type 1 read (subshell_pty...): ... проверить export $SHELL если /bin/sh изменить на /bin/csh командой chsh -s /bin/csh root перезайти netstat -nr проверить текущий шлюз по умолчанию

Использование windows(samba) диска в linux

Как подключить сетевой диск Windows в Linux Поддержку сетевых дисков Windows в Linux обеспечивает пакет cifs-utils. Если он у вас еще не установлен, в командной строке от имени суперпользователя введите sudo apt install cifs-utils Создайте в /mnt (или любом другом месте) папку, в которую мы будем подключать сетевой диск Windows: mkdir /mnt/winshare И наконец само подключение сетевой папки Windows в Linux выполняется с помощью команды mount.cifs mount.cifs //SERVER_IP/SHARE_NAME /mnt/winshare -o username=WIN_USER_NAME,password=WIN_USER_PASSWORD Такая команда выполнит присоединение к фаловой системе Linux сетевого диска Windows с именем SHARE_NAME, расположенного на сервере с IP-адресом SERVER_IP от имени WIN_USER_NAME с паролем WIN_USER_PASSWORD.  В большинстве случаев этого достаточно, если вы работаете от лица суперпользователя. Если же вы от лица суперпользователя производите только подключение сетевой папки Windows, а работать с ней планируете от лица об...