mikrotik-wiki.ru
Главная
Загрузка...

EVPN и VXLAN на MikroTik RouterOS 7.20+

RouterOS 7.20Routing13 мин130 мар. 2026 г.
TelegramVK

VXLAN (Virtual Extensible LAN) — технология L2 overlay поверх L3 сети, позволяющая строить виртуальные Ethernet-сегменты через UDP-инкапсуляцию. EVPN (Ethernet VPN) — BGP-based control plane, автоматически распределяющий MAC- и IP-адреса между VXLAN-участниками. Связка EVPN/VXLAN — современный стандарт для дата-центров и провайдерских сетей, пришедший на смену VPLS. В RouterOS 7.20+ появилась поддержка VXLAN и EVPN с BGP signaling. Это продвинутая технология, требующая знания BGP, VLAN и L2/L3 архитектуры.

Описание

Зачем нужен VXLAN

Классические VLAN ограничены 4094 идентификаторами (12-битный VLAN ID). Для крупного дата-центра или облачного провайдера это критическое ограничение. VXLAN решает проблему:

ПараметрVLANVXLAN
ИдентификаторVLAN ID: 1–4094 (12 бит)VNI: 1–16 777 215 (24 бита)
Инкапсуляция802.1Q тег в Ethernet-фреймеUDP (порт 4789) поверх IP
ТранспортL2 (требуется единый L2-домен)L3 (работает через маршрутизируемую сеть)
МасштабДо ~4000 сегментовДо ~16 миллионов сегментов
MTU overhead+4 байта+50 байт (Ethernet + IP + UDP + VXLAN header)

VXLAN создаёт L2 overlay: удалённые хосты «видят» друг друга в одном Ethernet-сегменте, хотя физически разделены маршрутизируемой L3 сетью.

Зачем нужен EVPN

VXLAN без control plane (static mode) требует ручной настройки всех VTEP-адресов (VXLAN Tunnel Endpoint). При добавлении нового сервера или площадки нужно обновить конфигурацию на всех узлах.

EVPN решает эту проблему — BGP автоматически распространяет:

  • MAC-адреса (Type-2 routes) — кто где находится
  • IP-MAC bindings (Type-2 routes с IP) — ARP suppression
  • Subnet routes (Type-5 routes) — маршруты подсетей
  • Multicast/broadcast (Type-3 routes) — BUM-трафик (Broadcast, Unknown unicast, Multicast)
Режим VXLANControl planeMAC learningМасштабирование
Static (flood-and-learn)НетData plane (flooding)Ограничено
EVPN (BGP)BGPControl plane (BGP)Отличное

Терминология

ТерминОписание
VTEP (VXLAN Tunnel Endpoint)Устройство, выполняющее инкапсуляцию/декапсуляцию VXLAN. Обычно — leaf-коммутатор или роутер
VNI (VXLAN Network Identifier)24-битный идентификатор VXLAN-сегмента (аналог VLAN ID, но с диапазоном до 16M)
NVE (Network Virtualization Edge)Интерфейс VTEP, через который проходит VXLAN-трафик
UnderlayФизическая L3-сеть, поверх которой работает VXLAN (IP-транспорт)
OverlayВиртуальная L2-сеть внутри VXLAN
BUM trafficBroadcast, Unknown unicast, Multicast — трафик, который необходимо доставить всем участникам сегмента
IRB (Integrated Routing and Bridging)Маршрутизация между VXLAN-сегментами на leaf-коммутаторе
Symmetric IRBМаршрутизация на обоих leaf (ingress и egress). Эффективнее для больших сетей
Asymmetric IRBМаршрутизация только на ingress leaf. Проще, но менее масштабируемо

Архитектура

code
       [Spine 1]─────────[Spine 2]
       BGP RR              BGP RR
      /    \              /    \
     /      \            /      \
[Leaf 1]  [Leaf 2]  [Leaf 3]  [Leaf 4]
  VTEP      VTEP      VTEP      VTEP
   │         │         │         │
 [VM-A]    [VM-B]    [VM-C]    [VM-D]
VNI 100    VNI 100   VNI 200   VNI 100
  • Spine — маршрутизаторы ядра, выполняющие роль BGP Route Reflector
  • Leaf — коммутаторы доступа (VTEP), подключающие серверы/VM
  • VM — виртуальные машины или физические серверы

VM-A, VM-B и VM-D находятся в VNI 100 (один L2-сегмент), VM-C — в VNI 200 (другой сегмент).

VXLAN vs MPLS vs WireGuard

КритерийVXLAN/EVPNMPLS/VPLSWireGuard
Уровень overlayL2 over L3L2 over L2.5L3 VPN
Control planeBGP (EVPN)LDP / BGPСтатическая конфигурация
Масштаб сегментов16M (VNI)4K (VLAN) / unlimited (VPLS)Не применимо
ШифрованиеНет (опционально MACsec)НетДа
TransportUDP/IP (любая IP-сеть)MPLS (требуется MPLS backbone)UDP/IP
Типичное применениеДата-центры, облакаISP backboneRemote access, site-to-site
СложностьВысокаяВысокаяНизкая

Настройка

Требования

  • RouterOS 7.20+ на всех участниках
  • IP-связность (underlay) между всеми VTEP — OSPF или статические маршруты
  • Увеличенный MTU на underlay (VXLAN добавляет 50 байт overhead)
  • Для EVPN: BGP с поддержкой address-family l2vpn (EVPN)
  • Рекомендуемое оборудование: CCR2004, CCR2116, CRS3xx (для коммутации)

Схема лабораторной сети

code
        [Spine]
     10.0.0.100/32
     BGP Route Reflector
      /          \
   ether1       ether2
     |             |
  [Leaf-1]     [Leaf-2]
  10.0.0.1     10.0.0.2
  VTEP          VTEP
     |             |
  ether3        ether3
     |             |
  [Server-A]   [Server-B]
  VNI 100       VNI 100
  10.100.0.11   10.100.0.12

Задача: Server-A и Server-B должны быть в одном L2-сегменте (VNI 100, подсеть 10.100.0.0/24) через маршрутизируемую L3 сеть.

Часть 1: VXLAN Static (без EVPN)

Начнём с простого варианта — статический VXLAN без BGP.

Шаг 1: Underlay — IP-связность

Spine:

[admin@MikroTik] >
/system/identity set name=Spine

/interface/bridge add name=loopback
/ip/address add address=10.0.0.100/32 interface=loopback

/ip/address add address=10.1.1.1/30 interface=ether1
/ip/address add address=10.1.2.1/30 interface=ether2

# OSPF для underlay
/routing/ospf/instance add name=underlay router-id=10.0.0.100
/routing/ospf/area add name=backbone instance=underlay area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether1,ether2 type=ptp

Leaf-1:

[admin@MikroTik] >
/system/identity set name=Leaf-1

/interface/bridge add name=loopback
/ip/address add address=10.0.0.1/32 interface=loopback

/ip/address add address=10.1.1.2/30 interface=ether1

/routing/ospf/instance add name=underlay router-id=10.0.0.1
/routing/ospf/area add name=backbone instance=underlay area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether1 type=ptp

Leaf-2:

[admin@MikroTik] >
/system/identity set name=Leaf-2

/interface/bridge add name=loopback
/ip/address add address=10.0.0.2/32 interface=loopback

/ip/address add address=10.1.2.2/30 interface=ether2

/routing/ospf/instance add name=underlay router-id=10.0.0.2
/routing/ospf/area add name=backbone instance=underlay area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether2 type=ptp

Проверяем underlay-связность:

[admin@MikroTik] >
# На Leaf-1
/ping 10.0.0.2 src-address=10.0.0.1

Шаг 2: MTU на underlay

VXLAN добавляет 50 байт overhead. Если серверы используют MTU 1500, underlay должен поддерживать минимум 1550 (рекомендуется 9000):

[admin@MikroTik] >
# На всех underlay-интерфейсах (Spine и Leaf)
/interface/ethernet set ether1 mtu=9000
/interface/ethernet set ether2 mtu=9000

Шаг 3: Создание VXLAN-интерфейса (static)

Leaf-1:

[admin@MikroTik] >
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.1 vteps-ip-version=ipv4

# Добавляем remote VTEP (Leaf-2)
/interface/vxlan/vteps add interface=vxlan100 remote-ip=10.0.0.2

Leaf-2:

[admin@MikroTik] >
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.2 vteps-ip-version=ipv4

# Добавляем remote VTEP (Leaf-1)
/interface/vxlan/vteps add interface=vxlan100 remote-ip=10.0.0.1

Параметры:

  • vni=100 — VXLAN Network Identifier
  • port=4789 — стандартный UDP-порт VXLAN (RFC 7348)
  • local-address — loopback IP данного VTEP (source IP для VXLAN-пакетов)

Шаг 4: Bridge с серверным интерфейсом

VXLAN-интерфейс и серверный порт объединяются в bridge:

Leaf-1:

[admin@MikroTik] >
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100

Leaf-2:

[admin@MikroTik] >
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100

Теперь Server-A и Server-B находятся в одном L2-сегменте через VXLAN-туннель.

Проверка static VXLAN

На Server-A (10.100.0.11) пингуем Server-B (10.100.0.12):

code
ping 10.100.0.12

На Leaf-1 проверяем bridge MAC-table:

[admin@MikroTik] >
/interface/bridge/host print where bridge=bridge-vni100

MAC-адрес Server-B должен быть виден через vxlan100-интерфейс.

Часть 2: EVPN — динамический control plane

Шаг 5: BGP для EVPN

Spine выступает как BGP Route Reflector. Leaf-роутеры устанавливают iBGP-сессии к Spine.

Spine (Route Reflector):

[admin@MikroTik] >
# BGP template
/routing/bgp/template add name=evpn-tmpl as=65000 \
    address-families=l2vpn-evpn \
    cluster-id=10.0.0.100

# BGP connections к Leaf
/routing/bgp/connection add name=leaf1 template=evpn-tmpl \
    remote.address=10.0.0.1 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.100

/routing/bgp/connection add name=leaf2 template=evpn-tmpl \
    remote.address=10.0.0.2 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.100

Leaf-1:

[admin@MikroTik] >
/routing/bgp/template add name=evpn-tmpl as=65000 \
    address-families=l2vpn-evpn

/routing/bgp/connection add name=spine template=evpn-tmpl \
    remote.address=10.0.0.100 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.1

Leaf-2:

[admin@MikroTik] >
/routing/bgp/template add name=evpn-tmpl as=65000 \
    address-families=l2vpn-evpn

/routing/bgp/connection add name=spine template=evpn-tmpl \
    remote.address=10.0.0.100 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.2

Проверяем BGP-сессии:

[admin@MikroTik] >
/routing/bgp/session print

Все сессии должны быть в статусе established.

Шаг 6: VXLAN с EVPN

При использовании EVPN не нужно вручную добавлять VTEP-адреса — BGP сделает это автоматически.

Leaf-1:

[admin@MikroTik] >
# Удаляем статические VTEP (если были)
/interface/vxlan/vteps remove [find]

# Пересоздаём VXLAN с поддержкой EVPN
/interface/vxlan remove [find name=vxlan100]
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.1 vteps-ip-version=ipv4 \
    dont-fragment=no

Leaf-2:

[admin@MikroTik] >
/interface/vxlan/vteps remove [find]
/interface/vxlan remove [find name=vxlan100]
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.2 vteps-ip-version=ipv4 \
    dont-fragment=no

EVPN автоматически обнаружит VTEP и добавит динамические записи.

Шаг 7: EVPN instance

На каждом Leaf создаём EVPN-инстанс, привязанный к bridge:

Leaf-1 и Leaf-2 (одинаково):

[admin@MikroTik] >
# Bridge для VXLAN (если не создан)
/interface/bridge add name=bridge-vni100

/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100

EVPN будет распространять MAC-адреса, изученные на bridge-vni100, через BGP. Удалённые VTEP получат эту информацию и добавят записи в свои bridge MAC-tables без flood-and-learn.

Asymmetric vs Symmetric IRB

Когда нужна маршрутизация между разными VNI (например, VNI 100 и VNI 200), используется IRB.

Asymmetric IRB

Маршрутизация выполняется только на ingress leaf:

code
Server-A (VNI 100) → [Leaf-1: routing VNI100→VNI200] → VXLAN VNI 200 → [Leaf-2] → Server-C (VNI 200)

Leaf-1 маршрутизирует пакет из VNI 100 в VNI 200 и отправляет через VXLAN с VNI 200. Leaf-2 просто коммутирует (L2).

Требования: каждый Leaf должен знать обо всех VNI (даже если локально нет серверов в этом VNI).

Настройка на Leaf:

[admin@MikroTik] >
# Создаём VXLAN для обоих VNI
/interface/vxlan add name=vxlan100 vni=100 port=4789 local-address=10.0.0.1
/interface/vxlan add name=vxlan200 vni=200 port=4789 local-address=10.0.0.1

# Bridge для каждого VNI
/interface/bridge add name=bridge-vni100
/interface/bridge add name=bridge-vni200

/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
/interface/bridge/port add bridge=bridge-vni200 interface=vxlan200

# Серверный порт в нужный bridge
/interface/bridge/port add bridge=bridge-vni100 interface=ether3

# IP-адреса на bridge (gateway для серверов)
/ip/address add address=10.100.0.1/24 interface=bridge-vni100
/ip/address add address=10.200.0.1/24 interface=bridge-vni200

Symmetric IRB

Маршрутизация выполняется на обоих leaf (ingress и egress). Используется специальный L3VNI для передачи маршрутизированного трафика:

code
Server-A (VNI 100) → [Leaf-1: route to L3VNI] → VXLAN L3VNI 999 → [Leaf-2: route from L3VNI to VNI 200] → Server-C

Преимущества: Leaf не обязан знать обо всех VNI — только о тех, которые локально используются, плюс L3VNI.

[admin@MikroTik] >
# L3VNI для маршрутизации между VNI
/interface/vxlan add name=vxlan-l3 vni=999 port=4789 local-address=10.0.0.1

# VRF для L3 routing
/ip/vrf add name=tenant-1 interfaces=bridge-vni100,bridge-vni200,vxlan-l3

# IP на bridge (anycast gateway — одинаковый на всех Leaf)
/ip/address add address=10.100.0.1/24 interface=bridge-vni100
/ip/address add address=10.200.0.1/24 interface=bridge-vni200

Symmetric IRB более масштабируем, но сложнее в настройке. Для небольших инсталляций (до 10 VNI) asymmetric IRB проще.

Пример: два дата-центра с L2 connectivity

Сценарий: два дата-центра (DC1 и DC2) соединены через L3-сеть (WAN). Нужно обеспечить L2-связность для миграции виртуальных машин (vMotion).

code
    DC1                     WAN                     DC2
[Leaf-DC1]──────────[WAN Router]──────────[Leaf-DC2]
10.0.0.1            IP network            10.0.0.2
VNI 100                                    VNI 100
  │                                          │
[ESXi-1]                                 [ESXi-2]
VM: 10.100.0.11                          VM: 10.100.0.12

Leaf-DC1:

[admin@MikroTik] >
# Underlay
/interface/bridge add name=loopback
/ip/address add address=10.0.0.1/32 interface=loopback
/ip/address add address=172.16.1.1/30 interface=ether1

# Static route к DC2 (или OSPF)
/ip/route add dst-address=10.0.0.2/32 gateway=172.16.1.2

# MTU
/interface/ethernet set ether1 mtu=9000

# VXLAN
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.1

# BGP EVPN к DC2 (direct iBGP или через Route Reflector)
/routing/bgp/template add name=evpn as=65000 address-families=l2vpn-evpn
/routing/bgp/connection add name=dc2 template=evpn \
    remote.address=10.0.0.2 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.1

# Bridge
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100

Leaf-DC2:

[admin@MikroTik] >
# Underlay
/interface/bridge add name=loopback
/ip/address add address=10.0.0.2/32 interface=loopback
/ip/address add address=172.16.1.2/30 interface=ether1

/ip/route add dst-address=10.0.0.1/32 gateway=172.16.1.1

/interface/ethernet set ether1 mtu=9000

# VXLAN
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.2

# BGP EVPN
/routing/bgp/template add name=evpn as=65000 address-families=l2vpn-evpn
/routing/bgp/connection add name=dc1 template=evpn \
    remote.address=10.0.0.1 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.2

# Bridge
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100

Проверка

VXLAN-интерфейс

[admin@MikroTik] >
/interface/vxlan print detail

Проверяем running=yes и корректные параметры VNI, local-address.

VTEP-таблица

[admin@MikroTik] >
/interface/vxlan/vteps print

При статическом VXLAN — ручные записи. При EVPN — динамические записи, добавленные BGP.

Ожидаемый вывод:

code
Flags: X - disabled, D - dynamic
 #   D INTERFACE   REMOTE-IP    PORT
 0   D vxlan100    10.0.0.2     4789

Флаг D (dynamic) означает, что запись добавлена EVPN.

BGP EVPN routes

[admin@MikroTik] >
/routing/bgp/advertisements print where address-family=l2vpn-evpn

Показывает маршруты, объявляемые через EVPN (Type-2 MAC/IP, Type-3 Inclusive Multicast).

Bridge MAC-table

[admin@MikroTik] >
/interface/bridge/host print where bridge=bridge-vni100

MAC-адреса, изученные через VXLAN-интерфейс, принадлежат удалённым серверам:

code
 BRIDGE          MAC-ADDRESS       ON-INTERFACE
 bridge-vni100   AA:BB:CC:DD:EE:01  ether3        (локальный)
 bridge-vni100   AA:BB:CC:DD:EE:02  vxlan100      (удалённый через VXLAN)

Проверка L2-связности

С Server-A:

code
ping 10.100.0.12

Пинг должен проходить. TTL не уменьшается (L2 forwarding).

Статистика VXLAN

[admin@MikroTik] >
/interface/vxlan print stats

Показывает tx/rx bytes и packets.

ARP-таблица

[admin@MikroTik] >
/ip/arp print where interface=bridge-vni100

Должны быть видны ARP-записи как локальных, так и удалённых хостов.

Ограничения RouterOS

На момент RouterOS 7.20+ существуют следующие ограничения для VXLAN/EVPN:

ОграничениеОписание
Аппаратная разгрузкаVXLAN обрабатывается CPU (нет hardware offload на большинстве моделей)
ПроизводительностьЗависит от CPU; на CCR2004 — до 1–2 Гбит/с VXLAN throughput
EVPN Type-5Поддержка IP prefix routes может быть ограничена
ARP suppressionМожет требовать дополнительной настройки
Multicast underlayBUM-трафик через ingress replication (unicast), не multicast
Количество VNIОграничено ресурсами CPU и RAM

Для высокопроизводительных решений (10+ Гбит/с VXLAN) рассмотрите специализированные коммутаторы (Arista, Cisco Nexus). MikroTik подходит для малых и средних инсталляций или лабораторных стендов.

Типичные ошибки

1. MTU не увеличен на underlay

Проблема: VXLAN добавляет 50 байт overhead. При MTU 1500 на underlay максимальный размер полезной нагрузки — 1450 байт. Серверы с MTU 1500 будут фрагментировать пакеты.

Симптом: мелкие пакеты (ping) проходят, крупные (SCP, HTTP) зависают или работают медленно.

Решение:

[admin@MikroTik] >
# Увеличиваем MTU на всех underlay-интерфейсах
/interface/ethernet set ether1 mtu=9000

Или уменьшите MTU на серверах до 1450.

2. Firewall блокирует UDP 4789

Проблема: firewall на VTEP или промежуточных роутерах блокирует VXLAN-трафик.

Решение:

[admin@MikroTik] >
/ip/firewall/filter add chain=input protocol=udp dst-port=4789 action=accept \
    comment="Allow VXLAN"
/ip/firewall/filter add chain=forward protocol=udp dst-port=4789 action=accept \
    comment="Forward VXLAN"

3. Неправильный local-address в VXLAN

Проблема: local-address указан не на loopback, а на физическом интерфейсе. При изменении маршрутизации VXLAN перестаёт работать.

Решение: всегда используйте loopback IP как local-address:

[admin@MikroTik] >
/interface/vxlan set vxlan100 local-address=10.0.0.1

И убедитесь, что loopback-адрес объявляется через OSPF.

4. BGP EVPN сессия не устанавливается

Проблема: address-family l2vpn-evpn не согласована между соседями.

Диагностика:

[admin@MikroTik] >
/routing/bgp/session print detail

Проверьте поля afi и safi. Должно быть l2vpn и evpn.

Решение: убедитесь, что address-families=l2vpn-evpn указан на обеих сторонах BGP-сессии.

5. BUM-трафик не доставляется

Проблема: broadcast и multicast не проходят через VXLAN. ARP-запросы не доходят до удалённых серверов.

Симптом: статический ping (с ручной ARP-записью) работает, но обычный ping — нет.

Решение: в static VXLAN убедитесь, что все VTEP добавлены вручную. В EVPN — проверьте Type-3 routes (Inclusive Multicast Ethernet Tag).

6. Петли в bridge при нескольких VXLAN

Проблема: несколько VXLAN-интерфейсов в одном bridge создают петли.

Решение: каждый VNI — отдельный bridge. Не помещайте VXLAN с разными VNI в один bridge.

[admin@MikroTik] >
# Правильно
/interface/bridge add name=bridge-vni100
/interface/bridge add name=bridge-vni200
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
/interface/bridge/port add bridge=bridge-vni200 interface=vxlan200

7. Высокая загрузка CPU

Проблема: VXLAN обрабатывается CPU. При большом количестве трафика CPU перегружается.

Мониторинг:

[admin@MikroTik] >
/system/resource print
/system/resource/cpu print

Решение:

  • Используйте CCR-серию для VTEP с высоким трафиком
  • Ограничьте количество VNI на одном устройстве
  • Рассмотрите аппаратные коммутаторы для production

Мониторинг

Общая информация

[admin@MikroTik] >
# VXLAN-интерфейсы
/interface/vxlan print

# VTEP-таблица
/interface/vxlan/vteps print

# Статистика трафика
/interface/vxlan print stats

# BGP EVPN сессии
/routing/bgp/session print where afi=l2vpn

# Bridge MAC-table (overlay)
/interface/bridge/host print where bridge~"vni"

Логирование

[admin@MikroTik] >
/system/logging add topics=bgp action=memory
/system/logging add topics=route action=memory
/log print where topics~"bgp"

Заключение

EVPN/VXLAN — современный стандарт для построения масштабируемых overlay-сетей в дата-центрах. На MikroTik RouterOS 7.20+ технология полностью функциональна: VXLAN-интерфейсы с поддержкой VNI, BGP EVPN для автоматического распространения MAC/IP, IRB для маршрутизации между сегментами. Ключевые требования: увеличенный MTU на underlay (минимум 1550, рекомендуется 9000), OSPF для IP-связности, BGP с address-family l2vpn-evpn. Для production с высокими требованиями к пропускной способности учитывайте ограничения CPU-based forwarding на MikroTik; для лабораторий, малых дата-центров и обучения — RouterOS является отличной платформой для освоения EVPN/VXLAN.

[admin@MikroTik] >
[Spine 1]─────────[Spine 2]
       BGP RR              BGP RR
      /    \              /    \
     /      \            /      \
[Leaf 1]  [Leaf 2]  [Leaf 3]  [Leaf 4]
  VTEP      VTEP      VTEP      VTEP
   │         │         │         │
 [VM-A]    [VM-B]    [VM-C]    [VM-D]
VNI 100    VNI 100   VNI 200   VNI 100
[Spine]
     10.0.0.100/32
     BGP Route Reflector
      /          \
   ether1       ether2
     |             |
  [Leaf-1]     [Leaf-2]
  10.0.0.1     10.0.0.2
  VTEP          VTEP
     |             |
  ether3        ether3
     |             |
  [Server-A]   [Server-B]
  VNI 100       VNI 100
  10.100.0.11   10.100.0.12
/system/identity set name=Spine

/interface/bridge add name=loopback
/ip/address add address=10.0.0.100/32 interface=loopback

/ip/address add address=10.1.1.1/30 interface=ether1
/ip/address add address=10.1.2.1/30 interface=ether2

# OSPF для underlay
/routing/ospf/instance add name=underlay router-id=10.0.0.100
/routing/ospf/area add name=backbone instance=underlay area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether1,ether2 type=ptp
/system/identity set name=Leaf-1

/interface/bridge add name=loopback
/ip/address add address=10.0.0.1/32 interface=loopback

/ip/address add address=10.1.1.2/30 interface=ether1

/routing/ospf/instance add name=underlay router-id=10.0.0.1
/routing/ospf/area add name=backbone instance=underlay area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether1 type=ptp
/system/identity set name=Leaf-2

/interface/bridge add name=loopback
/ip/address add address=10.0.0.2/32 interface=loopback

/ip/address add address=10.1.2.2/30 interface=ether2

/routing/ospf/instance add name=underlay router-id=10.0.0.2
/routing/ospf/area add name=backbone instance=underlay area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether2 type=ptp
# На Leaf-1
/ping 10.0.0.2 src-address=10.0.0.1
# На всех underlay-интерфейсах (Spine и Leaf)
/interface/ethernet set ether1 mtu=9000
/interface/ethernet set ether2 mtu=9000
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.1 vteps-ip-version=ipv4

# Добавляем remote VTEP (Leaf-2)
/interface/vxlan/vteps add interface=vxlan100 remote-ip=10.0.0.2
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.2 vteps-ip-version=ipv4

# Добавляем remote VTEP (Leaf-1)
/interface/vxlan/vteps add interface=vxlan100 remote-ip=10.0.0.1
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
ping 10.100.0.12
/interface/bridge/host print where bridge=bridge-vni100
# BGP template
/routing/bgp/template add name=evpn-tmpl as=65000 \
    address-families=l2vpn-evpn \
    cluster-id=10.0.0.100

# BGP connections к Leaf
/routing/bgp/connection add name=leaf1 template=evpn-tmpl \
    remote.address=10.0.0.1 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.100

/routing/bgp/connection add name=leaf2 template=evpn-tmpl \
    remote.address=10.0.0.2 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.100
/routing/bgp/template add name=evpn-tmpl as=65000 \
    address-families=l2vpn-evpn

/routing/bgp/connection add name=spine template=evpn-tmpl \
    remote.address=10.0.0.100 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.1
/routing/bgp/template add name=evpn-tmpl as=65000 \
    address-families=l2vpn-evpn

/routing/bgp/connection add name=spine template=evpn-tmpl \
    remote.address=10.0.0.100 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.2
/routing/bgp/session print
# Удаляем статические VTEP (если были)
/interface/vxlan/vteps remove [find]

# Пересоздаём VXLAN с поддержкой EVPN
/interface/vxlan remove [find name=vxlan100]
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.1 vteps-ip-version=ipv4 \
    dont-fragment=no
/interface/vxlan/vteps remove [find]
/interface/vxlan remove [find name=vxlan100]
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.2 vteps-ip-version=ipv4 \
    dont-fragment=no
# Bridge для VXLAN (если не создан)
/interface/bridge add name=bridge-vni100

/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
Server-A (VNI 100) → [Leaf-1: routing VNI100→VNI200] → VXLAN VNI 200 → [Leaf-2] → Server-C (VNI 200)
# Создаём VXLAN для обоих VNI
/interface/vxlan add name=vxlan100 vni=100 port=4789 local-address=10.0.0.1
/interface/vxlan add name=vxlan200 vni=200 port=4789 local-address=10.0.0.1

# Bridge для каждого VNI
/interface/bridge add name=bridge-vni100
/interface/bridge add name=bridge-vni200

/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
/interface/bridge/port add bridge=bridge-vni200 interface=vxlan200

# Серверный порт в нужный bridge
/interface/bridge/port add bridge=bridge-vni100 interface=ether3

# IP-адреса на bridge (gateway для серверов)
/ip/address add address=10.100.0.1/24 interface=bridge-vni100
/ip/address add address=10.200.0.1/24 interface=bridge-vni200
Server-A (VNI 100) → [Leaf-1: route to L3VNI] → VXLAN L3VNI 999 → [Leaf-2: route from L3VNI to VNI 200] → Server-C
# L3VNI для маршрутизации между VNI
/interface/vxlan add name=vxlan-l3 vni=999 port=4789 local-address=10.0.0.1

# VRF для L3 routing
/ip/vrf add name=tenant-1 interfaces=bridge-vni100,bridge-vni200,vxlan-l3

# IP на bridge (anycast gateway — одинаковый на всех Leaf)
/ip/address add address=10.100.0.1/24 interface=bridge-vni100
/ip/address add address=10.200.0.1/24 interface=bridge-vni200
DC1                     WAN                     DC2
[Leaf-DC1]──────────[WAN Router]──────────[Leaf-DC2]
10.0.0.1            IP network            10.0.0.2
VNI 100                                    VNI 100
  │                                          │
[ESXi-1]                                 [ESXi-2]
VM: 10.100.0.11                          VM: 10.100.0.12
# Underlay
/interface/bridge add name=loopback
/ip/address add address=10.0.0.1/32 interface=loopback
/ip/address add address=172.16.1.1/30 interface=ether1

# Static route к DC2 (или OSPF)
/ip/route add dst-address=10.0.0.2/32 gateway=172.16.1.2

# MTU
/interface/ethernet set ether1 mtu=9000

# VXLAN
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.1

# BGP EVPN к DC2 (direct iBGP или через Route Reflector)
/routing/bgp/template add name=evpn as=65000 address-families=l2vpn-evpn
/routing/bgp/connection add name=dc2 template=evpn \
    remote.address=10.0.0.2 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.1

# Bridge
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
# Underlay
/interface/bridge add name=loopback
/ip/address add address=10.0.0.2/32 interface=loopback
/ip/address add address=172.16.1.2/30 interface=ether1

/ip/route add dst-address=10.0.0.1/32 gateway=172.16.1.1

/interface/ethernet set ether1 mtu=9000

# VXLAN
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
    local-address=10.0.0.2

# BGP EVPN
/routing/bgp/template add name=evpn as=65000 address-families=l2vpn-evpn
/routing/bgp/connection add name=dc1 template=evpn \
    remote.address=10.0.0.1 remote.as=65000 \
    local.role=ibgp local.address=10.0.0.2

# Bridge
/interface/bridge add name=bridge-vni100
/interface/bridge/port add bridge=bridge-vni100 interface=ether3
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
/interface/vxlan print detail
/interface/vxlan/vteps print
Flags: X - disabled, D - dynamic
 #   D INTERFACE   REMOTE-IP    PORT
 0   D vxlan100    10.0.0.2     4789
/routing/bgp/advertisements print where address-family=l2vpn-evpn
/interface/bridge/host print where bridge=bridge-vni100
BRIDGE          MAC-ADDRESS       ON-INTERFACE
 bridge-vni100   AA:BB:CC:DD:EE:01  ether3        (локальный)
 bridge-vni100   AA:BB:CC:DD:EE:02  vxlan100      (удалённый через VXLAN)
ping 10.100.0.12
/interface/vxlan print stats
/ip/arp print where interface=bridge-vni100
# Увеличиваем MTU на всех underlay-интерфейсах
/interface/ethernet set ether1 mtu=9000
/ip/firewall/filter add chain=input protocol=udp dst-port=4789 action=accept \
    comment="Allow VXLAN"
/ip/firewall/filter add chain=forward protocol=udp dst-port=4789 action=accept \
    comment="Forward VXLAN"
/interface/vxlan set vxlan100 local-address=10.0.0.1
/routing/bgp/session print detail
# Правильно
/interface/bridge add name=bridge-vni100
/interface/bridge add name=bridge-vni200
/interface/bridge/port add bridge=bridge-vni100 interface=vxlan100
/interface/bridge/port add bridge=bridge-vni200 interface=vxlan200
/system/resource print
/system/resource/cpu print
# VXLAN-интерфейсы
/interface/vxlan print

# VTEP-таблица
/interface/vxlan/vteps print

# Статистика трафика
/interface/vxlan print stats

# BGP EVPN сессии
/routing/bgp/session print where afi=l2vpn

# Bridge MAC-table (overlay)
/interface/bridge/host print where bridge~"vni"
/system/logging add topics=bgp action=memory
/system/logging add topics=route action=memory
/log print where topics~"bgp"
Routing / EVPN и VXLAN на MikroTik RouterOS 7.20+