Я пытаюсь найти самый элегантный способ реализовать фильтр RTBH для маршрутов, полученных от клиента.
Фильтр должен:
- Принимайте только собственные префиксы клиентов из списка префиксов
- Только принимать / 32 префикса
- Только префиксы с сообществом blackhole
- Установите следующий переход к следующему переходу RTBH (192.0.2.1)
Для начала я посмотрел документ « Настройка условий совпадения в условиях политики маршрутизации » от Juniper.
Сначала я подумал о комбинировании a prefix-list-filter
для сопоставления только маршрутов из списка префиксов клиентов и a route-filter
для ограничения принятых префиксов до / 32, например, так:
from {
as-path customer;
community blackhole;
prefix-list-filter customer-prefixes orlonger;
route-filter 0.0.0.0/0 prefix-length-range /32-/32;
}
Но потом я наткнулся на эту информацию в документе:
Если вы настраиваете политику, которая включает некоторую комбинацию фильтров маршрутов, списков префиксов и фильтров адресов источника, они оцениваются в соответствии с логической операцией ИЛИ или поиском совпадения с самым длинным маршрутом.
Как я понимаю , это (и я считаю , это немного неясно), если я использую prefix-list-filter
, route-filter
и / или source-address-filter
в тот же срок он будет оцениваться с длинной-матч или между всеми ними, что делает этот подход непригодным для использования .
Я придумал следующий фильтр. Этот hostroutes-only
термин переводит все префиксы короче / 32 на следующую политику. После этого prefixes
термин совпадает, если / 32 находится в диапазоне клиента, совпадает с его as-path и имеет установленное сообщество черной дыры:
term hostroutes-only {
from {
route-filter 0.0.0.0/0 prefix-length-range /0-/31;
}
then next policy;
}
term prefixes {
from {
as-path customer;
community blackhole;
prefix-list-filter customer-prefixes orlonger;
}
then {
next-hop 192.0.2.1;
accept;
}
}
Итак, это самый элегантный способ справиться с этим? Любые другие решения?