Два канала интернет в одном роутере

Адаптировано под ROS6 и ROS7. Редакция от 28.12.2021

Введение

Статья ориентирована на начинающих администраторов Mikrotik RouterOS (далее ROS). В ней рассматривается маршрутизация с резервированием для нескольких не связанных multihomed AS каналов интернет, работающих по протоколу IPv4. Так же есть настройки для обеспечения базовой безопасности. «Автоматическая» балансировка исходящего трафика по каналам в данной статье не описана по причине того, что ее реализация на таких исходных данных — это череда компромиссов и ограничений, требующая отдельного рассмотрения. Инструментарий для «ручной» балансировки в статье содержится и приведенные настройки являются хорошей базой для добавления «автоматической» балансировки, как минимум полудюжиной способов.

Исходные данные

В качестве подопытного, выбран пятипортовый маршрутизатор Mikrotik с ROS версии 6.45+. Он будет маршрутизировать трафик между двумя локальными сетями (LAN1 и LAN2) и тремя провайдерами (ISP1, ISP2, ISP3). Канал к ISP1 имеет статический “серый” адрес, ISP2 — “белый”, получаемый по DHCP, ISP3 — “белый” с PPPoE авторизацией. Схема подключения представлена на рисунке:

Задача настроить роутер “МТК” на основе схемы так, чтобы:

  1. Обеспечить автоматическое переключение на резервного провайдера.
    Основной провайдер — ISP2, первый резерв — ISP1, второй резерв — ISP3.
  2. Организовать выход сети LAN1 в Интернет только через ISP1.
  3. Предусмотреть возможность приоритетно маршрутизировать трафик из локальных сетей в Интернет через выбранного провайдера на основе address-list.
  4. Предусмотреть возможность публикации сервисов из локальной сети в Интернет (DSTNAT)
  5. Настроить фильтр файервола для обеспечения минимально достаточной безопасности со стороны Интернет.
  6. Роутер мог выпускать собственный трафик через любого из трех провайдеров в зависимости от выбранного адреса источника.
  7. Обеспечить маршрутизацию ответных пакетов в канал, с которого они пришли (включая LAN).

Замечание. Настраивать роутер будем “с чистого листа”, дабы гарантировать отсутствие сюрпризов в меняющихся от версии к версии стартовых конфигурациях “из коробки”. Настройки будут задаваться командами в терминале Winbox. Физическое подключение для настройки осуществляется прямым соединением с интерфейсом ether5.

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

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

Адресацию на интерфейсах и шлюзы по умолчанию настроить можем? Да:

На ISP1 прописали адрес и шлюз с distance=2 и check-gateway=ping.
На ISP2 настройка dhcp клиента по умолчанию — соответственно distance будет равен единице.
На ISP3 в настройках pppoe клиента при add-default-route=yes ставим default-route-distance=3.

NAT на выход прописать не забываем:

/ip firewall nat add action=masquerade chain=srcnat out-interface-list=WAN

По итогу, у пользователей локалок котики весело грузятся через основного провайдера ISP2 и есть резервирование канала при помощи механизма check gateway.

Пункт 1 задачи реализован. Где же мультиван со своими метками? Нет…

Дальше. Нужно выпустить конкретных клиентов из LAN через ISP1:

/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS \
passthrough=yes route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS \
passthrough=no route-dst=100.66.66.1 src-address=192.168.88.0/24

Пункты 2 и 3 задачи реализованы. Метки, марки, route rules, где вы?!

Нужно дать доступ к любимому OpenVPN серверу с адресом 172.17.17.17 для клиентов из Интернет? Пожалуйста:

/ip cloud set ddns-enabled=yes

Клиентам в качестве пира даем результат вывода: “:put [ip cloud get dns-name]

Прописываем проброс порта из инета:

/ip firewall nat add action=dst-nat chain=dstnat dst-port=1194 \
in-interface-list=WAN protocol=udp to-addresses=172.17.17.17

Пункт 4 готов.

Настраиваем фаервол и прочую безопасность для пункта 5, параллельно радуемся тому, что у пользователей уже все работает и тянемся к емкости с любимым напитком…
А! Туннели же еще забыли.

l2tp-клиент, настроенный по нагугленной статье, до любимого голландского VDS поднялся? Да.
l2tp-сервер с IPsec поднялся и клиенты по ДНС-имени из IP Cloud(см выше.) цепляются? Да.
Откинувшись на спинку стула, прихлебывая напиток, лениво рассматриваем пункты 6 и 7 задачи. Думаем — а оно нам надо? Все ж и так работает (с)… Так вот если оно таки не надо, то на этом все. Мультиван реализован.

Что такое мультиван? Это подключение нескольких каналов Интернет к одному роутеру.

Дальше статью можно не читать, поскольку что там кроме выпендрежа сомнительной применимости может быть?

С теми, кто остался, кто заинтересован пунктами 6 и 7 задачи, а также ощущает зуд перфекционизма, погружаемся глубже.

Важнейшей задачей реализации мультиван является корректная маршрутизация трафика. А именно: независимо от того, в какой (или в какие)Примечание 3 канал(ы) провайдера смотрит маршрут по умолчанию на нашем роутере, он должен возвращать ответ именно в тот канал, с которого пакет пришел. Задача понятна. Проблема-то где? Ведь в простой локальной сети задача та же, но никто дополнительными настройками не заморачивается и беды не ощущает. Отличие в том, что любой маршрутизируемый узел в Интернет доступен через каждый из наших каналов, а не через строго конкретный, как в простой локалке. А “беда” заключается в том, что если к нам пришел запрос на IP адрес ISP3, то в нашем случае ответ уйдет через канал ISP2, поскольку туда направлен шлюз по умолчанию. Уйдет и будет отброшен провайдером, как некорректный. С проблемой определились. Как ее решать?

Решение разделим на три этапа:

  1. Предварительная настройка. На этом этапе будут заданы базовые настройки маршрутизатора: локальная сеть, фаервол, address lists, hairpin NAT и пр.
  2. Мультиван. На этом этапе будут промаркированы и рассортированы по таблицам маршрутизации нужные соединения.
  3. Подключение к ISP. На этом этапе будут настроены интерфейсы, обеспечивающие подключение к Интернет, задействована маршрутизация и механизм резервирования каналов Интернет.

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

Важно!

Для переключения каналов по алгоритму заданному при помощи стоимости маршрутов distance используется механизм check gateway. Скрипты, приведенные в статье, к резервированию каналов отношения не имеют и призваны автоматизировать решение проблемы динамических IP на каналах ISP2 и ISP3.

1. Предварительная настройка

1.1. Очищаем конфигурацию роутера командой:

/system reset-configuration skip-backup=yes no-defaults=yes

соглашаемся с “Dangerous! Reset anyway? [y/N]:” и, после перезагрузки, подключаемся Winbox-ом по MAC. На данном этапе конфигурация и база пользователей очищены.

1.2. В ROS 6.49+ отказываемся от смены пароля на дефолтном пользователе («Cancel» в Winbox и «Ctrl+C» в терминале) Создаем нового пользователя:

/user add group=full name=knight password=ultrasecret comment="Not horse"

логинимся под ним и удаляем дефолтного:

/user remove admin

Замечание. Именно удаление а не отключение дефолтного пользователя автор считает более безопасным и рекомендует к применению.

1.3. Создаем базовые interface lists для удобства оперирования в фаерволе, настройках discovery и прочих MAC серверах:

/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"

Подписываем комментариями интерфейсы

/interface ethernet set ether1 comment="to ISP1"
/interface ethernet set ether2 comment="to ISP2"
/interface ethernet set ether3 comment="to ISP3"
/interface ethernet set ether4 comment="to LAN1"
/interface ethernet set ether5 comment="to LAN2"

и заполняем interface lists:

/interface list member add interface=ether1 list=WAN comment=ISP1
/interface list member add interface=ether2 list=WAN comment=ISP2 
/interface list member add interface=ether3 list=WAN comment="to ISP3"
/interface list member add interface=ether4 list=LAN comment=LAN1
/interface list member add interface=ether5 list=LAN comment=LAN2

Замечание. Писать понятные комментарии стоит потраченного на это времени и сильно облегчает понимание конфигурации. Автор считает необходимым, в целях безопасности, добавить в interface list “WAN” интерфейс ether3, не смотря на то, что по нему не будет ходить протокол ip. Не забываем, что после того, как на ether3 будет поднят интерфейс PPP, его тоже нужно будет добавить в interface list “WAN”

1.4. Скрываем роутер от обнаружения соседства и управления из сетей провайдеров по МАС:

/ip neighbor discovery-settings set discover-interface-list=!WAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN

1.5. Создаем минимально достаточный набор правил фильтра файрволла для защиты роутера:

/ip firewall filter add action=accept chain=input \
comment="Related Established Untracked Allow" \
connection-state=established,related,untracked

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

/ip firewall filter add action=accept chain=input \
comment="ICMP from ALL" protocol=icmp

(пинг и не только пинг. Разрешен весь icmp на вход. Весьма полезно для нахождения проблем с MTU)

/ip firewall filter add action=drop chain=input comment="All other WAN Drop" \
in-interface-list=WAN

(закрывающее цепочку input правило запрещает все остальное, что прилетает из Интернет)

/ip firewall filter add action=accept chain=forward \
comment="Established, Related, Untracked allow" \
connection-state=established,related,untracked

(правило разрешает установившиеся и родственные соединения, которые проходят сквозь роутер)

/ip firewall filter add action=drop chain=forward comment="Invalid drop" \
connection-state=invalid

(правило сбрасывает соединения, с connection-state=invalid, проходящие сквозь роутер. Оно настоятельно рекомендовано Mikrotik, но в некоторых ситуациях, например при несимметричной маршрутизации может вызывать блокировку полезного трафика)

/ip firewall filter add action=drop chain=forward \
comment="Drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
connection-state=new in-interface-list=WAN

(правило запрещает проходить сквозь роутер пакетам, которые идут из Интернет и не прошли процедуру dstnat. Это убережет локальные сети от злоумышленников, которые, находясь в одном широковещательном домене с нашими внешними сетями, пропишут в качестве шлюза наши внешние IP и, таким образом, попытаются “исследовать” наши локальные сети. )

Замечание. Примем за условие, что сети LAN1 и LAN2 являются доверенными и трафик между ними и с них не фильтруется.

1.6. Создаем список с перечнем не маршрутизируемых сетей:

/ip firewall address-list
add address=0.0.0.0/8 comment="\"This\" Network" list=BOGONS
add address=10.0.0.0/8 comment="Private-Use Networks" list=BOGONS
add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS
add address=127.0.0.0/8 comment=Loopback list=BOGONS
add address=169.254.0.0/16 comment="Link Local" list=BOGONS
add address=172.16.0.0/12 comment="Private-Use Networks" list=BOGONS
add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS
add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS
add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS
add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing"\
 list=BOGONS
add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS
add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS
add address=224.0.0.0/4 comment=Multicast list=BOGONS
add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS
add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS
add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS

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

Замечание. Список может изменяться, поэтому советую периодически проверять актуальность.

1.7. Настраиваем DNS для самого роутера:

/ip dns set servers=1.1.1.1,8.8.8.8

Замечание. В текущей версии ROS статически заданные серверы имен имеют приоритет перед динамическими. Запрос на разрешение имени отсылается первому серверу по порядку следования в списке. На следующий сервер переход осуществляется при недоступности текущего. Таймаут большой — более 5 сек. Возврат обратно, при возобновлении работы “упавшего сервера”, автоматически не происходит. С учетом этого алгоритма и наличия мультивана, автор рекомендует не использовать серверы, выдаваемые провайдерами.

1.8. Настраиваем локальную сеть.
1.8.1. Конфигурируем статические IP адреса на интерфейсах локальных сетей:

/ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP"
/ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP"

1.8.2. Задаем правила маршрутов к нашим локальным сетям через главную таблицу маршрутизации.
ROS6:

/ip route rule add dst-address=192.168.88.0/24 table=main comment="to LAN1"
/ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2"

ROS7:

/routing/rule/add action=lookup dst-address=192.168.88.0/24 table=main \
comment="to LAN1"
/routing/rule/add action=lookup dst-address=172.16.0.0/23 table=main \
comment="to LAN2"

Замечание. Это один из простых и быстрых способов получить доступ к адресам локальных сетей с соурсами внешних IP адресов интерфейсов роутера, независимо от того, в какой канал ведет маршрут по умолчанию.

1.8.3. Если необходимо включаем Hairpin NAT для LAN1 и LAN2

/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1" \
out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2" \
out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0

Замечание. Это позволяет пользователям из LAN1 и LAN2 получать доступ через внешний IP (dstnat) к серверам, находящимся с пользователями в одном сегменте сети.

1.9. (Применимо для ROS7). Создаем пользовательские таблицы маршрутизации для каждого из провайдеров

/routing/table/add disabled=no fib name=to_isp1
/routing/table/add disabled=no fib name=to_isp2
/routing/table/add disabled=no fib name=to_isp3

Замечание. В ROS7 переосмыслена работа с марками и таблицами маршрутов. В ROS6, к примеру, в правиле mangle action=mark-routing опция new-routing-mark позволяла непосредственно задать имя новой марки под которую в системе автоматически создавалась таблица. В ROS7, по аналогии с iproute2 в линукс, требуется предварительное создание пользовательских таблиц. Только после этого операции с ними становятся доступны в соответствующих правилах.

2. Собственно, реализация того самого корректного мультиван

Для решения задачи “отвечать туда откуда спросили” будем использовать два инструмента ROS: connection mark и routing mark. Connection mark позволяет пометить нужное соединение и в дальнейшем работать с этой меткой, как условием для применения routing mark. А уже с routing mark возможно работать в ip route и route rules. С инструментами разобрались, теперь нужно решить какие соединения метить — раз, где именно метить — два.

С первым все просто — мы должны пометить все соединения, которые приходят в роутер из Интернет по соответствующему каналу. В нашем случае это будут три метки (по количеству каналов): “conn_isp1”, “conn_isp2” и “conn_isp3”.

Нюанс со вторым заключается в том, что входящие соединения будут двух видов: транзитные и те, которые предназначены самому роутеру. Механизм connection mark работает в таблице mangle. Рассмотрим движение пакета на упрощенной диаграмме, любезно собранной специалистами ресурса mikrotik-trainings.com (не реклама):

Следуя по стрелкам, мы видим, что пакет, приходящий в “input interface”, проходит по цепочке “Prerouting” и только потом разделяется на транзитный и локальный в блоке “Routing Decision”. Поэтому, для убиения двух зайцев, задействуем Connection Mark в таблице Mangle Prerouting цепочки Prerouting.

Замечание. В ROS метки “Routing mark” указаны в разделе Ip/Routes/Rules как “Table”, а в остальных разделах, как “Routing Mark”. Сие может внести некую путаницу в понимание, но, по сути, это одно и то же, и является аналогом rt_tables в iproute2 на linux.

2.1. Метим входящие соединения от каждого из провайдеров

/ip firewall mangle add action=mark-connection chain=prerouting \
comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1 \
new-connection-mark=conn_isp1 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting \
comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2 \
new-connection-mark=conn_isp2 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting \
comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3 \
new-connection-mark=conn_isp3 passthrough=no

Замечание.Те читатели, кто пробует буквально и в порядке чтения повторить настройку предложенную в статье, при вводе третьей команды столкнутся с ошибкой: «input does not match any value of interface». Это связано с отсутствием в данный момент интерфейса «pppoe-isp3», который будет сконфигурирован в п. 3.3.2. На данном этапе можно вместо «pppoe-isp3» ввести «ether3». После выполнения п. 3.3.2 следует вернуться и поставить актуальное имя интерфейса.

Для того, чтобы не метить уже помеченные соединения я использую, как более универсальное, условие connection-mark=no-mark вместо connection-state=new.

passthrough=no — потому, что в этом способе реализации перемаркировка исключена и для ускорения можно прервать перебор правил после первого же совпадения.

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

“Input Interface”=>”Prerouting”=>”Routing Decision”=>”Forward”=>”Post Routing”=>”Output Interface” и попали к своему адресату в локальной сети.

Важно!

В ROS нет логического деления на внешний и внутренний интерфейсы. Если проследить путь движения ответного пакета по приведенной диаграмме, то он пройдет по тому же логическому пути, что и запрос:

“Input Interface”=>”Prerouting”=>”Routing Decision”=>”Forward”=>”Post Routing”=>”Output Interface” просто для запроса “Input Interface” был интерфейс ISP, а для ответа — LAN

2.2. Направляем ответный транзитный трафик по соответствующим таблицам маршрутизации

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Routemark transit out via ISP1" connection-mark=conn_isp1 \
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Routemark transit out via ISP2" connection-mark=conn_isp2 \
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Routemark transit out via ISP3" connection-mark=conn_isp3 \
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no

Замечание. in-interface-list=!WAN — мы работаем только с трафиком из локальной сети и dst-address-type=!local не имеющим адрес назначения адреса интерфейсов самого роутера.

То же самое для локальных пакетов, которые пришли в роутер по пути:

“Input Interface”=>”Prerouting”=>”Routing Decision”=>”Input”=>”Local Process”

Важно!

Ответ пойдет по следующему пути:

”Local Process”=>”Routing Decision”=>”Output”=>”Post Routing”=>”Output Interface”

2.3. Направляем ответный локальный трафик по соответствующим таблицам маршрутизации

/ip firewall mangle add action=mark-routing chain=output \
comment="Routemark local out via ISP1" connection-mark=conn_isp1 \
dst-address-type=!local new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=output \
comment="Routemark local out via ISP2" connection-mark=conn_isp2 \
dst-address-type=!local new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=output \
comment="Routemark local out via ISP3" connection-mark=conn_isp3 \
dst-address-type=!local new-routing-mark=to_isp3 passthrough=no

На этом этапе задачу подготовки к отправке ответа в тот канал Интернет, с которого пришел запрос, можно считать решенной. Все помечено, промаркировано и готово маршрутизироваться.
Отличным “побочным” эффектом такой настройки является возможность работы проброса портов DstNAT с обоих (ISP2, ISP3) провайдеров одновременно. Не на всех, так как на ISP1 у нас не маршрутизируемый адрес. Этот эффект важен, например, для почтового сервера с двумя MХ, которые смотрят в разные каналы Интернет или для сервиса доступного через DNS имя, разрешающееся в IP адреса обоих провайдеров.

Для устранения нюансов работы локальных сетей с внешними IP роутера используем решения из пп. 1.8.2 и 3.1.2.6.

Кроме того, можно задействовать инструмент с маркировками и для решения пункта 3 задачи. Реализуем так:

2.4. Направляем трафик от локальных клиентов из списков маршрутизации в соответствующие таблицы

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1 \
passthrough=no src-address-list=Via_ISP1

/ip firewall mangle add action=mark-routing chain=prerouting \
comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3 \
passthrough=no src-address-list=Via_ISP3

Замечание. Этот набор правил дан для примера. Считаю нужным обратить внимание на следующее:
— При всего двух каналах интернет разумно задать только одно правило. Для резервного канала.
— При нескольких каналах так же не имеет смысла делать правило для основного провайдера.
— Текущие настройки резервирования, при отказе «целевого» канала интернет предусматривают выход маркированного трафика через резервный канал(ы).
— Нужно помнить, что правила обрабатываются последовательно, в порядке написания. Это важно, если разные address-list содержат пересекающиеся адреса/сети. Без passthrough сработает первое встреченное правило, с passthrough – последнее. Учитывайте это при указании перекрывающихся диапазонов сетей в разных address-list.

По итогу, это выглядит приблизительно так (картинка кликабельна):

3. Настраиваем подключение к ISP и задействуем маршрутизацию по маркам

3.1. Настраиваем подключение к ISP1:
3.1.1. Конфигурируем статический IP адрес

/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"

3.1.2. Настраиваем статическую маршрутизацию:
3.1.2.1. Добавляем “аварийный” маршрут по умолчанию

/interface bridge add name=br-lo comment="Loopback interface"
/ip route add distance=254 gateway=br-lo comment="Emergency route"

Замечание. Этот маршрут позволяет трафику от локальных процессов проходить этап Route Decision независимо от состояния каналов любого из провайдеров. Нюанс исходящего локального трафика заключается в том, что чтобы пакет хоть куда-то двинулся, в основной таблице маршрутизации должен присутствовать активный маршрут до шлюза по умолчанию. Если его нет, то пакет просто будет уничтожен.

В качестве расширения инструмента check gateway для более глубокого анализа состояния канала предлагаю использовать метод рекурсивных маршрутов. Суть метода заключается в том, что мы указываем маршрут через промежуточный шлюз. Соответственно check gateway будет проверять доступность именно его, а не шлюза провайдера. В качестве таких “проверочных” шлюзов будут выбраны 4.2.2.1, 4.2.2.2 и 4.2.2.3 (это публичные адреса Level3DNS) соответственно для ISP1, ISP2 и ISP3. Можете выбрать любые другие доступные адреса, исходя из собственных предпочтений.

3.1.2.2. Задаем маршрут до “проверочного” адреса

/ip route add check-gateway=ping comment="For recursion via ISP1" \
distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=11

Замечание. В ROS7, относительно ROS6, несколько изменились условия построения рекурсивных маршрутов. Поэтому будем использовать универсальное решение, которое годится для обеих версий ROS. Суть его в том, что значение scope “базового маршрута” должно быть большим значения target-scope и равным target-scope рекурсивного маршрута.

3.1.2.3. Рекурсивный маршрут по умолчанию для трафика без routing mark

/ip route add check-gateway=ping comment="Unmarked via ISP1" \
distance=2 gateway=4.2.2.1 target-scope=11

Замечание. Значение distance=2 используется потому, что ISP1 по условиям задачи заявлен как первый резервный.

3.1.2.4. Рекурсивный маршрут по умолчанию для трафика c routing mark “to_isp1”
ROS6:

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 \
routing-mark=to_isp1 target-scope=11

ROS7 (в данном случае routing-mark заменяем на routing-table):

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 \
routing-table=to_isp1 target-scope=11

Замечание. Собственно, здесь мы наконец-то начинаем пользоваться плодами той подготовительной работы, что была проведена в пункте 2. По этому маршруту весь трафик, который имеет марку(таблицу) “to_isp1”, будет направлен на шлюз первого провайдера не зависимо от того, какой в данный момент активен шлюз по умолчанию для таблицы main.

3.1.2.5. Первый резервный рекурсивный маршрут по умолчанию для маркированного трафика провайдеров ISP2 и ISP3
ROS6:

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 \
routing-mark=to_isp2 target-scope=11
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 \
routing-mark=to_isp3 target-scope=11

ROS7 (в данном случае routing-mark заменяем на routing-table):

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 \
routing-table=to_isp2 target-scope=11
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 \
routing-table=to_isp3 target-scope=11

Замечание. Эти маршруты нужны, в том числе, для резервирования трафика с локальных сетей, которые состоят членами address list “to_isp*”’

3.1.2.6. Прописываем маршрут для локального трафика роутера в интернет через ISP1
ROS6:

/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1

ROS7:

/routing/rule/add action=lookup comment="From ISP1 IP to Inet" \
src-address=100.66.66.2 table=to_isp1

Замечание. В сочетании с правилами из пункта 1.8.2, обеспечивается выход в нужный канал с заданным соурсом. Это является критичным для построения туннелей, в которых задается IP адрес локальной стороны(EoIP, IP-IP, GRE, L2TP etc.). Поскольку правила в ip route rules выполняются сверху вниз, до первого совпадения условий, то данное правило должно быть после правил из пункта 1.8.2.

3.1.3. Прописываем правило NAT для исходящего трафика

/ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1" \
ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2

Замечание. NATим все выходящее, кроме того, что попадает в политики IPsec. Я стараюсь не использовать action=masquerade без крайней необходимости. Оно работает медленнее и более ресурсоемко, чем src-nat, поскольку для каждого нового соединения вычисляет адрес для NAT. Однако стоит помнить о таких свойствах masquerade как очистка соединений при падении канала и нюансы выбора адреса, если их на интерфейсе несколько и они из разных сетей.

3.1.4. Отправляем клиентов из списка, которым запрещен выход через остальных провайдеров сразу на шлюз провайдера ISP1

/ip firewall mangle add action=route chain=prerouting \
comment="Address List via ISP1 only" dst-address-list=!BOGONS passthrough=no \
route-dst=100.66.66.1 src-address-list=Via_only_ISP1 place-before=0

Замечание. action=route имеет более высокий приоритет и применяется раньше остальных правил маршрутизации. place-before=0 — помещает наше правило первым в списке.

3.2. Настраиваем подключение к ISP2.

Поскольку провайдер ISP2 настройки нам выдает по DHCP, разумно настройку и вероятные изменения делать скриптом, который стартует при срабатывании DHCP клиента
ROS6:

/ip dhcp-client
add add-default-route=no disabled=no interface=ether2 script=":if (\$bound=1) do={\r\
    \n   /ip route remove [ find gateway=\"4.2.2.2\" ]; /ip route remove [ find where \
dst-address ~\"4.2.2.2\" ]\r\
    \n   /ip route add check-gateway=ping comment=\"For recursion via ISP2\" distance=1 \
dst-address=4.2.2.2/32 gateway=\$\"gateway-address\" scope=11\r\
    \n   /ip route add check-gateway=ping comment=\"Unmarked via ISP2\" \
distance=1 gateway=4.2.2.2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP2 Main\" distance=1 gateway=4.2.2.2 \
routing-mark=to_isp2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP1 Backup1\" distance=2 gateway=4.2.2.2 \
routing-mark=to_isp1 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP3 Backup2\" distance=3 gateway=4.2.2.2 \
routing-mark=to_isp3 target-scope=11\r\
    \n   :if [:tobool ([/ip firewall nat find comment=\"NAT via ISP2\"])] do={\r\
    \n   /ip firewall nat set [find comment=\"NAT via ISP2\"] action=src-nat \
chain=srcnat ipsec-policy=out,none out-interface=\$\"interface\" \
to-addresses=\$\"lease-address\" \r\
    \n    } else={/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"lease-address\" \
    comment=\"NAT via ISP2\"}\r\
    \n   :if [:tobool ([/ip route rule find comment=\"From ISP2 IP to Inet\"])] do={\r\
    \n      /ip route rule set [find comment=\"From ISP2 IP to Inet\"] \
src-address=\$\"lease-address\" table=to_isp2\r\
    \n    } else={/ip route rule add comment=\"From ISP2 IP to Inet\" \
src-address=\$\"lease-address\" table=to_isp2}\r\
    \n} else={\r\
    \n   /ip route remove [find gateway=\"4.2.2.2\"]; /ip route remove [find where \
dst-address ~\"4.2.2.2\"]\r\
    \n   /ip firewall nat remove  [find comment=\"NAT via ISP2\"]\r\
    \n   /ip route rule remove [find comment=\"From ISP2 IP to Inet\"]\r\
    \n}\r\
    \n" use-peer-dns=no use-peer-ntp=no

ROS7:

/ip dhcp-client
add add-default-route=no dhcp-options=clientid,clientid interface=ether2 \
script=":if (\$bound=1) do={\r\
    \n   /ip route remove [ find gateway=\"4.2.2.2\" ]; /ip route remove \
[ find where dst-address ~\"4.2.2.2\" ]\r\
    \n   /ip route add check-gateway=ping comment=\"For recursion via ISP2\" distance=1 \
dst-address=4.2.2.2/32 gateway=\$\"gateway-address\" scope=11\r\
    \n   /ip route add check-gateway=ping comment=\"Unmarked via ISP2\" \
distance=1 gateway=4.2.2.2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP2 Main\" distance=1 gateway=4.2.2.2 \
routing-table=to_isp2 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP1 Backup1\" distance=2 gateway=4.2.2.2 \
routing-table=to_isp1 target-scope=11\r\
    \n   /ip route add comment=\"Marked via ISP3 Backup2\" distance=3 gateway=4.2.2.2 \
routing-table=to_isp3 target-scope=11\r\
    \n   :if [:tobool ([/ip firewall/nat/ find comment=\"NAT via ISP2\"])] do={\r\
    \n   /ip firewall nat set [find comment=\"NAT via ISP2\"] action=src-nat \
chain=srcnat ipsec-policy=out,none out-interface=\$\"interface\" \
to-addresses=\$\"lease-address\" \r\
    \n    } else={/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"lease-address\" \
comment=\"NAT via ISP2\"}\r\
    \n    :if [:tobool ([/routing/rule find comment=\"From ISP2 IP to Inet\"])] do={\r\
    \n      /routing/rule/set [find comment=\"From ISP2 IP to Inet\"] \
action=lookup src-address=\$\"lease-address\" table=to_isp2\r\
    \n    } else={/routing/rule/add action=lookup comment=\"From ISP2 IP to Inet\" \
src-address=\$\"lease-address\" table=to_isp2 }\r\
    \n} else={\r\
    \n   /ip route remove [find gateway=\"4.2.2.2\"]; /ip route remove [find where \
dst-address ~\"4.2.2.2\"]\r\
    \n   /ip firewall nat remove  [find comment=\"NAT via ISP2\"]\r\
    \n   /routing/rule/remove [find comment=\"From ISP2 IP to Inet\"]\r\
    \n}\r\
    \n" use-peer-dns=no use-peer-ntp=no

Привожу содержимое только тела скрипта DHCP клиента

ROS6:

:if ($bound=1) do={
   /ip route remove [ find gateway="4.2.2.2" ]; /ip route remove [ find where \
dst-address ~"4.2.2.2" ]
   /ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 \
dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=11
   /ip route add check-gateway=ping comment="Unmarked via ISP2" distance=1 \
gateway=4.2.2.2 target-scope=11
   /ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 \
routing-mark=to_isp2 target-scope=11
   /ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 \
routing-mark=to_isp1 target-scope=11
   /ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 \
routing-mark=to_isp3 target-scope=11
   :if [:tobool ([/ip firewall nat find comment="NAT via ISP2"])] do={
    /ip firewall nat set [find comment="NAT via ISP2"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"lease-address" 
    } else={ /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2"}
   :if [:tobool ([/ip route rule find comment="From ISP2 IP to Inet"])] do={
      /ip route rule set [find comment="From ISP2 IP to Inet"] \
src-address=$"lease-address" table=to_isp2
    } else={ /ip route rule add comment="From ISP2 IP to Inet" \
src-address=$"lease-address" table=to_isp2}
} else={
   /ip route remove [find gateway="4.2.2.2"]; /ip route remove [find where \
dst-address ~"4.2.2.2"]
   /ip firewall nat remove  [find comment="NAT via ISP2"]
   /ip route rule remove [find comment="From ISP2 IP to Inet"]
}

ROS7:

:if ($bound=1) do={
   /ip route remove [ find gateway="4.2.2.2" ]; /ip route remove \
[ find where dst-address ~"4.2.2.2" ]
   /ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 \
dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=11
   /ip route add check-gateway=ping comment="Unmarked via ISP2" distance=1 \
gateway=4.2.2.2 target-scope=11
   /ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 \
routing-table=to_isp2 target-scope=11
   /ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 \
routing-table=to_isp1 target-scope=11
   /ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 \
routing-table=to_isp3 target-scope=11
   :if [:tobool ([/ip firewall/nat/ find comment="NAT via ISP2"])] do={
    /ip firewall nat set [find comment="NAT via ISP2"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"lease-address" 
    } else={ /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2" }
    :if [:tobool ([/routing/rule find comment="From ISP2 IP to Inet"])] do={
      /routing/rule/set [find comment="From ISP2 IP to Inet"] action=lookup \
src-address=$"lease-address" table=to_isp2
    } else={ /routing/rule/add action=lookup comment="From ISP2 IP to Inet" \
src-address=$"lease-address" table=to_isp2 }
} else={
   /ip route remove [ find gateway="4.2.2.2" ]; /ip route remove [ find where \
dst-address ~"4.2.2.2" ]
   /ip firewall nat remove  [find comment="NAT via ISP2"]
   /routing/rule/remove [find comment="From ISP2 IP to Inet"]
}

Замечание. Первая часть скрипта срабатывает при успешном получении аренды, вторая — после освобождения аренды.Примечание 2

Важно!

В отдельных случаях шлюз может не отвечать на ICMP запросы. C этим можно встретиться на lte подключении в режиме passthrough или если провайдер фильтрует ICMP на шлюз. В такой ситуации для маршрута «For recursion via ISP(x)» вместо check-gateway=ping можно указывать check-gateway=arp.

3.3. Настраиваем подключение к провайдеру ISP3.

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

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

3.3.1. Сначала конфигурируем профиль
ROS6:

/ppp profile
add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client \
on-down="/ip route remove [find gateway=\"4.2.2.3\"]\r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip firewall nat remove  [find comment=\"NAT via ISP3\"]\r\
    \n/ip route rule remove [find comment=\"From ISP3 IP to Inet\"]" \
on-up="/ip route remove [find gateway=\"4.2.2.3\"]; \r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip route add check-gateway=ping comment=\"For recursion via ISP3\" distance=1 \
dst-address=4.2.2.3/32 gateway=\$\"remote-address\" scope=11\r\
    \n/ip route add check-gateway=ping comment=\"Unmarked via ISP3\" \
distance=3 gateway=4.2.2.3 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP3 Main\" distance=1 gateway=4.2.2.3 \
routing-mark=to_isp3 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP1 Backup2\" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp1 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP2 Backup2\" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp2 target-scope=11\r\
    \n/ip firewall mangle set [find comment=\"Connmark in from ISP3\"] \
in-interface=\$\"interface\"\r\
    \n:if [:tobool ([/ip firewall nat find comment=\"NAT via ISP3\"])] do={\r\
    \n  /ip firewall nat set [find comment=\"NAT via ISP3\"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=\$\"interface\" to-addresses=\$\"local-address\"} \
else={\r\
    \n  /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"local-address\" \
comment=\"NAT via ISP3\"}\r\
    \n:if [:tobool ([/ip route rule find comment=\"From ISP3 IP to Inet\"])] \
do={\r\
    \n  /ip route rule set [find comment=\"From ISP3 IP to Inet\"] \
src-address=\$\"local-address\" table=to_isp3} else={\r\
    \n  /ip route rule add comment=\"From ISP3 IP to Inet\" \
src-address=\$\"local-address\" table=to_isp3 }"

ROS7:

/ppp profile
add interface-list=WAN name=isp3_client on-down=\
    "/ip route remove [find gateway=\"4.2.2.3\"]\r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip firewall nat remove  [find comment=\"NAT via ISP3\"]\r\
    \n/routing/rule/ remove [find comment=\"From ISP3 IP to Inet\"]" \
on-up="/ip route remove [find gateway=\"4.2.2.3\"]; \r\
    \n/ip route remove [find where dst-address ~\"4.2.2.3\"]\r\
    \n/ip route add check-gateway=ping comment=\"For recursion via ISP3\" distance=1 \
dst-address=4.2.2.3/32 gateway=\$\"remote-address\" scope=11\r\
    \n/ip route add check-gateway=ping comment=\"Unmarked via ISP3\" \
distance=3 gateway=4.2.2.3 target-scope=11\r\
    \n/ip route add comment=\"Marked via ISP3 Main\" distance=1 gateway=4.2.2.3 \
routing-table=to_isp3 target-scope=11\r\
    \nip route add comment=\"Marked via ISP1 Backup2\" distance=3 gateway=4.2.2.3 \
routing-table=to_isp1 target-scope=11\r\
    \nip route add comment=\"Marked via ISP2 Backup2\" distance=3 gateway=4.2.2.3 \
routing-table=to_isp2 target-scope=11\r\
    \nip firewall mangle set [find comment=\"Connmark in from ISP3\"] \
in-interface=\$\"interface\"\r\
    \n:if [:tobool ([/ip firewall/nat/ find comment=\"NAT via ISP3\"])] do={\r\
    \n  /ip firewall nat set [find comment=\"NAT via ISP3\"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=\$\"interface\" to-addresses=\$\"local-address\"} \
else={\r\
    \n  /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=\$\"interface\" to-addresses=\$\"local-address\" \
comment=\"NAT via ISP3\"}\r\
    \n:if [:tobool ([/routing/rule/ find comment=\"From ISP3 IP to Inet\"])] do={\r\
    \n  /routing/rule/ set [find comment=\"From ISP3 IP to Inet\"] action=lookup \
src-address=\$\"local-address\" table=to_isp3} else={\r\
    \n  /routing/rule/ add action=lookup comment=\"From ISP3 IP to Inet\" \
src-address=\$\"local-address\" table=to_isp3 }"

Привожу содержимое только тела скрипта PPP профиля

ROS6(On Up):

/ip route remove [find gateway="4.2.2.3"]; 
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 \
dst-address=4.2.2.3/32 gateway=$"remote-address" scope=11
/ip route add check-gateway=ping comment="Unmarked via ISP3" distance=3 \
gateway=4.2.2.3 target-scope=11
/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 \
routing-mark=to_isp3 target-scope=11
/ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp1 target-scope=11
/ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 \
routing-mark=to_isp2 target-scope=11
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface"
:if [:tobool ([/ip firewall nat find comment="NAT via ISP3"])] do={
  /ip firewall nat set [find comment="NAT via ISP3"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"local-address"} else={
  /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3"}
:if [:tobool ([/ip route rule find comment="From ISP3 IP to Inet"])] do={
  /ip route rule set [find comment="From ISP3 IP to Inet"] \
src-address=$"local-address" table=to_isp3} else={
  /ip route rule add comment="From ISP3 IP to Inet" src-address=$"local-address" \
table=to_isp3 }

ROS6(On Down):

/ip route remove [find gateway="4.2.2.3"]
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip firewall nat remove  [find comment="NAT via ISP3"]
/ip route rule remove [find comment="From ISP3 IP to Inet"]

ROS7(On Up):

/ip route remove [find gateway="4.2.2.3"]; 
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 \
dst-address=4.2.2.3/32 gateway=$"remote-address" scope=11
/ip route add check-gateway=ping comment="Unmarked via ISP3" distance=3 \
gateway=4.2.2.3 target-scope=11
/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 \
routing-table=to_isp3 target-scope=11
ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 \
routing-table=to_isp1 target-scope=11
ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 \
routing-table=to_isp2 target-scope=11
ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface"
:if [:tobool ([/ip firewall/nat/ find comment="NAT via ISP3"])] do={
  /ip firewall nat set [find comment="NAT via ISP3"] action=src-nat chain=srcnat \
ipsec-policy=out,none out-interface=$"interface" to-addresses=$"local-address"} else={
  /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \
out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3"}
:if [:tobool ([/routing/rule/ find comment="From ISP3 IP to Inet"])] do={
  /routing/rule/ set [find comment="From ISP3 IP to Inet"] action=lookup \
src-address=$"local-address" table=to_isp3} else={
  /routing/rule/ add action=lookup comment="From ISP3 IP to Inet" \
src-address=$"local-address" table=to_isp3 }

ROS7(On Down):

/ip route remove [find gateway="4.2.2.3"]
/ip route remove [find where dst-address ~"4.2.2.3"]
/ip firewall nat remove  [find comment="NAT via ISP3"]
/routing/rule/ remove [find comment="From ISP3 IP to Inet"]

Замечание. Строка
/ip firewall mangle set [find comment=«Connmark in from ISP3»] in-interface=$«interface»;
позволяет корректно обрабатывать переименование интерфейса, поскольку работает с его ID а не отображаемым именем.

3.3.2. Теперь, используя профиль, создаем подключение ppp

/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no \
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client \
add-default-route=no user=isp3_client

Замечание. Некоторые провайдеры «забывают» отдавать параметр «remote-address». В таком случае, при подключении скрипт настройки отработает некорректно, а в логе вы увидите такую ошибку:
pppoe,ppp,info pppoe-isp3: could not determine remote address, using xxx.xxx.xxx.xxx
Для решения этой проблемы нужно отключить check-gateway для маршрута с комментарием «For recursion via ISP3» и задать в ppp профиле IP адрес(любой фиктивный):

/ip route unset [find comment="For recursion via ISP3"] check-gateway
/ppp profile set isp3_client remote-address=169.254.69.96

Строка
/ip firewall mangle set [find comment=«Connmark in from ISP3»] in-interface=$«interface»;
позволяет корректно обрабатывать переименование интерфейса, поскольку работает с его идентификатором в системе а не отображаемым именем.

В качестве последнего штриха настроим часы
ROS6:

/system ntp client set enabled=yes \
server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org

ROS7:

/system ntp client set enabled=yes \
servers=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org

Для тех, кто дочитал до конца

Предложенный способ реализации мультиван — есть личное предпочтение автора и не является единственно возможным. Инструментарий ROS обширен и гибок, что с одной стороны вызывает сложности для начинающих, с другой — причина популярности. Изучайте, пробуйте, открывайте для себя новые инструменты и решения. Например, в качестве применения полученных знаний, можно в данной реализации мультиван заменить инструмент Сheck-gateway с рекурсивными маршрутами на Netwatch. Так же можно для повышения надежности использовать каскад рекурсивных маршрутов, что уменьшит количество ложных переключений при временной недоступности хоста, выбранного в качестве «базового». А такое иногда случается, даже со сверхнадежными anycast адресами.

Примечания

  1. Check-gateway — механизм, который позволяет деактивировать маршрут после двух подряд не успешных проверок шлюза на доступность. Проверка осуществляется раз в 10 секунд, плюс таймаут ответа. Итого, фактический тайминг переключения лежит в диапазоне 20-30 секунд. Если такой тайминг переключения не достаточен — есть вариант воспользоваться инструментом Netwatch, где таймер проверки можно задавать вручную и использовать пользовательские скрипты для более тонкого анализа состояния.
    Механизм Check-gateway не срабатывает при периодических потерях пакетов в канале. Важно! Деактивация/активация маршрута механизмом Check-gateway влечет за собой деактивацию/активацию всех остальных маршрутов, которые идут через тот же шлюз. Поэтому включать check-gateway для всех связанных маршрутов нет необходимости.
  2. Бывает, что в механизме работы DHСP происходит сбой, который выглядит, как клиент подвисший в состоянии renew. В таком случае вторая часть скрипта не отработает, но корректно ходить трафику не помешает, поскольку состояние отслеживает соответствующий рекурсивный маршрут.
  3. ECMP (Equal Cost Multi-Path) — в ROS есть возможность задать маршрут с несколькими шлюзами и одинаковой distance. В таком случае соединения будут распределяться по каналам, используя алгоритм round robin, пропорционально количеству указанных шлюзов.

За толчок к написанию статьи, помощь при формировании ее структуры и расстановке акцентов — личная благодарность Евгению @jscar

Инструкция по настройке 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 интерфейс.

2 провайдера в квартиру

Вопрос от пользователя

Здравствуйте.

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

Не подскажите, как все попроще настроить, чтобы «если-что» включался резервный канал: в случае выхода из строя основного — работал второй сам, без моих долгих действий… Можно так?

Здравствуйте!

В принципе, такое организовать можно даже своими силами (еще проще: попросить монтажников, которые вам будут проводить сеть, — всё настроить 👌).

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

И да, на мой взгляд, для домашних нужд — есть более простой вариант решения вопроса… (см. 2-й способ внизу статьи…).

*

Варианты создания резервного канала выхода в Интернет

Способ 1: настройка роутера в режиме Multi-WAN

📌Ремарка 1: для полной автоматизации по выбору работающего подключения сразу среди двух Ethernet-кабелей от разных провайдеров — нужен спец. Wi-Fi роутер с поддержкой режима «Multi-WAN» (прим.: я все же исхожу из домашних условий, и что Wi-Fi нужен!).

Я бы для решения такой задачи порекомендовал присмотреться к роутерам от ZyXel и TP-link (они легко настраиваются). Есть весьма достойные устройства от Microtic, но для начинающих они сложны в настройке…

*

📌Ремарка 2: часто проблемы с доступом в Интернет возникают из-за отключения электричества. И в этом случае, если провайдеры сэкономили на оборудовании — то доступ к сети может пропасть сразу у нескольких ваших подключений (этот момент, конечно, можно уточнить у провайдера при заключении договора на оказание услуг связи…).

В любом случае, рекомендуется и ПК, и роутер (к которому будет подключены кабели от Интернет-провайдеров) подключить к ИБП.

*

1) В своем примере ниже я взял типовой роутер от ZyXel Keenetic (обратите внимание, что Ethernet-кабель от основного Интернет-провайдера подключается в гнездо WAN (обычно, оно синее), а резервный второй Ethernet-кабель — в гнездо LAN-1 (обычно, оно желтое).

В общем-то, сам процесс соединения проводов — стандартный, как и при обычном подключении…

Начало настройки

Начало настройки

Смотрим настройки роутера

Смотрим характеристики роутера

2) Далее нужно настроить подключение к Интернет для основного канала (WAN-порт, в прошивке Keenetic он помечен синим цветом с аббревиатурой «0»). См. скриншот ниже 👇 (никаких особых настроек тут не требуется, просто задаются параметры как при настройке обычного подключения).

Шаг 1 - проверяем, чтобы подключение к Интернет было установлено!

Шаг 1 — проверяем, чтобы подключение к Интернет было установлено!

3) После требуется добавить еще один интерфейс для порта LAN-1 (куда был подключен резервный Ethernet-кабель от второго дополнительного провайдера), и настроить подкл. к Интернет.

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

Шаг 2 - настройка второго подключения к Интернет

Шаг 2 — настройка второго подключения к Интернет

4) Затем необходимо задать проверку доступности доступа в Интернет — рекомендуется это сделать для основного подключения (если оно не будет работать — роутер об этом «узнает» и переключит сеть автоматически на второе подкл-е!).

Шаг 3 - проверка работоспособности подключения 1

Шаг 3 — проверка работоспособности подключения 1

5) В принципе, всё!

Дальше останется настроить Wi-Fi-подключения, пробросить порты (если нужно) и пр. «мелочи» под-себя…

Теперь попробуйте проверить, как работает роутер — просто отключите от основного WAN-порта сетевой кабель! В этот момент у вас пропал доступ в Интернет?

В идеале, если все правильно настроено, роутер «почти» сразу же в авто-режиме должен переключиться на второе резервное подключение — т.е. на компьютере дальше будут продолжать открываться веб-странички… 👌

Когда восстановится норм. доступ по WAN — устройство переключится снова на основной канал связи.

*

Способ 2: создание точки доступа на телефоне (расшаривание мобильного интернета)

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

  • во-первых, при отключении электричества в доме (районе) — очень вероятно, что оборудование провайдера тоже отключится и доступ в Интернет пропадет;
  • во-вторых, нужно проводить в квартиру второй кабель, что не всегда удобно (да и платить опять же нужно будет за 2 провайдера…);
  • в-третьих, в силу разных особенностей — не всегда просто настроить корректно работу резервного канала (по крайней мере, не всегда это можно сделать дешево…).

*

📌 И в этом плане (на мой взгляд) хорошим резервным каналом может служить обычный смартфон (при наличии у вас достаточного кол-ва трафика). Он лишен выше-оговоренных недостатков, к тому же он уже есть, и за него так и так платишь… (единственный недостаток: скорость ниже и меньшее кол-во трафика, чем у проводного подключения).

*

Как поделиться Интернетом с телефона (для Android):

  • сначала проверяем, есть ли на телефоне мобильный интернет (это можно увидеть даже 📌по значкам… 👇);

    Доступ к Интернет есть

    Доступ к Интернет есть

  • далее открыть его настройки;
  • затем войти во вкладку «Подключения» и найти раздел «Мобильная точка доступа»;
  • включить данный режим в смартфоне и задать название Wi-Fi сети и пароля;

    Мобильная точка доступа — Android 10

    Мобильная точка доступа — Android 10

  • затем на ноутбуке (ПК) подключиться к этой Wi-Fi сети. На все про все — потребуется 1-2 мин.

    Подключаемся к точке доступа

    Подключаемся к точке доступа

*

Причем, этот способ хорош и тем, что при откл. электричества — очень вероятно, что сеть будет работать (а если вы пользуетесь ноутбуком — то часа на 3-4 работы этого способа должно хватить).

*

📌 В помощь!

Как с Android раздавать интернет на компьютер или ноутбук (по USB, Wi-Fi или Bluetooth) — https://ocomp.info/razdavat-internet-s-android.html

*

PS

Еще один сподручный вариант: если ваш сосед подключен к другому Интернет-провайдеру — можно с ним договориться и дать друг для друга доступ к Wi-Fi сети. Когда у вас «полетит» сеть — вы попробуете подключиться к нему, когда у него — он к вам. Правда, это все работает при усл., что сосед адекватен… 😉

Кстати, также можно прикупить USB-модем — это во многих случаях выходит дешевле, чем второе проводное подключение и оборудование для его подключения.

USB-модем МегаФон 4G+ М150-4

USB-модем МегаФон 4G+ М150-4

*

На сим пока всё… За дополнения по теме — заранее благодарю!

Удачи!

👋

donate

dzen-ya

Материал из 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

Проверка

Хотите узнать, как подключить 2 провайдера к одному роутеру? В этой статье мы расскажем вам все о том, каким образом можно настроить доступ к Интернету через два провайдера одновременно, и что нужно делать, чтобы все работало как надо.

  1. Что такое подключение к двум провайдерам
  2. Можно ли пользоваться двумя провайдерами одновременно
  3. Можно ли к одному роутеру подключить другой
  4. Можно ли к роутеру подключить еще один
  5. Как подключить 2 провайдера к одному роутеру
  6. Полезные советы
  7. Выводы

Что такое подключение к двум провайдерам

Речь идет о подключении к двум разным провайдерам с целью:

  • улучшения стабильности соединения;
  • увеличения скорости загрузки файлов и страниц;
  • расширения зоны покрытия Wi-Fi сети.

Можно ли пользоваться двумя провайдерами одновременно

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

Можно ли к одному роутеру подключить другой

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

Можно ли к роутеру подключить еще один

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

Как подключить 2 провайдера к одному роутеру

Для начала, необходимо перейти в меню Интернет на вкладку IPoE. Далее, нажмите кнопку «Добавить интерфейс» и настройте доступ к Интернету, в соответствии с условиями подключения провайдеров. Затем, подключите Ethernet-кабель второго (резервного) интернет-канала к указанному в настройках желтому разъему роутера.

Полезные советы

  • Если у вас есть возможность, подключайтесь к провайдерам, использующим разные каналы связи. Например, один провайдер может использовать ADSL-технологию, а другой — кабельное или оптическое соединение. Таким образом, вы уменьшите вероятность сбоев в своей сети;
  • Не забудьте проверить свои настройки после подключения второго провайдера. Возможно, вам потребуется осуществить некоторые изменения в настройках VLAN и MAC адреса.

Выводы

Подключение к двум провайдерам помогает улучшить стабильность работы вашей сети и связи, а также расширить зону покрытия Wi-Fi. Если у вас есть два роутера, то объединение их в одной сети поможет увеличить эффективность использования сети. Все настройки можно произвести самостоятельно, следуя инструкциям провайдеров и роутеров.

Как проверить фиксацию TTL

Для того чтобы узнать значение TTL на компьютере, необходимо открыть меню «Пуск» и ввести запрос «Командная строка». Затем следует выбрать соответствующую программу и кликнуть по ней правой кнопкой мыши. Это приведет к открытию консольного окна, в котором нужно ввести команду ping 127.0.01 или ping 127.0.0.1. При выполнении данной команды программа отправит запрос «ping» на указанный адрес «127.0.01» или «127.0.0.1» и получит ответ от этого же адреса. В полученном ответе будет указано значение TTL, которое показывает количество шагов, которые пакет может пройти между отправкой и получением. Если значение TTL равно 128, то это означает, что пакет может пройти через 128 шагов. Эта информация позволяет проверить фиксацию TTL на компьютере.

Как настроить 3 роутера в одну сеть

Для настройки 3 роутеров в одну сеть можно использовать два способа. Первый — соединение роутеров с помощью сетевого кабеля. Для этого нужно проложить кабель от одного роутера к другому. Второй способ — соединение роутеров по Wi-Fi, через режимы моста, клиента или репитера. Соединение моста (WDS) используется, чтобы расширить сеть при помощи Wi-Fi между двумя роутерами, а режим клиента позволяет подключить роутер к другой существующей беспроводной сети. Режим репитера используется для усиления сигнала Wi-Fi. При настройке роутеров в одну сеть, важно установить разные IP-адреса на каждом из них, чтобы избежать конфликта адресов. Также нужно настроить одинаковые параметры сети на всех роутерах, включая SSID, канал и безопасность.

Какой роутер выбрать для дом ру

При выборе роутера для дома рекомендуется обратить внимание на несколько популярных моделей, которые предлагает интернет-магазин «Дом. ру». Среди них TP-Link EC220, D-link DIR-2150 и TP-Link Archer AX20 с поддержкой технологии Wi-Fi 6. Оптимальный выбор зависит от площади квартиры или дома, однако TP-Link Archer AX20 рекомендуется для домов и квартир с площадью более 80 кв. м. Эта модель обладает высокой производительностью и быстротой передачи данных, а также отлично подходит для групповых видеозвонков и онлайн-игр. D-link DIR-2150 имеет высокую скорость работы и простоту настройки, а TP-Link EC220 является надежным и стабильным роутером по доступной цене. При выборе стоит учитывать требования к скорости, надежности и дальности передачи Wi-Fi-сигнала на объекте.

Можно ли через кнопочный телефон раздавать интернет

Раздавать интернет через кнопочный телефон невозможно, так как у этого типа устройств другая операционная система, которая не предназначена для такого рода задач. Обычно в кнопочных телефонах отсутствует необходимое программное обеспечение для раздачи интернет-соединения. Для того чтобы раздавать интернет, необходимо иметь телефон с современной операционной системой, которая поддерживает функционал Wi-Fi точки доступа. Однако, если у вас есть кнопочный телефон с подключением к интернету, то возможно использование доступных коммуникационных приложений, таких как WhatsApp и Viber, для передачи данных. В целом, чтобы раздавать интернет в надлежащем качестве, следует предпочитать современные устройства, имеющие необходимые функции и возможности.

  • Группировка портов в роутере ростелеком
  • Два провайдера на одном роутере asus
  • Данные от провайдера для подключения роутера
  • Два wifi роутера в одной сети через кабель
  • Два интернет соединения на одном роутере