EVPN и VXLAN на MikroTik RouterOS 7.20+
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 решает проблему:
| Параметр | VLAN | VXLAN |
|---|---|---|
| Идентификатор | 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)
| Режим VXLAN | Control plane | MAC learning | Масштабирование |
|---|---|---|---|
| Static (flood-and-learn) | Нет | Data plane (flooding) | Ограничено |
| EVPN (BGP) | BGP | Control 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 traffic | Broadcast, 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/EVPN | MPLS/VPLS | WireGuard |
|---|---|---|---|
| Уровень overlay | L2 over L3 | L2 over L2.5 | L3 VPN |
| Control plane | BGP (EVPN) | LDP / BGP | Статическая конфигурация |
| Масштаб сегментов | 16M (VNI) | 4K (VLAN) / unlimited (VPLS) | Не применимо |
| Шифрование | Нет (опционально MACsec) | Нет | Да |
| Transport | UDP/IP (любая IP-сеть) | MPLS (требуется MPLS backbone) | UDP/IP |
| Типичное применение | Дата-центры, облака | ISP backbone | Remote 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 Identifierport=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):
codeping 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:
codeServer-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 для передачи маршрутизированного трафика:
codeServer-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).
codeDC1 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.
Ожидаемый вывод:
codeFlags: 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-интерфейс, принадлежат удалённым серверам:
codeBRIDGE 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:
codeping 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 underlay | BUM-трафик через 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.
[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"