BSDPORTAL.RU http://bsdportal.ru/ |
|
Автопереключение каналов провайдеров http://bsdportal.ru/viewtopic.php?f=13&t=29199 |
Страница 1 из 1 |
Автор: | mrrc [ Вт 27 апр, 2021 11:10 pm ] |
Заголовок сообщения: | Автопереключение каналов провайдеров |
Пытаюсь запустить простенький файловер, есть небольшой, но с правильным алгоритмом определения падения канала, скрипт на шелле, с досадными ошибками синтаксиса, с которым не удается совладать. Может кто сможет допилить до рабочего состояния, у меня в силу недостаточности познаний в криптинге не выходит. Код: #!/bin/sh
LANG=ru_RU.KOI8-R; export LANG MM_CHARSET=KOI8-R; export MM_CHARSET # Основной оптика GW1=10.0.0.2 # Резервный Радио GW2=10.0.0.3 # Устанавливаем в переменную время и дату в нужном нам формате DT=`date +"%T %d.%m.%Y"` # Для проверки каналов интернет на работоспособность используем пинг на сервисы Yandex, разные IP для разных каналов # вы можете использовать свои эталонные адреса для проверки # Проверяем добавлены ли маршруты на эталонные IP для проверки, если нет, то добавляем check_node=`netstat -rn | grep "77.88.8.1" | awk '{print $1}'` if [ "$check_node" != "77.88.8.1" ]; then # добавляем маршрут для Яндекса через оптику для проверки /sbin/route add 77.88.8.8 $GW1 # через Радио /sbin/route add 77.88.8.1 $GW2 else fi # Проверяем, если включен основной интернет и файл состояния установлен на резервный канал, то стираем файл состояния # Такая ситуация может возникнуть, например, если сервер был на резервном и потом его резко выключили, # А после включения опять включился основной канал (маршрут по-умолчанию) check_gw=`netstat -rn | grep default | awk '{print $2}'` if [ "$check_gw" = "10.0.0.2" ]; then if [ -f /tmp/.inet_reserv_work ]; then /bin/rm /tmp/.inet_reserv_work /bin/echo Стираем файл .inet_reserv_work $DT, так как шлюз $GW1, а не резервный $GW2! >> /data/scripts/inet_change.log else fi else fi # Проверяем работает ли основной канал is=`/sbin/ping -c 7 77.88.8.8 | grep -c "64 bytes"` if (/bin/test $is -gt "4") then # Если основной канал работает и файл состояния резервного канала существует, то стираем файл состояния и переключаемся # на основной канал, пишем запись в лог и отправляем письмо администратору о переключении if [ -f /tmp/.inet_reserv_work ]; then /sbin/route change default $GW1 /bin/rm /tmp/.inet_reserv_work /bin/echo Основной канал [Оптика] включен $DT >> /data/scripts/inet_change.log echo "$DT Переключились на Оптику" | mail -s "Интернет переключился" admin@admin.com -f root@admin.com else exit fi else # Если основной не работает, то проверяем резервный и переключаемся на него is2=`/sbin/ping -c 7 77.88.8.1 | grep -c "64 bytes"` if (/bin/test $is -gt "4" || /bin/test $is2 -gt "4") then if ! [ -f /tmp/.inet_reserv_work ]; then /sbin/route change default $GW2 /usr/bin/touch /tmp/.inet_reserv_work /bin/echo Резервный канал [Радио] включен $DT >> /data/scripts/inet_change.log echo "$DT Переключились на Радио" | mail -s "Интернет переключился" admin@admin.com -f root@admin.com fi fi |
Автор: | fidaj [ Ср 28 апр, 2021 9:03 am ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
sysutils/monit |
Автор: | mrrc [ Ср 28 апр, 2021 9:42 am ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
fidaj писал(а): sysutils/monit Это для нахождения нарушений к структуре скрипта? Я прогонял скрипт через сервис shellcheck.net, но ясности не прибавило, там зависимость переменных и локализовать сбойное место (оно поди и не одно) не удалось. |
Автор: | fidaj [ Ср 28 апр, 2021 9:53 am ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
это что бы не писать свои велосипеды - уже готовый, который можно настроить определять состояния каналов и выполнять по событиям определенные дальнейшие действия. |
Автор: | mrrc [ Ср 28 апр, 2021 10:00 am ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
На старенькой фре его нет и из портов уже не внедрить. Потом, какой алгоритм работы предлагаемого вами решения, используется ли проверка работоспособности канала за шлюзом провайдера, что является принципиальным? Велосипед не так и плох, в рамках своего предназначения вполне сойдет как простейший файловер, только вот с синтаксисом проблема. |
Автор: | fidaj [ Ср 28 апр, 2021 10:07 am ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
sysutils/monit/ Port Added: 2005-02-18 19:15:21 |
Автор: | mrrc [ Ср 28 апр, 2021 11:33 am ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
fidaj писал(а): sysutils/monit/ Port Added: 2005-02-18 19:15:21 Вы не ответили по возможности проверять наличие связи за шлюзом провайдера и алгоритм работы предлагаемого порта. |
Автор: | fidaj [ Ср 28 апр, 2021 12:37 pm ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
https://www.mmonit.com/monit/documentation/monit.html |
Автор: | mrrc [ Ср 28 апр, 2021 2:56 pm ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
Не нахожу необходимого функционалу по файловеру изкоропки, если и можно использовать в ключе первоначального вопроса, то с ручными доработками, что равно рассматриваемому мною скрипту (с несложным алгоритмом работы). |
Автор: | mrrc [ Чт 29 апр, 2021 9:47 am ] |
Заголовок сообщения: | Re: Автопереключение каналов провайдеров |
Дополню, что скрипт оказался рабочий с минимальной правкой, меня смутил вышеупомянутый шеллчекер, выдававший несколько ошибок синтаксиса. Далее уже столкнулся с иной проблемой, не связанной напрямую со скриптом, по неработоспособности днс после смены шлюза по умолчанию и вообще странным поведением системы, хотя используются днс-сервера как обоих провайдеров, так и публичные. Настроен кэширующий днс (named) для пользователей с указанием серверов днс в разделе forwarders в named.conf. Возможно, нужно не только менять шлюз по умолчанию на лету, но и после перезапускать службу сети и обновить таблицу маршрутизации через /etc/rc.d/netif restart && /etc/rc.d/routing restart. По мере времени и возможности предстоит разобраться. |
Страница 1 из 1 | Часовой пояс: UTC + 4 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |