Здравствуйте, у меня есть кейсы, где часть статических маршрутов должна оставаться локальной для устройства, а другие — перераспределяться через OSPF. В ROS 6 я решал это путем «тегирования» статических маршрутов специальным BGP-сообществом (65511:1), а затем с помощью фильтра маршрутизации на ospf-out пропускал к перераспределению только помеченные маршруты. Пример (ROS 6.49.5):
/ip route add bgp-communities=65111:1 comment="route to be redistributed" dst-address=10.1.0.0/22 type=blackhole
/ip route add comment="pure local static route" dst-address=10.1.8.0/23 gateway=10.2.0.1
/routing ospf instance set [find default=yes] redistribute-static=as-type-1
/routing filter add action=accept bgp-communities=65511:1 chain=ospf-out comment="redistribute tagged routes" protocol=static
/routing filter add action=discard chain=ospf-out comment="discard all other static routes" protocol=static
«Нетегированные» статические маршруты подавлялись и не попадали в таблицы маршрутизации других OSPF-роутеров внутри области.
После обновления до ROS 7.1.5 способ тегирования с помощью BGP-сообщества больше не поддерживается синтаксисом. Я пытался сохранить такое же поведение, но маршруты, похоже, всё равно перераспределяются, даже если применяется действие «reject». Пример (ROS 7.1.5):
/ip route add blackhole comment="route to be redistributed" disabled=no distance=2 dst-address=10.1.0.0/22 routing-table=main suppress-hw-offload=no
/ip route add comment="pure local static route" disabled=no distance=10 10.1.8.0/23 gateway=10.2.0.1 routing-table=main suppress-hw-offload=no
/routing ospf instance add name=default-v2 out-filter-chain=ospf-out redistribute=static
/routing filter rule add chain=ospf-out comment="redistribute only static routes with distance lower than 10" disabled=no rule="if (protocol static && active && distance < 10 ) { set ospf-ext-tag 9; accept; }"
/routing filter rule add chain=ospf-out comment="don''t redistribute other static routes" disabled=no rule="if (protocol static ) { set ospf-ext-tag 10; reject; }"
С таким конфигом, просматривая таблицу маршрутизации на другом роутере из OSPF-области, я вижу, что маршруты помечены как OSPF external (как и ожидалось), но даже «отклонённый» маршрут присутствует, и у него ospf-ext-tag=10, что подтверждает срабатывание фильтра. (ospf-ext-tag используется только для отладки.)
Это баг? Или я что-то делаю не так? Есть ли простой и логичный способ реализовать подобное тегирование и фильтрацию?
Замечу, что приведённый код — упрощённый пример, в реальной конфигурации у меня гораздо больше маршрутов как IPv4, так и IPv6.
С уважением.
/ip route add bgp-communities=65111:1 comment="route to be redistributed" dst-address=10.1.0.0/22 type=blackhole
/ip route add comment="pure local static route" dst-address=10.1.8.0/23 gateway=10.2.0.1
/routing ospf instance set [find default=yes] redistribute-static=as-type-1
/routing filter add action=accept bgp-communities=65511:1 chain=ospf-out comment="redistribute tagged routes" protocol=static
/routing filter add action=discard chain=ospf-out comment="discard all other static routes" protocol=static
«Нетегированные» статические маршруты подавлялись и не попадали в таблицы маршрутизации других OSPF-роутеров внутри области.
После обновления до ROS 7.1.5 способ тегирования с помощью BGP-сообщества больше не поддерживается синтаксисом. Я пытался сохранить такое же поведение, но маршруты, похоже, всё равно перераспределяются, даже если применяется действие «reject». Пример (ROS 7.1.5):
/ip route add blackhole comment="route to be redistributed" disabled=no distance=2 dst-address=10.1.0.0/22 routing-table=main suppress-hw-offload=no
/ip route add comment="pure local static route" disabled=no distance=10 10.1.8.0/23 gateway=10.2.0.1 routing-table=main suppress-hw-offload=no
/routing ospf instance add name=default-v2 out-filter-chain=ospf-out redistribute=static
/routing filter rule add chain=ospf-out comment="redistribute only static routes with distance lower than 10" disabled=no rule="if (protocol static && active && distance < 10 ) { set ospf-ext-tag 9; accept; }"
/routing filter rule add chain=ospf-out comment="don''t redistribute other static routes" disabled=no rule="if (protocol static ) { set ospf-ext-tag 10; reject; }"
С таким конфигом, просматривая таблицу маршрутизации на другом роутере из OSPF-области, я вижу, что маршруты помечены как OSPF external (как и ожидалось), но даже «отклонённый» маршрут присутствует, и у него ospf-ext-tag=10, что подтверждает срабатывание фильтра. (ospf-ext-tag используется только для отладки.)
Это баг? Или я что-то делаю не так? Есть ли простой и логичный способ реализовать подобное тегирование и фильтрацию?
Замечу, что приведённый код — упрощённый пример, в реальной конфигурации у меня гораздо больше маршрутов как IPv4, так и IPv6.
С уважением.
