Теоретические основы и архитектура
Один IGP с LDP масштабируется до нескольких тысяч узлов, а оператору с десятками тысяч узлов доступа нужен end-to-end LSP между любыми двумя PE. Unified (Seamless) MPLS решает задачу иерархией: каждый домен (доступ, агрегация, ядро) живёт в своём IGP с LDP, а loopback удалённых PE переносит BGP Labeled Unicast (RFC 8277, ранее RFC 3107), то есть BGP раздаёт префиксы вместе с MPLS-метками. На границе доменов ABR/ASBR выставляют next-hop-self и меняют метку: стек на входе содержит транспортную метку до ABR, метку BGP-LU удалённого PE и сервисную метку VPN. IGP не редистрибутируется между доменами, поэтому таблицы доступа остаются малыми, а резервирование и быстрая сходимость наследуются от предыдущих уроков: LFA внутри домена и PIC на PE. Урок объясняет формат BGP-LU, последовательность меток через границу, отбор loopback по community, размер таблиц и ограничения. Предполагается знание LDP, iBGP/RR, L3VPN и Inter-AS Option C.
Проблема масштаба одного домена
Плоская сеть с одним IGP и LDP требует, чтобы каждый узел знал /32 каждого PE и держал метку для каждого из них. Для сетей с десятками тысяч узлов доступа и агрегации это означает огромную базу LSDB, частые пересчёты SPF от любого флапа в удалённом сегменте, большие LFIB на дешёвых узлах доступа и сложность сходимости. Практический ориентир: один IGP-домен остаётся управляемым в пределах сотен-нескольких тысяч узлов, точное значение зависит от платформы. Разбиение на области IS-IS/OSPF не решает задачу, если LDP по-прежнему требует /32 каждого PE в каждой области, а суммирование loopback ломает быстрое обнаружение отказа PE (см. предыдущий урок). Нужен способ передать достижимость удалённых PE без общего IGP.
BGP Labeled Unicast: формат
BGP-LU (RFC 8277, заменил RFC 3107) использует MP-BGP с AFI 1 (IPv4) или 2 (IPv6) и SAFI 4 (labeled unicast). Метка передаётся прямо в NLRI: поле Length включает 24 бита метки на каждый элемент стека плюс длину префикса, затем идёт поле метки (3 байта: 20 бит значения, 3 бита TC, 1 бит bottom-of-stack) и сам префикс. RFC 8277 разрешает несколько меток для одного префикса и, вместе с Add-Path (RFC 7911), позволяет отправлять несколько путей на префикс. В Withdraw поле метки обычно равно 0x800000 или 0x000000 (значение не имеет смысла). Метка находится в NLRI, а не в отдельном атрибуте; тот же механизм используется в Inter-AS Option C для loopback. Сессия должна согласовать возможность обмена метками: на Cisco это send-label, на Junos family inet labeled-unicast, на Huawei label-route-capability.
Иерархия и стек из трёх меток
Сеть делится на домены, например доступ A - ядро - доступ B. В каждом домене работают собственный IGP и LDP. PE1 и PE2 обмениваются VPNv4 через RR как обычно, но их loopback видны только в своих доменах, поэтому PE1 нужен путь к 10.255.0.2/32: он приходит по BGP-LU через ABR. ABR выполняет роль RR для LU и устанавливает next-hop-self (на Cisco next-hop-self all, чтобы изменить next-hop и для отражённых iBGP-маршрутов). Выделяя собственную метку для каждого префикса, ABR программирует LFIB: входящая метка BGP-LU, действие swap на метку PE2 (BGP-LU, выданную PE2), и выход через LDP-метку домена B. Стек на PE1 - три метки: транспортная LDP до ABR, BGP-LU удалённого PE и метка VPN. Если ABR и PE1 не соседи, добавляется ещё одно звено между ними. При PHP внешнюю метку LDP снимает предпоследний узел, и до ABR доходит пакет с меткой BGP-LU.
Отбор loopback и предотвращение раздувания
BGP-LU не должен выпускать в доступ всю таблицу. Практические способы: (1) community loopback (например 65000:999) задаётся на PE при выпуске; на ABR разрешены только префиксы с этой community и маской /32; (2) prefix-list на длину /32 из блока loopback; (3) для узлов доступа - получать только loopback нужных удалённых PE (RT-Constrain-подобный подход: по заказу сервиса) или использовать default-подобное решение только там, где разрешено. Дополнительно на RR и ABR ограничивают число префиксов (maximum-prefix) на сессию, чтобы ошибочно объявленная таблица не заполнила память. Метка выделяется под каждый префикс (per-prefix), и число меток ограничено пространством 20 бит (около миллиона значений минус зарезервированные 0-15), поэтому на ABR оценивайте число loopback, умноженное на число сессий в более сложных режимах.
Сходимость и резервирование
Внутри домена отказ закрывается LFA и быстрым IGP (предыдущие уроки). При отказе PE2 его /32 исчезает в IGP домена B, ABR выпускает withdraw BGP-LU, это распространяется на PE1: на сходимость влияют задержки next-hop tracking и MRAI, поэтому PE1 использует PIC Edge с резервным путём через второй ABR (ABR2) или другой PE. Дублирование ABR создаёт два пути на префикс (две метки BGP-LU и два next-hop): без Add-Path или уникальных RD/originator RR выберет один. Отказ самого ABR PE1 видит как исчезновение next-hop (через IGP домена A), и PIC переключает на ABR2, если путь есть в FIB. Петли между ABR предотвращаются cluster-id и originator-id, при асимметричных политиках проверяйте.