Два сервера на 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 можно конечно еще проверять доступность и резервного канала... но мне показалось это уже перебор... хотя может и надо, позже буду посмотреть.
На файрволе блокируем хождение по отключившемуся каналу к провайдеру ???
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 можно конечно еще проверять доступность и резервного канала... но мне показалось это уже перебор... хотя может и надо, позже буду посмотреть.
Комментарии
Отправить комментарий