Настройка двух провайдеров на MikroTik, балансировка и автопереключение

настройка двух провайдеров на mikrotik
Инструкция описывает настройку маршрутизатора MikroTik для работы с двумя интернет-провайдерами. Рассматриваются два распространённых сценария: резервирование канала и распределение нагрузки.
Резервирование (автоматическое переключение). При потере связи с провайдером 1 весь исходящий трафик автоматически перенаправляется на провайдера 2.
Балансировка нагрузки. Оба канала остаются активными одновременно. Распределение трафика между провайдером 1 и провайдером 2 может выполняться вручную либо в автоматическом режиме.
РЕКОМЕНДАЦИЯ
Наша команда советует изучить углубленный курс по администрированию сетевых устройств MikroTik.
В курсе много лабораторных работ по итогам которых вы получите обратную связь.
После обучения вы получите диплом гос. образца РФ. Подробности и доступ к началу курса бесплатно тут.
Настройка двух провайдеров в MikroTik, предварительная подготовка
Сформированный ниже набор параметров служит контрольной конфигурацией для дальнейшей реализации режимов резервирования (автоматического переключения) и балансировки нагрузки.
В исходной конфигурации маршрутизатора MikroTik выполнена базовая настройка, при этом по-меньшей мере один канал доступа в Интернет уже функционирует.
Работа начинается с физического подключения второго провайдера: выделяется свободный порт и исключается из состава моста (Bridge, LAN).
Освободить порт для 2-ого провайдера
Конфигурация выполняется в меню Bridge → Ports.
настройка двух провайдеров в mikrotik освободить порт
В приведённом примере интерфейс ether2 удалён из перечня портов моста Bridge-LAN.
Настроить 2-ого провайдера
mikrotik dhcp client
Добавление 2-ого провайдера в список WAN
Конфигурация выполняется в разделе Interfaces → Interface List.
добавить провайдера в список wan
Группа WAN должна содержать интерфейсы обоих провайдеров, чтобы правило Masquerade в разделе IP → Firewall → NAT применялось сразу ко двум каналам.
настроить masquerade
Отключить добавление DNS серверов для провайдера-1
Выполненные изменения приводят к отказу от DNS-серверов подключённых провайдеров. При переключении трафика на резервный канал возможна потеря DNS-резолвинга, поскольку запросы продолжают направляться к серверам основного оператора, уже недоступным. Для исключения проблемы в конфигурации задаются публичные DNS-серверы, доступные через оба канала.
отключить dns для dhcp client
Определить общедоступные DNS сервера
Конфигурация выполняется в разделе IP → DNS.
зададим сервера dns
Отсутствие записей в списке Dynamic Servers означает, что маршрутизатор MikroTik не получает и не использует автоматически назначаемые DNS-серверы провайдера.
В поле Servers следует указать общедоступные DNS-серверы, например Cloudflare DNS, и удалить все остальные записи.
Отключить автоматическое добавление маршрутов
Поскольку все маршруты планируется создавать вручную, динамические записи основного провайдера необходимо отключить. В таблице маршрутизации такие записи отмечены буквой D (Dynamic).
Конфигурация выполняется в разделе IP → Routes.
пример динамического маршрута
отключаем получение маршрута по умолчанию для dhcp client
Добавление маршрутов для двух провайдеров
Переключение между операторами выполняется скриптом, который отслеживает маршруты с комментариями ISP-1 и ISP-2 и соответственно активирует либо деактивирует их. Ниже описан способ добавления таких комментариев для подключений со статическим IP-адресом, DHCP-клиентом и PPPoE-сессией; этот приём применяется к обоим провайдерам.
Каждому из указанных маршрутов дополнительно назначается метрика distance = 2.
Настройка находится IP→Routes
назовем статический маршрут ISP-2
Для DHCP-клиента адрес шлюза определяется во вкладке Status самого клиента DHCP. Доступ к соответствующим параметрам осуществляется через меню IP → DHCP Client.
вкладка status dhcp клиента
Mangle маркировка ответов для двух провайдеров
Правила маркировки маршрутов задаются только для публичных (постоянных) IP-адресов. Такая схема гарантирует, что входящий запрос, полученный через интерфейс одного из провайдеров, получит ответ по тому же каналу. При отсутствии этих пометок доступ к маршрутизатору по внешним адресам может стать непредсказуемым.
Маркировка выполняется в два этапа: сначала помечается соединение, затем — маршрут.
Настройка выполняется в разделе IP → Firewall → Mangle.
маркировка входящего соединения
маркировка входящего соединения isp-1
маркировка маршрута
маркировка исходящего маршрута 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.
добавить статический маршрут для mangle isp-1
добавить статический маршрут для mangle isp-2
И все текущие правила статической маршрутизации будут иметь вид:
вид таблицы маршрутизации
/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-эхо-запросы на 8.8.8.8 (Google DNS). При отсутствии ответа или при значительном увеличении задержки трафик автоматически перенаправляется с основной линии (провайдер-1) на резервную (провайдер-2).
Добавить статический маршрут для Google DNS
Перейдем в IP→Routes
добавим статический маршрут для google dns
/ip route
add comment=Netwatch distance=1 dst-address=8.8.8.8/32 gateway=pppoe-out1
Запретить ICMP запросы через провайдера-2
Перейдем в IP→Firewall
запретим icmp запросы через провайдера
/ip firewall filter
add action=drop chain=output comment=Netwatch dst-address=8.8.8.8 \
out-interface=ether2 protocol=icmp
Настройка гарантирует диагностику доступности сети исключительно через канал провайдера-1. При попытке отправить аналогичный ICMP-запрос по интерфейсу провайдера-2 встроенный межсетевой экран MikroTik блокирует его, предотвращая ложные срабатывания.
Добавить правило Netwatch для переключения
Настройка находится Tools→Netwatch
добавим правило netwatch
скрипт при статусе интернета up
скрипт при статусе интернета 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-эхо-запросы.
  • Interval — интервал проверки, по истечении которого пересчитывается состояние канала.
  • Timeout — предельная задержка ответа, при которой связь считается потерянной.
  • Status — текущее состояние контролируемого узла.
  • Up — сценарий, выполняемый после восстановления канала провайдера 1.
  • Down — сценарий, запускаемый при обрыве канала провайдера 1.
Настроенные в Netwatch сценарии обеспечивают автоматическое переключение каналов: все активные соединения, созданные через провайдера 1, удаляются, что гарантирует переход трафика на линию провайдера 2.
Настройка 2 провайдеров в MikroTik, режим балансировки(одновременная работа)
Для распределения нагрузки между двумя интернет-провайдерами на 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.
разбиение узлов на группы для балансировки
Для каждой из групп настраивается маркировка соединений и соответствующий маршрут. Такое решение обеспечивает плавное переключение трафика на резервный канал при обрыве линии одного из провайдеров.
Mangle маркировка соединений для балансировки 2 провайдеров
Перейдем в раздел IP→Firewall→Mangle
mikrotik prerouting mark connection
mikrotik address list для маркировки
mikrotik исключить локальный трафик
mikrotik маркировка соединений
Mangle маркировка маршрута для балансировки двух провайдеров
Настройка находится IP→Firewall→Mangle
правило prerouting для mark connection
маркировка маршрута для address list
маркировка маршрута
Аналогичные действия по маркировке соединений и маршрута нужно выполнить для Address List = To-ISP-2.
Общий вид раздела Mangle
общий вид 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 провайдеров
Перейдем в IP→Route
общий вид таблицы маршрутизации при балансировке
/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.
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 выполняет автоматическое переключение каналов: при потере связи с одним провайдером трафик незамедлительно перенаправляется через доступный интерфейс второго.
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.
Настройка балансировки двух провайдеров 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
Провайдер меняет шлюз в DHCP клиенте, не работает переключение или балансировка
DHCP-клиент ― один из самых распространённых способов настройки WAN-интерфейса. Параметры получают­ся автоматически и не требуют дополнительных действий.
В конфигурации с балансировкой двух провайдеров шлюз (Gateway) нужно указать явно в таблице маршрутов. При изменении серого (динамического) IP-адреса правила балансировки перестают работать.
Чтобы в статическом маршруте использовался актуальный шлюз провайдера, в свойствах DHCP-клиента добавляется скрипт.
Настройка выполняется в разделе IP → DHCP Client.
не работает переключение или балансировка
{
: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 интерфейс.
РЕКОМЕНДАЦИЯ
Вы хорошо разбираетесь в Микротиках? Или впервые недавно столкнулись с этим оборудованием и не знаете, с какой стороны к нему подступиться? В обоих случаях вы найдете для себя полезную информацию в углубленном курсе «Администрирование сетевых устройств MikroTik». В курсе много практических лабораторных работ по результату выполнения которых вы получите обратную связь. После окончания обучения вы получите диплом гос. образца РФ. Подробности и доступ к началу курса бесплатно тут.