Добрый день. Прошу помочь с настройкой ECMP при нескольких локальных сетях. Для начала имеем простой случай: 1. Два провайдера 2. Одна локальная сеть В таком случае настройка ECMP достаточно проста (конфигурация из официальной Вики): Код: / ip address add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=LAN add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=ISP1 add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=ISP2 / ip firewall mangle add chain=prerouting dst-address=10.111.0.0/24 action=accept in-interface=LAN add chain=prerouting dst-address=10.112.0.0/24 action=accept in-interface=LAN add chain=prerouting in-interface=ISP1 connection-mark=no-mark action=mark-connection \ new-connection-mark=ISP1_conn add chain=prerouting in-interface=ISP2 connection-mark=no-mark action=mark-connection \ new-connection-mark=ISP2_conn add chain=prerouting in-interface=LAN connection-mark=no-mark dst-address-type=!local \ per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ISP1_conn add chain=prerouting in-interface=LAN connection-mark=no-mark dst-address-type=!local \ per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ISP2_conn add chain=prerouting connection-mark=ISP1_conn in-interface=LAN action=mark-routing \ new-routing-mark=to_ISP1 add chain=prerouting connection-mark=ISP2_conn in-interface=LAN action=mark-routing \ new-routing-mark=to_ISP2 add chain=output connection-mark=ISP1_conn action=mark-routing new-routing-mark=to_ISP1 add chain=output connection-mark=ISP2_conn action=mark-routing new-routing-mark=to_ISP2 / ip route add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_ISP1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_ISP2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.111.0.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.112.0.1 distance=2 check-gateway=ping / ip firewall nat add chain=srcnat out-interface=ISP1 action=masquerade add chain=srcnat out-interface=ISP2 action=masquerade У меня же более сложная конфигурация: 1. Офис и филиал 2. В обоих местах по два провайдера 3. Два EOIP тонеля 4. Самое главное - несколько подсетей в каждом подразделении Если применить настройку из простого случая к R1, то все тоже работает, кроме маршрутизации между подсетями. То есть, если с компьютера из 192.168.2.0 сети отправить запрос на сервер в 192.168.1.0 сети, то насколько я понимаю, на правилах: Код: add chain=prerouting in-interface=LAN connection-mark=no-mark dst-address-type=!local \ per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ISP1_conn add chain=prerouting in-interface=LAN connection-mark=no-mark dst-address-type=!local \ per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ISP2_conn он успешно маркируется и отправляется не в 192.168.1.0, а дальше провайдеру. Хотя, казалось бы, из-за опции "dst-address-type=!local" такого не должно происходить. Или должно? В любом случае, как корректно настроить mangle, чтобы пакеты успешно ходили между локальными сетями? Я нашел только один вариант, это совсем исключить из маркировки входящий из локальных сетей траффик правилом: Код: chain=prerouting action=mark-connection new-connection-mark=no-mark passthrough=no dst-address=192.168.1.0/24 log=no log-prefix="" chain=prerouting action=mark-connection new-connection-mark=no-mark passthrough=no dst-address=192.168.2.0/24 log=no log-prefix="" Это работает, если сетей по 3 с каждой стороны, но это проблема если сетей по 20, придется каждую прописывать в исключения. Возможно ли как то решить проблему изящнее? Спасибо заранее!
Все оказалось донельзя просто, нужно было всего лишь добавить все локальные сети в исключения перед основными правилами маркировки по аналогии с первым правилом: add chain=prerouting dst-address=10.111.0.0/24 action=accept in-interface=LAN