» » ToFoIn v 1. Резервирование шлюзов и переключение между внешними каналами во FreeBSD

 

ToFoIn v 1. Резервирование шлюзов и переключение между внешними каналами во FreeBSD

Автор: admin от 31-08-2018, 11:00, посмотрело: 113

Аннотация



В прошлой публикации рассматривался вопрос организации резервирования для шлюзов локальной сети. Как вариант решения был предложен скрипт, который на тот момент решал задачу, однако имел ряд недостатков. Спустя некоторое время получилось эти недостатки устранить, частично переписать код и на выходе получить уже что-то приемлемое. Сейчас можно говорить, что скрипты достаточно протестированы, чтобы называться стабильными. Для упрощения понимания всей системы основные моменты по настройке второстепенных сервисов (с точки зрения темы статьи) будут частично продублированы ниже. Причина проста — за это время были переработаны также правила ipfw, dns отправился жить в AD на Samba4 с bind-frontend и безопасным обновлением записей из isc-dhcpd с использованием kerberos, а также вторичными dns-серверами в виде bind-а на шлюзах, был настроен CARP… В общем, стало сильно интереснее, но подробнее о том, что и как работает — ниже. Всё, что можно будет давать ссылками на первоисточник, будет оформлено именно таким образом, дабы не плодить сущности. То, что бралось из каких либо других мест, но что более недоступно, будет приводиться здесь с соответствующими комментариями.

в прошлый раз(начало раздела «предварительная настройка» внутри раскрывающегося меню).

Потребуется также скрипт для безопасного обновления записей dns в AD средствами samba4. Сам сервер samba4 должен быть просто установлен. Настройка и запуск не требуется, нас интересуют только инструменты управления, идущие в комплекте. Прочую информацию желающие могут найти в разделе «DHCP with dynamic DNS updates» по адресу.

Выглядит страшно, но работает.

На этом с настройкой стороннего софта закончено.

[/spoiler]

Немного о ToFoIn



Весь текст проекта вместе с установочным скриптом доступен на gitlab.



[spoiler=В завершение, рассмотрен пример параметров файла настроек ToFoIn:]Число маршрутизаторов, используемых в системе:

RNUMBER=2


При использовании дополнительных подсетей, необходимо устанавливать маршрут по умолчанию, когда маршрутизатор становится основным. Здесь можно указать номер соответствующего файла setfib, который будет перезапускаться. В данном примере setfib2:

ADDITLAN=2


Имя внутреннего адаптера:

INT_IF=vlan666


Все остальные интерфейсы, по которым маршрутизаторы связаны посредством CARP. Необходимы для контроля и поддержания одинакового состояния всех интерфейсов:

ALL_IF="vlan111 vlan333 vlan444 vlan666 vlan777 vlan888"


vhid, который был использован при настройке CARP:

CARP_VHID=1


IP адреса во внутренней сети других маршрутизаторов в порядке важности, при необходимости, далее просто используется ASERV_IP_2, ASERV_IP_3 и т.д.

ASERV_IP_1=192.168.0.2


Число внешних каналов подключения:

CNUMBER=2


Настройки для основного внешнего канала подключения:

Имя адаптера:

EXT_0_IF=vlan111


Номер таблицы маршрутизации:

RTABLE_0=0


Шлюз по умолчанию:

DEFAULT_GATEWAY=2.2.2.1


Настройки для резервного внешнего канала подключения:

Имя адаптера:

EXT_1_IF=vlan444


Номер таблицы маршрутизации:

RTABLE_1=1


Шлюз по умолчанию не требуется, т. к. для всех таблиц маршрутизации, кроме основной используется rc.d скрипт setfib, который, как предполагается логикой, должен совпадать с номером таблицы.

Параметры модуля Tester:

Число адресов, по которым будет происходить проверка:

TNUMBER=2


Адреса машин, по которым отправляются ping-запросы. Лучше всего использовать в первом случае доменное имя, и только после этого ip адреса:

PTARGET_0=ya.ru
PTARGET_1=8.8.8.8


Число ping пакетов, отправляемых одной целе:

PNUMBER=2


Настройки модуля Judge

Число успешных тестирований основного канала перед возвращением на него. Время возврата на основной канал после возобновления его работы приблизительно рассчитывается по формуле: (WNUMBER+1)*JUDGEPERIOD секунд.

WNUMBER=3


Настройки модуля Logger

Данные 2 параметра означают, с какой частотой Logger будет записывать повторяющиеся события. После записи о событии в следующий раз сообщается о LOGFREQ1 числе повторов, далее о LOGFREQ2 числе повторов. Учитываются только события идущие подряд.

LOGFREQ1=5
LOGFREQ2=20


Таймеры запуска модулей в секундах

Период запуска модуля Tester. Имеет смысл рассчитывать исходя из времени неудачных попыток тестирования всех целей.

TESTERPERIOD=240


Период запуска модуля Judge. Не стоит устанавливать меньше TESTERPERIOD.

JUDGEPERIOD=300


Период запуска модуля Scout.

SCOUTPERIOD=360


Период ожидания перед проверкой таймеров запуска модулей Tester и Judge. Логично устанавливать меньше или равным значению TESTERPERIOD.

SENSITIVITY=60


Время, по истечению которого работающий модуль считается зависшим. Используются модулем Watchdog.

TESTERLIMIT=40
JUDGELIMIT=30
LOGGERLIMIT=20
SCOUTLIMIT=120
WATCHDOGLIMIT=150


Пути к файлам и каталогам

Путь к скрипту ipfw.

FIRESCRIPT=/etc/firewall.sh


Настройки ipfw. Если настройки ipfw не вынесены в отдельный файл, то FIRESCRIPT=FIRESETDEF.

FIRESETDEF=/etc/firewall/config


Путь к настройкам ipfw для основного внешнего канала:

FIRESET_0=/etc/firewall/config_0


Путь к настройкам ipfw для резервного внешнего канала, при необходимости можно продолжать далее FIRESET_2 и т.д.:

FIRESET_1=/etc/firewall/config_1


Пути к настройкам bind

BINDSETDEF=/usr/local/etc/namedb/named.conf


Настройки bind для основного внешнего канала:

BINDSET_0=/usr/local/etc/namedb/named.conf.0


Настройки bind для резервного внешнего канала, при необходимости можно продолжать далее BINDSET_2 и т.д.:

BINDSET_1=/usr/local/etc/namedb/named.conf.1


Пути ко всем исполняемым файлам ToFoIn:

DAEMON=/local/sbin/tofoin/daemon.sh
TESTER=/usr/local/sbin/tofoin/tester.sh
JUDGE=/usr/local/sbin/tofoin/judge.sh
LOGGER=/usr/local/sbin/tofoin/logger.sh
SCOUT=/usr/local/sbin/tofoin/scout.sh
WATCHDOG=/usr/local/sbin/tofoin/watchdog.sh


Журнал событий. Этот файл сейчас НЕ создаётся при установке:

LOGFILE=/var/log/tofoin.log


Временные файлы и каталоги, создаются при запуске соответствующих модулей, некоторые удаляются при остановке:

DIR_TMP=/tmp/tofoin
DIR_PID=/var/run/tofoin
JUDGEMETER=/tmp/tofoin/judgemeter
PREVSTATE=/tmp/tofoin/prevstate
SCOUTGATE=/tmp/tofoin/scoutgate
LOGTMP=/tmp/tofoin/logger.tmp
LOGMETER=/tmp/tofoin/logmeter
DAEMON_PID=/var/run/tofoin/daemon.pid
TESTER_PID=/var/run/tofoin
SCOUT_PID=/var/run/tofoin/scout.pid
JUDGE_PID=/var/run/tofoin/judge.pid
LOGGER_PID=/var/run/tofoin/logger.pid
WATCHDOG_PID=/var/run/tofoin_watchdog.pid


[/spoiler]

Итог



Получился вполне работоспособный и надежный набор скриптов, который хорошо справляется с задачей переключения на рабочий канал в случае 2 роутеров с 2 внешними каналами связи.



Планы



Мои планы относительно этого проекта касаются, разве что, переписывания с bash на чистый sh, чтобы избавиться от лишнего ПО на сервере. С другой стороны — сейчас всё работает изумительно и вмешиваться в данный процесс крайне не хочется, к тому же переход на sh чреват более страшными языковыми конструкциями, необходимыми для достижения того же результата.

В остальном, наверное, стоило бы подумать над лучшей реализацией тестовых модулей.



Ссылки:



<- Предыдущая статья

Страница проекта ToFoIn на gitlab-е

[spoiler=Остальные]DNS BIND 9:

Ли К., Альбитц П. — DNS и BIND (5-е издание)

DNS сервер BIND

DHCP:

Failover DHCP

DHCP with dynamic DNS updates

samba-dnsupdate

SETFIB:

Multiple default routes in FreeBSD without BGP or similar

setfib и переключение между таблицами маршрутизации

FreeBSD два провайдера. setfib

IPFW + NAT:

Подробное руководство по ipfw nat

FreeBSD 9 + ipfw + ipfw nat

Подробное руководство по ipfw nat

DUMMYNET

Kernel NAT

BASH:

Основы BASH. Часть 2.

Advanced Bash-Scripting Guide

[/spoiler]

Источник: Хабр / Интересные публикации

Категория: Программирование

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *