Ураа!
Заработало!
В общем то что я задумал - можно использовать. Резюмирую
Головной микротик:
Создаём инстанцию для нижестоящих пиров
Код: Выделить всё
/routing bgp instance
add as=65531 name=to.cams redistribute-connected=yes redistribute-other-bgp=yes redistribute-static=yes router-id=192.0.2.2
прописываем сети с параметром Synchronize=no
Код: Выделить всё
/routing bgp network
add network=1.1.1.1/32 synchronize=no
Создаём фильтры с этими-же сетями (в идеале надо-бы чтоб в фильтр автоматом падали сети с routing bgp networks) и навешиваем нужный комьюнити, соответственно отдаём нужное(ые) комьюнити нижестоящим (в примере только то, что отвечает за мои нужды)
Код: Выделить всё
/routing filter
add action=accept append-bgp-communities=65531:115 chain=from-office-bgp-in prefix=192.168.0.0/16 prefix-length=16-32
add action=accept chain=to-office-bgp-out prefix=1.1.1.1 prefix-length=32 set-bgp-communities=65535:115
add action=accept bgp-communities=65531:115 chain=to-office-bgp-out
add action=accept bgp-communities=65535:115 chain=to-office-bgp-out
add action=discard chain=to-office-bgp-out
описание:
1.Принимаем от нижестоящих их сети и навешиваем на них нужное комьюнити (нижестоящих много, нужно получить их сети для нормальной реализации моих нужд)
2. Навешиваем на нужную сеть (нужный адрес) необходимое комьюнити для отделения от остальных сетей
3. Отдаём сети с основным комьюнити (у меня необходимость для того чтобы концевые железки могли контактировать друг с другом)
4. Отдаём комьюнити с нужной сетью
Тут важно отметить один нюанс, сожравший у меня кучу нервов в один давний момент. Чтоб отдать 2 и более комьюнити их надо прописывать
ОТДЕЛЬНЫМ фильтром. Не смотря на то что винбокс позволяет добавлять несколько комьюнити в одном фильтре. Запоминаем -
каждое комьюнити - отдельный фильтр
Создаём пира
Код: Выделить всё
/routing bgp peer
add hold-time=1m in-filter=from-office-bgp-in instance=to.cams keepalive-time=5s name=from.sb.04 out-filter=to-office-bgp-out remote-address=100.64.40.4 remote-as=65504 ttl=default
На этом на головном маршрутизаторе всё.
Переходим к нижестоящему пиру:
Создаём инстанс
Прописываем сети для отдачи наверх (если надо)
Код: Выделить всё
/routing bgp network
add network=192.168.146.0/24 synchronize=no
Создаём фильтры
Код: Выделить всё
/routing filter
add action=accept bgp-communities=65535:115 chain=from.carribean set-routing-mark=one
add action=accept chain=from.carribean
Описание:
1. Получаем сети с определённого комьюнити и навешиваем на него нужный routing mark (в общем то, для чего задумывалась данная схема работы)
2. Получаем всё остальное
Создаём пира
Код: Выделить всё
/routing bgp peer
add hold-time=1m in-filter=from.carribean keepalive-time=5s name=peer1 remote-address=100.64.0.1 remote-as=65531 ttl=default
Далее идём в ip route rules и создаём простое правило -
Описание:
таблица "one" появляется в момент навешивания routing mark на нужную сеть при получении маршрута
После этого в любом правиле, фаервола просто используем данную таблицу маршрутизации для своих нужд (drop/accept/reject....etc)
Код: Выделить всё
/ip firewall filter
add action=drop chain=output routing-table=one
(в примере дропаем выход в мир для этой таблицы с самого микротика, не забываем про разницу между output и forward)
Вот в принципе и всё. То что я хотел - получил, немного облагородить и будет идеально.
Теперь, чтоб прописать разрешение ходить железкам по нужным адресам - мне достаточно изменить данные на головном микротике, правда пока в двух местах, в routing bgp networks и в фильтрах (в идеале хочу прописывать только в одном месте - routing bgp networks, но, боюсь, в моей конфигурации это не реализовать, только каким-нить скриптом, который будет смотреть что у меня за сети прописаны и сравнивать их с фильтрами), и железо получит возможность руководствоваться моими правилами, у меня высвобождается толпа времени (до этого момента надо было распространять адресслист на каждый микротик, а их около 250 и занимало не мало времени и было очень занудным)