Появилась задачка обеспечить резерв для текущего интернет канала на одной из площадок компании. Текущий интернет канал не стабилен, периодически падает и решено было воспользоваться мобильным интернетом в качестве резервного. Благо, вышка мобильного оператора в нашей местности расположена очень близко. Итак, приобрели роутер Mikrotik SXT LTE6.
Схема сети:
RB-3011
eth1 - ip 45.45.45.100 - WAN
eth2 - ip 10.0.0.81 - линк в сторону LTE
eth3 ip 172.16.5.1 - локальная сеть
SXT LTE6
eth 1 - ip 10.0.0.82 - линк в сторону RB-3011
Добавляем резервный маршрут на канал LTE (я использовал метрику 10)
NAT будет осуществляться на RB3011 и SXT LTE6.
Расписывать настройку сетевых интерфейсов не буду, в интернет куча материалов по первоначальной настройке оборудования mikrotik.
Итак, нам необходимо резервировать основной канал провайдера и в случае его падения переключиться на резервный канал LTE. Проверку падения интернет-канал мы будет осуществлять "пингованием" узла сети Интернет. Для этого можно было бы использовать встроенную утилиту Netwatch, но , помимо ее огромного плюса, простоты настройки, она имеет ряд минусов которые не дадут нам пространства для реализации"красивой" и правильной схемы переключения канала, а именно:
- утилита Netwatch не позволяет указать с какого интерфейса нам осуществлять проверку доступности какого-либо узла.
- нет возможности добавить несколько узлов для проверки
- нет возможности указать сколько раз пинговать удаленный узел
- при переключении на резервный канал тут же станет доступен узел который мы мониторим (этого можно избежать, но настройка усложнится добавлением маршрутов и правкой firewall)
Решено, вместо Netwatch будем использовать скрипт который будет выполнять мониторинг несколько узлов , вычислять сумму полученных ответов (в моем случае 2/3 от общего числа запросов). Скрипт стандартный, давно бродит по интернету и опубликован на многих форумах, но мною он доработан и добавлены кое-какие штуки о которых я расскажу ниже.
кол-во запросов ping
:local PingCount 3
Адреса узлов для проверки
:local google 8.8.8.8
:local yandex 77.88.8.8
:local mail 94.100.180.201
присваиваем переменным кол-во ответов
:local ResultGoogle [/ping count=$PingCount $Google interface=ether2]
:local Resultyandex [/ping count=$PingCount $yandex interface=ether2]
:local ResultMail [/ping count=$PingCount $mail interface=ether2]
определяем в каком состоянии находится основной маршрут (активен или нет)
:local NOROUTE [/ip route get [find comment=WAN] disable]
сравниваем кол-во полученных ответов и присваиваем переменной
:local INETOK false
:set INETOK (($ResultGoogle + $Resultyandex + $ResultMail) >= (2 * $PingCount))
:put "INETOK=$INETOK"
если нет доступности узлов и маршрут активен то отключаем маршрут WAN и очищаем активные сессии
if ($INETOK=false && $NOROUTE=false ) do={
/log error "NO CONNECT WAN result=$ResultGoogle + $Resultyandex + $ResultMail INETOK= $INETOK"
/ip route set [find comment="WAN"] disable=yes
/ip firewall connection remove [find where src-address~"172.16.5."]
}
если нет доступности узлов и маршрут НЕ активен то пропускаем
if ($INETOK=false&& $NOROUTE= true) do={
/log error "NO CONNECT skip result=$ResultGoogle + $Resultyandex + $ResultMail INETOK= $INETOK"
}
узлы доступны и НЕТ маршрута то переключаемся на основной канал и очищаем активные сессии
if ($INETOK=true && $NOROUTE= true ) do={
/log warning "CONNECT UP WAN result=$ResultGoogle + $Resultyandex + $ResultMail INETOK= $INETOK NOROUTE = $NOROUTE"
/ip route set [find comment="WAN"] disable=no
/ip firewall connection remove [find where src-address~"172.16.5."]
}
если узлы доступны и маршрут активен то пропускаем
if ($INETOK= true && $NOROUTE=false ) do={
/log warning "CONNECT UP skip result=$ResultGoogle + $Resultyandex + $ResultMail INETOK= $INETOK NOROUTE = $NOROUTE"
}
Если происходит переключение на другой канал то нам необходимо сбросить активные сессии который висят на уже не активном канале.
Дополнительные проверки skip служат для того чтобы нам при выполнении скрипта и , как следствие проверки узлов, постоянно не очищать активные сессии пользователей, а делать это только тогда когда через основной канал мы увидим пингуемые узлы и переключимся на него.
Ставим выполнение скрипта в планировщик Scheduler на выполнение с нужной вам периодичностью и все готово.
#mikrotik #lte routeros #4g интернет #сетевые технологии