Теоретические основы и архитектура

Корпоративный клиент редко довольствуется одним каналом до оператора: сайт подключают к двум PE, чтобы отказ линка или всего PE не остановил L2-сервис. В классических L2VPN (VPWS, VPLS) это решается резервным псевдопроводом: основной PW работает, резервный в состоянии standby и включается по PW status; для CE используют MC-LAG с протоколом ICCP между PE. Оба подхода работают по схеме active/standby, требуют ручной координации пары PE и не умеют балансировать нагрузку по обоим PE. EVPN (RFC 7432) переносит эту задачу в BGP: оба PE объявляют, что подключены к одному Ethernet Segment (ESI), выбирают Designated Forwarder для BUM-трафика, а удалённые PE видят оба пути (aliasing) и могут балансировать нагрузку между ними. Урок сравнивает три подхода и разбирает маршруты Type 1 и Type 4, режимы all-active и single-active, mass withdrawal и split-horizon label. Предполагается, что вы знакомы с VPWS, VPLS и маршрутами Type 2/3 из предыдущего модуля.

Задача: клиент на двух PE

Клиентский сайт подключают к двум PE по двум причинам: отказ одного канала или PE не должен прерывать сервис, а плановые работы на PE не должны требовать окна обслуживания у клиента. В L2VPN сложность в том, что Ethernet не имеет собственного механизма выбора пути: два активных параллельных пути приводят к петле, поэтому любая схема multihoming решает три задачи сразу: кто из PE пересылает трафик к CE, как не допустить петель BUM-трафика и как быстро обновить таблицы MAC на остальных PE после отказа.

PW redundancy: active/standby

В VPWS и H-VPLS резервирование строится на уровне псевдопровода. PE удалённого сайта (или hub-PE) имеет два PW: основной до PE1 и резервный до PE2. Состояние каждого PW передаётся в LDP-сообщениях через PW Status TLV (RFC 4447, раздел 5.4.2): битовое поле сообщает, что PW не пересылает (0x01), что на локальном AC неисправность приёма (0x02) или передачи (0x04), аналогичные коды существуют для PSN-стороны. RFC 6870 добавляет Preferential Forwarding Status: PE договариваются, какой PW active, а какой standby, и после восстановления основного PW возможен возврат (revertive-поведение зависит от реализации и задержки revert). При переключении на резервный PW таблицы MAC на удалённых коммутаторах и PE устарели, поэтому в VPLS используется LDP MAC Address Withdrawal (RFC 4762), а на CE нередко приходит TCN. Ограничения: резервный PW не несёт трафик, схема настраивается отдельно на каждом PW или VC ID, время переключения определяется механизмом обнаружения отказа (PW status при отказе AC, BFD или LDP keepalive при отказе PSN) и может занимать от десятков миллисекунд до нескольких секунд.

MC-LAG и ICCP

Multi-Chassis LAG позволяет CE собрать один LACP-пучок из линков к двум разным шасси. Два PE выглядят для CE одним партнёром: они используют одинаковый LACP system-id и system priority. Для согласования состояния (какой порт active, синхронизация MAC, ARP, IGMP) между PE работает ICCP (RFC 7275, TCP-порт 646, транспорт LDP). RFC 7275 описывает общую схему, но фактическое поведение (режимы active/standby и active/active, синхронизация, механизмы защиты от split-brain) зависит от вендора, поэтому MC-LAG между платформами разных вендоров обычно не строят. Эксплуатационный риск: при потере ICCP (split-brain) оба PE могут считать себя active, и без защитных механизмов (например, выделенного линка между PE) возможен дублирующий трафик.

EVPN: Ethernet Segment и ESI

В EVPN набор линков между CE и PE, общий для нескольких PE, называется Ethernet Segment (ES). Его идентификатор ESI занимает 10 байт: первый байт задаёт тип, остальные 9 байт зависят от типа (RFC 7432, раздел 5). Тип 0 - произвольное значение, настроенное вручную; тип 1 - формируется из LACP system-id CE и port key; тип 2 - от моста (STP root bridge); тип 3 - system MAC плюс локальный дискриминатор; тип 4 - router-id плюс дискриминатор; тип 5 - номер AS плюс дискриминатор. ESI = 0 означает single-homed сайт. Все PE, подключённые к одному CE, обязаны использовать один и тот же ESI на соответствующих интерфейсах; при all-active на CE должен быть настроен LAG, и PE должны отдавать одинаковый LACP system-id (например, вручную). Расхождение ESI даёт два разных сегмента, и тогда ни DF election, ни split horizon не работают.

Маршруты Type 4 и Type 1

Route Type 4 (Ethernet Segment route) содержит RD, ESI и адрес-источник (IP originating PE). Он несёт extended community ES-Import Route Target, значение которого выводится из ESI, поэтому импортируют такой маршрут только PE, у которых этот ESI настроен локально. Так PE находят друг друга по сегменту и запускают выбор Designated Forwarder.

Route Type 1 (Ethernet Auto-Discovery) бывает двух видов. Per-ES A-D: Ethernet Tag ID равен MAX-ET (0xFFFFFFFF), маршрут объявляется один на сегмент с RT всех EVI сегмента и несёт extended community ESI Label, в котором есть флаг Single-Active и метка split horizon. Per-EVI A-D: Ethernet Tag ID соответствует VLAN (0 для VLAN-based сервиса), поле MPLS label содержит aliasing label; такой маршрут объявляется на каждый EVI. Отзыв per-ES маршрута - сигнал для mass withdrawal: удалённые PE сразу считают недействительными все MAC, достижимые через этот ES и PE.

Designated Forwarder

DF выбирается для каждой пары (ES, VLAN/Ethernet Tag). Процедура по умолчанию из RFC 7432: PE объявляет ES route, запускает DF wait timer (по умолчанию 3 секунды), затем сортирует IP-адреса всех PE сегмента по возрастанию и для VLAN с номером V выбирает PE с порядковым номером V mod N, где N - число PE. Недостатки: изменение состава PE сдвигает распределение VLAN у остальных, поэтому RFC 8584 вводит расширяемость (DF Election extended community) и алгоритм HRW (Highest Random Weight), который меняет роль DF только у VLAN отказавшего PE. Для single-active DF отвечает и за приём, и за передачу трафика сегмента; для all-active DF отвечает только за BUM в направлении CE, а unicast в обоих направлениях пересылают оба PE.

All-active, single-active, aliasing