Кратко

  • ASN 0 — зарезервированная не-идентичность: его нельзя заявлять как AS соседа в OPEN и нельзя помещать в AS_PATH, AS4_PATH, AGGREGATOR или AS4_AGGREGATOR. При этом ORIGIN 0 — допустимый код IGP.
  • RFC 7607 определяет меру по полю: соединение с peer AS 0 прерывается, маршруты UPDATE с нулём в AS_PATH обрабатываются как отозванные, а ошибочный атрибут агрегации или четырёхоктетного перехода отбрасывается с продолжением остальной обработки.

После миграции одна смена получила три разных сигнала. На первом маршрутизаторе соседство не устанавливалось и завершалось Bad Peer AS. На втором BGP-сессия оставалась зелёной, но часть префиксов исчезла. На третьем префикс сохранился, хотя AGGREGATOR больше не отображался.

В каждом случае фигурировал AS 0. Но это были три разные области отказа.

RFC 7607 запрещает один и тот же ASN в OPEN и четырёх атрибутах UPDATE. Однако он не предписывает одинаковый результат. Ноль в OPEN разрушает заявленную идентичность соседа. Ноль в AS_PATH лишает доверия reachability, переданной конкретным UPDATE. Ноль в AGGREGATOR или AS4-атрибуте делает ошибочным атрибут, а не обязательно NLRI.

Операционная строгость состоит не в том, чтобы всегда сбрасывать больше состояния. Она состоит в сохранении поля, выборе предписанной единицы отказа и доказательстве того, что запрещённое состояние не прошло дальше.

Резерв — не временный номер

В текущем реестре автономных систем IANA номер 0 отмечен как Reserved со ссылкой на RFC 7607. Реестр ASN специального назначения отдельно показывает AS_TRANS 23456, диапазоны документации, private-use и последние зарезервированные номера.

Их назначения нельзя менять местами. AS_TRANS нужен для перехода между двух- и четырёхоктетными возможностями. Private ASN применим в контролируемой области. AS 0 не означает «ещё не назначено», «скрытый оператор» или «заполнить позднее».

Автоматизация легко создаёт такую ошибку. Пустая строка преобразуется в integer, колонка не допускает null, шаблон получает значение по умолчанию. Система управления считает ноль технической заглушкой, а BGP получает запрещённое утверждение об идентичности.

Ошибку полезно остановить на commit. В документации Juniper по четырёхбайтовым AS-номерам для описанного продукта указано, что конфигурация ограниченных номеров, включая 0, не принимается. Это одна защитная линия, а не доказательство поведения всех входящих сообщений. Парсер должен правильно отвечать и на дефект соседа.

Ноль в OPEN отменяет соседство

RFC 4271 определяет поле My Autonomous System в OPEN. При получении нуля как peer AS RFC 7607 требует прервать соединение и отправить NOTIFICATION OPEN Message Error с подкодом Bad Peer AS. Маршрутизатору также запрещено самому начинать соединение от имени AS 0.

Единица отказа — попытка соседства. Established ещё не возник, поэтому нет набора действующих маршрутов этой сессии, который можно было бы частично сохранить. Следует хранить OPEN, NOTIFICATION, направление TCP, стороны, время, повторные попытки и породившую значение конфигурацию.

Ослабление проверки peer-AS не создаёт легального исключения. У AS 0 нет владельца, способного его согласовать. Если переход требует временного local-as, он должен использовать реальный допустимый номер с явной проверкой влияния на OPEN и AS_PATH.

Ноль в AS_PATH отзывает затронутые маршруты

UPDATE с AS 0 в AS_PATH объявляется malformed в RFC 7607 и передаётся процедурам RFC 7606. Для malformed AS_PATH применяется treat-as-withdraw: все маршруты в таком UPDATE считаются отозванными и удаляются из Adj-RIB-In.

Сессия может продолжить работу. Это сохраняет остальные корректные маршруты того же соседа. Полный reset перенёс бы стоимость одного плохого пути на множество не связанных префиксов и мог бы умножить ущерб по сети.

Нельзя просто вырезать ноль из AS_PATH или подставить предполагаемый ASN. Путь является заявленной соседом provenance и участвует в loop detection и выборе. Локальная подмена создаёт историю, которой не было. Источник должен отправить новый корректный UPDATE.

Граничный фильтр добавляет защиту. Документация FRRouting приводит пример bogon-AS списка с выражением _0_ для AS_PATH. Такой контроль даёт счётчик и дополнительный барьер, но не видит OPEN и не доказывает обработку иных атрибутов.

Ноль в AGGREGATOR удаляет атрибут

AGGREGATOR указывает AS и speaker, сформировавшие агрегат. Ноль в позиции ASN запрещён RFC 7607, но RFC 7606 назначает malformed AGGREGATOR действие attribute discard. Атрибут удаляется, остальной UPDATE продолжает обработку.

Маршрут может пройти другие проверки и остаться. Поэтому утверждение «любой UPDATE с AS 0 должен быть отозван» неверно. Сохранение route также не означает, что событие безопасно: потеряна информация агрегации и существует источник запрещённого значения.

RFC 6793 задаёт AS4_PATH и AS4_AGGREGATOR для перехода к четырёхоктетным ASN. RFC 7607 считает ноль в них malformed и направляет к RFC 6793. В соответствующем контексте атрибут отбрасывается, ошибка локально журналируется, UPDATE продолжает обработку.

Для объяснения нужны OPEN и negotiated capabilities. Между двумя NEW speakers AS4_PATH и AS4_AGGREGATOR вообще не должны передаваться. Их наличие уже может быть ошибкой. Изолированный UPDATE без capability-контекста недостаточен.

Корректный ORIGIN 0 — контрольный пример

RFC 4271 кодирует IGP значением ORIGIN 0, EGP — 1, INCOMPLETE — 2. ORIGIN 0 допустим и не означает origin ASN 0.

Плоская телеметрия может смешать код ORIGIN, ASN происхождения из AS_PATH, default route и нулевые метрики. После серии ложных тревог правило подавляют, а настоящий запрещённый ASN теряется вместе с шумом.

Набор регрессии должен содержать один валидный UPDATE с ORIGIN 0 и по одному примеру ASN 0 в пяти запрещённых местах. Система обязана сохранить валидный случай и указать поле и действие для остальных. Блокировка каждого нулевого байта — не строгость, а отсутствие семантики.

Минимальная запись включает PDU или lossless-представление, тип сообщения, type code атрибута, направление, peer, AFI/SAFI, capabilities, версию и время. Читаемый ярлык не должен заменять исходное поле.

AS 0 ROA относится к другой власти

RFC 6482 определяет ROA как подписанный объект с asID и авторизациями префиксов. RFC 6483 описывает AS 0 ROA как заявление владельца ресурса: префикс и more-specifics не следует использовать в маршрутизации.

Объект не разрешает AS 0 анонсировать маршрут. RFC 6907 объясняет, что валидный BGP route не может иметь origin ASN 0 и потому не может match AS 0 ROA. Маршрут реального ASN может стать Invalid при наличии покрытия и отсутствии кандидата, совпадающего с фактическим origin и длиной.

Важное ограничение: AS 0 ROA может сосуществовать с ROA routable ASN. Если другая ROA совпадает по префиксу, maxLength и реальному origin, маршрут Valid. Нулевая ROA не отменяет совпадающую положительную авторизацию.

Различаются и часы. OPEN/UPDATE обрабатываются в потоке сессии. ROA проходит публикацию, проверку цепочки, сбор и cache relying party. Исправления BGP и RPKI могут сходиться в разное время. Две линии доказательств связываются, но не сливаются.

От входа до выхода

RFC 7854 задаёт BMP для UPDATE, состояния peer и pre-/post-policy Adj-RIB-In. Первая плоскость показывает, что пришло, вторая — что пережило локальную обработку. Обе нужны, чтобы отделить ошибку отправителя от успешного сдерживания.

RFC 9069 добавляет Loc-RIB: маршруты, выбранные Decision Process. Это не FIB и не доставка пакетов. Заявление о сервисном воздействии требует data-plane доказательств.

RFC 8671 добавляет pre-/post-policy Adj-RIB-Out. Запрет распространения можно проверять на каждом существенном выходе. Один collector не доказывает глобальное отсутствие, но ограниченный список peer создаёт проверяемый периметр.

RFC 7454 даёт общую дисциплину входных, выходных и AS-path фильтров. RFC 7607 даёт решение для конкретного поля. Полная цепочка соединяет исходное сообщение, capabilities, действие, RIB, выбор, при необходимости FIB, выходы, дефект генератора и исправленный UPDATE.

Источники