2 провайдера с PCC и PBR

Настройка MikroTik на 2 провайдера с балансировкой нагрузки и резервированием (Failover) с возможностью суммирования скорости и выбора конкретного оператора для хостов и сетей с максимально возможным использованием всех каналов.

Профессиональная настройка MikroTik с гарантией результата
Оперативность и выполнение в срок без предоплаты и бюрократии
Обсудить задачу: @Engineer_MikroTik | Ценовая политика
!!!Вышла ветка long-term для RouterOS 7!!!

2 провайдера?

Статья является сложным примером настройки, который учитывает различные варианты подключения и балансировки трафика.
Если вы не знаете что такое Vlan, Mangle и таблицы маршрутизации — лучше использовать более простую статью 2WAN RouterOS 7.

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

  1. Static IP — когда IP, маска и шлюз указываются вручную; WAN1, 10Мбит, высокая надежность канала.
  2. DHCP — настройки приходят автоматически и IP/Маска/Шлюз могут меняться; WAN2, 10Мбит, надежность ниже из-за DHCP.
  3. PPPoE — авторизация через логин пароль и IP/Network так же динамические; WAN3, 5Мбит, резерв.
  4. USB LTE — внешний 4G/LTE модем; WAN4, скорость всегда плавающая, резерв «судного дня».

Суммирование (балансировку) трафика делаем для WAN1/WAN2 — так как у них одинаковая скорость и почти одинаковая надежность. Этим будет заниматься PCC на основе адрес листов.

WAN3 используем для гостевого WiFi, чтобы не отнимать скорость от основных провайдеров. Отправлять через нужного оператора будет PBR так же по адрес листам.

WAN4 — на случай падения всех 3х провайдеров, LTE останется последней надеждой, весь трафик пойдет через этого него. Но можно ограничить через Firewall, чтобы не «положить» канал.

Оборудование

Я рекомендую использовать современные модели MikroTik минимум на 5 портов с наличием USB и современного AX стандарта.

Идеальным для офиса является RB5009, hAP AX3 и hAP AX2 (в нем нет USB). Дальше идет серия CCR, которая значительно мощнее и дороже.

В этом примере настройка производится на RB951Ui-2HnD (не покупайте это старьё!) с RouterOS 7

Настройки провайдеров

Для удобства настройки и переноса провайдеров между портами — будут использоваться Vlan’ы и должен быть включен Bridge Vlan Filtering.
Если у вас проблемы с пониманием Vlan — настраивайте на физических портах ether1-3.

WAN1/Static IP

  • Vlan11
  • IP: 1.1.1.2/30
  • Mask: 255.255.255.252
  • GW: 1.1.1.1

WAN2/DHCP(IPoE)

  • Vlan12
  • IP/Mask/GW могут каждый раз быть разными

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

WAN3/PPPoE

  • Vlan13
  • Логин: PPPoE_WAN3_Login
  • Пароль: PPPoE_WAN3_Password
  • IP/Network так же могут меняться

WAN4/LTE

Данные зависят от используемого модема, я рекомендую использовать LHG LTE6 kit серию MikroTik

  • lte1
  • IP/Mask/GW по DHCP не меняются
Для универсальности настроек будут созданы DHCP/PPPoE профили с скриптами для извлечения IP адресов с сетью/шлюзом.

Настройка MultiWAN

Настройка разбита на несколько этапов по разным меню WinBox.

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

Vlan

Как раньше упоминалось — провайдеры будут жить на Vlan, создадим их на существующем bridgeLAN:

Vlan11-13 используются для работы провайдеров, WAN4 будет lte1 интерфейс и для него Vlan не создается
Vlan11-13 используются для работы провайдеров, WAN4 будет lte1 интерфейс и для него Vlan не создается
/interface vlan
add comment=WAN1 interface=bridgeLAN name=vlan11 vlan-id=11
add comment=WAN2 interface=bridgeLAN name=vlan12 vlan-id=12
add comment=WAN3 interface=bridgeLAN name=vlan13 vlan-id=13

Bridge Vlan Filtering

Включаем VLAN Filtering на bridgeLAN, в котором находятся все порты
Включаем VLAN Filtering на bridgeLAN, в котором находятся все порты
/interface bridge
add name=bridgeLAN vlan-filtering=yes
И указываем на каком порту будет Vlan в режиме Access
И указываем на каком порту будет Vlan в режиме Access
Порты, которые смотрят на оператора должны быть в STP Edge: yes
Порты, которые смотрят на оператора должны быть в STP Edge: yes
/interface bridge port
add bridge=bridgeLAN frame-types=admit-only-untagged-and-priority-tagged interface=ether1 pvid=11 edge=yes

Interface List

Создаем Interface List под каждого оператора и объединяем в единый лист WAN-ALL для удобства описания правил
Создаем Interface List под каждого оператора и объединяем в единый лист WAN-ALL для удобства описания правил
/interface list
add name=WAN1
add name=WAN2
add name=WAN3
add name=WAN4
add include=WAN1,WAN2,WAN3,WAN4 name=WAN-ALL
/interface list member
add interface=vlan11 list=WAN1
add interface=vlan12 list=WAN2
add interface=vlan13 list=WAN3
add interface=pppoe-out_wan3 list=WAN3
add interface=lte1 list=WAN4
В конфигурации указан pppoe-out_wan3, который фактически будет создан позже.

IP Addresses

Указываем настройки WAN1 - 1.1.1.2/30
Указываем настройки WAN1 — 1.1.1.2/30
/ip address
add address=1.1.1.2/30 interface=vlan11 network=1.1.1.0

IP DHCP Client

WAN2 DHCP

Принимаем настройки WAN2 через DHCP БЕЗ добавления маршрута по умолчанию и получения настроек DNS/NTPСкрипт будет сам брать IP и шлюз чтобы проставить в нужных местах конфигурации
Принимаем настройки WAN2 через DHCP БЕЗ добавления маршрута по умолчанию и получения настроек DNS/NTP

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

:local WANDHCP vlan12;

local result [/ip address get value-name=address [find interface=$WANDHCP]];
local WANDHCPIP [:pick $result 0 [:find $result "/"]];
local WANDHCPGW [/ip/dhcp-client/get value-name=gateway [find interface=$WANDHCP]];
local WANDHCPNET [/ip/address get value-name=network [find interface=$WANDHCP]];


/ip route set [find comment="WAN2_!_Recursive"] gateway=$WANDHCPGW
/routing rule set [find comment="Route_Only_WAN2"] src-address=$WANDHCPIP;

WAN4 LTE

Не получаем никаких данных кроме IP, маски и шлюза
Не получаем никаких данных кроме IP, маски и шлюза
И так же скриптом "выцепляем" эти данные для использования в конфигурации
И так же скриптом «выцепляем» эти данные для использования в конфигурации
:local WANDHCP lte1;

local result [/ip address get value-name=address [find interface=$WANDHCP]];
local WANDHCPIP [:pick $result 0 [:find $result "/"]];
local WANDHCPGW [/ip/dhcp-client/get value-name=gateway [find interface=$WANDHCP]];
local WANDHCPNET [/ip/address get value-name=network [find interface=$WANDHCP]];


/ip route set [find comment="WAN4_!_Recursive"] gateway=$WANDHCPGW
/routing rule set [find comment="Route_Only_WAN4"] src-address=$WANDHCPIP;

WAN1 (на всякий случай)

Если WAN1 вдруг поменяет статику на динамику - подготовим так же скрипт и выключим DHCP
Если WAN1 вдруг поменяет статику на динамику — подготовим так же скрипт и выключим DHCP
:local WANDHCP vlan11;

local result [/ip address get value-name=address [find interface=$WANDHCP]];
local WANDHCPIP [:pick $result 0 [:find $result "/"]];
local WANDHCPGW [/ip/dhcp-client/get value-name=gateway [find interface=$WANDHCP]];
local WANDHCPNET [/ip/address get value-name=network [find interface=$WANDHCP]];


/ip route set [find comment="WAN1_!_Recursive"] gateway=$WANDHCPGW
/routing rule set [find comment="Route_Only_WAN1"] src-address=$WANDHCPIP;

PPP/Profiles

В конфигурации используется PPPoE, на котором могут меняться IP/Network. Мы сделаем 4 профиля на случай смены типов подключения остальных операторов для быстрой перенастройки.

На случай появления 2 провайдера PPPoE сделаем заготовки под MultiWAN
На случай появления 2 провайдера PPPoE сделаем заготовки под MultiWAN
:local WANDHCP PPPoE_WAN3;

local result [/ip address get value-name=address [find interface=$WANDHCP]];
local WANDHCPIP [:pick $result 0 [:find $result "/"]];
local WANDHCPNET [/ip/address get value-name=network [find interface=$WANDHCP]];


/ip route set [find comment="WAN3_!_Recursive"] gateway=$WANDHCPNET/routing rule set [find comment="Route_Only_WAN3"] src-address=$WANDHCPIP;

Все 4 профиля:

/ppp profile
add change-tcp-mss=yes name=PPPoE_WAN1 on-up=":local WANDHCP PPPoE_WAN1;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN1_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN1\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN1\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no
add change-tcp-mss=yes name=PPPoE_WAN2 on-up=":local WANDHCP PPPoE_WAN2;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN2_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN2\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN2\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no
add change-tcp-mss=yes name=PPPoE_WAN3 on-up=":local WANDHCP PPPoE_WAN3;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN3_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN3\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN3\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no
add change-tcp-mss=yes name=PPPoE_WAN4 on-up=":local WANDHCP PPPoE_WAN4;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN4_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN4\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN4\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no

PPPoE

Создаем PPPoE соединение на Vlan13 с указанием Name: PPPoE_WAN3 как в профиле
Создаем PPPoE соединение на Vlan13 с указанием Name: PPPoE_WAN3 как в профиле
Указываем выбранный профиль
Указываем выбранный профиль

Address List

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

/ip firewall address-list
add address=10.0.0.0/8 list=local
add address=172.16.0.0/12 list=local
add address=192.168.0.0/16 list=local

Так же заранее создаем листы для проверки интернет каналов через Netwatch:

/ip firewall address-list
add address=4.2.2.1 list=Only_WAN1
add address=4.2.2.2 list=Only_WAN2
add address=77.88.8.1 list=Only_WAN1
add address=77.88.8.2 list=Only_WAN2
add address=4.2.2.3 list=Only_WAN3
add address=77.88.8.3 list=Only_WAN3
add address=4.2.2.4 list=Only_WAN4
add address=77.88.8.8 list=Only_WAN4

Routing Tables

Создаем таблицы маршрутизации для каждого провайдера
Создаем таблицы маршрутизации для каждого провайдера
/routing table
add disabled=no fib name=WAN1
add disabled=no fib name=WAN2
add disabled=no fib name=WAN3
add disabled=no fib name=WAN4

Mangle

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

Mark Connection

Маркируем новые соединения от WAN1 и не от локальных сетей
Маркируем новые соединения от WAN1 и не от локальных сетей
Вешаем метку соединения con-WAN1
Вешаем метку соединения con-WAN1

Mark Routing

Трафик не от WAN интерфейсов, но промаркированный соединением con-WAN1
Трафик не от WAN интерфейсов, но промаркированный соединением con-WAN1
Отправляем в таблицу маршрутизации WAN1
Отправляем в таблицу маршрутизации WAN1

Mark Roution Out

Исходящий трафик промаркированный соединением con-WAN1
Исходящий трафик промаркированный соединением con-WAN1
Так же отправляем в таблицу маршрутизации WAN1
Так же отправляем в таблицу маршрутизации WAN1
Маркировку повторяем для каждого провайдера, а их в примере 4 штуки.
/ip firewall mangle
add action=mark-connection chain=prerouting comment="Mark Connection WAN1" connection-mark=no-mark connection-state=new in-interface-list=WAN1 new-connection-mark=con-WAN1 src-address-list=!local
add action=mark-connection chain=prerouting comment="Mark Connection WAN2" connection-mark=no-mark connection-state=new in-interface-list=WAN2 new-connection-mark=con-WAN2 src-address-list=!local
add action=mark-connection chain=prerouting comment="Mark Connection WAN3" connection-mark=no-mark connection-state=new in-interface-list=WAN3 new-connection-mark=con-WAN3 src-address-list=!local
add action=mark-connection chain=prerouting comment="Mark Connection WAN4" connection-mark=no-mark connection-state=new in-interface-list=WAN4 new-connection-mark=con-WAN4 src-address-list=!local
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN1 in-interface-list=!WAN-ALL new-routing-mark=WAN1
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN2 in-interface-list=!WAN-ALL new-routing-mark=WAN2
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN3 in-interface-list=!WAN-ALL new-routing-mark=WAN3
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN4 in-interface-list=!WAN-ALL new-routing-mark=WAN4
add action=mark-routing chain=output comment="Mark Roution Out WAN1" connection-mark=con-WAN1 new-routing-mark=WAN1
add action=mark-routing chain=output comment="Mark Roution Out WAN2" connection-mark=con-WAN2 new-routing-mark=WAN2
add action=mark-routing chain=output comment="Mark Roution Out WAN3" connection-mark=con-WAN3 new-routing-mark=WAN3
add action=mark-routing chain=output comment="Mark Roution Out WAN4" connection-mark=con-WAN4 new-routing-mark=WAN4

Routing Rules

Чтобы трафик не убегал через других провайдеров, "прибиваем" маршрутизацию к конкретным операторам
Чтобы трафик не убегал через других провайдеров, «прибиваем» маршрутизацию к конкретным операторам

Route_Only_WANX будет автоматически подставляться для DHCP и PPPoE.

/routing rule
add action=lookup-only-in-table comment=Route_Only_WAN1 disabled=no src-address=1.1.1.2/32 table=WAN1
add action=lookup disabled=no dst-address=77.88.8.1/32 table=WAN1
add action=lookup-only-in-table comment=Route_Only_WAN2 disabled=no src-address=2.2.2.2/32 table=WAN2
add action=lookup disabled=no dst-address=77.88.8.2/32 table=WAN2
add action=lookup-only-in-table comment=Route_Only_WAN3 disabled=no src-address=3.3.3.2/32 table=WAN3
add action=lookup disabled=no dst-address=77.88.8.3/32 table=WAN3
add action=lookup-only-in-table comment=Route_Only_WAN4 disabled=no src-address=192.168.42.225/32 table=WAN4
add action=lookup disabled=no dst-address=77.88.8.8/32 table=WAN4

NAT

Чтобы преобразовать адреса в один — настроим NAT. В нашем случае это будет masquerade и src-nat для оператора с Static IP.

masquerade для каждого соединения определяет внешний IP меняет Src Address первого пакета соединенияВ случае src-nat система сразу знает на какой IP менять
masquerade для каждого соединения определяет внешний IP меняет Src Address первого пакета соединения
В случае src-nat система сразу знает на какой IP менять
/ip firewall nat
add action=src-nat chain=srcnat comment="NAT WAN1" ipsec-policy=out,none out-interface-list=WAN1 src-address-type=!local to-addresses=1.1.1.2
add action=masquerade chain=srcnat comment="NAT WAN2" ipsec-policy=out,none out-interface-list=WAN2 src-address-type=!local
add action=masquerade chain=srcnat comment="NAT WAN3" ipsec-policy=out,none out-interface-list=WAN3 src-address-type=!local
add action=masquerade chain=srcnat comment="NAT WAN4" ipsec-policy=out,none out-interface-list=WAN4 src-address-type=!local

Лучшим вариантом будет всегда указывать src-nat, для DHCP/PPPoE

Можно доработать скрипт который используется в DHCP Client и PPPoE Profile
Можно доработать скрипт который используется в DHCP Client и PPPoE Profile
/ip firewall nat set [find comment="NAT WAN2"] to-addresses=$WANDHCPIP;

Рекурсивная маршрутизация

Рекурсивная маршрутизация используется для проверки адреса за шлюзом оператора, так как проверка самого шлюза не является показателем доступности интернета.

Используются IP адреса, которые проверяются только после сигнала от netwatch
Используются IP адреса, которые проверяются только после сигнала от netwatch
Указываем, что 4.2.2.1 доступен за шлюзом провайдера WAN1, то есть 1.1.1.1
Указываем, что 4.2.2.1 доступен за шлюзом провайдера WAN1, то есть 1.1.1.1
Далее маршрут по умолчанию указываем через 4.2.2.1, который доступен через шлюз провайдера
Далее маршрут по умолчанию указываем через 4.2.2.1, который доступен через шлюз провайдера
Обратим внимание, что Target Scope и Scope совпадают
/ip route
add comment="Table WAN1" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.1 routing-table=WAN1 scope=30 suppress-hw-offload=no target-scope=11
add comment="Table WAN2" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.2 routing-table=WAN2 scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN1_!_Recursive disabled=no distance=1 dst-address=4.2.2.1/32 gateway=1.1.1.1 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment=WAN2_!_Recursive disabled=no distance=1 dst-address=4.2.2.2/32 gateway=2.2.2.1 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment=WAN1_Recursive disabled=no distance=10 dst-address=0.0.0.0/0 gateway=4.2.2.1 routing-table=main scope=30 target-scope=11
add comment=WAN2_Recursive disabled=no distance=20 dst-address=0.0.0.0/0 gateway=4.2.2.2 routing-table=main scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN3_!_Recursive disabled=no distance=1 dst-address=4.2.2.3/32 gateway=3.3.3.1 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment=WAN3_Recursive disabled=no distance=30 dst-address=0.0.0.0/0 gateway=4.2.2.3 routing-table=main scope=30 suppress-hw-offload=no target-scope=11
add comment="Table WAN3" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.3 routing-table=WAN3 scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN4_!_Recursive disabled=no distance=1 dst-address=4.2.2.4/32 gateway=192.168.42.129 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment="Table WAN4" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.4 routing-table=WAN4 scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN4_Recursive disabled=no distance=40 dst-address=0.0.0.0/0 gateway=4.2.2.4 routing-table=main scope=30 suppress-hw-offload=no target-scope=11

Netwatch

Для проверки доступности интернета и переключения будет использован netwatch, который в случае недоступности адреса запустит проверку check gateway в рекурсивной маршрутизации, которая отключит неиспользуемый маршрут. На все переключение будет уходить до 30 секунд.

Все 4 оператора проверяются через разные IP адреса, хотя можно проверять один и тот же адрес, указав Src. Address проверяемого оператора
Все 4 оператора проверяются через разные IP адреса, хотя можно проверять один и тот же адрес, указав Src. Address проверяемого оператора
Проверка каждые 10 секунд
Проверка каждые 10 секунд
Если не работает - включает check-gateway, который делает 2 проверки с интервалом 10 секунд и отключает маршрут
Если не работает — включает check-gateway, который делает 2 проверки с интервалом 10 секунд и отключает маршрут
Если заработало - отключает опцию check-gateway на рекурсивных маршрутах
Если заработало — отключает опцию check-gateway на рекурсивных маршрутах

Firewall Output

Подстраховка для проверки с нужных операторов - цепочка Output в Firewall, которая запрещает общаться с хостом с другого интерфейса
Подстраховка для проверки с нужных операторов — цепочка Output в Firewall, которая запрещает общаться с хостом с другого интерфейса
/ip firewall filter
add action=drop chain=output comment="Only WAN1" dst-address-list=Only_WAN1 out-interface-list=!WAN1
add action=drop chain=output comment="Only WAN2" dst-address-list=Only_WAN2 out-interface-list=!WAN2
add action=drop chain=output comment="Only WAN3" dst-address-list=Only_WAN3 out-interface-list=!WAN3
add action=drop chain=output comment="Only WAN4" dst-address-list=Only_WAN4 out-interface-list=!WAN4

DNS

Так как использовать операторские DNS мы не можем потому что они работают только внутри оператора, будем использовать публичные.

DNS Яндекса используются для проверки Netwatch — нужны другие. Например оставшиеся безопасный 77.88.8.88 и детский 77.88.8.7

Дополнительно добавляем «восьмерки» 8.8.8.8 и 8.8.4.4

Указываем публичные DNS и включаем сам DNS сервис
Указываем публичные DNS и включаем сам DNS сервис
/ip dns
set allow-remote-requests=yes servers=77.88.8.7,77.88.8.88,8.8.8.8,8.8.4.4

Гостевой WiFi через WAN3 (PBR)

PBR позволяет выпускать с нужного оператора отдельный хост или сеть, например чтобы гостевой WiFi не использовал основной канал связи. Настроим такое правила PBR для всех 4х провайдеров:

Правила должны находиться выше маркировки MultiWAN
Правила должны находиться выше маркировки MultiWAN
До решения от маршрутизации новый трафик от листа PBR_WAN1 до сетей кроме локальных
До решения от маршрутизации новый трафик от листа PBR_WAN1 до сетей кроме локальных
Не до IP адресов на самом MikroTik
Не до IP адресов на самом MikroTik
Маркируем соединением con-WAN1
Маркируем соединением con-WAN1

Помещая IP или сеть в адрес лист PBR_WANX — можно выпускать с отдельного провайдера.

/ip firewall mangle
add action=mark-connection chain=prerouting comment=PBR_WAN1 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN1 \
    src-address-list=PBR_WAN1
add action=mark-connection chain=prerouting comment=PBR_WAN2 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN2 \
    src-address-list=PBR_WAN2
add action=mark-connection chain=prerouting comment=PBR_WAN3 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN3 \
    src-address-list=PBR_WAN3
add action=mark-connection chain=prerouting comment=PBR_WAN4 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN4 \
    src-address-list=PBR_WAN4

Суммирование WAN1/WAN2 (PCC)

Вспомним, что WAN1 и WAN2 равные по скорости провайдеры на 10Мбит, которые можно суммировать для увеличения скорости.

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

Сделаем суммирование для адрес листа PBR_PCC чтобы получить 20Мбит.

Добавляем в Mangle 2 новых правила для PCC в самый верх
Добавляем в Mangle 2 новых правила для PCC в самый верх
Новый трафик до решения о маршрутизации от листа PBR_PCC до сетей кроме локальных
Новый трафик до решения о маршрутизации от листа PBR_PCC до сетей кроме локальных
Деление src/dst по IP:Port в пропорциях 1:1
Деление src/dst по IP:Port в пропорциях 1:1
PCC высчитывается пропорциями скорости на каждого оператора.
20Мбит:
2/0 — WAN1 (10Мбит)
2/1 — WAN2 (10Мбит)

30Мбит:
3/0 — WAN1 (10Мбит)
3/1 — WAN2 (10Мбит)
3/2 — WAN2 (10Мбит)

Конкретный пример — мой оператор Уфанет дает 600Мбит, а ТДС+ только 100Мбит, в сумме я могу получить 700Мбит. Общая пропорция равна 7:

7/0 — Уфанет 100Мбит
7/1 — Уфанет 100Мбит
7/2 — Уфанет 100Мбит
7/3 — Уфанет 100Мбит
7/4 — Уфанет 100Мбит
7/5 — Уфанет 100Мбит
7/6 — ТДС+ 100Мбит
2 провайдера с PCC и PBR
Замер показывает деление трафика по каналам
Кроме адресов на самом MikroTik
Кроме адресов на самом MikroTik
Маркируем con-WAN1
Маркируем con-WAN1
/ip firewall mangle
add action=mark-connection chain=prerouting comment="PBR_PCC 2/0" connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN1 per-connection-classifier=both-addresses-and-ports:2/0 \
    src-address-list=PBR_PCC
add action=mark-connection chain=prerouting comment="PBR_PCC 2/1" connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN2 per-connection-classifier=both-addresses-and-ports:2/1 \
    src-address-list=PBR_PCC
При ограничениях по 10Мбит на каждом операторе, в сумме получается около 20Мбит с учетом погрешности
При ограничениях по 10Мбит на каждом операторе, в сумме получается около 20Мбит с учетом погрешности
Напомню, что реальное суммирование скорости можно получить только на торрентах, когда параллельно устанавливается множество соединений.
Так же при индивидуальном PCC или смешанном режиме с PBR на конкретных провайдерах — могут быть перекосы скорости, по этому лучше использовать PCC с осторожностью.

QoS

Простой QoS позволит поделить скорость «по справедливости» между хостами сети. Создадим минимальную конфигурацию на основе pcq, которая защитит от монопольного захвата скорости.

3 конфигурации для каждого оператора. Здесь нет LTE, так как скорость на нем плавающая.
3 конфигурации для каждого оператора. Здесь нет LTE, так как скорость на нем плавающая.
Для цели "весь интернет" - 0.0.0.0/0 через интерфейс оператора vlan11 ограничиваем максимальную скорость 10Мбит
Для цели «весь интернет» — 0.0.0.0/0 через интерфейс оператора vlan11 ограничиваем максимальную скорость 10Мбит
Тип очередей - стандартные pcq upload и download
Тип очередей — стандартные pcq upload и download
/queue simple
add dst=vlan11 max-limit=10M/10M name=WAN1 queue=pcq-upload-default/pcq-download-default target=""
add dst=vlan12 max-limit=10M/10M name=WAN2 queue=pcq-upload-default/pcq-download-default target=""
add dst=PPPoE_WAN3 max-limit=5M/5M name=WAN3 queue=pcq-upload-default/pcq-download-default target=""

Firewall

Нарисуем максимально закрытый Firewall, в котором разрешим интернет через LTE только для самых важных сервисов и закроем доступ к самому MikroTik.

Input

Разрешаем установленный, связанный и не отслеживаемый трафикБлокируем InvalidРазрешаем WinBox порт (его нужно закрыть интерфейс листом)Разрешаем DNS/NTP из LANБлокируем остальное
Разрешаем установленный, связанный и не отслеживаемый трафик
Блокируем Invalid
Разрешаем WinBox порт (его нужно закрыть интерфейс листом)
Разрешаем DNS/NTP из LAN
Блокируем остальное
/ip firewall filter
add action=accept chain=input comment=ERU connection-state=established,related,untracked
add action=drop chain=input comment=Invalid connection-state=invalid
add action=accept chain=input comment=WinBox dst-port=8291 protocol=tcp
add action=accept chain=input comment=DNS/NTP dst-port=53,123 in-interface-list=LAN protocol=udp
add action=drop chain=input comment="Drop all"

Forward

Разрешаем установленный, связанный и не отслеживаемый трафикБлокируем InvalidРазрешаем доступ из LAN в WANРазрешаем DSTNATed проброс портовБлокируем остальное
Разрешаем установленный, связанный и не отслеживаемый трафик
Блокируем Invalid
Разрешаем доступ из LAN в WAN
Разрешаем DSTNATed проброс портов
Блокируем остальное
/ip firewall filter
add action=accept chain=forward comment=ERU connection-state=established,related,untracked
add action=drop chain=forward comment=Invalid connection-state=invalid
add action=accept chain=forward comment="LAN to WAN" in-interface-list=LAN out-interface-list=WAN-ALL
add action=accept chain=forward comment="WAN DSTNATed" connection-nat-state=dstnat connection-state=new in-interface-list=WAN-ALL
add action=drop chain=forward comment="Drop all"

LTE резерв

Ограничим доступ через LTE одним правилом с адрес листом. Только хосты из листа Access_WAN4 получат доступ в интернет через LTE.

Для адрес листа кроме Access_WAN4 из LAN в WAN4
Для адрес листа кроме Access_WAN4 из LAN в WAN4
Блокируем трафик
Блокируем трафик

Защита MikroTik

Отключаем и защищаем сервисы MikroTik от возможных атак и проникновения. Создаем доступ в WinBox/SSH только по адрес листам и порт кнокингу.

Порт кнокинг будет работать на длине пакета ICMP, например 73, с учетом поправки MTU 28 байт — ловим размер 101.

Port-Knocking для ICMP
Port-Knocking для ICMP
Ловим пакет размера 101 байт, но с учетом поправки 28 байт, "стучаться" будем с размером 73
Ловим пакет размера 101 байт, но с учетом поправки 28 байт, «стучаться» будем с размером 73
Кто правильно постучался - добавляем в address list Access_Admin
Кто правильно постучался — добавляем в address list Access_Admin
/ip firewall filter
add action=add-src-to-address-list address-list=Access_Admin address-list-timeout=10m chain=input comment=PK packet-size=101 protocol=icmp
Затем просто разрешаем ICMP, чтобы нельзя было "простучать" нужное значение
Затем просто разрешаем ICMP, чтобы нельзя было «простучать» нужное значение
ICMP через Jump отправляем в отдельную цепочку firewall
ICMP через Jump отправляем в отдельную цепочку firewall
/ip firewall filter
add action=jump chain=input comment=ICMP jump-target=icmp protocol=icmp
add action=accept chain=icmp comment="allow echo request" icmp-options=8:0 protocol=icmp
add action=accept chain=icmp comment="echo reply" icmp-options=0:0 protocol=icmp
add action=accept chain=icmp comment="net unreachable" icmp-options=3:0 protocol=icmp
add action=accept chain=icmp comment="host unreachable" icmp-options=3:1 protocol=icmp
add action=accept chain=icmp comment="host unreachable fragmentation required" icmp-options=3:4 protocol=icmp
add action=accept chain=icmp comment="allow time exceed" icmp-options=11:0 protocol=icmp
add action=accept chain=icmp comment="allow parameter bad" icmp-options=12:0 protocol=icmp
add action=drop chain=icmp comment="deny all other types
Adderess List теперь можно применить в правиле доступа через WinBox
Adderess List теперь можно применить в правиле доступа через WinBox

Cloud/DDNS/CNAME

Для доступа к MikroTik через разных операторов настроен MultiWAN, но при отключении основного провайдера — сервисы завязанные на IP этого оператора перестают работать.

Можно использовать встроенный Cloud, который через CNAME связывается с вашим доменным именем.

IP > CloudВключаем функцию DDNS
IP > Cloud
Включаем функцию DDNS
/ip cloud
set ddns-enabled=yes

Теперь на 643105d8639d.sn.mynetname.net всегда отвечает активный основной провайдер.

Создаем на своем домене запись вида CNAME, где указываем имя в виде DDNS от MikroTik Cloud с точкой на конце
Создаем на своем домене запись вида CNAME, где указываем имя в виде DDNS от MikroTik Cloud с точкой на конце

Теперь мой домен multiwan.1side.ru связан по CNAME с 643105d8639d.sn.mynetname.net и выдает актуальный IP.

Уведомления Telegram

Если отсутствует ZABBIX, можно настроить отправку уведомлений Telegram самим MikroTik через скрипты и netwatch.

Создание бота

Telegram MikroTik
Находим @BotFather
Telegram MikroTik
Отправляем /newbot
Придумываем имя и логин
Получаем token, он же [ID Бота]
Telegram MikroTik
Находим созданного бота и запускаем его
Telegram MikroTik
Создаем группу
Telegram MikroTik
И добавляем туда созданного бота

Теперь нужно узнать ID чата, куда боту нужно посылать сообщения.

Находим бота @username_to_id_bot и добавляем его в чат

Telegram MikroTik
Получили [ID Чата]

Отправка сообщений

Отправка происходит get запросом через /tool fetch url=

Где в url передаем все, что хотим отправить. Например:

tool/fetch url url="https://api.telegram.org/bot7079885898:AAGhg1EDrI50anh2IC6AiN_QVTil_biewFM/sendMessage?chat_id=-4198924813&text=TEST"

Разберем команду:

tool/fetch url url="https://api.telegram.org/bot[ID Бота]/sendMessage?chat_id=[ID Чата]&text=[Сообщение]"

Можно открыть через браузер

Telegram MikroTik

И через CLI MikroTik

Telegram MikroTik
Telegram MikroTik
В обоих случая мы получим сообщение в группу
Создаем Telegram скрипты для каждого провайдера и события
Создаем Telegram скрипты для каждого провайдера и события
В скрипте установлен :delay 65; чтобы он выполнялся через 65 секунд после срабатывания события.
Без этой задержки маршрут может не успеть переключиться и уведомление будет отправлено через не работающего провайдера.
:delay 65;
tool/fetch url="https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage?chat_id=-5299560184&text=WAN1_Down"
/system script
add dont-require-permissions=yes name=WAN1_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN1_Down\" output=none"
add dont-require-permissions=yes name=WAN1_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN1_Up\" output=none"
add dont-require-permissions=yes name=WAN2_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN2_Down\" output=none"
add dont-require-permissions=yes name=WAN2_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN2_Up\" output=none"
add dont-require-permissions=yes name=WAN3_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN3_Down\" output=none"
add dont-require-permissions=yes name=WAN3_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN3_Up\" output=none"
add dont-require-permissions=yes name=WAN4_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN4_Down\" output=none"
add dont-require-permissions=yes name=WAN4_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN4_Up\" output=none"
Добавляем в Netwatch выполнение скрипта оправки Telegram уведомления
Добавляем в Netwatch выполнение скрипта оправки Telegram уведомления
Видим сработки Netwatch+Script
Видим сработки Netwatch+Script

Готовая конфигурация

2 провайдера на MikroTik разрослись до MultiWAN конфигурации 4х разных операторов с возможностью суммирования трафика, использования отдельного канала, автоматическим переключением и уведомлениями в Telegram в случае проблем.

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

interface

bridge

/interface bridge
add name=bridgeLAN vlan-filtering=yes
add comment=WAN1 interface=bridgeLAN name=vlan11 vlan-id=11
add comment=WAN2 interface=bridgeLAN name=vlan12 vlan-id=12
add comment=WAN3 interface=bridgeLAN name=vlan13 vlan-id=13

list

/interface list
add name=LAN
add name=WAN1
add name=WAN2
add name=WAN3
add name=WAN4
add include=WAN1,WAN2,WAN3,WAN4 name=WAN-ALL

pppoe-client

/interface pppoe-client
add allow=mschap2 interface=vlan11 name=PPPoE_WAN1 profile=PPPoE_WAN1 user=PPPoE_WAN1_Login
add allow=mschap2 interface=vlan12 name=PPPoE_WAN2 profile=PPPoE_WAN2 user=PPPoE_WAN2_Login
add allow=mschap2 disabled=no interface=vlan13 name=PPPoE_WAN3 profile=PPPoE_WAN3 user=PPPoE_WAN3_Login

bridge port

/interface bridge port
add bridge=bridgeLAN frame-types=admit-only-untagged-and-priority-tagged interface=ether1 pvid=11
add bridge=bridgeLAN frame-types=admit-only-untagged-and-priority-tagged interface=ether2 pvid=12
add bridge=bridgeLAN frame-types=admit-only-untagged-and-priority-tagged interface=ether3 pvid=11

list member

/interface list member
add interface=vlan3 list=LAN
add interface=vrrp3 list=LAN
add interface=vlan11 list=WAN1
add interface=vlan12 list=WAN2
add interface=vlan13 list=WAN3
add interface=PPPoE_WAN3 list=WAN3
add interface=lte1 list=WAN4

ppp profile

/ppp profile
add change-tcp-mss=yes name=PPPoE_WAN1 on-up=":local WANDHCP PPPoE_WAN1;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN1_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN1\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN1\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no
add change-tcp-mss=yes name=PPPoE_WAN2 on-up=":local WANDHCP PPPoE_WAN2;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN2_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN2\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN2\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no
add change-tcp-mss=yes name=PPPoE_WAN3 on-up=":local WANDHCP PPPoE_WAN3;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN3_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN3\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN3\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no
add change-tcp-mss=yes name=PPPoE_WAN4 on-up=":local WANDHCP PPPoE_WAN4;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN4_!_Recursive\"] gateway=\$WANDHCPNET;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN4\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN4\"] to-addresses=\$WANDHCPIP;" use-compression=no use-ipv6=no use-mpls=no use-upnp=no

queue simple

/queue simple
add dst=vlan11 max-limit=10M/10M name=WAN1 queue=pcq-upload-default/pcq-download-default target=""
add dst=vlan12 max-limit=10M/10M name=WAN2 queue=pcq-upload-default/pcq-download-default target=""
add dst=PPPoE_WAN3 max-limit=5M/5M name=WAN3 queue=pcq-upload-default/pcq-download-default target=""

routing table

/routing table
add disabled=no fib name=WAN1
add disabled=no fib name=WAN2
add disabled=no fib name=WAN3
add disabled=no fib name=WAN4
/routing table
add disabled=no fib name=WAN1
add disabled=no fib name=WAN2
add disabled=no fib name=WAN3
add disabled=no fib name=WAN4

ipv6 settings

/ipv6 settings
set disable-ipv6=yes disable-link-local-address=yes forward=no

ip

neighbor discovery-settings

/ip neighbor discovery-settings
set discover-interface-list=LAN

address

/ip address
add address=1.1.1.2/30 interface=vlan11

cloud

/ip cloud
set ddns-enabled=yes

dhcp-client

/ip dhcp-client
add add-default-route=no default-route-tables=main disabled=yes interface=vlan11 script=":local WANDHCP vlan11;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPGW [/ip/dhcp-client/get value-name=gateway [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN1_!_Recursive\"] gateway=\$WANDHCPGW;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN1\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN1\"] to-addresses=\$WANDHCPIP;" use-peer-dns=no use-peer-ntp=no
add add-default-route=no default-route-tables=main interface=vlan12 script=":local WANDHCP vlan12;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPGW [/ip/dhcp-client/get value-name=gateway [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN2_!_Recursive\"] gateway=\$WANDHCPGW;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN2\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN2\"] to-addresses=\$WANDHCPIP;" use-peer-dns=no use-peer-ntp=no
add add-default-route=no default-route-tables=main interface=lte1 script=":local WANDHCP lte1;\r\
    \n\r\
    \nlocal result [/ip address get value-name=address [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPIP [:pick \$result 0 [:find \$result \"/\"]];\r\
    \nlocal WANDHCPGW [/ip/dhcp-client/get value-name=gateway [find interface=\$WANDHCP]];\r\
    \nlocal WANDHCPNET [/ip/address get value-name=network [find interface=\$WANDHCP]];\r\
    \n\r\
    \n\r\
    \n/ip route set [find comment=\"WAN4_!_Recursive\"] gateway=\$WANDHCPGW;\r\
    \n/routing rule set [find comment=\"Route_Only_WAN4\"] src-address=\$WANDHCPIP;\r\
    \n/ip firewall nat set [find comment=\"NAT WAN4\"] to-addresses=\$WANDHCPIP;" use-peer-dns=no use-peer-ntp=no

dns

/ip dns
set allow-remote-requests=yes servers=77.88.8.7,77.88.8.88,8.8.8.8,8.8.4.4

firewall address-list

/ip firewall address-list
add address=4.2.2.1 list=Only_WAN1
add address=4.2.2.2 list=Only_WAN2
add address=77.88.8.1 list=Only_WAN1
add address=77.88.8.2 list=Only_WAN2
add address=10.0.0.0/8 list=local
add address=172.16.0.0/12 list=local
add address=192.168.0.0/16 list=local
add address=4.2.2.3 list=Only_WAN3
add address=77.88.8.3 list=Only_WAN3
add address=4.2.2.4 list=Only_WAN4
add address=77.88.8.8 list=Only_WAN4

firewall filter

/ip firewall filter
add action=drop chain=output comment="Only WAN1" dst-address-list=Only_WAN1 out-interface-list=!WAN1
add action=drop chain=output comment="Only WAN2" dst-address-list=Only_WAN2 out-interface-list=!WAN2
add action=drop chain=output comment="Only WAN3" dst-address-list=Only_WAN3 out-interface-list=!WAN3
add action=drop chain=output comment="Only WAN4" dst-address-list=Only_WAN4 out-interface-list=!WAN4
add action=accept chain=icmp comment="allow echo request" icmp-options=8:0 protocol=icmp
add action=accept chain=icmp comment="echo reply" icmp-options=0:0 protocol=icmp
add action=accept chain=icmp comment="net unreachable" icmp-options=3:0 protocol=icmp
add action=accept chain=icmp comment="host unreachable" icmp-options=3:1 protocol=icmp
add action=accept chain=icmp comment="host unreachable fragmentation required" icmp-options=3:4 protocol=icmp
add action=accept chain=icmp comment="allow time exceed" icmp-options=11:0 protocol=icmp
add action=accept chain=icmp comment="allow parameter bad" icmp-options=12:0 protocol=icmp
add action=drop chain=icmp comment="deny all other types"
add action=accept chain=input comment=ERU connection-state=established,related,untracked
add action=drop chain=input comment=Invalid connection-state=invalid
add action=add-src-to-address-list address-list=Access_Admin address-list-timeout=10m chain=input comment=PK packet-size=101 protocol=icmp
add action=jump chain=input comment=ICMP jump-target=icmp protocol=icmp
add action=accept chain=input comment=WinBox dst-port=8291 protocol=tcp src-address-list=Access_Admin
add action=accept chain=input comment=DNS/NTP dst-port=53,123 in-interface-list=LAN protocol=udp
add action=drop chain=input comment="Drop all"
add action=accept chain=forward comment=ERU connection-state=established,related,untracked
add action=drop chain=forward comment=Invalid connection-state=invalid
add action=drop chain=forward comment="WAN4 LTE Only List" in-interface-list=LAN out-interface-list=WAN4 src-address-list=!Access_WAN4
add action=accept chain=forward comment="LAN to WAN" in-interface-list=LAN out-interface-list=WAN-ALL
add action=accept chain=forward comment="WAN DSTNATed" connection-nat-state=dstnat connection-state=new in-interface-list=WAN-ALL
add action=drop chain=forward comment="Drop all"

firewall mangle

/ip firewall mangle
add action=mark-connection chain=prerouting comment="PBR_PCC 2/0" connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN1 \
    per-connection-classifier=both-addresses-and-ports:2/0 src-address-list=PBR_PCC
add action=mark-connection chain=prerouting comment="PBR_PCC 2/1" connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN2 \
    per-connection-classifier=both-addresses-and-ports:2/1 src-address-list=PBR_PCC
add action=mark-connection chain=prerouting comment=PBR_WAN1 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN1 \
    src-address-list=PBR_WAN1
add action=mark-connection chain=prerouting comment=PBR_WAN2 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN2 \
    src-address-list=PBR_WAN2
add action=mark-connection chain=prerouting comment=PBR_WAN3 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN3 \
    src-address-list=PBR_WAN3
add action=mark-connection chain=prerouting comment=PBR_WAN4 connection-mark=no-mark connection-state=new dst-address-list=!local dst-address-type=!local new-connection-mark=con-WAN4 \
    src-address-list=PBR_WAN4
add action=mark-connection chain=prerouting comment="Mark Connection WAN1" connection-mark=no-mark connection-state=new in-interface-list=WAN1 new-connection-mark=con-WAN1 src-address-list=!local
add action=mark-connection chain=prerouting comment="Mark Connection WAN2" connection-mark=no-mark connection-state=new in-interface-list=WAN2 new-connection-mark=con-WAN2 src-address-list=!local
add action=mark-connection chain=prerouting comment="Mark Connection WAN3" connection-mark=no-mark connection-state=new in-interface-list=WAN3 new-connection-mark=con-WAN3 src-address-list=!local
add action=mark-connection chain=prerouting comment="Mark Connection WAN4" connection-mark=no-mark connection-state=new in-interface-list=WAN4 new-connection-mark=con-WAN4 src-address-list=!local
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN1 in-interface-list=!WAN-ALL new-routing-mark=WAN1
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN2 in-interface-list=!WAN-ALL new-routing-mark=WAN2
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN3 in-interface-list=!WAN-ALL new-routing-mark=WAN3
add action=mark-routing chain=prerouting comment="Mark Routing !WAN" connection-mark=con-WAN4 in-interface-list=!WAN-ALL new-routing-mark=WAN4
add action=mark-routing chain=output comment="Mark Roution Out WAN1" connection-mark=con-WAN1 new-routing-mark=WAN1
add action=mark-routing chain=output comment="Mark Roution Out WAN2" connection-mark=con-WAN2 new-routing-mark=WAN2
add action=mark-routing chain=output comment="Mark Roution Out WAN3" connection-mark=con-WAN3 new-routing-mark=WAN3
add action=mark-routing chain=output comment="Mark Roution Out WAN4" connection-mark=con-WAN4 new-routing-mark=WAN4

firewall nat

/ip firewall nat
add action=src-nat chain=srcnat comment="NAT WAN1" ipsec-policy=out,none out-interface-list=WAN1 src-address-type=!local to-addresses=1.1.1.2
add action=src-nat chain=srcnat comment="NAT WAN2" ipsec-policy=out,none out-interface-list=WAN2 src-address-type=!local to-addresses=2.2.2.2
add action=src-nat chain=srcnat comment="NAT WAN3" ipsec-policy=out,none out-interface-list=WAN3 src-address-type=!local to-addresses=3.3.3.2
add action=src-nat chain=srcnat comment="NAT WAN4" ipsec-policy=out,none out-interface-list=WAN4 src-address-type=!local to-addresses=192.168.42.96

firewall service-port

/ip firewall service-port
set sip disabled=yes

route

/ip route
add comment="Table WAN1" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.1 routing-table=WAN1 scope=30 suppress-hw-offload=no target-scope=11
add comment="Table WAN2" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.2 routing-table=WAN2 scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN1_!_Recursive disabled=no distance=1 dst-address=4.2.2.1/32 gateway=1.1.1.1 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment=WAN2_!_Recursive disabled=no distance=1 dst-address=4.2.2.2/32 gateway=2.2.2.1 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment=WAN1_Recursive disabled=no distance=10 dst-address=0.0.0.0/0 gateway=4.2.2.1 routing-table=main scope=30 target-scope=11
add comment=WAN2_Recursive disabled=no distance=20 dst-address=0.0.0.0/0 gateway=4.2.2.2 routing-table=main scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN3_!_Recursive disabled=no distance=1 dst-address=4.2.2.3/32 gateway=3.3.3.1 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment=WAN3_Recursive disabled=no distance=30 dst-address=0.0.0.0/0 gateway=4.2.2.3 routing-table=main scope=30 suppress-hw-offload=no target-scope=11
add comment="Table WAN3" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.3 routing-table=WAN3 scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN4_!_Recursive disabled=no distance=1 dst-address=4.2.2.4/32 gateway=192.168.42.129 routing-table=main scope=11 suppress-hw-offload=no target-scope=10
add comment="Table WAN4" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.2.2.4 routing-table=WAN4 scope=30 suppress-hw-offload=no target-scope=11
add comment=WAN4_Recursive disabled=no distance=40 dst-address=0.0.0.0/0 gateway=4.2.2.4 routing-table=main scope=30 suppress-hw-offload=no target-scope=11

service

/ip service
set ftp disabled=yes
set ssh disabled=yes
set telnet disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes

ssh

/ip ssh
set ciphers=aes-cbc,aes-ctr,aes-gcm host-key-size=4096 strong-crypto=yes

routing rule

/routing rule
add action=lookup-only-in-table comment=Route_Only_WAN1 disabled=no src-address=1.1.1.2/32 table=WAN1
add action=lookup disabled=no dst-address=77.88.8.1/32 table=WAN1
add action=lookup-only-in-table comment=Route_Only_WAN2 disabled=no src-address=2.2.2.2 table=WAN2
add action=lookup disabled=no dst-address=77.88.8.2/32 table=WAN2
add action=lookup-only-in-table comment=Route_Only_WAN3 disabled=no src-address=3.3.3.2 table=WAN3
add action=lookup disabled=no dst-address=77.88.8.3/32 table=WAN3
add action=lookup-only-in-table comment=Route_Only_WAN4 disabled=no src-address=4.4.4.2 table=WAN4
add action=lookup disabled=no dst-address=77.88.8.8/32 table=WAN4

system

clock

/system clock
set time-zone-name=Europe/Moscow

identity

/system identity
set name="\ED\E0\F1\F2\F0\EE\E9\EA\E0-\EC\E8\EA\F0\EE\F2\E8\EA.\F0\F4"

note

/system note
set note="\CF\F0\EE\F4\E5\F1\F1\E8\EE\ED\E0\EB\FC\ED\E0\FF \ED\E0\F1\F2\F0\EE\E9\EA\E0 MikroTik\r\
    \n\r\
    \n\ED\E0\F1\F2\F0\EE\E9\EA\E0-\EC\E8\EA\F0\EE\F2\E8\EA.\F0\F4"

ntp

/system ntp client
set enabled=yes
/system ntp server
set enabled=yes
/system ntp client servers
add address=0.ru.pool.ntp.org
add address=1.ru.pool.ntp.org
add address=2.ru.pool.ntp.org
add address=3.ru.pool.ntp.org

routerboard settings

/system routerboard settings
set auto-upgrade=yes

scheduler

/system scheduler
add disabled=yes interval=1d name=reboot1 on-event="/system/scheduler disable reboot1\r\
    \n/system/reboot" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=2026-01-08 start-time=00:00:30
add disabled=yes interval=1d name=reboot2 on-event="/system/scheduler disable reboot2\r\
    \n/system/reboot" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=2026-01-08 start-time=00:30:00

script

/system script
add dont-require-permissions=yes name=WAN1_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN1_Down\" output=none"
add dont-require-permissions=yes name=WAN1_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN1_Up\" output=none"
add dont-require-permissions=yes name=WAN2_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN2_Down\" output=none"
add dont-require-permissions=yes name=WAN2_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN2_Up\" output=none"
add dont-require-permissions=yes name=WAN3_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN3_Down\" output=none"
add dont-require-permissions=yes name=WAN3_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN3_Up\" output=none"
add dont-require-permissions=yes name=WAN4_Down owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN4_Down\" output=none"
add dont-require-permissions=yes name=WAN4_Up owner=WinBox policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
    ":delay 65;\r\
    \ntool/fetch url=\"https://api.telegram.org/botXXX:XXXknAZRUQohVBVEOo/sendMessage\?chat_id=-5299560184&text=WAN4_Up\" output=none"

tool

bandwidth-server

/tool bandwidth-server
set enabled=no

mac-server

/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN

netwatch

/tool netwatch
add comment=Check_WAN1 disabled=no down-script=\
    "/ip route set [find comment=\"WAN1_Recursive\"] check-gateway=ping\r\
    \n/ip route set [find comment=\"Table WAN1\"] check-gateway=ping\r\
    \n/system/script/run WAN1_Down" host=77.88.8.1 http-codes="" interval=10s test-script="" type=simple up-script=\
    "/ip route unset [find comment=\"WAN1_Recursive\"] check-gateway\r\
    \n/ip route unset [find comment=\"Table WAN1\"] check-gateway\r\
    \n/system/script/run WAN1_Up"
add comment=Check_WAN2 disabled=no down-script=\
    "/ip route set [find comment=\"WAN2_Recursive\"] check-gateway=ping\r\
    \n/ip route set [find comment=\"Table WAN2\"] check-gateway=ping\r\
    \n/system/script/run WAN2_Down" host=77.88.8.2 http-codes="" interval=10s test-script="" type=simple up-script=\
    "/ip route unset [find comment=\"WAN2_Recursive\"] check-gateway\r\
    \n/ip route unset [find comment=\"Table WAN2\"] check-gateway\r\
    \n/system/script/run WAN2_Up"
add comment=Check_WAN3 disabled=no down-script=\
    "/ip route set [find comment=\"WAN3_Recursive\"] check-gateway=ping\r\
    \n/ip route set [find comment=\"Table WAN3\"] check-gateway=ping\r\
    \n/system/script/run WAN3_Down" host=77.88.8.3 http-codes="" interval=10s test-script="" type=simple up-script=\
    "/ip route unset [find comment=\"WAN3_Recursive\"] check-gateway\r\
    \n/ip route unset [find comment=\"Table WAN3\"] check-gateway\r\
    \n/system/script/run WAN3_Up"
add comment=Check_WAN4 disabled=no down-script=\
    "/ip route set [find comment=\"WAN4_Recursive\"] check-gateway=ping\r\
    \n/ip route set [find comment=\"Table WAN4\"] check-gateway=ping\r\
    \n/system/script/run WAN4_Down" host=77.88.8.8 http-codes="" interval=10s test-script="" type=simple up-script=\
    "/ip route unset [find comment=\"WAN4_Recursive\"] check-gateway\r\
    \n/ip route unset [find comment=\"Table WAN4\"] check-gateway\r\
    \n/system/script/run WAN4_Up"
Профессиональная настройка MikroTik с гарантией результата
Оперативность и выполнение в срок без предоплаты и бюрократии
Обсудить задачу: @Engineer_MikroTik | Ценовая политика
!!!Вышла ветка long-term для RouterOS 7!!!

Настройка MikroTik