Инструменты пользователя

Инструменты сайта


routeros:balansing_pcc

Балансировка с помощью опции PCC в Mangle

lonebuddha 2024/03/02 18:00

Алгоритм

  1. Исключение для трафика из LAN в сеть провайдера.
  2. Маркировка соединений, инициированных извне.
  3. Балансировка и маркировка соединений, исходящих из LAN.
  4. Маркировка маршрутов на основании соединений.
  5. Создание именованных маршрутов.
  6. Создание резервных маршрутов.

Исключение для трафика из LAN в сеть провайдера

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

/ ip firewall mangle
add chain=prerouting dst-address=<сеть ISP1> action=accept in-interface=ether-LAN
add chain=prerouting dst-address=<сеть ISP2> action=accept in-interface=ether-LAN

Маркировка соединений, инициированных извне

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

Соединения, пришедшие на 1-й WAN-интерфейс, маркируются как ISP1, а соединения, пришедшие на 2-й WAN-интерфейс, маркируются как ISP2. По сути, мы «запоминаем», что откуда пришло, чтобы в дальнейшем мы могли отправить ответ по принципу «откуда пришло, оттуда и ушло»:

add chain=prerouting in-interface=ether-ISP1 connection-mark=no-mark action=mark-connection newconnection-mark=ISP1
add chain=prerouting in-interface=ether-ISP2 connection-mark=no-mark action=mark-connection newconnection-mark=ISP2

Балансировка и маркировка соединений, исходящих из LAN

С помощью этих правил мы в случайном порядке делаем балансировку между двумя внешними интернет-каналами в пропорции 50 на 50:

add chain=prerouting in-interface=ether-LAN connection-mark=no-mark dst-address-type=!local perconnection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ISP1
add chain=prerouting in-interface=ether-LAN connection-mark=no-mark dst-address-type=!local perconnection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ISP2

Маркировка маршрутов на основании соединений

add chain=output connection-mark=ISP1 action=mark-routing new-routing-mark=ISP1-route
add chain=output connection-mark=ISP2 action=mark-routing new-routing-mark=ISP2-route
add chain=prerouting connection-mark=ISP1 in-interface=ether-LAN action=mark-routing new-routingmark=ISP1-route
add chain=prerouting connection-mark=ISP2 in-interface=ether-LAN action=mark-routing new-routingmark=ISP2-route

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

Создание именованных маршрутов

/ ip route
add dst-address=0.0.0.0/0 gateway=<gateway ISP1> routing-mark=ISP1-route check-gateway=ping
add dst-address=0.0.0.0/0 gateway=<gateway ISP2> routing-mark=ISP2-route check-gateway=ping

С помощью этих правил мы отправляем промаркированные маршруты либо через шлюз 1-го провайдера, либо через шлюз 2-го провайдера.

Создание резервных маршрутов

add dst-address=0.0.0.0/0 gateway=<gateway ISP1> check-gateway=ping
add dst-address=0.0.0.0/0 gateway=<gateway ISP1> check-gateway=ping distance=2

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

Создание таблиц маршрутизации

В последних версиях RouterOS задать напрямую routing-mark нельзя, необходимо создать именованные таблицы маршрутизации.

/routing table
add disabled=no fib name=ISP1-route
add disabled=no fib name=ISP2-route
/www/sites/dokuwiki.win-labs.ru/www/data/pages/routeros/balansing_pcc.txt · Последнее изменение: 2024/03/07 17:01 — 127.0.0.1

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki