Skip to content

Instantly share code, notes, and snippets.

@slavonnet
Created September 11, 2025 04:49
Show Gist options
  • Select an option

  • Save slavonnet/544d4bfbbccf7c52290e2d295fe9aa8d to your computer and use it in GitHub Desktop.

Select an option

Save slavonnet/544d4bfbbccf7c52290e2d295fe9aa8d to your computer and use it in GitHub Desktop.
Evpn Esi

Отлично! Давайте разберемся с ESI (Ethernet Segment Identifier) — это фундаментальное понятие в EVPN для multi-homing (подключения устройства к нескольким точкам одновременно).

1. Что такое ESI?

ESI (Ethernet Segment Identifier) — это уникальный идентификатор, который назначается конкретному Ethernet-сегменту (линку или группе линков), соединяющему клиентское устройство (CE) с двумя или более коммутаторами/маршрутизаторами провайдера (PE).

Проще говоря: если у вас есть сервер или коммутатор, который подключен к двум разным Juniper-устройствам для резервирования, то оба этих подключения (оба линка) будут иметь один и тот же ESI. Этот ESI и говорит сети EVPN: "Эти два физических порта на разных коммутаторах ведут к одному и тому же устройству".

Формат: ESI представляет собой 10-байтовое значение (20 символов в hex), обычно записывается как xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Пример: 00:11:22:33:44:55:66:77:88:99


2. Зачем он нужен? (Основные цели)

ESI решает несколько критически важных задач в EVPN:

  1. Идентификация Multi-Homed устройства: Это главная задача. ESI позволяет всем PE-устройствам в сети понять, что несколько путей (через разные PE) ведут к одному и тому же клиентскому устройству (CE). Без ESI сеть видела бы два независимых подключения.

  2. Избежание петель (Loop Prevention): При подключении CE к двум PE возникает потенциальная возможность петель L2-трафика. Механизм Split-Horizon на основе ESI предотвращает это. Правило простое: "Если BGP-анонс с мак-адресом пришел от PE, у которого такой же ESI, как и у меня, — не отправляй трафик обратно на этот ESI".

  3. Поддержка Active-Active Multi-Homing: Это "фишка" EVPN. ESI enables All-Active multi-homing, когда трафик на устройство CE может приходить одновременно через всех его PE (балансировка нагрузки), а исходящий трафик от CE может уходить через любого из PE. Это более эффективно, чем традиционный Active-Standby (MC-LAG).

  4. Автоматическое переключение при сбое (Fast Convergence): Если линк на одном из PE падает, другие PE, знающие о том же ESI, мгновенно принимают на себя нагрузку, так как у них уже есть вся информация о MAC-адресах этого сегмента.


3. Как он работает? (На примере)

Давайте рассмотрим классическую схему: Сервер (CE) подключен к двум коммутаторам Juniper (PE1 и PE2).

Шаг 1: Настройка ESI Администратор настраивает на интерфейсах (или LAG), ведущих к серверу, одинаковый ESI.

  • На PE1:
    set interfaces ae0 flexible-vlan-tagging
    set interfaces ae0 encapsulation flexible-ethernet-services
    set interfaces ae0 esi 00:11:22:33:44:55:66:77:88:99
    set interfaces ae0 esi all-active # Режим "все активно"
  • На PE2:
    set interfaces ae0 flexible-vlan-tagging
    set interfaces ae0 encapsulation flexible-ethernet-services
    set interfaces ae0 esi 00:11:22:33:44:55:66:77:88:99 # Тот же ESI!
    set interfaces ae0 esi all-active # Режим "все активно"

Шаг 2: Объявление в EVPN Оба PE-устройства начинают анонсировать в EVPN (через BGP) специальный тип маршрута — Ethernet Segment (Type 4). Этот маршрут содержит:

  • ESI: 00:11:22:33:44:55:66:77:88:99
  • IP-адрес next-hop (обычно loopback) каждого PE (PE1 и PE2).

Этим анонсом PE1 и PE2 кричат всей сети EVPN: "Эй! Мы оба (PE1 и PE2) являемся точками подключения для Ethernet-сегмента с идентификатором 00:11:22...!"

Шаг 3: Выбор Designated Forwarder (DF) Для broadcast-трафика (ARP, DHCP) нужно избежать дублирования. Для этого все PE, имеющие один и тот же ESI, автоматически выбирают Designated Forwarder (DF) для каждого VLAN на этом сегменте. Выбор происходит по алгоритму (чаще всего на основе mod operation). Только DF имеет право пересылать broadcast/multicast трафик в сторону CE для данного VLAN. Это и есть механизм избежания петель.

Шаг 4: Обучение MAC-адресов

  • Сервер отправляет кадр с MAC-адресом AA:BB:CC:DD:EE:FF на PE1.
  • PE1 изучает этот MAC и анонсирует его в EVPN через маршрут MAC/IP Advertisement (Type 2), в котором указан тот самый ESI.
  • PE2 получает этот анонс и видит, что MAC-адрес пришел с ESI, который есть и у него самого.
  • Благодаря этому, PE2 не обновляет свою таблицу MAC-адресов для этого конкретного MAC. Зачем? Потому что путь до этого сервера напрямую через его собственный линк всегда будет предпочтительнее, чем путь через другого PE. Это и есть Split-Horizon.

Шаг 5: Передача трафика

  • Трафик ОТ сети К серверу: Трафик на MAC-адрес сервера может приходить через любой PE (PE1 или PE2), так как оба анонсировали себя как next-hop для этого MAC (режим all-active).
  • Трафик ОТ сервера: Сервер может отправлять трафик через любой из своих линков (балансировка исходящей нагрузки).

Типы ESI (Как задается значение)

Значение ESI не всегда задается вручную. Есть несколько типов:

  1. Тип 0 (Ручной): Администратор явно прописывает значение, как в примере выше. 00:11:22...
  2. Тип 1 (Авто-Generated): Часто используется при LAG (aeX). ESI генерируется на основе компонентов LAG (например, MAC-адреса + значение приоритета). Удобно, так как гарантирует уникальность.
  3. Тип 2 (На основе MAC-адреса): ESI формируется из MAC-адреса CE-устройства.
  4. Тип 3 (На основе Root Bridge): Используется в специфичных сценариях с spanning-tree.
  5. Тип 4 (На основе Router-ID): Аналогично типу 1, но использует Router-ID.

На практике чаще всего используется Тип 0 (ручной) для полного контроля или Тип 1 (автоматический) для упрощения настройки LAG.

Итог

ESI — это "паспорт" для multi-homed подключения в EVPN. Он позволяет сети:

  • Узнать, какие PE ведут к одному CE.
  • Балансировать трафик в режиме Active-Active.
  • Мгновенно восстанавливаться при сбоях.
  • Избегать петель L2.

Без ESI EVPN не смог бы обеспечить продвинутый multi-homing, который является одной из его главных advantages over традиционных L2-технологий.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment