- Mikrotik OS и автоматическое переключение на резервный канал
- Конфигурация сети
- Настройки роутера
- Скрипты
- Установка глобальных параметров при запуске роутера
- Определение IP-адресов интерфейсов
- Определение IP-адреса основного интерфейса
- Определение IP-адреса резервного интерфейса
- Переключение каналов
- Планировщик
- Выводы
- Mikrotik OS и автоматическое переключение на резервный канал
- Конфигурация сети
- Настройки роутера
- Скрипты
- Установка глобальных параметров при запуске роутера
- Определение IP-адресов интерфейсов
- Определение IP-адреса основного интерфейса
- Определение IP-адреса резервного интерфейса
- Переключение каналов
- Планировщик
- Выводы
- Есть Wi-Fi роутер с автоматическим переключением между WAN и 4G?
Mikrotik OS и автоматическое переключение на резервный канал
В недавнем прошлом в связи с переходом с ADSL на Ethernet представилась отличная возможность попробовать оборудование от Mikrotik. В связи с чем был куплен роутер RB750GL. Железка оказалась превосходной как внешне, так и с точки зрения функционала и надёжности. В итоге у меня осталось оба канала и было решено настроить резервирование с автоматическим переключением. Стандартные средства переключения шлюзов не покрывают всё многообразие сбоев, поэтому нужно писать свои скрипты.
Конфигурация сети
1. Канал Ehernet от NLink втыкается в первый порт роутера, получает IP по DHCP и поднимает pptp соединение, названное nlink. Это будет основное соединение.
2. Канал ADSL от провайдера Домолинк проходит через DLink-2500 в режиме моста и втыкается во второй порт роутера, поверх поднимается pppoe соединение, названное domolink. Это будет резервное соединение.
3. Порты 3-5 роутера используются для подключения устройств локальное сети.
Настройки роутера
Настройка подключений и маскарадинга для компьютеров локальное сети является тривиальной и детально описана в официальной вики.
При настройке ppp подключений нужно отключить добавление маршрутов по умолчанию, а затем создать статические маршруты разными метриками и подходящими комментариями:
/ip route
add comment=MainGW disabled=no distance=1 dst-address=0.0.0.0/0 gateway=nlink scope=30 target-scope=10
add comment=RsrvGW disabled=no distance=2 dst-address=0.0.0.0/0 gateway=domolink scope=30 target-scope=10
Теперь чтобы переключать каналы достаточно изменять параметр distance. Трафик пойдёт через канал с меньшим значением этого параметра.
Скрипты
Установка глобальных параметров при запуске роутера
Скрипт называется set_global_parameters
#Main interface name
:global MainIf nlink
#Reserve interface name
:global RsrvIf domolink
#Main interface ip address
:global MainIfAddress «»
#Reserve interface ip address
:global RsrvIfAddress «»
Определение IP-адресов интерфейсов
Определение IP-адреса основного интерфейса
Скрипт называется define_main_if_ip
:global MainIf
:global MainIfAddress «»
:set MainIfAddress [/ip address get [find interface=$MainIf] address]
Данный скрипт определяет IP-адрес основного интерфейса для доступа в интернет. Если этот интерфейс отсутствует, то скрипт будет завершаться с ошибкой, а в переменной MainIfAddress будет пустая строка.
Определение IP-адреса резервного интерфейса
Скрипт называется define_reserved_if_ip
:global RsrvIf
:global RsrvIfAddress «»
:set RsrvIfAddress [/ip address get [find interface=$RsrvIf] address]
Определение этих адресов вынесено в отдельные скрипты, т.к. эти значения я использую ещё в ряде скриптов на роутере (например, обновление записей в DynDNS), а пользовательские функции тут создавать нельзя. Следует заметить, что напрямую команды определения адресов нельзя использовать в других скриптах, т.к. в случае проблем с интерфейсом они генерируют ошибку и приводят к завершению скрипта.
Переключение каналов
Скрипт называется connection_check
:global MainIf
:global RsrvIf
:global MainIfAddress
:global RsrvIfAddress
#www.ru
:local PingTarget1 194.87.0.50
#ya.ru
:local PingTarget2 87.250.250.203
#google dns
:local PingTarget3 8.8.8.8
#Check main internet connection
:local MainIfInetOk false;
if ($MainIfAddress!=»») do= :local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$MainIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$MainIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$MainIf]
:set MainIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
>
#Check reserved internet connection
:local RsrvIfInetOk false;
if ($RsrvIfAddress!=»») do= :local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$RsrvIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$RsrvIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$RsrvIf]
:set RsrvIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
>
:put «MainIfInetOk=$MainIfInetOk»
:put «RsrvIfInetOk=$RsrvIfInetOk»
if (!$MainIfInetOk) do= /log error «Main internet connection error»
>
if (!$RsrvIfInetOk) do= /log error «Reserve internet connection error»
>
:local MainGWDistance [/ip route get [find comment=»MainGW»] distance]
:local RsrvGWDistance [/ip route get [find comment=»RsrvGW»] distance]
:put «MainGWDistance=$MainGWDistance»
:put «RsrvGWDistance=$RsrvGWDistance»
#SetUp gateways
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do= /ip route set [find comment=»MainGW»] distance=1
/ip route set [find comment=»RsrvGW»] distance=2
/log info «Switch to main internet connection»
>
if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance /ip route set [find comment=»MainGW»] distance=2
/ip route set [find comment=»RsrvGW»] distance=1
/log warning «Switch to reserve internet connection»
>
Обратите внимание на пинг через конкретный интерфейс, а так же на критерий признания канала неисправным. Я пингую три разных узла и считаю, что интернет на данном интерфейсе не работает, если приходит меньше 2/3 ответов.
Планировщик
1. Скрипт set_global_parameters запускается один раз при запуске роутера.
2. Скрипты определения IP-адресов запускаются каждые 27 секунд. Такое значение выбрано чтобы минимизировать количество одновременных запусков с основным скриптом.
3. Скрипт connection_check запускается каждую минуту.
Выводы
Полученное решение при минимуме затрат существенно повысило надёжность моей домашней сети и успешно справляется с самыми изощрёнными сбоями местных провайдеров, при этом оно в достаточной степени защищено от сбоев внешних узлов сети.
Mikrotik OS и автоматическое переключение на резервный канал
В недавнем прошлом в связи с переходом с ADSL на Ethernet представилась отличная возможность попробовать оборудование от Mikrotik. В связи с чем был куплен роутер RB750GL. Железка оказалась превосходной как внешне, так и с точки зрения функционала и надёжности.
В итоге у меня осталось оба канала и было решено настроить резервирование с автоматическим переключением. Стандартные средства переключения шлюзов не покрывают всё многообразие сбоев, поэтому нужно писать свои скрипты.
Конфигурация сети
1. Канал Ehernet от NLink втыкается в первый порт роутера, получает IP по DHCP и поднимает pptp соединение, названное nlink. Это будет основное соединение.
2. Канал ADSL от провайдера Домолинк проходит через DLink-2500 в режиме моста и втыкается во второй порт роутера, поверх поднимается pppoe соединение, названное domolink. Это будет резервное соединение.
3. Порты 3-5 роутера используются для подключения устройств локальное сети.
Настройки роутера
Настройка подключений и маскарадинга для компьютеров локальное сети является тривиальной и детально описана в официальной вики.
При настройке ppp подключений нужно отключить добавление маршрутов по умолчанию, а затем создать статические маршруты разными метриками и подходящими комментариями:
/ip route
add comment=MainGW disabled=no distance=1 dst-address=0.0.0.0/0 gateway=nlink scope=30 target-scope=10
add comment=RsrvGW disabled=no distance=2 dst-address=0.0.0.0/0 gateway=domolink scope=30 target-scope=10
Теперь чтобы переключать каналы достаточно изменять параметр distance. Трафик пойдёт через канал с меньшим значением этого параметра.
Скрипты
Установка глобальных параметров при запуске роутера
Скрипт называется set_global_parameters
#Main interface name
:global MainIf nlink
#Reserve interface name
:global RsrvIf domolink
#Main interface ip address
:global MainIfAddress «»
#Reserve interface ip address
:global RsrvIfAddress «»
Определение IP-адресов интерфейсов
Определение IP-адреса основного интерфейса
Скрипт называется define_main_if_ip
:global MainIf
:global MainIfAddress «»
:set MainIfAddress [/ip address get [find interface=$MainIf] address]
Данный скрипт определяет IP-адрес основного интерфейса для доступа в интернет. Если этот интерфейс отсутствует, то скрипт будет завершаться с ошибкой, а в переменной MainIfAddress будет пустая строка.
Определение IP-адреса резервного интерфейса
Скрипт называется define_reserved_if_ip
:global RsrvIf
:global RsrvIfAddress «»
:set RsrvIfAddress [/ip address get [find interface=$RsrvIf] address]
Определение этих адресов вынесено в отдельные скрипты, т.к. эти значения я использую ещё в ряде скриптов на роутере (например, обновление записей в DynDNS), а пользовательские функции тут создавать нельзя. Следует заметить, что напрямую команды определения адресов нельзя использовать в других скриптах, т.к. в случае проблем с интерфейсом они генерируют ошибку и приводят к завершению скрипта.
Переключение каналов
Скрипт называется connection_check
:global MainIf
:global RsrvIf
:global MainIfAddress
:global RsrvIfAddress
#www.ru
:local PingTarget1 194.87.0.50
#ya.ru
:local PingTarget2 87.250.250.203
#google dns
:local PingTarget3 8.8.8.8
#Check main internet connection
:local MainIfInetOk false;
if ($MainIfAddress!=»») do= :local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$MainIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$MainIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$MainIf]
:set MainIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
>
#Check reserved internet connection
:local RsrvIfInetOk false;
if ($RsrvIfAddress!=»») do= :local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$RsrvIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$RsrvIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$RsrvIf]
:set RsrvIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
>
:put «MainIfInetOk=$MainIfInetOk»
:put «RsrvIfInetOk=$RsrvIfInetOk»
if (!$MainIfInetOk) do= /log error «Main internet connection error»
>
if (!$RsrvIfInetOk) do= /log error «Reserve internet connection error»
>
:local MainGWDistance [/ip route get [find comment=»MainGW»] distance]
:local RsrvGWDistance [/ip route get [find comment=»RsrvGW»] distance]
:put «MainGWDistance=$MainGWDistance»
:put «RsrvGWDistance=$RsrvGWDistance»
#SetUp gateways
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do= /ip route set [find comment=»MainGW»] distance=1
/ip route set [find comment=»RsrvGW»] distance=2
/log info «Switch to main internet connection»
>
if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance /ip route set [find comment=»MainGW»] distance=2
/ip route set [find comment=»RsrvGW»] distance=1
/log warning «Switch to reserve internet connection»
>
Обратите внимание на пинг через конкретный интерфейс, а так же на критерий признания канала неисправным. Я пингую три разных узла и считаю, что интернет на данном интерфейсе не работает, если приходит меньше 2/3 ответов.
Планировщик
1. Скрипт set_global_parameters запускается один раз при запуске роутера.
2. Скрипты определения IP-адресов запускаются каждые 27 секунд. Такое значение выбрано чтобы минимизировать количество одновременных запусков с основным скриптом.
3. Скрипт connection_check запускается каждую минуту.
Выводы
Полученное решение при минимуме затрат существенно повысило надёжность моей домашней сети и успешно справляется с самыми изощрёнными сбоями местных провайдеров, при этом оно в достаточной степени защищено от сбоев внешних узлов сети.
Есть Wi-Fi роутер с автоматическим переключением между WAN и 4G?
Добрый день. В офисе достаточно нестабильный интернет. Требуется резервный канал. Другого провайдера нету, поэтому решено использовать 4G. Посоветуйте пожалуйста роутер с возможностью автоматического переключения, когда падает wan, на 4G. И в обратную сторону когда wan понимется. Возможно ли это реализовать стандартной прошивкой или только на альтернативных? Очень желательно что бы на роутере был не usb разъем под модем, а разъем именно под сим-карту. Пока я нашел только линейку TP-Link, но не знаю если в них автоматическое переключение.
P.S. Знаю что подобные вопросы тут уже задавались, все старше 3+ лет и актуальность слегка потеряли.
Классический ответ — Mikrotik.
Однако, у них LTE с симкартой — только у wifi точек доступа есть. Во всех остальных роутерах usb-разъем.
Так же, роутеры сложно настроить неподготовленному человеку
А что из Микротика вы могли бы посоветовать что бы реализовать подобную схему? Пусть даже с usb разъемом.
Zanuda28, зависит от ваших потребностей и нагрузки на роутер. У Mikrotik есть роутеры как SOHO, так и производительные железки Mid Enterprise класса
Лучше завалиться на сайт производителя и посмотреть все модели. Выбрать подходящий по функциям и цене, там же можно увидеть тесты его производительности. Брать тот, производительность которого устраивает
Дмитрий Шицков, c WiFi лучший (пока и на мой взгляд) hAP ac^2. Без WiFi — hex/hexS и далее в зависимости от нагрузки.
Дмитрий, я правильно понимаю что hAP ac^2 можно настроить таким образом, что бы он автоматически переключался на резервный 4g и в обратную сторону? Насколько сложно его настраивать?