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

Материал из Wiki
Перейти к навигации Перейти к поиску
(Новая страница: «Категория:Mikrotik __ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__»)
 
Строка 1: Строка 1:
[[Категория:Mikrotik]]
[[Категория:Mikrotik]]
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__
== Ссылки ==
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).
Маркируем соединения (для gw1 маркировать каждое 1-е соединение, для gw2 маркировать только каждое 2-е соединение)
<code>/ip firewall mangle</code>
<code>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</code>
<code>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</code>
'''ИЛИ''' (для gw1 маркировать каждое 1-е и 2-е соединение, для gw2 маркировать только каждое 3-е соединение)
<code>/ip firewall mangle</code>
<code>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</code>
<code>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</code>
<code>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</code>
Отправляем соединения с соответствующей маркировкой в соответствующий шлюз
<code>/ip route</code>
<code>add comment=from-local-icmp-route-via-ISP1 distance=1 gateway=193.34.13.97 routing-mark=from-local-icmp-route-via-ISP1</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) ===
<blockquote>ДЛЯ МАРКИРОВКИ КАЖДОГО N-ГО СОЕДИНЕНИЯ ЛУЧШЕ ИСПОЛЬЗОВАТЬ "'''PER-CONNECTION-CLASSIFIER'''"! РАБОТАЕТ СТАБИЛЬНЕЕ!</blockquote>Маркируем каждое '''1-е''' и каждое '''2-е''' соединение из локалки во внешку соответствующей маркировкой используя '''in-interface=bridge-local'''
<code>/ip firewall mangle</code>
<code>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</code>
<code>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</code>
'''ИЛИ''' ( используя '''src-address=192.168.1.0/24''' )
<code>/ip firewall mangle</code>
<code>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</code>
<code>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</code>
Отправляем каждое 1-е и 2-е отмаркированные соединения через соответствующие шлюзы ISP1 и ISP2
<code>/ip route</code>
<code>add comment=from-local-route-via-ISP1 distance=1 gateway=193.34.13.97 routing-mark=from-local-route-via-ISP1</code>
<code>add comment=from-local-route-via-ISP2 distance=1 gateway=172.18.0.129 routing-mark=from-local-route-via-ISP2</code>
=== Распределение по протоколам ===
Соединение каждого протокола отправляем через определенный шлюз
Маркируем соединения по протоколам ICMP и UDP
<code>/ip firewall mangle</code>
<code>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</code>
<code>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</code>
Отправляем соединения с соответствующей маркировкой в соответствующий шлюз
<code>/ip route</code>
<code>add comment=from-local-icmp-route-via-ISP1 distance=1 gateway=193.34.13.97 routing-mark=from-local-icmp-route-via-ISP1</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>
=== ??? Делим исходящий трафик, используя ecmp (equal cost multipath routing) ===
<blockquote>??? СПОСОБ НЕ ЗАРАБОТАЛ, ВЕСЬ ТРАФИК ВСЁ РАВНО ИДЕТ ЧЕРЕЗ GW1 - РАЗОБРАТЬСЯ</blockquote><code>/ip firewall mangle</code>
<code>add action=mark-routing chain=prerouting in-interface=bridge-local new-routing-mark=mixed</code>
<code>/ip route</code>
<code>add distance=1 gateway=193.34.13.97,172.18.0.129 routing-mark=mixed</code>

Версия 11:08, 23 января 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).

Маркируем соединения (для 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