Рекомендую приобрести модем ZTE MF79RU 2G/3G/4G, он проверен мною лично и идеально работает.
Посмотреть совместимые модемы с микротиком можно тут.
Автоматическое переключение на резервный канал
Давайте теперь настроим автоматическое переключение на резервный канал в случае выхода из строя основного. Для начала убедиться, что оба канала настроены и интернет через них работает. В моем случае я буду использовать 2 интерфейса:- ether1 - основной интернет канал
- lte1 - запасной через 4g
/ip route add distance=1 dst-address=77.88.8.8/32 gateway=10.0.0.1 /ip route add distance=1 dst-address=77.88.8.1/32 gateway=192.168.100.1
10.0.0.1 | шлюз usb модема |
192.168.100.1 | шлюз проводного интернета |
ping 77.88.8.1 interface=ether1
ping 77.88.8.8 interface=lte1
Дальше убеждаемся, что для каждого провайдера настроен статический дефолтный маршрут. И обязательно каждый из них помечаем комментарием. Можно пометить их как main и reserver, можно как-то еще. Я лично просто имя интерфейсов писал. Далее они будут использоваться в скрипте. Маршрут для резервного канала сразу отключаем.:local PingCount 5; :local CheckIp1 77.88.8.1; :local CheckIp8 77.88.8.8; :local isp1 [/ping $CheckIp1 count=$PingCount interface="ether1"]; :local isp2 [/ping $CheckIp8 count=$PingCount interface="lte1"]; :local BackGw [/ip route get [find comment="lte1"] disable]; :if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={ /ip route disable [find comment="ether1"]; /ip route enable [find comment="lte1"]; :delay 2 :log warning "Set routes to lte1"; /ip firewall connection remove [ find protocol~"tcp" ]; /ip firewall connection remove [ find protocol~"udp" ]; :delay 2 :log warning "Set routes to lte1"; } :local MainGw [/ip route get [find comment="ether1"] disable]; :if (($isp1=$PingCount) && ($MainGw=true)) do={ /ip route enable [find comment="ether1"]; /ip route disable [find comment="lte1"]; :delay 2 :log warning "Set routes to ether1"; /ip firewall connection remove [ find protocol~"tcp" ]; /ip firewall connection remove [ find protocol~"udp" ]; :delay 2 :log warning "Set routes to ether1"; }
Скрипт в процессе эксплуатации (пару месяцев тестов на паре десятков филиалов) претерпевал различные изменения, пока не получился подходящий для моей ситуации вариант. Немного поясню некоторые моменты.
:local PingCount 5; | Только после 5-ти подряд успешных пингов мы начинаем что-то делать. Тут можно и 3 поставить, но были частенько ложные переключения туда-сюда, так что поменял на 5. |
:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={ | Если пинг по основному каналу не идет вообще, а по второму прошли все пинги и он отключен, то переключаемся на него. |
:delay 2 :log warning "Set routes to lte1"; |
После переключения каналов жду 2 секунды и пишу сообщение в лог. Мне это нужно, так как лог отправляется на удаленный syslog сервер. Если не подождать немного, то часто сообщения не доставлялись. |
/ip firewall connection remove [ find protocol~"tcp" ]; | Удаляю все существующие tcp, а потом и udp подключения. Нужно, чтобы sip телефоны перерегистрировались по новому каналу. Если соединения не сбросить, будут висеть пока время timeout не наступит. Оно может быть и 10 и 30 минут. |
:delay 2 :log warning "Set routes to lte1"; |
Далее еще раз пишу сообщение в лог. Иногда первая запись все равно не попадает на syslog сервер. Я так и не понял до конца почему. Для надежности отправляю еще раз. Мне важно получить информацию о переключении, так как на нее завязан триггер системы мониторинга. Она оповещает о переключениях. |
:if (($isp1=$PingCount) && ($MainGw=true)) do={ | Если по основному каналу прошли все пинги и он отключен, то переключаемся на него. |
Все остальное вроде бы понятно и так, при обычном осмотре скрипта. Пингуем, смотрим, прошли ли пинги. Если нет, переключаемся, если да, то ничего не делаем. Принцип достаточно простой. Его можно встретить в огромном количестве статей в интернете на тему mikrotik failover. Я только добавил сброс соединений и записи в лог файл.
Сохраните этот скрипт и запустите. Очень рекомендую это делать, имея физический доступ к устройству. Если что-то пойдет не так, доступ к микротику потеряете. В завершении всей настройки проверки и переключения на резервный канал в mikrotik добавляем скрипт в планировщик. Для этого идем в System -> Scheduler и добавляем задание на выполнение каждые 30 или 60 секунд, у себя я поставил 1 минуту.
Вот и все. Переключение на резервного провайдера настроено. Если интернет через основной wan интерфейс перестанет работать, произойдет переключение на lte интерфейс.
Еще раз напоминаю, что это мой опыт и мое решение по резервированию канала. Я не претендую на уникальность или best practice. Данный способ мной использовался не раз. Основные удобства следующие:
- Настраивается просто и понятно.
- Умеет сбрасывать все соединения после переключения.
- Пишет информацию в лог для дальнейшего анализа.