Mikrotik. 2 Провайдера. Балансировка исходящего трафика из локальной сети в интернет между двумя провайдерами: различия между версиями
Cless (обсуждение | вклад) |
Cless (обсуждение | вклад) |
||
| Строка 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> | ||
Текущая версия на 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).
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