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

Virtual Private LAN Service (VPLS, LDP-сигнализация RFC 4762, BGP-сигнализация RFC 4761) объединяет площадки клиента в один прозрачный Ethernet-домен (multipoint-to-multipoint L2VPN). PE работают как один распределённый коммутатор: изучают MAC-адреса из кадров (MAC learning), ведут таблицу FDB и рассылают BUM-трафик (broadcast, unknown unicast, multicast) по псевдопроводам. Чтобы не было петель без STP в ядре, действует правило split horizon: кадр, пришедший из псевдопровода full mesh, нельзя отправлять в другие псевдопровода full mesh. Full mesh требует N*(N-1)/2 псевдопроводов, поэтому применяют иерархический H-VPLS: U-PE подключаются spoke-псевдопроводами к N-PE, а N-PE держат между собой full mesh. Spoke-PW не входит в split-horizon группу core-псевдопроводов: кадр из spoke-PW может идти в core-PW и обратно.

VPLS как виртуальный коммутатор

VPLS (Virtual Private LAN Service) объединяет несколько AC в один широковещательный L2-домен через MPLS-ядро: для клиента сеть провайдера выглядит как один Ethernet-коммутатор. Если VPWS - это провод, то VPLS - это коммутатор, и значит, PE ведёт MAC-таблицу. Стандарты: RFC 4762 (сигнализация LDP, FEC 128), RFC 4761 (BGP-сигнализация, Kompella) и RFC 6074 (BGP-автообнаружение с LDP-сигнализацией, FEC 129). Архитектура: на каждом PE для клиента создаётся VSI/VFI (Virtual Forwarding/Switching Instance) - логический мост с MAC-таблицей. К VFI подключены физические AC и виртуальные порты: по одному pseudowire к каждому удалённому PE.

Full mesh и split horizon

В базовом VPLS каждая пара PE соединяется pseudowire, то есть для N PE нужно N(N-1)/2 PW: 3 PE дают 3 PW, 10 PE дают 45, 50 PE дают 1225, а у каждого PE на один VFI приходится N-1 PW и N-1 сессий-меток. Протокола STP в ядре нет, вместо него действует правило split horizon: кадр, принятый из PW, никогда не отправляется в другой PW этого же VFI, только в AC. Поскольку каждая пара PE связана напрямую, любой PE и так получает кадр от источника за один хоп, и петель не возникает. Если нарушить правило (например, настроив два PW одной VFI в разных split-horizon группах), широковещательный кадр бесконечно циркулирует между тремя PE, загружая ядро.

Обучение MAC и пересылка

Для каждого VFI PE ведёт таблицу MAC: адреса, изученные на AC, привязаны к порту, адреса из PW привязаны к конкретному PW (peer + метка). Когда кадр приходит с AC, PE ищет DA в таблице. Известный unicast идёт в единственный PW или AC. Broadcast, multicast и unknown unicast (BUM) реплицируются в каждый PW (ingress replication, N-1 копий) и в остальные AC, поэтому BUM в VPLS стоит дорого: канал до ядра должен выдержать N-1 копий. Таймер aging по умолчанию 300 с (Cisco, Junos и Huawei близки); изменение топологии или падение PW приводит к тому, что устаревшие MAC на других PE исчезают только по таймеру, если не используется MAC withdraw. По RFC 4762 PE отправляет LDP Address Withdraw с MAC List TLV (пустой список = удалить все MAC этого VFI), чтобы удалённые PE быстро сбросили таблицу и перешли на flooding. Защита ресурсов: ограничение числа MAC (mac limit) на VFI/AC, иначе клиент может переполнить таблицу PE, наслав кадры с разными источниками.

Сигнализация: LDP или BGP

LDP-VPLS (FEC 128): список peer конфигурируется вручную на каждом PE, VPLS ID (он же VC ID) один на VFI, для каждого peer создаётся targeted LDP-сессия и обмен метками, как в VPWS. Добавление PE требует правки конфигурации на всех остальных PE: масштабируется плохо, но просто. BGP-VPLS (RFC 4761): VE ID и блок меток передаются в BGP-адресном семействе l2vpn (AFI 25, SAFI 65) вместе с Route Target; приёмник автоматически вычисляет метку для PW до источника, новый PE достаточно анонсировать один раз, а RR передаёт NLRI всем. На Juniper это routing-instance типа vpls с vrf-target и site; на Cisco - autodiscovery bgp signaling bgp. BGP-AD с LDP-сигнализацией (RFC 6074) использует BGP только для обнаружения (RT/RD, VPLS-ID), а сами PW строит LDP по FEC 129 (AGI = VPLS-ID, SAII/TAII). EVPN (следующий урок) заменяет и то, и другое.

Hierarchical VPLS (H-VPLS)

Full mesh плохо масштабируется: N(N-1)/2 PW и репликация. H-VPLS делит сеть на два уровня. В ядре остаётся full mesh между N-PE (hub), к ним подключаются U-PE/MTU (spoke) через spoke PW или через QinQ-подключение (802.1ad). Spoke-PW подключается к VFI N-PE как обычный AC, поэтому на него не распространяется split horizon: кадр от spoke может быть отправлен во все hub-PW, а кадр от hub-PW - в spoke. Spoke никогда не участвует в core-mesh, ему нужен всего один (или два для резерва) PW. Резервирование: spoke поднимает основной PW к одному N-PE и резервный (standby) к другому; при отказе основного активируется резервный, а MAC withdraw очищает таблицы. Опасность: если spoke подключён к двум N-PE без standby (оба активны), возникает петля, которую split horizon не ловит.

Что проверять и какие бывают сбои