SCROLL
Среднее время на прочтение: 3 мин.

Настройка оборудования Mikrotik на работу с несколькими провайдерами. Резервирование канала (Failover), балансировка нагрузки каналов (Load Balancing)

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

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

Рассмотрим на примере как можно организовать отказоустойчивую систему на сетевом оборудовании Mikrotik.

Резервирование каналов (Failover)

К оборудованию Mikrotik подключены 2 провайдера ISP1, ISP2 и локальная сеть 10.1.1.0/24, необходимо при падении основного интернет-канала ISP1 автоматически переключиться на резервный ISP2.

Создаем Bridge интерфейсы ISP1, ISP2, под интернет провайдеров:

/interface bridge add name=ISP1
/interface bridge add name=ISP2

Связываем Bridge интерфейсы ISP1, ISP2 с портами ether1, ether2:

/interface bridge port add interface=ether1 bridge=ISP1
/interface bridge port add interface=ether2 bridge=ISP2

Добавляем сети провайдеров:

/ip address add address=10.10.10.1/24 interface=ISP1
/ip address add address=20.20.20.2/24 interface=ISP2

Создаем настройки NAT на интерфейсах провайдера:

/ip firewall nat add action=masquerade chain=srcnat out-interface=ISP1
/ip firewall nat add action=masquerade chain=srcnat out-interface=ISP2

Создаем правила маркировки пакетов mangle для первого провайдера ISP1:

/ip firewall mangle add chain=input dst-address=10.10.10.1 in-interface=ISP1 action=mark-connection new-connection-mark=ISP1-Connection-In
/ip firewall mangle add chain=output connection-mark=ISP1-Connection-In action=mark-routing new-routing-mark=ISP1-Connection-Out passthrough=no
/ip firewall mangle add chain=forward in-interface=ISP1 action=mark-connection new-connection-mark=ISP1-Connection-Forward passthrough=no

Создаем правила маркировки пакетов mangle для второго провайдера ISP2:

/ip firewall mangle add chain=input dst-address=20.20.20.2 in-interface=ISP2 action=mark-connection new-connection-mark=ISP2-Connection-In
/ip firewall mangle add chain=output connection-mark=ISP2-Connection-In action=mark-routing new-routing-mark=ISP2-Connection-Out passthrough=no
/ip firewall mangle add chain=forward in-interface=ISP2action=mark-connection new-connection-mark=ISP2-Connection-Forward passthrough=no

Создаем правила маршрутизации route, для провайдеров с разными приоритетами и правила маркировки пакетов:

/ip route add dst-address=0.0.0.0/0 gateway=ISP1 distance=1
/ip route add dst-address=0.0.0.0/0 gateway=ISP2 distance=2
/ip route add dst-address=0.0.0.0/0 gateway=ISP1 distance=1 check-gateway=arp routing-mark=ISP1-Connection-Out
/ip route add dst-address=0.0.0.0/0 gateway=ISP2 distance=1 check-gateway=arp routing-mark=ISP2-Connection-Out

В приведенной конфигурации, весь интернет трафик по-умолчанию проходит через 10.10.10.1 (ISP1). Но как только адрес 10.10.10.1 станет недоступным, тогда трафик пойдет через 20.20.20.2 (ISP2). Переключение будет происходит автоматически, без нашего вмешательства.

Так же добавлены правила маркирующие трафик интернет провайдеров (ISP1, ISP2), с которыми Mikrotik будет проводить каждый пакет маркированного соединения по соответствующей таблице маршрутизации. Данные правила нужны для одновременного использования  интернет провайдеров.

Балансировка нагрузки каналов (Load Balancing)

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

Для распределения исходящего трафика по интерфейсам, нам нужно создать соответствующую маркировку маршрута на соединение. Существует несколько вариантов разделения соединений по группам, рассмотрим некоторые из них в примерах.

PCC-Per Connection Classifier (Классификация по соединениям)

Все IP-пакеты имеют заголовок, в котором есть два поля (Адрес:Порт) источника и (Адрес:Порт) назначения. Это позволяет отсортировать трафик на основе адреса источника, порта источника, адреса назначения, порта назначения.

Имея к примеру локальную сеть 10.1.1.0/24, и два интернет провайдера (ISP1, ISP2), выполним балансировку трафика из локальной сети методом PPC.

Создаем правила маркировки пакетов mangle:

/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 per-connection-classifier=src-address-and-port:2/0 action=mark-routing new-routing-mark=ISP1-Connection-Out 
/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 per-connection-classifier=src-address-and-port:2/1 action=mark-routing new-routing-mark=ISP2-Connection-Out

В случае если пропускная способность провайдеров разная (ISP1 - 100Mb, ISP2 - 50Mb), то на выходе мы получим суммарную пропускную способность равную 100Mb, это происходит потому что Mikrotik не измеряет реальную пропускную способность каналов, а просто делит трафик на относительно равные группы.

Чтобы в такой ситуации деление трафика проходило правильно, нужны создавать такие правила маркировки:

/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 per-connection-classifier=src-address-and-port:3/0 action=mark-routing new-routing-mark=ISP1-Connection-Out
/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 per-connection-classifier=src-address-and-port:3/1 action=mark-routing new-routing-mark=ISP1-Connection-Out
/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 per-connection-classifier=src-address-and-port:3/2 action=mark-routing new-routing-mark=ISP2-Connection-Out

ECMP-Equal Cost Multi-Path (Маршруты равной стоимости)

Данный метод позволяет установить несколько равноценных маршрутов для передачи данных, которые выбираются с равной вероятностью (алгоритм Round-robin). Маршруты распределяются по соединения, по паре адресов источник-получатель. Каждые 10 минут таблица маршрутизации обнуляется.

Имея к примеру локальную сеть 10.1.1.0/24, и два интернет провайдера (ISP1, ISP2), выполним балансировку трафика из локальной сети методом ECMP.

Создаем правило маркировки пакетов mangle и правило маршрутизации routing:

/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 action=mark-routing new-routing-mark=Mixed_ISP1_ISP2
/ip route add dst-address=0.0.0.0/0 gateway=ISP1,ISP2routing-mark=Mixed_ISP1_ISP2

В случае если пропускная способность провайдеров разная (ISP1 - 100Mb, ISP2- 50Mb), то на выходе мы получим суммарную пропускную способность равную 100Mb, это происходит потому что Mikrotik не измеряет реальную пропускную способность каналов, а просто делит трафик на относительно равные группы.

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

/ip route add dst-address=0.0.0.0/0 gateway=ISP1,ISP1,ISP2

Классификация трафика по конкретным направлениям

Балансировку трафика можно выполнить по конкретно указанным направлениям, к примеру трафик проходящий по протоколам — HTTP (80), HTTPS (443), POP (110), SMTP (25) пропускать через первого провайдера ISP1, а весь остальной трафик пропускать через второго провайдера ISP2.

Создаем правила маркировки пакетов mangle:

/ip firewall mangle add chain=prerouting dst-port=80,443,110,25 protocol=tcp action=mark-routing new-routing-mark=ISP1-Connection-Out
/ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark=ISP2-Connection-Out

Имея к примеру несколько локальный сетей 10.1.1.0/24, 10.2.2.0/24, можно выполнить балансировку трафика для каждой из сетей. Трафик сети 10.1.1.0/24 пропускать через первого провайдера ISP1, а трафик сети 10.2.2.0/24 пропускать через второго ISP2.

Создаем правила маркировки пакетов mangle:

/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 dst-address=!10.2.2.0/24 action=route new-routing-mark=ISP1-Connection-Out
/ip firewall mangle add chain=prerouting src-address=10.2.2.0/24 dst-address=!10.1.1.0/24 action=route new-routing-mark=ISP2-Connection-Out

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

NTH (Деление трафика по соединениям)

Балансировка нагрузки каналов с помощью NTH осуществляется по принципу подсчета соединений, т.е. деление соединения по-порядку, первые используют ISP1, вторые используют ISP2.

Имея к примеру локальную сеть 10.1.1.0/24, выполним балансировку трафика методом NTH. Из каждых двух соединений первое помечаем на использование ISP1, а второе на использование ISP2.

Создаем правила маркировки пакетов mangle:

/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 nth=2,1 action=mark-routing new-routing-mark=ISP1-Connection-Out
/ip firewall mangle add chain=prerouting src-address=10.1.1.0/24 nth=2,2 action=mark-routing new-routing-mark=ISP2-Connection-Out

Вот такими способами можно использовать несколько интернет-провайдеров на оборудовании Mikrotik. Можно не только обеспечить резервирование одного из интернет-провайдеров, но и выполнять различного рода балансировку нагрузки вашей локальной сети.

Обсуждение

3 комментариев
  • Зачем создавать бриджи под первый и второй интерфейс?

    • Это ответ на комментарий Виктор

      формально можно и не создавать, НО если вдруг понадобится этот трафик анализировать\направить еще куда-то и тд, можно добавить еще интерфейс к бриджу и коннекты не упадут.

    • Это ответ на комментарий Виктор

      В том случае если нужно сменить мак для провайдера и если трафик приходит через влан