Mikrotik. 2 Провайдера. Балансировка исходящего трафика из локальной сети в интернет между двумя провайдерами: различия между версиями

Материал из Wiki
Перейти к навигации Перейти к поиску
 
(не показана 1 промежуточная версия этого же участника)
Строка 21: Строка 21:


=== Каждое '''n-ое''' соединение ('''per-connection-classifier''') ===
=== Каждое '''n-ое''' соединение ('''per-connection-classifier''') ===
'''PCC''' разделяет трафик по группам, основываясь на данных TCP заголовка (src-address, dst-address, src-port, dst-port).
'''PCC''' разделяет трафик по группам, основываясь на данных TCP заголовка (src-address, dst-address, src-port, dst-port).<blockquote>https://gosniipp.ru/ru/news/informacionnie-tehnologii/20190320/osnovi-staticheskoi-marshrutizacii-v-mikrotik-routeros


Маркируем соединения (для gw1 маркировать каждое 1-е соединение, для gw2 маркировать только каждое 2-е соединение)
'''PCC''' берет поля из IP заголовка ('''src-address: знаменатель/остаток'''), преобразует их в '''32-битное значение''' и делит на '''знаменатель'''. Остаток от деления сравнивается с указанным '''остатком''' и если они совпадают, то применяется указанное действие.
 
Пример с тремя адресами:
192.168.100.10: 192+168+100+10 = 470 % 3 = 2
192.168.100.11: 192+168+100+11 = 471 % 3 = 0
 
192.168.100.12: 192+168+100+12 = 472 % 3 = 1</blockquote>Маркируем соединения (для gw1 маркировать каждое 1-е соединение, для gw2 маркировать только каждое 2-е соединение)


<code>/ip firewall mangle</code>
<code>/ip firewall mangle</code>
Строка 49: Строка 55:
<code>add comment=from-local-udp-route-via-ISP2 distance=1 gateway=172.18.0.129 routing-mark=from-local-udp-route-via-ISP2</code>
<code>add comment=from-local-udp-route-via-ISP2 distance=1 gateway=172.18.0.129 routing-mark=from-local-udp-route-via-ISP2</code>


=== Каждое n-ое соединение ('''nth''') ===
=== Каждое '''n-ое''' соединение ('''nth''') ===
<blockquote>ДЛЯ МАРКИРОВКИ КАЖДОГО N-ГО СОЕДИНЕНИЯ ЛУЧШЕ ИСПОЛЬЗОВАТЬ "'''PER-CONNECTION-CLASSIFIER'''"! РАБОТАЕТ СТАБИЛЬНЕЕ!</blockquote>Маркируем каждое '''1-е''' и каждое '''2-е''' соединение из локалки во внешку соответствующей маркировкой используя '''in-interface=bridge-local'''
<blockquote>ДЛЯ МАРКИРОВКИ КАЖДОГО N-ГО СОЕДИНЕНИЯ ЛУЧШЕ ИСПОЛЬЗОВАТЬ "'''PER-CONNECTION-CLASSIFIER'''"! РАБОТАЕТ СТАБИЛЬНЕЕ!</blockquote>Маркируем каждое '''1-е''' и каждое '''2-е''' соединение из локалки во внешку соответствующей маркировкой используя '''in-interface=bridge-local'''



Текущая версия на 20:54, 6 июля 2022


Ссылки

https://habr.com/ru/post/244385/

Входные данные

Имеется 2 провайдера, у обоих есть статический внешний IP-адрес

  • 192.168.1.0/24 - локальная сеть
  • bridge-local (192.168.1.1) - интерфейс микротика, смотрящий в локалку
  • ether3-wan1 - интерфейс ISP1
  • ether4-wan2 - интерфейс ISP2
  • 193.34.13.97 - шлюз ISP1
  • 172.18.0.129 - шлюз ISP2

Задача

Балансировка трафика исходящих соединений из локальной сети через SRC-NAT между двумя провайдерами

Настройка

Каждое n-ое соединение (per-connection-classifier)

PCC разделяет трафик по группам, основываясь на данных TCP заголовка (src-address, dst-address, src-port, dst-port).

https://gosniipp.ru/ru/news/informacionnie-tehnologii/20190320/osnovi-staticheskoi-marshrutizacii-v-mikrotik-routeros

PCC берет поля из IP заголовка (src-address: знаменатель/остаток), преобразует их в 32-битное значение и делит на знаменатель. Остаток от деления сравнивается с указанным остатком и если они совпадают, то применяется указанное действие.

Пример с тремя адресами: 192.168.100.10: 192+168+100+10 = 470 % 3 = 2 192.168.100.11: 192+168+100+11 = 471 % 3 = 0

192.168.100.12: 192+168+100+12 = 472 % 3 = 1

Маркируем соединения (для gw1 маркировать каждое 1-е соединение, для gw2 маркировать только каждое 2-е соединение)

/ip firewall mangle

add action=mark-routing chain=prerouting in-interface=bridge-local new-routing-mark=from-local-route-via-ISP1 per-connection-classifier=src-address-and-port:2/0

add action=mark-routing chain=prerouting in-interface=bridge-local new-routing-mark=from-local-route-via-ISP2 per-connection-classifier=src-address-and-port:2/1

ИЛИ (для gw1 маркировать каждое 1-е и 2-е соединение, для gw2 маркировать только каждое 3-е соединение)

/ip firewall mangle

add action=mark-routing chain=prerouting in-interface=bridge-local new-routing-mark=from-local-route-via-ISP1 per-connection-classifier=src-address-and-port:3/0

add action=mark-routing chain=prerouting in-interface=bridge-local new-routing-mark=from-local-route-via-ISP1 per-connection-classifier=src-address-and-port:3/1

add action=mark-routing chain=prerouting in-interface=bridge-local new-routing-mark=from-local-route-via-ISP2 per-connection-classifier=src-address-and-port:3/2

Отправляем соединения с соответствующей маркировкой в соответствующий шлюз

/ip route

add comment=from-local-icmp-route-via-ISP1 distance=1 gateway=193.34.13.97 routing-mark=from-local-icmp-route-via-ISP1

add comment=from-local-udp-route-via-ISP2 distance=1 gateway=172.18.0.129 routing-mark=from-local-udp-route-via-ISP2

Каждое n-ое соединение (nth)

ДЛЯ МАРКИРОВКИ КАЖДОГО N-ГО СОЕДИНЕНИЯ ЛУЧШЕ ИСПОЛЬЗОВАТЬ "PER-CONNECTION-CLASSIFIER"! РАБОТАЕТ СТАБИЛЬНЕЕ!

Маркируем каждое 1-е и каждое 2-е соединение из локалки во внешку соответствующей маркировкой используя in-interface=bridge-local

/ip firewall mangle

add action=mark-routing chain=prerouting comment=from-local-route-via-ISP1 in-interface=bridge-local new-routing-mark=from-local-route-via-ISP1 nth=2,1 passthrough=yes

add action=mark-routing chain=prerouting comment=from-local-route-via-ISP2 in-interface=bridge-local new-routing-mark=from-local-route-via-ISP2 nth=2,2 passthrough=yes

ИЛИ ( используя src-address=192.168.1.0/24 )

/ip firewall mangle

add action=mark-routing chain=prerouting comment=from-local-route-via-ISP1 src-address=192.168.1.0/24 new-routing-mark=from-local-route-via-ISP1 nth=2,1 passthrough=yes

add action=mark-routing chain=prerouting comment=from-local-route-via-ISP2 src-address=192.168.1.0/24 new-routing-mark=from-local-route-via-ISP2 nth=2,2 passthrough=yes

Отправляем каждое 1-е и 2-е отмаркированные соединения через соответствующие шлюзы ISP1 и ISP2

/ip route

add comment=from-local-route-via-ISP1 distance=1 gateway=193.34.13.97 routing-mark=from-local-route-via-ISP1

add comment=from-local-route-via-ISP2 distance=1 gateway=172.18.0.129 routing-mark=from-local-route-via-ISP2

Распределение по протоколам

Соединение каждого протокола отправляем через определенный шлюз

Маркируем соединения по протоколам ICMP и UDP

/ip firewall mangle

add action=mark-routing chain=prerouting comment=from-local-icmp-route-via-ISP1 in-interface=bridge-local new-routing-mark=from-local-icmp-route-via-ISP1 passthrough=yes protocol=icmp

add action=mark-routing chain=prerouting comment=from-local-udp-route-via-ISP2 in-interface=bridge-local new-routing-mark=from-local-udp-route-via-ISP2 passthrough=yes protocol=udp

Отправляем соединения с соответствующей маркировкой в соответствующий шлюз

/ip route

add comment=from-local-icmp-route-via-ISP1 distance=1 gateway=193.34.13.97 routing-mark=from-local-icmp-route-via-ISP1

add comment=from-local-udp-route-via-ISP2 distance=1 gateway=172.18.0.129 routing-mark=from-local-udp-route-via-ISP2

??? Делим исходящий трафик, используя ecmp (equal cost multipath routing)

??? СПОСОБ НЕ ЗАРАБОТАЛ, ВЕСЬ ТРАФИК ВСЁ РАВНО ИДЕТ ЧЕРЕЗ GW1 - РАЗОБРАТЬСЯ

/ip firewall mangle

add action=mark-routing chain=prerouting in-interface=bridge-local new-routing-mark=mixed

/ip route

add distance=1 gateway=193.34.13.97,172.18.0.129 routing-mark=mixed