Кто-то назвал политику EXPORT-STATIC, привязал её и теперь недоумевает, почему префикс из экземпляра маршрутизации VPN никогда не доходит до дальнего конца. Имя никак не влияет на выбор. Политика — это определение плюс привязка, и то, что она экспортирует, определяется её условиями совпадения, упорядоченными термами и контекстом, который её использует. Прочитайте эти три в указанном порядке, и загадка обычно сводится к одному терму, который так и не совпал.

Имя — это метка, а не условие

Junos не интерпретирует имена политик. Политика, которую разумно было бы назвать статическим экспортом, может совпадать с протоколом static, может совпадать с префиксом адреса или может не совпадать ни с чем и принимать всё проходящее. Метка — это документация, написанная тем, кто её создал, и она ровно настолько надёжна, насколько память этого человека о замысле.

Относитесь к неожиданному результату экспорта как к просьбе прочитать определение, а не как к доказательству, что привязка сломана. Прочитайте определение и позвольте ему противоречить метке.

Сначала найдите привязку, потом термы

Правильное определение, привязанное не в том месте, меняет другой обмен. Установите, какой экземпляр маршрутизации, протокол и сосед или группа действительно ссылаются на политику, потому что политика, привязанная под одной группой BGP, не влияет на другую, а политика, привязанная к экземпляру, не обязательно применяется к каждому протоколу внутри него. Junos различает эти уровни, и отсутствующий экспорт на уровне группы — обычное дело, когда замысел выражен на уровне экземпляра.

Запишите путь привязки, прежде чем прочитать хотя бы один терм. Половина таких расследований заканчивается там: определение не тронуто, а оператор экспорта перенесён. Отметьте разницу в журнале изменений, чтобы никто не откатил её как ошибку.

Термы вычисляются по порядку, и первое решение побеждает

Термы идут от первого к последнему, и терм, который принимает или отклоняет, — это окончательное решение. Более поздний терм, похожий на задуманное исключение, никогда не выполняется, если более ранний терм уже решил судьбу маршрута, поэтому политика может читаться правильно сверху вниз и всё же вести себя вопреки замыслу. Проверяйте порядок относительно интересующего вас маршрута, а не относительно порядка, в котором набирались термы.

Терм, в котором опущено действие, не завершает вычисление; оно продолжается на следующем терме, и итоговый результат зависит от того, что идёт дальше, и от применимого значения по умолчанию. Это действительно полезная конструкция и надёжный источник сюрпризов, когда она непреднамеренна.

Пример, который экспортирует только статические маршруты, с привязкой на группе:

policy-options {
    policy-statement EXPORT-STATIC {
        term statics { from protocol static; then accept; }
    }
}
protocols bgp group TO-PEER { export EXPORT-STATIC; }

Префикс, изученный через OSPF, а не настроенный как статический маршрут, не проходит совпадение и отбрасывается, как бы ни называлась политика.

Действия меняют копию, а не исходный маршрут

Действия политики работают с маршрутом в том виде, в каком он вычисляется для этого объявления, то есть с копией, а не с записью в таблице маршрутизации. Поэтому локальная команда show route может показывать маршрут с одним набором атрибутов, тогда как экспортируемая версия несёт другие, и экспорт не переписывает исходный маршрут. Это различие объясняет несколько споров о том, чей вывод верен: верны оба, и они описывают разные объекты. Говорите, какое представление вы цитируете, всякий раз, когда два инженера расходятся во мнениях об атрибуте маршрута.

Принятие и отклонение — окончательные решения; изменения атрибутов не обязательно таковы. Не предполагайте, что установка community завершает политику, потому что вычисление может продолжиться в термах, которые вы не учли.

Сравните объявленное представление с ожиданием

Используйте представление, специфичное для протокола, на фактическом пире, например show route advertising-protocol bgp 192.0.2.1, и читайте его в правильном контексте экземпляра маршрутизации. Маршрут, присутствующий в VRF, не обязательно прошёл политику экспорта, а маршрут, появившийся в объявленном выводе, не обязательно принят дальней стороной. Это три отдельных состояния, и отказывают они по-разному.

Примите проект с одним префиксом, который должен объявляться, и одним, который должен остаться локальным. Это даёт политике проверяемый контракт и позволяет избежать альтернативного исправления — расширения экспорта до тех пор, пока наконец не появится один именованный маршрут.

Похожие статьи