Найти тему

Mikrotik RB3011+SXT LTE6. Два провайдера. Резервирование каналов.

Появилась задачка обеспечить резерв для текущего интернет канала на одной из площадок компании. Текущий интернет канал не стабилен, периодически падает и решено было воспользоваться мобильным интернетом в качестве резервного. Благо, вышка мобильного оператора в нашей местности расположена очень близко. Итак, приобрели роутер Mikrotik SXT LTE6.

Mikrotik SXT LTE6
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

-2

Добавляем резервный маршрут на канал LTE (я использовал метрику 10)

-3

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 интернет #сетевые технологии