Я пытаюсь найти самый элегантный способ реализовать фильтр 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;
}
}
Итак, это самый элегантный способ справиться с этим? Любые другие решения?