// DevOps

PCC на MikroTik: балансировка трафика между двумя провайдерами

Опубликовано 22.09.2026

Если у роутера несколько внешних IP-адресов или несколько каналов, весь исходящий трафик по умолчанию всё равно уходит через один из них. PCC (Per Connection Classifier) в RouterOS 7 распределяет новые соединения между адресами: каждое соединение целиком идёт через один адрес, а разные соединения — через разные. Это полезно, когда у хостера лимит трафика или скорости действует на каждый IP отдельно, и когда нужно загрузить все купленные адреса, а не один.

Об отказоустойчивости выхода в интернет — подробнее в статье «Резервирование каналов связи: выход в интернет».


Что делает PCC и чего он не делает

PCC — условие в правилах межсетевого экрана. Он вычисляет хеш от выбранных полей пакета (адресов и портов) и делит соединения на заданное число потоков. Помеченное соединение сохраняет метку до конца, поэтому все его пакеты идут через один и тот же адрес.

Что это даёт:

  • Суммарная пропускная способность растёт при множестве соединений. Одно соединение (одна загрузка файла, один видеозвонок) быстрее не станет: оно идёт через один адрес. Выигрыш появляется, когда соединений много — например, у офиса или у группы серверов.
  • Трафик распределяется между адресами. Если хостер ограничивает объём или скорость на каждый IP, нагрузка делится между ними, и каждый адрес расходует свою часть лимита.
  • Все купленные адреса используются, а не простаивают.
  • Отказоустойчивости PCC сам по себе не даёт. Если один канал перестанет работать, соединения, попавшие в его поток, будут обрываться, пока вы не уберёте его из балансировки. Для автоматического переключения нужны проверки доступности шлюзов — это отдельная настройка.

В примере ниже PCC распределяет соединения между шестью внешними адресами по признаку both-addresses-and-ports: хеш считается от адресов и портов отправителя и получателя, поэтому распределение получается равномерным. У этого варианта есть обратная сторона: разные соединения одного пользователя к одному сайту могут уйти с разных внешних адресов, а часть сервисов (банки, личные кабинеты) проверяет, что адрес клиента не меняется. Если это важно, используйте both-addresses — тогда одна пара «клиент — сервер» всегда идёт через один внешний адрес.


Настройка PCC на MikroTik RouterOS 7.x

Перед началом обновите роутер до актуальной версии RouterOS 7.

1. Добавляем внешние IP-адреса

Все адреса привязываются к внешнему интерфейсу. В примере это wan-bridge; замените на имя своего интерфейса.

routeros
/ip address
add address=100.77.214.99/24 interface=wan-bridge network=100.77.214.0 comment="Main IP"
add address=100.77.214.97/24 interface=wan-bridge network=100.77.214.0
add address=100.77.214.109/24 interface=wan-bridge network=100.77.214.0
add address=100.77.214.110/24 interface=wan-bridge network=100.77.214.0
add address=100.77.214.111/24 interface=wan-bridge network=100.77.214.0
add address=100.77.214.112/24 interface=wan-bridge network=100.77.214.0

2. Настраиваем DNS-серверы

routeros
/ip dns
set servers="8.8.8.8, 1.1.1.1"

3. Создаём таблицы маршрутизации

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

routeros
/routing table
add name=to_wan1 fib
add name=to_wan2 fib
add name=to_wan3 fib
add name=to_wan4 fib
add name=to_wan5 fib
add name=to_wan6 fib

4. Маршрут по умолчанию в каждой таблице

В каждой таблице указывается шлюз провайдера. В примере он один для всех адресов — 100.77.214.1.

routeros
/ip route
add dst-address=0.0.0.0/0 gateway=100.77.214.1 routing-table=to_wan1
add dst-address=0.0.0.0/0 gateway=100.77.214.1 routing-table=to_wan2
add dst-address=0.0.0.0/0 gateway=100.77.214.1 routing-table=to_wan3
add dst-address=0.0.0.0/0 gateway=100.77.214.1 routing-table=to_wan4
add dst-address=0.0.0.0/0 gateway=100.77.214.1 routing-table=to_wan5
add dst-address=0.0.0.0/0 gateway=100.77.214.1 routing-table=to_wan6

5. Помечаем соединения с помощью PCC (Mangle)

Главный этап. Правила Mangle помечают новые соединения из локальной сети, а затем по метке соединения назначают метку маршрутизации. В записи both-addresses-and-ports:6/X число 6 — количество потоков (внешних адресов), X — номер потока от 0 до 5. Отдельного параметра «липкости» не нужно: метка соединения сохраняется до его завершения, поэтому все пакеты одного соединения идут через один адрес. Замените lan-bridge на имя своего внутреннего интерфейса.

routeros
/ip firewall mangle
# Помечаем новые соединения из локальной сети
add chain=prerouting in-interface=lan-bridge connection-state=new action=mark-connection \
    new-connection-mark=wan1_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:6/0 \
    comment="PCC both-addr-ports WAN 1"

add chain=prerouting in-interface=lan-bridge connection-state=new action=mark-connection \
    new-connection-mark=wan2_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:6/1 \
    comment="PCC both-addr-ports WAN 2"

add chain=prerouting in-interface=lan-bridge connection-state=new action=mark-connection \
    new-connection-mark=wan3_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:6/2 \
    comment="PCC both-addr-ports WAN 3"

add chain=prerouting in-interface=lan-bridge connection-state=new action=mark-connection \
    new-connection-mark=wan4_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:6/3 \
    comment="PCC both-addr-ports WAN 4"

add chain=prerouting in-interface=lan-bridge connection-state=new action=mark-connection \
    new-connection-mark=wan5_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:6/4 \
    comment="PCC both-addr-ports WAN 5"

add chain=prerouting in-interface=lan-bridge connection-state=new action=mark-connection \
    new-connection-mark=wan6_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:6/5 \
    comment="PCC both-addr-ports WAN 6"

# По метке соединения назначаем таблицу маршрутизации
add chain=prerouting connection-mark=wan1_conn action=mark-routing \
    new-routing-mark=to_wan1 passthrough=no comment="Route mark for WAN 1"

add chain=prerouting connection-mark=wan2_conn action=mark-routing \
    new-routing-mark=to_wan2 passthrough=no comment="Route mark for WAN 2"

add chain=prerouting connection-mark=wan3_conn action=mark-routing \
    new-routing-mark=to_wan3 passthrough=no comment="Route mark for WAN 3"

add chain=prerouting connection-mark=wan4_conn action=mark-routing \
    new-routing-mark=to_wan4 passthrough=no comment="Route mark for WAN 4"

add chain=prerouting connection-mark=wan5_conn action=mark-routing \
    new-routing-mark=to_wan5 passthrough=no comment="Route mark for WAN 5"

add chain=prerouting connection-mark=wan6_conn action=mark-routing \
    new-routing-mark=to_wan6 passthrough=no comment="Route mark for WAN 6"

# То же для трафика, который отправляет сам роутер
add chain=output connection-mark=wan1_conn action=mark-routing \
    new-routing-mark=to_wan1 passthrough=no comment="Output route mark for WAN 1"

add chain=output connection-mark=wan2_conn action=mark-routing \
    new-routing-mark=to_wan2 passthrough=no comment="Output route mark for WAN 2"

add chain=output connection-mark=wan3_conn action=mark-routing \
    new-routing-mark=to_wan3 passthrough=no comment="Output route mark for WAN 3"

add chain=output connection-mark=wan4_conn action=mark-routing \
    new-routing-mark=to_wan4 passthrough=no comment="Output route mark for WAN 4"

add chain=output connection-mark=wan5_conn action=mark-routing \
    new-routing-mark=to_wan5 passthrough=no comment="Output route mark for WAN 5"

add chain=output connection-mark=wan6_conn action=mark-routing \
    new-routing-mark=to_wan6 passthrough=no comment="Output route mark for WAN 6"

6. Правила межсетевого экрана

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

routeros
/ip firewall filter
add chain=forward connection-state=established,related action=accept comment="Accept established connections"
add chain=forward connection-state=invalid action=drop comment="Drop invalid connections"

7. NAT для каждого адреса

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

routeros
/ip firewall nat
add action=src-nat chain=srcnat routing-mark=to_wan1 to-addresses=100.77.214.99 out-interface=wan-bridge comment="NAT for WAN 1"
add action=src-nat chain=srcnat routing-mark=to_wan2 to-addresses=100.77.214.97 out-interface=wan-bridge comment="NAT for WAN 2"
add action=src-nat chain=srcnat routing-mark=to_wan3 to-addresses=100.77.214.109 out-interface=wan-bridge comment="NAT for WAN 3"
add action=src-nat chain=srcnat routing-mark=to_wan4 to-addresses=100.77.214.110 out-interface=wan-bridge comment="NAT for WAN 4"
add action=src-nat chain=srcnat routing-mark=to_wan5 to-addresses=100.77.214.111 out-interface=wan-bridge comment="NAT for WAN 5"
add action=src-nat chain=srcnat routing-mark=to_wan6 to-addresses=100.77.214.112 out-interface=wan-bridge comment="NAT for WAN 6"

# Запасное правило: соединения без метки PCC уходят через основной адрес
add action=masquerade chain=srcnat out-interface=wan-bridge comment="Default NAT for unmarked connections"

Важно: правило masquerade должно стоять последним среди правил NAT, чтобы срабатывать только для трафика, который не распределил PCC.

8. Таймауты отслеживания соединений

Для долгих соединений полезно увеличить таймауты:

routeros
/ip firewall connection tracking
set generic-timeout=10m tcp-established-timeout=1d tcp-fin-wait-timeout=30s tcp-close-wait-timeout=30s

Проверка распределения

Статистику можно смотреть в WinBox или WebFig. Для приблизительной оценки скорости на внешнем интерфейсе подойдёт простой скрипт:

routeros
/system script
add name="check-load-balance" source={
    :local wan1traffic [/interface get wan-bridge value-name=tx-byte]
    :put "WAN Traffic: $wan1traffic"
    :delay 3s
    :local wan1traffic2 [/interface get wan-bridge value-name=tx-byte]
    :put "WAN Traffic after 3s: [($wan1traffic2 - $wan1traffic) * 8 / 3 / 1000] kbit/s"
}

Скрипт показывает общую скорость через внешний интерфейс. Чтобы увидеть распределение по адресам, откройте таблицу Connections в разделе Firewall и отфильтруйте её по меткам соединений wan1_conn…wan6_conn.


Итог

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

// Reviews

Отзывы по теме

ladohinpy

Mikrotik hap настройка роутера. Настрою роутер микротик wifi для вас

21.07.2025 · ★ 5/5

Отличный специалист, шарящий эксперт и замечательный человек. За час нам починил то, над чем мы днями ломали головы! Уверен, что это не первый раз, когда мы будем пользоваться его непомерным профессионализмом

Отличный специалист, шарящий эксперт и замечательный человек. За час нам починил то, над чем мы днями ломали головы! Уверен, что это не первый раз, когда мы будем пользоваться его непомерным профессионализмом

Ravenor

Mikrotik hap настройка роутера. Настрою роутер микротик wifi для вас

28.05.2025 · ★ 5/5

Спасибо! Настроили роутер по моему техническому заданию, с полным объяснением того что мы делаем

Спасибо! Настроили роутер по моему техническому заданию, с полным объяснением того что мы делаем

GFSoft

Mikrotik hap настройка роутера. Настрою роутер микротик wifi для вас

09.03.2025 · ★ 5/5

Опытный покупатель

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ