Мне тут понадобилось в Mikrotik разрулить разные bgp community в разные шлюзы или интерфейсы, кому как нравится. Долго не мог найти такой информации в интернете и даже ИИ не давал верного ответа. Выработал решение самостоятельно и сделал заметку для себя и может кому еще пригодится.
Данная статья посвящена исключительно ее теме связанной с bgp community на Mikrotik и никакого отношение к обходу блокировок не имеет. Любые попытки представить иное не уместны и беспочвенны.

Ранее я уже делал статьи про настройку BGP в Mikrotik поэтому сейчас не буду повториться, а расскажу конкретно как завернуть разные bgp community в разные шлюзы или интерфейсы. Так же в статье про настройку BIRD я оставлял информацию как можно сделать то же самое, что и в этой статье, но эта конфигурация мне кажется более правильной и логичной.
Если знаете другое более правильное решение, то напишите в комментариях какое и самое главное почему вы считаете ваше решение лучше, чем это.
Исходные данные:
- Mikrotik RB5009 с RouterOS v7.18.2
- Имеется два настроенных и работающих стыка BGP, которые получают разные BGP community с разными сервисами.
- Имеются два разных шлюза или интерфейса для доступа к этим сервисам
- community 65444:770 и 65444:780 через интерфейс wg0
- community 64888:301 через интерфейс wg0
- Остальные community через интерфейс wg2
Для начала нужно перейти в Winbox и открыть Routing > Filtr. Создать нужное количество правил. Тут важно, что правила читаются сверху в низ и их порядок имеет значение. Поэтому сначала нужные community, а затем все остальные, которые не попали под первые правила. Правила можно перетаскивать и устанавливать их в нужной последовательности. Так же нужно отметить, что правила с одинаковым названием фильтра в Mikrotik, например IN-antifiltr-2, это один фильтр, но их применение строго сверху в низ.
Я создал три правила с названием фильтра IN-antifiltr-2 и три правила с названием фильтра IN-BIRD-2. Разместил их по очереди друг за другом
/routing/filter/
add chain=IN-antifiltr-2 comment=YuoTube disabled=no rule="if (bgp-communities includes 65444:770){set gw *0xc;accept;}"
add chain=IN-antifiltr-2 comment=Google disabled=no rule="if (bgp-communities includes 65444:780){set gw *0xc;accept;}"
add chain=IN-antifiltr-2 comment="Default othe" disabled=no rule="set gw *0x13; accept;"
/routing/filter/
add chain=IN-BIRD-2 comment=Google disabled=no rule="if (bgp-communities includes 64888:301){set gw *0xc;accept;}"
add chain=IN-BIRD-2 comment=Discord disabled=yes rule="if (bgp-communities includes 64888:501){set gw wg0;accept;}"
add chain=IN-BIRD-2 comment="Default othe" disabled=no rule="set gw *0x13; accept;"
Я не знаю почему, но в Winbox имя интерфейса отображается корректно, а в терминале указываются какие-то непонятные значения для меня (wg0 – *0xc wg2 – *0x13). Я делал через Winbox, но для понимания выложил конфигурацию выше

Затем остается пойти в настройки BGP пира и изменить входящий фильтр на нужный

Через мгновение маршруты перестроятся и вы получите желаемый результат

Теперь вы знаете как сделать в Mikrotik разные bgp community в разные шлюзы
Решил еще для истории зафиксировать конфиг с параметром distance
. На данный момент я еще не решил точно как это может пригодиться. Идея изначально была как-то зарезервировать шлюз. Ума еще не дал, но в заметках оставил.
/routing/filter/
add chain=IN-antifiltr-2 comment=YuoTube disabled=no rule="if (bgp-communities includes 65444:770){set gw wg0;set distance 100;accept;}"
add chain=IN-antifiltr-2 comment=Google disabled=no rule="if (bgp-communities includes 65444:780){set gw wg0;set distance 100;accept;}"
add chain=IN-antifiltr-2 comment="Default othe" disabled=no rule="set gw wg2; set distance 100; accept;"
/routing/filter/
add chain=IN-BIRD-2 comment=Google disabled=no rule="if (bgp-communities includes 64888:301){set gw wg0;set distance 100;accept;}"
add chain=IN-BIRD-2 comment=Discord disabled=yes rule="if (bgp-communities includes 64888:501){set gw wg0;set distance 100;accept;}"
add chain=IN-BIRD-2 comment="Default othe" disabled=no rule="set gw wg2; set distance 100; accept;"