Автоматическое переключение интернета на роутере

Время на прочтение
5 мин

Количество просмотров 187K

Написать данный пост меня сподвигла ситуация с отключением одного из каналов Интернета.
В самом же Интернете ответов по данному вопросу много, но не каждый является рабочим.

Что я хотел сделать, если отключается основной канал Интернета:
1. Переключиться на резервный канал (после «появления», разумеется, вернуться на основной);
2. Отправить уведомление по email о факте изменения состояния.

Кому интересно, прошу под кат.

Нам дано:
— Mikrotik RB450G с прошивкой 5.19 версии;
— 2 порта с Интернетом, один из которых для подключения использует PPPoE соединение.

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

image

Составим первый скрипт, который будет активировать резервный канал и назовем его «change-to-reserv» и содержать в себе код:

/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];

(Примечание: IP-адрес 1.1.1.1 выбран как пример и символизирует резервный канал)
То есть, при обнаружении отсутствия пинга на сервер (об этом чуть позже) мы будем выключать маршрут с шлюзом, указывающим на «pppoe-main«.
P.S.: После комментария erazel данная схема была улучшена, а именно раннее скрипт переключался между двумя маршрутами, которые давали сбой, а именно, если запустить с компа, например, команду ping google.ru -t, то при изменении маршрута пинг будет уходить на старый интерфейс, так как трансляция не обновилась. В предложенном же методе изменения только шлюза очистка трансляции не требуется.

Следующей строкой в этом же скрипте укажем:

/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";

где:
/tool e-mail send — отправляем уведомление на email администратора о факте изменения статуса
server=192.168.1.1 — SMTP-сервер. Так как у нас используется свой, указываю его;
port=25 — в версии RouterOS 5.x порт указывается отдельно. В нашем случае он по-умолчанию 25;
user=robot@mysite.ru — логин пользователя для авторизации на SMTP-сервере (если требуется);
password=1PaSsW0rD1 — указываем пароль (если требуется);
tls=no — TLS-шифрование трафика. У нас нет, ставлю «no», а если и будет — «yes»;
to=admin@mysite.ru — на какой email-адрес будет приходить уведомление;
from=«ROBOT<robot@mysite.ru>» — от кого будет приходить уведомление (в моем случае совпадает с логином авторизации. В скобках указывается адрес отправителя, а перед ним имя, отображаемое во входящей почте);
subject=«MikroTik: $[/system clock get date], $[/system clock get time]» — указываем заголовок письма. В данном случае он будет иметь вид «MikroTik: jul/30/2014, 10:52:13» (дата и время отправки сообщения);
body=«Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]»; — соответственно, само тело сообщения, которое будет иметь вид:

Переключение линии на резервный канал
Дата: jul/30/2014
Время: 10:52:13

В итоге, наш скрипт будет иметь вид (RouterOS 5.19):

/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";

И для RouterOS 6.17:

/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";

Как уже писал выше, сохраним его под именем «change-to-reserv» и приступим к написанию второго скрипта:

/ip route set gateway=pppoe-main [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на основной канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";

В отличие от первого скрипта, в теле отправляемого email-сообщения мы укажем «Переключение на основной канал» и включим раннее отключенный маршрут.
Сохраним наш скрипт под именем «change-to-main«.

Так как память у Mikrotik не резиновая, мы оптимизируем наш скрипт для выполнения поставленной задачи.
Для этого нам необходимо использование утилиты Netwatch, которая работает как тригер. То есть, если состояние подключение изменится, то сменится и статус с выполнением нужных нам скриптов.

image

В Netwatch мы добавим новое правило, где укажем хост 8.8.8.8 и имена скриптов во вкладках «Up» — «change-to-main» и «change-to-reserv» во вкладке «Down» соответственно.
Также следует указать период проверки состояния. У нас указана 1 минута.

image

Дальше следует завершающий шаг — проброс маршрута. Если этого не сделать, то скрипт сработает на переключение к резервному каналу и останется в данном положении. Обратный переход будет возможен если резервный канал «упадет».

В общем, добавляем маршрут с указанием следующих данных:
Dst. Address = 8.8.8.8 // Указываем, что будем пинговать DNS-сервер Гугла (для меня не критично, указываю его);
Gateway = pppoe-main // То самое PPPoE-соединение на основной канал
Distance = 1
Остальные параметры оставляем как есть.

image

Всё!

Отныне принцип работы следующий:
Netwatch через основной канал будет проверять пинг до DNS-сервера Google. Как только пинг пропадет, выполнится скрипт «change-to-reserv«, указанный на вкладке «Down«. Данный скрипт отключит основной маршрут (PPPoE) и все пакеты будут идти по резервному каналу. Как только пинг по основному каналу возобновится, скрипт вновь активирует маршрут основного канала (параметр Distance которого, разумеется, «1«, а резервного — «2«). Вместе с этим будут приходить уведомления на email-адрес о фактах изменения состояния.

Profit!

ВНИМАНИЕ!!! Для работы скриптов под управлением RouterOS 6.17 необходимо внести изменения в скрипт отправки email-адреса, а именно убрать параметр «tls=«.
То есть, наш код (например, для переключения на резервный канал) будет иметь вид:

/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";

UPDATED: Изменены маршруты в скриптах
UPDATED 2: Чтобы во входящей почте не отображался email-адрес «robot@mysite.ru» как отправителя, был изменен параметр «from» (исправления с комментариями внесены в код выше)

Инструкция по настройке 2-ух провайдеров на роутере MikroTik. В описании буду рассмотрены два распространённых типа работы двух провайдеров: резервирование и балансировка.

Резервирование(автопереключение) – при обрыве провайдера-1, весь интернет трафик переключается на провайдера-2;

Балансировка – тип настройки, когда две линии интернета работают одновременно. Распределение между провайдером-1 и провайдером-2 может быть в ручном или автоматическом режиме.

Данный набор настроек будет считаться контрольной точкой для дальнейших режимов работы роутера MikroTik, а именно резервирования(автопереключения) и балансировки.

В исходной настройке роутера MikroTik произведена базовая настройка и как минимум один интернет провайдер уже работает.

Начать нужно с того, что требуется физическое подключение 2-ого провайдера. Для этого нужно подготовить свободный порт и исключить его из Bridge(LAN).

Освободить порт для 2-ого провайдера

Настройка находится Bridge→Ports

Настройка 2 провайдеров в MikroTik, освободить порт

На данном примере, был удалён ether2 со списка портов, принадлежащих к Bridge-LAN.

Настроить 2-ого провайдера

Добавление 2-ого провайдера в список WAN

Настройка находится Interfaces→Interface List

Настройка 2 провайдеров в MikroTik, добавть провайдера в список WAN

Список WAN должен включать интерфейсы двух провайдеров для того, чтобы правило Masquerade в IP→Firewall→NAT работало сразу для двух провайдеров

Настроить masquerade для WireGuard клиента

Отключить добавление DNS серверов для провайдера-1

Эти действия приведут к тому, что роутер MikroTik не будет использовать DNS сервера текущих интернет провайдеров. К примеру ситуация переключения на резервную линию может спровоцировать отсутствие DNS ответа, т.к. клиент или сам роутер осуществляет DNS запрос через основного провайдера. А он в то время уже перестал работать. Поэтому будут установлены общедоступные DNS сервера, который будут работать с двух провайдеров.

Определить общедоступные DNS сервера

Настройка находится IP→DNS

Настройка 2 провайдеров в MikroTik, без динамических DNS

Отсутствие записей DNS серверов в разделе Dynamic Servers указывает на то, что роутер MikroTik не использует автоматические DNS сервера, которые назначаются в автоматическом режиме.

В Servers стоит указать общедоступные DNS сервера типа Cloudflare DNS и удалить любые другие DNS сервера.

Отключить автоматическое добавление маршрутов

Т.к. все маршруты будут добавлены в ручном режиме, следует отключить все динамические маршруты для основного провайдера. Такие маршруты помечены буквой D(Dynamic) в таблице маршрутизации:

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, пример диначеского маршрута

Добавление маршрутов для двух провайдеров

Для переключение между провайдерами, будет использоваться скрипт, который будет находить маршрут с комментарием ISP-1 или ISP-2 и выключать или включать его в зависимости от статуса работы интернета. Ниже будет описан метод, как это можно сделать для типов подключения: статический IPdhcp клиент, PPPoE подключение. Этим методом нужно воспользоваться для назначения комментария двух провайдеров.

Кроме обозначенных комментариев нужно определить distance = 2.

Mangle маркировка ответов для двух провайдеров

Правила маркировки маршрутов нужно определять только для белых(постоянных) IP адресов! Этот набор правил будет гарантировать то, что если пришёл input запрос на порт второго(или первого) провайдера, через этот же порт будет отправлен ответ. При отсутствии этих правил, доступ к роутеру по внешним IP может сопровождаться непредсказуемой работой.

Маркировка будет состоять из двух каскадных правил: маркировки соединения и маркировки маршрута

Настройка находится IP→Firewall→Mangle

Настройка 2 провайдеров в MikroTik, маркировка входящего соединения

Настройка 2 провайдеров в MikroTik, маркировка входящего соединения ISP-1

Настройка 2 провайдеров в MikroTik, маркировка исходящего маршрута

Настройка 2 провайдеров в MikroTik, маркировка исходящего маршрута ISP-1

/ip firewall mangle
add action=mark-connection chain=input in-interface=pppoe-out1 \
new-connection-mark=From-ISP-1
add action=mark-routing chain=output connection-mark=From-ISP-1 \
new-routing-mark=To-ISP-1
add action=mark-connection chain=input in-interface=ether2 \
new-connection-mark=From-ISP-2
add action=mark-routing chain=output connection-mark=From-ISP-2 \
new-routing-mark=To-ISP-2

Статическая маршрутизация для маркированных маршрутов

Кроме стандартных правил маршрутизации, нужно добавить маршруты для промаркированных ответов с раздела Mangle.

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, добавить статический маршрут для Mangle ISP-1

Настройка 2 провайдеров в MikroTik, добавить статический маршрут для Mangle ISP-2

И все текущие правила статической маршрутизации будут иметь вид:

Настройка 2 провайдеров в MikroTik, общий вид таблицы маршрутизации

/ip route
add distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1
add distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2
add comment=ISP-1 distance=1 gateway=pppoe-out1
add comment=ISP-2 distance=2 gateway=109.87.159.126

Настройка двух провайдеров MikroTik, режим резервирования(автопереключение)

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

Резервирование(автопереключение) это самый распространённый метод работы двух и более интернет провайдеров на роутере MikroTik.

Описание переключение на резервную линию условно такое: роутер MikroTik будет отправлять ICMP(ping) запросы на 8.8.8.8(Google DNS) и в случае отсутствия ответа или большой задержки, интернет будет переключаться с основной(провайдер-1) линии на резервную(провайдер-2).

Добавить статический маршрут для Google DNS

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, добавить статический маршрут для Google DNS

/ip route
add comment=Netwatch distance=1 dst-address=8.8.8.8/32 gateway=pppoe-out1

Запретить ICMP запросы через провайдера-2

Настройка находится IP→Firewall

Настройка 2 провайдеров в MikroTik, запретить ICMP запросы через провайдера-2

/ip firewall filter
add action=drop chain=output comment=Netwatch dst-address=8.8.8.8 \
out-interface=ether2 protocol=icmp

Этим правилом будет гарантирована диагностика статуса интернет канала только через провайдера-1. При попытке отправить аналогичный запрос через провайдера-2, Firewall роутера MikroTik будет это блокировать.

Добавить правило Netwatch для переключения

Настройка находится Tools→Netwatch

Настройка 2 провайдеров в MikroTik, добавить правило Netwatch

Настройка 2 провайдеров в MikroTik, скрипт при статусе интернета UP

Настройка 2 провайдеров в MikroTik, скрипт при статусе интернета DOWN

/tool netwatch
add down-script="/ip route disable [find comment=\"ISP-1\"]\r\
\n/ip route enable [find comment=\"ISP-2\"]\r\
\n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\
irewall connection remove \$i }\r\
\n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\
irewall connection remove \$i }\r\
\nlog warning (\"ISP-1 IS DOWN\")" host=8.8.8.8 up-script="/ip route disab\
le [find comment=\"ISP-2\"]\r\
\n/ip route enable [find comment=\"ISP-1\"]\r\
\n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\
irewall connection remove \$i }\r\
\n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\
irewall connection remove \$i }\r\
\nlog warning (\"ISP-1 IS UP\")"
  • Host – узел, на который будут отправляться ICMP(ping) запросы;
  • Interval – время, в течении которого будет производиться диагностика для смены статуса;
  • Timeout – задержка пакета, которая будет восприниматься как отсутствие связи;
  • Status – текущий статус узла;
  • Закладка Up – скрипт, который будет выполнен, если провайдер-1 восстановит связь, после её обрыва;
  • Закладка Down – скрипт, который будет выполнен, если связь с провайдером-1 будет прервана.

Представленными скриптами с помощью утилиты Netwatch будет происходить переключение между провайдерами. Все соединения, которые были установлены через провайлера-1 будут удалены. Это позволит гарантированно переключиться на провайдера-2.

Настройка 2 провайдеров в MikroTik, режим балансировки(одновременная работа)

Существует два метода распределения нагрузки между 2-мя провайдерами в MikroTik:

Ручная балансировка. Все узлы делятся в ручном режиме на 2-ве условные группы и каждая из групп направляется к выделенному ей провайдеру;

Автоматическая балансировка. Узлы роутера MikroTik будут поделены на группы с помощью внутренних инструментов RouterOS.

Настройка нескольких провайдеров на MikroTik, схема сети

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

Когда работают оба провайдеры, нагрузка распределяется согласно ручному распределению в Address list.

ISP-1=Down & ISP-2=Up  соединения To-ISP-1 очищаются и начинают работать через ISP-2. При этом соединения To-ISP-2 остаются не тронутыми. При восстановлении связи с ISP-1, соединения To-ISP-1 также очищаются и трафик вместо ISP-2 начинает проходить через ISP-1.

ISP-1=Up & ISP-2=Down → соединения To-ISP-2 очищаются и начинают работать через ISP-1. При этом соединения To-ISP-1 остаются не тронутыми. При восстановлении связи с ISP-2, соединения To-ISP-2 также очищаются и трафик вместо ISP-1 начинает проходить через ISP-2.

Ручная настройка балансировки 2 провайдеров в MikroTik

Как видно из названия, условную подсеть роутера MikroTik будет поделено на две группы: To-ISP-1 и To-ISP-2.

  • pppoe-out1 – это провайдер-1;
  • ether2 – это провайдер-2.

Настройка находится IP→Firewall→Address List

Настройка 2 провайдеров в MikroTik, разбиение узлов на группы для балансировки

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

Mangle маркировка соединений для балансировки 2 провайдеров

Настройка находится IP→Firewall→Mangle

Настройка 2 провайдеров в MikroTik, prerouting mark connection

Настройка 2 провайдеров в MikroTik, address list для маркировки

Настройка 2 провайдеров в MikroTik, исключить локальный трафик

Настройка 2 провайдеров в MikroTik, маркировка соединений

Mangle маркировка маршрута для балансировки двух провайдеров

Настройка находится IP→Firewall→Mangle

Настройка 2 провайдеров в MikroTik, prerouting для mark connection

Настройка 2 провайдеров в MikroTik, маркировка маршрута для address list

Настройка 2 провайдеров в MikroTik, маркировка маршрута

Аналогичные действия по маркировке соединений и маршрута нужно выполнить для Address List = To-ISP-2.

Общий вид раздела Mangle

Настройка 2 провайдеров в MikroTik, общий вид Mangle

/ip firewall address-list
add address=192.168.2.2-192.168.2.125 list=To-ISP-1
add address=192.168.2.126-192.168.2.254 list=To-ISP-2

/ip firewall mangle
add action=mark-connection chain=prerouting disabled=no dst-address-type=\
!local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1
add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \
disabled=no new-routing-mark=To-ISP-1 src-address-list=To-ISP-1
add action=mark-connection chain=prerouting disabled=no dst-address-type=\
!local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2
add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \
disabled=no new-routing-mark=To-ISP-2 src-address-list=To-ISP-2

Для каждой группы узлов To-ISP-1 и To-ISP-2 будет создано по два маршрута, чтобы обеспечить плавное переключение согласно первоначальным условиям по балансировке 2 провайдеров.

Общий вид таблицы маршрутизации при балансировке 2 провайдеров

Настройка находится IP→Route

Настройка 2 провайдеров в MikroTik, общий вид таблицы маршрутизациия при балансировке

/ip route
add comment=Group-1-1 distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1
add comment=Group-2-1 disabled=yes distance=2 gateway=109.87.159.126 \
routing-mark=To-ISP-1
add comment=Group-2-2 distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2
add comment=Group-1-2 disabled=yes distance=2 gateway=pppoe-out1 \
routing-mark=To-ISP-2
add comment=Netwatch-2 distance=1 dst-address=8.8.4.4/32 gateway=109.87.159.126
add comment=Netwatch-1 distance=1 dst-address=8.8.8.8/32 gateway=\
pppoe-out1

Контроль ICMP запросов через нужный интерфейс

Эти правила обеспечат контроль статуса интернет соединения для каждого из провайдера. Диагностика статуса интернета будет осуществляться только через те интерфейсы, которые обозначены в таблице маршрутизации с комментариями Netwatch-1 и Netwatch-2.

Настройка находится IP→Firewall→Filter Rules

Настройка 2 провайдеров в MikroTik, контроль icmp запросов для балансировке

/ip firewall filter
add action=drop chain=output comment=Netwatch-1 dst-address=8.8.8.8 \
out-interface=ether2 protocol=icmp
add action=drop chain=output comment=Netwatch-2 dst-address=8.8.4.4 \
out-interface=!ether2 protocol=icmp

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

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

Настройка находится Tools→Netwatch

Настройка 2 провайдеров в MikroTik, netwatch для балансировки

/tool netwatch
add down-script="/ip route disable [find comment=\"ISP-2\"]\r\
\n/ip route disable [find comment=\"Group-2-2\"]\r\
\n/ip route enable [find comment=\"Group-1-2\"]\r\
\nlog warning (\"ISP-2 IS DOWN\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\
onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.4.4 \
up-script="/ip route enable [find comment=\"ISP-2\"]\r\
\n/ip route enable [find comment=\"Group-2-2\"]\r\
\n/ip route disable [find comment=\"Group-1-2\"]\r\
\nlog warning (\"ISP-2 IS UP\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\
onnection\"] do={ /ip firewall connection remove \$i }"
add down-script="/ip route disable [find comment=\"ISP-1\"]\r\
\n/ip route disable [find comment=\"Group-1-1\"]\r\
\n/ip route enable [find comment=\"Group-2-1\"]\r\
\nlog warning (\"ISP-1 IS DOWN\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\
onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.8.8 \
up-script="/ip route enable [find comment=\"ISP-1\"]\r\
\n/ip route enable [find comment=\"Group-1-1\"]\r\
\n/ip route disable [find comment=\"Group-2-1\"]\r\
\nlog warning (\"ISP-1 IS UP\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\
onnection\"] do={ /ip firewall connection remove \$i }"

Балансировка и резервирование в MikroTik используя настройки NTH раздела Mangle

Можно также применить схему, в которой каждое соединение будет промаркировано по принципу:

четный-пакет = провайдер-1

нечетный-пакет = провайдер-2

Настройка находится IP→Firewall→Mangle

/ip firewall mangle
add action=mark-connection chain=prerouting disabled=yes dst-address-type=\
!local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1 nth=2,1
add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \
disabled=yes new-routing-mark=To-ISP-1 src-address-list=To-ISP-1
add action=mark-connection chain=prerouting disabled=yes dst-address-type=\
!local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2 nth=2,2
add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \
disabled=yes new-routing-mark=To-ISP-2 src-address-list=To-ISP-2

Балансировка между двумя провайдерами будет производиться в соотношении 50:50, это определяется параметрами nth=2,1 и nth=2,2.

Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik “.

Настройка балансировки двух провайдеров Per Connection Classifier (PCC) раздела Mangle

Per Connection Classifier (PCC) позволят разделить трафик на равные потоки с возможностью держать пакеты с определенным набором параметров в одном потоке (определяется в наборе параметров из src-addresssrc-portdst-addressdst-port)

Настройка находится IP→Firewall→Mangle

/ip firewall mangle
add action=mark-connection chain=prerouting dst-address=\
!192.168.2.0/24 new-connection-mark=To-ISP-1-Connection \
per-connection-classifier=both-addresses-and-ports:2/0 src-address=\
192.168.2.0/24
add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \
new-routing-mark=To-ISP-1 src-address=192.168.2.0/24
add action=mark-connection chain=prerouting dst-address=\
!192.168.2.0/24 new-connection-mark=To-ISP-2-Connection \
per-connection-classifier=both-addresses-and-ports:2/1 src-address=\
192.168.2.0/24
add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \
new-routing-mark=To-ISP-2 src-address=192.168.2.0/24

Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik “.

Провайдер меняет шлюз в DHCP клиенте, не работает переключение или балансировка

DHCP клиент это один из самых распространённых типов настроек WAN интерфейса. Все настройки проходят в автоматическом режиме и не требуют ни каких дополнительных усилий. Однако в варианте с балансировкой двух провайдеров, используемая настройка требует явного определения шлюза(Gateway) в таблице маршрутизации. А если IP адрес серый(динамический), то правила с балансировкой перестанут работать при его изменении.

Для того, чтобы в правиле статической маршрутизации указывался текущий шлюз(Gateway) провайдера, в свойствах DHCP клиента следует укатать скрипт

Настройка находится IP→DHCP client

Провайдер меняет шлюз в DHCP клиенте, не работает переключение или балансировка

{
:local rmark "ISP-2"
:local count [/ip route print count-only where comment="ISP-2"]
:if ($bound=1) do={
:if ($count = 0) do={
/ip route add gateway=$"gateway-address" comment="ISP-2" distance=2
} else={
:if ($count = 1) do={
:local test [/ip route find where comment="ISP-2"]
:if ([/ip route get $test gateway] != $"gateway-address") do={
/ip route set $test gateway=$"gateway-address"
}
} else={
:error "Multiple routes found"
}
}
} else={
/ip route remove [find comment="ISP-2"]
}
}

И аналогичный пример, только для первого провайдера с добавлением маршрута к 8.8.4.4.

{
:local rmark "ISP-1"
:local count [/ip route print count-only where comment="ISP-1"]
:if ($bound=1) do={
:if ($count = 0) do={
/ip route add gateway=$"gateway-address" comment="ISP-1" distance=1
/ip route add gateway=$"gateway-address" comment="Netwatch" distance=1 dst-address=8.8.4.4
} else={
:if ($count = 1) do={
:local test [/ip route find where comment="ISP-1"]
:if ([/ip route get $test gateway] != $"gateway-address") do={
/ip route set $test gateway=$"gateway-address"
}
} else={
:error "Multiple routes found"
}
}
} else={
/ip route remove [find comment="ISP-1"]
/ip route remove [find comment="Netwatch"]
}
}

Скрипт может быть дополнен добавлениями(и удалениями) маршрутов для Routing-mark и Netwatch.

Одновременный проброс с двух провайдеров в MikroTik настройка Mangle

Входящая задача: сделать проброс портов таким образом, чтобы сервер отвечал с того провайдера, с которого пришёл запрос. На практике это может быть Web сервер(443\https), у которого объявлены две DNS записи с двумя внешними IP роутера MikroTik.

Настройка находится IP→Firewall→Mangle

/ip firewall mangle 
add chain=forward action=mark-connection new-connection-mark=From-ISP-1 in-interface=pppoe-out1
add chain=prerouting action=mark-routing new-routing-mark=To-ISP-1 passthrough=no connection-mark=From-ISP-1 in-interface=bridge
add chain=forward action=mark-connection new-connection-mark=From-ISP-2 in-interface=ether2
add chain=prerouting action=mark-routing new-routing-mark=To-ISP-2 passthrough=no connection-mark=From-ISP-2 in-interface=bridge

где

  • pppoe-out1 – это провайдер-1;
  • ether2 – это провайдер-2;
  • bridge – локальный bridge интерфейс.

В качестве пододпытного используем HEX-PoE и отличный 4G-модем Huawei E3372H. Он прекрасно определяется в Mikrotik-девайсах, и создает отдельный lte-интерфейс.

Для начала — воткнули модем в устройство. Убедились, что

  • интерфейс lte1 (или как он будет у вас называться) — появился в cписке интерфейсов. Запомните имя этого интерфейса — оно пригодится в дальнейшем
  • на интерфейсе появился адрес, полученный по DHCP от провайдера
  • в списке маршрутов появился дополнительный маршрут 0.0.0.0/0 указывающий на шлюз LTE-провайдера.

Далее

  • Добавляем правило для NAT (чтобы пакеты и через 4G-модем тоже натились). Здесь lte1 — это название(!) интерфейса 4G-модема, если у вас он под другому называется — поправьте под себя.
 /ip firewall nat add action=masquerade chain=srcnat out-interface=lte1
  • Добавляем маршрут, чтобы пакеты на «хост мониторинга» 8.8.4.4 всегда шли через основного провайдера (здесь х.х.х.х — это шлюз вашего основного провайдера. В комментарии маршрута есть сочетание ISP, это важно — по нему мы будем находить этот маршрут и включать-выключать его.
/ip route add comment="always route monitoring host via ISP1" disabled=no dst-address=8.8.4.4/32 gateway=x.x.x.x
  • Создаем blackhole маршрут для «хоста мониторинга» с низким приоритетом (чтобы избавиться от «проблемы неработающего маршрута, при отсутствии линка на WAN-интерфейсе»)
/ip route add comment="blackhole for monitoring host" disabled=no dst-address=8.8.4.4/32 distance=200 type=blackhole
  • Создаем задание Netwatch. Идея такая: каждые 30 секунд проверяется «хост мониторинга» по адресу 8.8.4.4, если он недоступен (статус «down»), то отключаем маршрут по умолчанию (с комментом isp) и включаем интерфейс 4G-модема. Модем работает так, что сразу подключается к мобильной сети и автоматом получает от провайдера адрес, DNS и самое главное — новый маршрут по умолчанию. При этом проверка 8.8.4.4 у нас по прежнему будет продолжаться через основного провайдера(из-за специального маршрута, который мы завели чуть ранее). В случае получения ответов от 8.8.4.4 (Netwatch поменяет статус на «up») интерфейс 4G-модема отключаем, тем самым отключая свой маршрут, и активируем маршрут через основного провайдера.
  • И да — при переключении делаются записи в лог.
/tool netwatch
add disabled=no down-script="/interface enable [find name=\"lte1\"];\r\
\n:log warning \"Switch to 4G modem\";\r\
\n/ip route disable [find comment=\"isp\"];\r\
\n" host=8.8.4.4 interval=30s timeout=500ms up-script="/interface disable \
[find name=\"lte1\"];\r\
\n:log warning \"Switch to main internet\";\r\
\n/ip route enable [find comment=\"ISP\"];\r\
\n"

Ах да, и если у вас очень суровые правила Firewall, то не забудьте в нем тоже прописать правило, разрешающее форвард трафика в Lte1 интерфейс

Проверяйте работу переключения — находясь физически рядом с роутером… «во избежание», так сказать.

И не забывайте про залипание «connection» при переключении маршрута по умолчанию. Если это по каким то причинам важно для вас — в скрипт netwatch можно добавить строку очищающую зависшие сonnection из connection table при переключении каналов.

Инструкция по настройке 2-ух провайдеров на роутере MikroTik. В описании буду рассмотрены два распространённых типа работы двух провайдеров: резервирование и балансировка.

Резервирование(автопереключение) – при обрыве провайдера-1, весь интернет трафик переключается на провайдера-2;

Балансировка – тип настройки, когда две линии интернета работают одновременно. Распределение между провайдером-1 и провайдером-2 может быть в ручном или автоматическом режиме.

Содержание

  1. Подготовка работы с 2-мя провайдерами
  2. Режим резервирования
  3. Pежим балансировки
    • Ручная балансировка
    • Автоматическая балансировка NTH
    • Балансировка PCC
  4. Провайдер меняет шлюз в DHCP клиенте
  5. Одновременный проброс с двух провайдеров
  6. Задать вопрос по настройке 2-ух провайдеров

Настройка двух провайдеров в MikroTik, предварительная подготовка

Данный набор настроек будет считаться контрольной точкой для дальнейших режимов работы роутера MikroTik, а именно резервирования(автопереключения) и балансировки.

В исходной настройке роутера MikroTik произведена базовая настройка и как минимум один интернет провайдер уже работает.

Начать нужно с того, что требуется физическое подключение 2-ого провайдера. Для этого нужно подготовить свободный порт и исключить его из Bridge(LAN).

Освободить порт для 2-ого провайдера

Настройка находится Bridge→Ports

Настройка 2 провайдеров в MikroTik, освободить порт

На данном примере, был удалён ether2 со списка портов, принадлежащих к Bridge-LAN.

Настроить 2-ого провайдера

  • DHCP client
  • Статический IP
  • PPPoE client

DHCP client

Настройка находится IP→DHCP client

Настройка 2 провайдеров в MikroTik, DHCP  client

Add Default Route = no – статическая маршрутизация для 2-ого провайдера будет доставлена вручную.

Статический IP

Настройка находится IP→Addresses

Настройка 2 провайдеров в MikroTik, добавить сатический IP

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, добавить комметарий для static IP

PPPoE client

Настройка находится PPP→Interface

Настройка 2 провайдеров в MikroTik, PPPoE client

Настройка 2 провайдеров в MikroTik, PPPoE клиент

Add Default Route = no – статическая маршрутизация для 2-ого провайдера будет доставлена вручную.

Добавление 2-ого провайдера в список WAN

Настройка находится Interfaces→Interface List

Настройка 2 провайдеров в MikroTik, добавть провайдера в список WAN

Список WAN должен включать интерфейсы двух провайдеров для того, чтобы правило Masquerade в IP→Firewall→NAT работало сразу для двух провайдеров

Настроить masquerade для WireGuard клиента

Отключить добавление DNS серверов для провайдера-1

Эти действия приведут к тому, что роутер MikroTik не будет использовать DNS сервера текущих интернет провайдеров. К примеру ситуация переключения на резервную линию может спровоцировать отсутствие DNS ответа, т.к. клиент или сам роутер осуществляет DNS запрос через основного провайдера. А он в то время уже перестал работать. Поэтому будут установлены общедоступные DNS сервера, который будут работать с двух провайдеров.

  • DHCP client
  • PPPoE client

DHCP client

Настройка находится IP→DHCP client

Настройка 2 провайдеров в MikroTik, отключить DNS для dhcp client

PPPoE client

Настройка находится PPP→Interface

Настройка 2 провайдеров в MikroTik, отключить DNS для pppoe client

Определить общедоступные DNS сервера

Настройка находится IP→DNS

Настройка 2 провайдеров в MikroTik, без динамических DNS

Отсутствие записей DNS серверов в разделе Dynamic Servers указывает на то, что роутер MikroTik не использует автоматические DNS сервера, которые назначаются в автоматическом режиме.

В Servers стоит указать общедоступные DNS сервера типа Cloudflare DNS и удалить любые другие DNS сервера.

Отключить автоматическое добавление маршрутов

Т.к. все маршруты будут добавлены в ручном режиме, следует отключить все динамические маршруты для основного провайдера. Такие маршруты помечены буквой D(Dynamic) в таблице маршрутизации:

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, пример диначеского маршрута

  • DHCP client
  • PPPoE client

DHCP client

Настройка находится IP→DHCP client

Настройка 2 провайдеров в MikroTik, отключить маршрут по умолчанию для dhcp client

PPPoE client

Настройка находится PPP→Interface

Настройка 2 провайдеров в MikroTik, отключить маршрут по умолчанию для pppoe client

Добавление маршрутов для двух провайдеров

Для переключение между провайдерами, будет использоваться скрипт, который будет находить маршрут с комментарием ISP-1 или ISP-2 и выключать или включать его в зависимости от статуса работы интернета. Ниже будет описан метод, как это можно сделать для типов подключения: статический IP, dhcp клиент, PPPoE подключение. Этим методом нужно воспользоваться для назначения комментария двух провайдеров.

Кроме обозначенных комментариев нужно определить distance = 2.

  • Статический IP или DHCP клиент
  • PPPoE client

Статический IP или DHCP клиент

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, добавить комметарий для static IP

В случае с DHCP client значение Gateway можно взять с раздела Status самого DCHP клиента

Настройка находится IP→DCHP Client

Настройка 2 провайдеров в MikroTik, скопировать gateway для dchp client

PPPoE client

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, добавить комметарий для pppoe

Mangle маркировка ответов для двух провайдеров

Правила маркировки маршрутов нужно определять только для белых(постоянных) IP адресов! Этот набор правил будет гарантировать то, что если пришёл input запрос на порт второго(или первого) провайдера, через этот же порт будет отправлен ответ. При отсутствии этих правил, доступ к роутеру по внешним IP может сопровождаться непредсказуемой работой.

Маркировка будет состоять из двух каскадных правил: маркировки соединения и маркировки маршрута

Настройка находится IP→Firewall→Mangle

Настройка 2 провайдеров в MikroTik, маркировка входящего соединения

Настройка 2 провайдеров в MikroTik, маркировка входящего соединения ISP-1

Настройка 2 провайдеров в MikroTik, маркировка исходящего маршрута

Настройка 2 провайдеров в MikroTik, маркировка исходящего маршрута ISP-1

/ip firewall mangle
add action=mark-connection chain=input in-interface=pppoe-out1 \
new-connection-mark=From-ISP-1
add action=mark-routing chain=output connection-mark=From-ISP-1 \
new-routing-mark=To-ISP-1
add action=mark-connection chain=input in-interface=ether2 \
new-connection-mark=From-ISP-2
add action=mark-routing chain=output connection-mark=From-ISP-2 \
new-routing-mark=To-ISP-2

Статическая маршрутизация для маркированных маршрутов

Кроме стандартных правил маршрутизации, нужно добавить маршруты для промаркированных ответов с раздела Mangle.

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, добавить статический маршрут для Mangle ISP-1

Настройка 2 провайдеров в MikroTik, добавить статический маршрут для Mangle ISP-2

И все текущие правила статической маршрутизации будут иметь вид:

Настройка 2 провайдеров в MikroTik, общий вид таблицы маршрутизации

/ip route
add distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1
add distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2
add comment=ISP-1 distance=1 gateway=pppoe-out1
add comment=ISP-2 distance=2 gateway=109.87.159.126

Настройка двух провайдеров MikroTik, режим резервирования(автопереключение)

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

Резервирование(автопереключение) это самый распространённый метод работы двух и более интернет провайдеров на роутере MikroTik.

За исходную позицию будут приняты настройки, описанные в разделе “Подготовка для работы с двумя провайдерами в MikroTik  

Описание переключение на резервную линию условно такое: роутер MikroTik будет отправлять ICMP(ping) запросы на 8.8.8.8(Google DNS) и в случае отсутствия ответа или большой задержки, интернет будет переключаться с основной(провайдер-1) линии на резервную(провайдер-2).

Добавить статический маршрут для Google DNS

Настройка находится IP→Routes

Настройка 2 провайдеров в MikroTik, добавить статический маршрут для Google DNS

/ip route
add comment=Netwatch distance=1 dst-address=8.8.8.8/32 gateway=pppoe-out1

Запретить ICMP запросы через провайдера-2

Настройка находится IP→Firewall

Настройка 2 провайдеров в MikroTik, запретить ICMP запросы через провайдера-2

/ip firewall filter
add action=drop chain=output comment=Netwatch dst-address=8.8.8.8 \
out-interface=ether2 protocol=icmp

Этим правилом будет гарантирована диагностика статуса интернет канала только через провайдера-1. При попытке отправить аналогичный запрос через провайдера-2, Firewall роутера MikroTik будет это блокировать.

Добавить правило Netwatch для переключения

Настройка находится Tools→Netwatch

Настройка 2 провайдеров в MikroTik, добавить правило Netwatch

Настройка 2 провайдеров в MikroTik, скрипт при статусе интернета UP

Настройка 2 провайдеров в MikroTik, скрипт при статусе интернета DOWN

/tool netwatch
add down-script="/ip route disable [find comment=\"ISP-1\"]\r\
\n/ip route enable [find comment=\"ISP-2\"]\r\
\n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\
irewall connection remove \$i }\r\
\n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\
irewall connection remove \$i }\r\
\nlog warning (\"ISP-1 IS DOWN\")" host=8.8.8.8 up-script="/ip route disab\
le [find comment=\"ISP-2\"]\r\
\n/ip route enable [find comment=\"ISP-1\"]\r\
\n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\
irewall connection remove \$i }\r\
\n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\
irewall connection remove \$i }\r\
\nlog warning (\"ISP-1 IS UP\")"
  • Host – узел, на который будут отправляться ICMP(ping) запросы;
  • Interval – время, в течении которого будет производиться диагностика для смены статуса;
  • Timeout – задержка пакета, которая будет восприниматься как отсутствие связи;
  • Status – текущий статус узла;
  • Закладка Up – скрипт, который будет выполнен, если провайдер-1 восстановит связь, после её обрыва;
  • Закладка Down – скрипт, который будет выполнен, если связь с провайдером-1 будет прервана.

Представленными скриптами с помощью утилиты Netwatch будет происходить переключение между провайдерами. Все соединения, которые были установлены через провайлера-1 будут удалены. Это позволит гарантированно переключиться на провайдера-2.

Настройка 2 провайдеров в MikroTik, режим балансировки(одновременная работа)

Существует два метода распределения нагрузки между 2-мя провайдерами в MikroTik:

Ручная балансировка. Все узлы делятся в ручном режиме на 2-ве условные группы и каждая из групп направляется к выделенному ей провайдеру;

Автоматическая балансировка. Узлы роутера MikroTik будут поделены на группы с помощью внутренних инструментов RouterOS.

Настройка нескольких провайдеров на MikroTik, схема сети

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

Когда работают оба провайдеры, нагрузка распределяется согласно ручному распределению в Address list.

ISP-1=Down & ISP-2=Up соединения To-ISP-1 очищаются и начинают работать через ISP-2. При этом соединения To-ISP-2 остаются не тронутыми. При восстановлении связи с ISP-1, соединения To-ISP-1 также очищаются и трафик вместо ISP-2 начинает проходить через ISP-1.

ISP-1=Up & ISP-2=Down соединения To-ISP-2 очищаются и начинают работать через ISP-1. При этом соединения To-ISP-1 остаются не тронутыми. При восстановлении связи с ISP-2, соединения To-ISP-2 также очищаются и трафик вместо ISP-1 начинает проходить через ISP-2.

Ручная настройка балансировки 2 провайдеров в MikroTik

Как видно из названия, условную подсеть роутера MikroTik будет поделено на две группы: To-ISP-1 и To-ISP-2.

  • pppoe-out1 – это провайдер-1;
  • ether2 – это провайдер-2.

Настройка находится IP→Firewall→Address List

Настройка 2 провайдеров в MikroTik, разбиение узлов на группы для балансировки

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

Mangle маркировка соединений для балансировки 2 провайдеров

Настройка находится IP→Firewall→Mangle

Настройка 2 провайдеров в MikroTik, prerouting mark connection

Настройка 2 провайдеров в MikroTik, address list для маркировки

Настройка 2 провайдеров в MikroTik, исключить локальный трафик

Настройка 2 провайдеров в MikroTik, маркировка соединений

Mangle маркировка маршрута для балансировки двух провайдеров

Настройка находится IP→Firewall→Mangle

Настройка 2 провайдеров в MikroTik, prerouting для mark connection

Настройка 2 провайдеров в MikroTik, маркировка маршрута для address list

Настройка 2 провайдеров в MikroTik, маркировка маршрута

Аналогичные действия по маркировке соединений и маршрута нужно выполнить для Address List = To-ISP-2.

Общий вид раздела Mangle

Настройка 2 провайдеров в MikroTik, общий вид Mangle

/ip firewall address-list
add address=192.168.2.2-192.168.2.125 list=To-ISP-1
add address=192.168.2.126-192.168.2.254 list=To-ISP-2

/ip firewall mangle
add action=mark-connection chain=prerouting disabled=no dst-address-type=\
!local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1
add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \
disabled=no new-routing-mark=To-ISP-1 src-address-list=To-ISP-1
add action=mark-connection chain=prerouting disabled=no dst-address-type=\
!local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2
add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \
disabled=no new-routing-mark=To-ISP-2 src-address-list=To-ISP-2

Для каждой группы узлов To-ISP-1 и To-ISP-2 будет создано по два маршрута, чтобы обеспечить плавное переключение согласно первоначальным условиям по балансировке 2 провайдеров.

Общий вид таблицы маршрутизации при балансировке 2 провайдеров

Настройка находится IP→Route

Настройка 2 провайдеров в MikroTik, общий вид таблицы маршрутизациия при балансировке

/ip route
add comment=Group-1-1 distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1
add comment=Group-2-1 disabled=yes distance=2 gateway=109.87.159.126 \
routing-mark=To-ISP-1
add comment=Group-2-2 distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2
add comment=Group-1-2 disabled=yes distance=2 gateway=pppoe-out1 \
routing-mark=To-ISP-2
add comment=Netwatch-2 distance=1 dst-address=8.8.4.4/32 gateway=109.87.159.126
add comment=Netwatch-1 distance=1 dst-address=8.8.8.8/32 gateway=\
pppoe-out1

Контроль ICMP запросов через нужный интерфейс

Эти правила обеспечат контроль статуса интернет соединения для каждого из провайдера. Диагностика статуса интернета будет осуществляться только через те интерфейсы, которые обозначены в таблице маршрутизации с комментариями Netwatch-1 и Netwatch-2.

Настройка находится IP→Firewall→Filter Rules

Настройка 2 провайдеров в MikroTik, контроль icmp запросов для балансировке

/ip firewall filter
add action=drop chain=output comment=Netwatch-1 dst-address=8.8.8.8 \
out-interface=ether2 protocol=icmp
add action=drop chain=output comment=Netwatch-2 dst-address=8.8.4.4 \
out-interface=!ether2 protocol=icmp

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

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

Настройка находится Tools→Netwatch

Настройка 2 провайдеров в MikroTik, netwatch для балансировки

/tool netwatch
add down-script="/ip route disable [find comment=\"ISP-2\"]\r\
\n/ip route disable [find comment=\"Group-2-2\"]\r\
\n/ip route enable [find comment=\"Group-1-2\"]\r\
\nlog warning (\"ISP-2 IS DOWN\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\
onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.4.4 \
up-script="/ip route enable [find comment=\"ISP-2\"]\r\
\n/ip route enable [find comment=\"Group-2-2\"]\r\
\n/ip route disable [find comment=\"Group-1-2\"]\r\
\nlog warning (\"ISP-2 IS UP\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\
onnection\"] do={ /ip firewall connection remove \$i }"
add down-script="/ip route disable [find comment=\"ISP-1\"]\r\
\n/ip route disable [find comment=\"Group-1-1\"]\r\
\n/ip route enable [find comment=\"Group-2-1\"]\r\
\nlog warning (\"ISP-1 IS DOWN\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\
onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.8.8 \
up-script="/ip route enable [find comment=\"ISP-1\"]\r\
\n/ip route enable [find comment=\"Group-1-1\"]\r\
\n/ip route disable [find comment=\"Group-2-1\"]\r\
\nlog warning (\"ISP-1 IS UP\")\r\
\n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\
onnection\"] do={ /ip firewall connection remove \$i }"

Балансировка и резервирование в MikroTik используя настройки NTH раздела Mangle

Можно также применить схему, в которой каждое соединение будет промаркировано по принципу:

четный-пакет = провайдер-1

нечетный-пакет = провайдер-2

Настройка находится IP→Firewall→Mangle

/ip firewall mangle
add action=mark-connection chain=prerouting disabled=yes dst-address-type=\
!local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1 nth=2,1
add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \
disabled=yes new-routing-mark=To-ISP-1 src-address-list=To-ISP-1
add action=mark-connection chain=prerouting disabled=yes dst-address-type=\
!local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2 nth=2,2
add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \
disabled=yes new-routing-mark=To-ISP-2 src-address-list=To-ISP-2

Балансировка между двумя провайдерами будет производиться в соотношении 50:50, это определяется параметрами nth=2,1 и nth=2,2.

Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik “.

Настройка балансировки двух провайдеров Per Connection Classifier (PCC) раздела Mangle

Per Connection Classifier (PCC) позволят разделить трафик на равные потоки с возможностью держать пакеты с определенным набором параметров в одном потоке (определяется в наборе параметров из src-address, src-port, dst-address, dst-port)

Настройка находится IP→Firewall→Mangle

/ip firewall mangle
add action=mark-connection chain=prerouting dst-address=\
!192.168.2.0/24 new-connection-mark=To-ISP-1-Connection \
per-connection-classifier=both-addresses-and-ports:2/0 src-address=\
192.168.2.0/24
add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \
new-routing-mark=To-ISP-1 src-address=192.168.2.0/24
add action=mark-connection chain=prerouting dst-address=\
!192.168.2.0/24 new-connection-mark=To-ISP-2-Connection \
per-connection-classifier=both-addresses-and-ports:2/1 src-address=\
192.168.2.0/24
add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \
new-routing-mark=To-ISP-2 src-address=192.168.2.0/24

Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik “.

Провайдер меняет шлюз в DHCP клиенте, не работает переключение или балансировка

DHCP клиент это один из самых распространённых типов настроек WAN интерфейса. Все настройки проходят в автоматическом режиме и не требуют ни каких дополнительных усилий. Однако в варианте с балансировкой двух провайдеров, используемая настройка требует явного определения шлюза(Gateway) в таблице маршрутизации. А если IP адрес серый(динамический), то правила с балансировкой перестанут работать при его изменении.

Для того, чтобы в правиле статической маршрутизации указывался текущий шлюз(Gateway) провайдера, в свойствах DHCP клиента следует укатать скрипт

Настройка находится IP→DHCP client

Провайдер меняет шлюз в DHCP клиенте, не работает переключение или балансировка

{
:local rmark "ISP-2"
:local count [/ip route print count-only where comment="ISP-2"]
:if ($bound=1) do={
:if ($count = 0) do={
/ip route add gateway=$"gateway-address" comment="ISP-2" distance=2
} else={
:if ($count = 1) do={
:local test [/ip route find where comment="ISP-2"]
:if ([/ip route get $test gateway] != $"gateway-address") do={
/ip route set $test gateway=$"gateway-address"
}
} else={
:error "Multiple routes found"
}
}
} else={
/ip route remove [find comment="ISP-2"]
}
}

И аналогичный пример, только для первого провайдера с добавлением маршрута к 8.8.4.4.

{
:local rmark "ISP-1"
:local count [/ip route print count-only where comment="ISP-1"]
:if ($bound=1) do={
:if ($count = 0) do={
/ip route add gateway=$"gateway-address" comment="ISP-1" distance=1
/ip route add gateway=$"gateway-address" comment="Netwatch" distance=1 dst-address=8.8.4.4
} else={
:if ($count = 1) do={
:local test [/ip route find where comment="ISP-1"]
:if ([/ip route get $test gateway] != $"gateway-address") do={
/ip route set $test gateway=$"gateway-address"
}
} else={
:error "Multiple routes found"
}
}
} else={
/ip route remove [find comment="ISP-1"]
/ip route remove [find comment="Netwatch"]
}
}

Скрипт может быть дополнен добавлениями(и удалениями) маршрутов для Routing-mark и Netwatch.

Одновременный проброс с двух провайдеров в MikroTik настройка Mangle

Входящая задача: сделать проброс портов таким образом, чтобы сервер отвечал с того провайдера, с которого пришёл запрос. На практике это может быть Web сервер(443\https), у которого объявлены две DNS записи с двумя внешними IP роутера MikroTik.

Настройка находится IP→Firewall→Mangle

/ip firewall mangle 
add chain=forward action=mark-connection new-connection-mark=From-ISP-1 in-interface=pppoe-out1
add chain=prerouting action=mark-routing new-routing-mark=To-ISP-1 passthrough=no connection-mark=From-ISP-1 in-interface=bridge
add chain=forward action=mark-connection new-connection-mark=From-ISP-2 in-interface=ether2
add chain=prerouting action=mark-routing new-routing-mark=To-ISP-2 passthrough=no connection-mark=From-ISP-2 in-interface=bridge

где

  • pppoe-out1 – это провайдер-1;
  • ether2 – это провайдер-2;
  • bridge – локальный bridge интерфейс.

Есть вопросы или предложения по настройке 2 провайдеров в MikroTik? Активно предлагай свой вариант настройки! Оставить комментарий

Материал из MikroTik Wiki

Введение

В статье разбирается настройка двух Интернет-каналов в режиме резервирования. Т. е. в ситуациях, когда один провайдер будет работать постоянно (основной канал), а второй будет включаться в случае, если Интернет через первый канал будет недоступен (резервный канал).

Есть два основных способа настройки работы устройств МикроТик для работы с двумя провайдерами в режиме резервирования. Кратко их можно охарактеризовать, как «быстрый способ» и «комплексный способ». Первый способ является быстрым для настройки. Что явно следует из названия. Второй способ является более сложным в настройке, но при этом лишен недостатков, которые присущи первому способу.

Схема сети

Схема сети двух интернет каналов на оборудовании МикроТик

Внешняя сеть:
Интернет-канал №1
IP-адреса маршрутизатора: 10.1.100.1
IP-адреса провайдера: 10.1.100.254
маска: 255.255.255.0

Интернет-канал №2
IP-адреса маршрутизатора: 10.1.200.1
IP-адреса провайдера: 10.1.200.254
маска: 255.255.255.0

Внутренняя сеть:
IP-адреса маршрутизатора: 192.168.15.1
маска: 255.255.255.0

Быстрый способ

Через графический интерфейс

Приведенные ниже манипуляции подразумевают, что вы уже настроили IP-адреса двум внешним интерфейсам, прописали маршруты и сделали правила masquerade.

Если у вас статические IP-адреса от обоих провайдеров, то простейшая настройка резервирования сводится к установке приоритетов маршрутов на первого и второго провайдера.

Зайти в IP => Routes и для маршрута на Провайдера-1 указываем Check Gateway=ping и Distance=5. В настройках маршрута на Провайдера-2 указываем Check Gateway=ping и Distance=10. Значения параметра Distance не обязательно должны быть такими. Важно, что бы значения для Провайдера-1 было меньше чем для Провайдера-2. Как правило, статические маршруты имеют приоритет (Distance) равный единице. Для примера мы привели другое значение.
При такой схеме весь трафик будет идти через Провайдера-1, путь через Провайдера-2 будет резервным. Шлюзы обоих провайдеров будут периодически пинговаться, и при недоступности шлюза Провайдера-1 маршрут на него будет отключен, а трафик пойдет по маршруту на Провайдера-2. После того, как шлюз Провайдера-1 станет опять доступным трафик опять пойдет через него.

Недостатком данной схемы является то, что в ней проверяется не наличие Интернета, а именно доступность следующего узла. Часто встречаются ситуации, когда оборудование провайдера (следующий узел) доступно, а интернета нет. Очень яркий пример это Интернет через ADSL-модем. Соседний узел (ADSL-модем) будет доступным, а Интернет нет.

Для первого Интернет-канала:

Резервирование Интернет-канала с помощью маршрутизатора МикроТик, простой способ, маршрутизатор №1

Для второго Интернет-канала:

Резервирование Интернет-канала с помощью маршрутизатора МикроТик, простой способ, маршрутизатор №2

Через консоль

Первый маршрутизатор:

/ip route
add check-gateway=ping distance=5 gateway=10.1.100.254

Второй маршрутизатор:

/ip route
add check-gateway=ping distance=10 gateway=10.1.200.254

Комплексный способ

Через графический интерфейс

Приведенные ниже манипуляции подразумевают, что вы уже настроили IP-адреса двум внешним интерфейсам, прописали маршруты и сделали правила NAT.

«Комплексный» способ основан на том, что с помощью встроенной утилиты «Netwatch», мы будем один раз в минуту проверять доступность интернета с помощью команды ping до узла 8.8.4.4 через первый интернет канал. Доступ до этого узла через второй Интернет-канал будет всегда закрыт. Таким образом если ping проходит — это значит, что первый канал находится в рабочем состоянии и он должен быть включен, а 2-ой канал должен быть выключен. И наоборот: если ping не проходит — это значит, что первый канал не работает и он должен быть выключен и включен 2-ой канал. Как только ping начнет проходить произойдет обратной переключение. Нужный маршрут утилита будет определять по комментарию, который мы назначим. Как видите этот способ лишен недостатка первого способа.

Добавить комментарии к маршрутам. К маршруту через первого провайдера добавить комментарий ISP1, к маршруту через второго провайдера добавить комментарий ISP2. Приведем пример для первого провайдера. Для второго действие делается аналогично.

Настройка комментария для маршрута через первый внешний интерфейс на маршрутизаторе МикроТик

Создать статический маршрут до 8.8.4.4. В IP => Routes создать маршрут до адреса 8.8.4.4 через шлюз 1-го интернет провайдера.

Настройка маршрута до адреса 8.8.4.4 через первый внешний интерфейс на маршрутизаторе МикроТик

Добавить правило блокирующее доступ к 8.8.4.4 через 2-ой WAN-интерфейс.

Настройка правила файервола, которое блокирует доступ до 8.8.4.4 через 2-ой внешний интерфейс на маршрутизаторе МикроТик, шаг 1

Настройка правила файервола, которое блокирует доступ до 8.8.4.4 через 2-ой внешний интерфейс на маршрутизаторе МикроТик, шаг 2

Добавить условие переключения. В Tools => Netwatch на вкладке «Host» создать новый «Netwatch host». В графе «Host» указать отслеживаемый ip-адрес, в «Interval» — частоту осуществляемых проверок, а в «Timeout» — время недоступности хоста при котором сработает триггер.

В примере указан адрес 8.8.8.8. Это опечатка. Должен быть адрес 8.8.4.4

Настройка утилиты "Netwatch" на маршрутизаторе МикроТик, шаг 1

На вкладке «Up» добавить скрипт следующего содержания:
/ip route set [find comment="ISP1"] disabled=no
/ip route set [find comment="ISP2"] disabled=yes

Настройка утилиты "Netwatch" на маршрутизаторе МикроТик, шаг 2

На вкладке «Down» добавить скрипт следующего содержания:
/ip route set [find comment="ISP1"] disabled=yes
/ip route set [find comment="ISP2"] disabled=no

Настройка утилиты "Netwatch" на маршрутизаторе МикроТик, шаг 3

Через консоль

/ip route
set comment=ISP1 [find gateway=10.1.100.254]
set comment=ISP2 [find gateway=10.1.200.254]

/ip route
add distance=1 dst-address=8.8.4.4/32 gateway=10.1.100.254

/ip firewall filter
add action=drop chain=output dst-address=8.8.4.4 out-interface=ether4-WAN2 protocol=icmp comment="Deny 8.8.4.4 through reserved internet-channel"

/tool netwatch
add down-script="/ip route set [find comment=\"ISP1\"] disabled=yes\r\
\n/ip route set [find comment=\"ISP2\"] disabled=no" host=8.8.4.4 \
up-script="/ip route set [find comment=\"ISP1\"] disabled=no\r\
\n/ip route set [find comment=\"ISP2\"] disabled=yes"

Полезные материалы по MikroTik

Проверка

Другие наши интересноые статьи:

  • Zyxel роутер не видит телефон
  • Автоматическая настройка роутера для билайн
  • Zyxel роутер доступ к настройкам
  • Zyxel роутер настройка пароля wifi
  • Автоматическая настройка роутера tp link

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии