VXLAN EVPN на MikroTik: Полное руководство по настройке

01.07.2025

VXLAN EVPN на MikroTik: Полное руководство по настройке

Новая эпоха в сетевых технологиях MikroTik

С выходом RouterOS v7.20beta2 (2025 год.) компания MikroTik официально вошла в сферу современных сетей центров обработки данных, добавив поддержку EVPN (Ethernet VPN) поверх BGP. Это знаменует важную веху, позволяя MikroTik обеспечивать масштабируемые оверлеи второго уровня с использованием VXLAN через IP-сети. В этой статье блога я проведу вас через полную настройку EVPN с VXLAN, используя маршрутизаторы MikroTik в классической топологии Spine-Leaf, идеально подходящей для центров обработки данных или лабораторных сред. Независимо от того, являетесь ли вы сетевым инженером, студентом IT или энтузиастом MikroTik, это руководство поможет вам понять и внедрить эту мощную функцию.

Рекомендую видео про теорию vxlan:

https://www.youtube.com/watch?v=CqzgHES5UYw

https://www.youtube.com/watch?v=APK6FfFdyJk 

Что такое EVPN и зачем он нужен

EVPN (определен в RFC 7432) - это технология control plane, которая использует BGP для распространения информации о MAC-адресах по сети. В сочетании с VXLAN, который выступает как механизм туннелирования Layer 2 поверх Layer 3, вы получаете масштабируемый и эффективный способ расширения Layer 2 сервисов на всю инфраструктуру.

Преимущества EVPN:

  • Уменьшает L2 flooding (нет постоянных broadcast'ов)
  • Изучение MAC через BGP = умнее и масштабируемее
  • Бесшовная поддержка гибридных L2/L3 сервисов
  • Мультитенантность через VLAN сегментацию
  • Мобильность VM и предотвращение петель

Архитектура Spine-Leaf с VXLAN EVPN

Топология лаборатории:

evpn-final-topology.png
        Spine1 (.1)     Spine2 (.2)
           |    \     /    |
           |     \   /     |
           |      \ /      |
           |       X       |
           |      / \      |
           |     /   \     |
        Leaf1    Leaf2    Leaf3
       (.254.1) (.254.2) (.254.3)
         |        |        |
      Servers   Servers  Servers
     (VLAN100) (VLAN101)

Видео с этой лабой: https://rutube.ru/video/8516080fceae36a86c8f8f1eebb058ce/

Дизайн сети:

3 Leaf (Leaf1–Leaf3):

  • Подключают серверы
  • Обрабатывают VLAN/VXLAN
  • Выполняют роль VTEP

2 Spine (Spine1–Spine2):

  • Route Reflector'ы
  • Формируют BGP ядро
  • Не подключают клиентов

Серверы:

  • Подключены к Leaf через VLAN
  • VLAN 100, VLAN 101

Транспортная сеть:

  • Маршрутизируемые /30 IP-линки между Leaf и Spine

Протоколы:

  • OSPF: IGP underlay
  • BGP: iBGP для EVPN control plane
  • VXLAN: L2 инкапсуляция через IP fabric

План IP-адресации и VLAN

Loopback адреса:

  • Spine1: 10.255.255.1
  • Spine2: 10.255.255.2
  • Leaf1: 10.254.254.1
  • Leaf2: 10.254.254.2
  • Leaf3: 10.254.254.3

VLAN и VNI маппинг:

  • VLAN 100 ↔ VNI 1000100 (сеть 10.100.100.0/24)
  • VLAN 101 ↔ VNI 1000101 (сеть 10.101.101.0/24)

Anycast шлюзы:

  • 10.100.100.1 для VLAN 100
  • 10.101.101.1 для VLAN 101

Ключевые особенности архитектуры

Разделение ответственности протоколов

OSPF (Underlay):

  • Распространяет loopback адреса всех устройств
  • Строит кратчайшие пути между Spine и Leaf
  • Обеспечивает базовую IP-связность для BGP сессий

BGP EVPN (Overlay):

  • Spine работают как Route Reflector
  • Leaf обмениваются EVPN маршрутами через Spine
  • Route Targets изолируют трафик разных VNI
  • Использует afi=evpn (только EVPN маршруты, без обычных IP)

Почему BGP на Spine использует Route Reflector?

Проблема масштабирования iBGP: Без RR каждый Leaf должен иметь BGP сессию с каждым другим Leaf:

  • 3 Leaf → 3×2/2 = 3 сессии
  • 10 Leaf → 10×9/2 = 45 сессий
  • 100 Leaf → 100×99/2 = 4950 сессий!

С Route Reflector:

  • Каждый Leaf подключается только к Spine (RR)
  • Spine отражают маршруты между Leaf
  • 100 Leaf → только 100×2 = 200 сессий

Почему afi=evpn не распространяет IP-маршруты?

При настройке afi=evpn:

  • BGP сессия работает только с EVPN маршрутами
  • Обычные IP-маршруты НЕ передаются
  • Передаются только: MAC-адреса, MAC+IP биндинги, Multicast информация

Это правильно, потому что:

  • OSPF уже обеспечивает IP-связность
  • Нет дублирования протоколов
  • Четкое разделение Underlay (OSPF) и Overlay (BGP EVPN)

Изоляция VNI и маршрутизация между ними

Текущая конфигурация обеспечивает полную изоляцию:

  • VNI 1000100: Route Target 65001:1000100
  • VNI 1000101: Route Target 65001:1000101
  • Разные RT → нет обмена маршрутами → изоляция

Для маршрутизации между VNI нужно:

  1. Добавить IRB (Integrated Routing and Bridging) интерфейсы
  2. Настроить L3VNI для inter-VNI routing
  3. Использовать общие Route Targets или Type-5 EVPN маршруты

Конфигурации устройств

Spine1

#IP Addresses
/ip address
add address=10.1.1.1/30 interface=ether1 network=10.1.1.0
add address=10.1.2.1/30 interface=ether2 network=10.1.2.0
add address=10.1.3.1/30 interface=ether3 network=10.1.3.0
add address=10.255.255.1 interface=lo network=10.255.255.1

# OSPF
/routing ospf instance
add disabled=no name=ospf-ipv4 router-id=10.255.255.1
/routing ospf area
add disabled=no instance=ospf-ipv4 name=area0-ipv4
/routing ospf interface-template
add area=area0-ipv4 disabled=no interfaces=ether1,ether2,ether3 type=ptp
add area=area0-ipv4 disabled=no interfaces=lo passive

#BGP (Route Reflector)
/routing bgp instance
add as=65001 disabled=no name=evpn-bgp router-id=10.255.255.1
/routing bgp connection
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.255.255.1 .role=ibgp-rr name=ibgp-leaf1 remote.address=10.254.254.1/32 .as=65001 \
    routing-table=main
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.255.255.1 .role=ibgp-rr name=ibgp-leaf2 remote.address=10.254.254.2/32 .as=65001 \
    routing-table=main
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.255.255.1 .role=ibgp-rr name=ibgp-leaf3 remote.address=10.254.254.3/32 .as=65001 \
    routing-table=main

Spine2

#IP Addresses
/ip address
add address=10.2.1.1/30 interface=ether1 network=10.2.1.0
add address=10.2.2.1/30 interface=ether2 network=10.2.2.0
add address=10.2.3.1/30 interface=ether3 network=10.2.3.0
add address=10.255.255.2 interface=lo network=10.255.255.2

#OSPF
/routing ospf instance
add disabled=no name=ospf-ipv4 router-id=10.255.255.2
/routing ospf area
add disabled=no instance=ospf-ipv4 name=area0-ipv4
/routing ospf interface-template
add area=area0-ipv4 disabled=no interfaces=ether1,ether2,ether3 type=ptp
add area=area0-ipv4 disabled=no interfaces=lo passive

#BGP (Route Reflector)
/routing bgp instance
add as=65001 disabled=no name=evpn-bgp router-id=10.255.255.2
/routing bgp connection
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.255.255.2 .role=ibgp-rr name=ibgp-leaf1 remote.address=10.254.254.1/32 .as=65001 \
    routing-table=main
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.255.255.2 .role=ibgp-rr name=ibgp-leaf2 remote.address=10.254.254.2/32 .as=65001 \
    routing-table=main
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.255.255.2 .role=ibgp-rr name=ibgp-leaf3 remote.address=10.254.254.3/32 .as=65001 \
    routing-table=main

Leaf1

#IP Addresses
/ip address
add address=10.1.1.2/30 interface=ether1 network=10.1.1.0
add address=10.2.1.2/30 interface=ether2 network=10.2.1.0
add address=10.254.254.1 interface=lo network=10.254.254.1
add address=10.100.100.200/24 interface=vlan100 network=10.100.100.0

# OSPF
/routing ospf instance
add disabled=no name=ospf-ipv4 router-id=10.254.254.1
/routing ospf area
add disabled=no instance=ospf-ipv4 name=area0-ipv4
/routing ospf interface-template
add area=area0-ipv4 disabled=no interfaces=ether1,ether2 type=ptp
add area=area0-ipv4 disabled=no interfaces=lo passive

#BRIDGE
/interface bridge
add name=bridge1 vlan-filtering=yes
/interface bridge port
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=ether3 \
    pvid=100
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=ether4 \
    pvid=101

#VXLAN
/interface vxlan
add bridge=bridge1 bridge-pvid=100 dont-fragment=disabled learning=no local-address=\
    10.254.254.1 mac-address=66:63:84:0A:36:B0 name=vxlan1000100 vni=1000100
add bridge=bridge1 bridge-pvid=101 dont-fragment=disabled learning=no local-address=\
    10.254.254.1 mac-address=16:2C:C5:FD:EA:0D name=vxlan1000101 vni=1000101

#BGP
/routing bgp instance
add as=65001 disabled=no name=evpn-bgp router-id=10.254.254.1
/routing bgp connection
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.254.254.1 .role=ibgp name=ibgp-spine1 remote.address=10.255.255.1/32 .as=65001
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.254.254.1 .role=ibgp name=ibgp-spine2 remote.address=10.255.255.2/32 .as=65001 \
    routing-table=main

#EVPN
/routing bgp evpn
add export.route-targets=65001:1000100 import.route-targets=65001:1000100 instance=\
    evpn-bgp name=evpn-1000100 vni=1000100
add export.route-targets=65001:1000101 import.route-targets=65001:1000101 instance=\
    evpn-bgp name=evpn-1000101 vni=1000101

Leaf2

#IP Addresses
/ip address
add address=10.1.2.2/30 interface=ether1 network=10.1.2.0
add address=10.2.2.2/30 interface=ether2 network=10.2.2.0
add address=10.254.254.2 interface=lo network=10.254.254.2

# OSPF
/routing ospf instance
add disabled=no name=ospf-ipv4 router-id=10.254.254.2
/routing ospf area
add disabled=no instance=ospf-ipv4 name=area0-ipv4
/routing ospf interface-template
add area=area0-ipv4 disabled=no interfaces=ether1,ether2 type=ptp
add area=area0-ipv4 disabled=no interfaces=lo passive

#BRIDGE
/interface bridge
add name=bridge1 vlan-filtering=yes
/interface bridge port
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=ether3 \
    pvid=100
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=ether4 \
    pvid=101

#VXLAN
/interface vxlan
add bridge=bridge1 bridge-pvid=100 dont-fragment=disabled learning=no local-address=\
    10.254.254.2  name=vxlan1000100 vni=1000100
add bridge=bridge1 bridge-pvid=101 dont-fragment=disabled learning=no local-address=\
    10.254.254.2  name=vxlan1000101 vni=1000101

#BGP
/routing bgp instance
add as=65001 disabled=no name=evpn-bgp router-id=10.254.254.2
/routing bgp connection
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.254.254.2 .role=ibgp name=ibgp-spine1 remote.address=10.255.255.1/32 .as=65001
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.254.254.2 .role=ibgp name=ibgp-spine2 remote.address=10.255.255.2/32 .as=65001 \
    routing-table=main

#EVPN
/routing bgp evpn
add export.route-targets=65001:1000100 import.route-targets=65001:1000100 instance=\
    evpn-bgp name=evpn-1000100 vni=1000100
add export.route-targets=65001:1000101 import.route-targets=65001:1000101 instance=\
    evpn-bgp name=evpn-1000101 vni=1000101

Leaf3

#IP Addresses
/ip address
add address=10.1.3.2/30 interface=ether1 network=10.1.3.0
add address=10.2.3.2/30 interface=ether2 network=10.2.3.0
add address=10.254.254.3 interface=lo network=10.254.254.3

# OSPF
/routing ospf instance
add disabled=no name=ospf-ipv4 router-id=10.254.254.3
/routing ospf area
add disabled=no instance=ospf-ipv4 name=area0-ipv4
/routing ospf interface-template
add area=area0-ipv4 disabled=no interfaces=ether1,ether2 type=ptp
add area=area0-ipv4 disabled=no interfaces=lo passive

#BRIDGE
/interface bridge
add name=bridge1 vlan-filtering=yes
/interface bridge port
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=ether3 \
    pvid=100
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=ether4 \
    pvid=101

#VXLAN
/interface vxlan
add bridge=bridge1 bridge-pvid=100 dont-fragment=disabled learning=no local-address=\
    10.254.254.3  name=vxlan1000100 vni=1000100
add bridge=bridge1 bridge-pvid=101 dont-fragment=disabled learning=no local-address=\
    10.254.254.3 name=vxlan1000101 vni=1000101

#BGP
/routing bgp instance
add as=65001 disabled=no name=evpn-bgp router-id=10.254.254.3
/routing bgp connection
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.254.254.3 .role=ibgp name=ibgp-spine1 remote.address=10.255.255.1/32 .as=65001
add afi=evpn connect=yes disabled=no instance=evpn-bgp listen=yes local.address=\
    10.254.254.3 .role=ibgp name=ibgp-spine2 remote.address=10.255.255.2/32 .as=65001 \
    routing-table=main

#EVPN
/routing bgp evpn
add export.route-targets=65001:1000100 import.route-targets=65001:1000100 instance=\
    evpn-bgp name=evpn-1000100 vni=1000100
add export.route-targets=65001:1000101 import.route-targets=65001:1000101 instance=\
    evpn-bgp name=evpn-1000101 vni=1000101

Как работает передача данных

Пошаговый процесс:

  1. Установка связности (OSPF):

    • Все устройства изучают loopback адреса соседей
    • Leaf1 знает как дойти до Leaf2 (10.254.254.2)
  2. Обмен маршрутной информацией (BGP EVPN):

    • Leaf2 сообщает через Spine: "MAC aa:bb:cc в VNI 1000100 за мной"
    • Leaf1 получает эту информацию и знает куда слать трафик
  3. Передача данных (VXLAN):

    • Клиент на Leaf1 шлет пакет для MAC aa:bb:cc
    • Leaf1 инкапсулирует в VXLAN и отправляет на 10.254.254.2
    • Пакет идет напрямую Leaf1→Spine→Leaf2 (Spine просто коммутирует IP)

Важные особенности:

learning=no в VXLAN: MAC-адреса изучаются через BGP EVPN, а не через flood

Spine не участвуют в data plane: Они только отражают BGP маршруты

Route Targets обеспечивают изоляцию: Разные VNI не видят маршруты друг друга

Проверка работы

# Проверить BGP EVPN маршруты:
/routing bgp evpn route print

# Проверить OSPF маршруты:
/ip route print where ospf

# Проверить BGP сессии:
/routing bgp session print

# Проверить VXLAN интерфейсы:
/interface vxlan print

Заключение

VXLAN-EVPN на MikroTik представляет собой мощное решение для современных дата-центров и кампусных сетей. Четкое разделение ответственности между OSPF (underlay) и BGP EVPN (overlay), использование Route Reflector для масштабирования и правильная настройка изоляции VNI делают эту архитектуру надежной и масштабируемой.

Благодаря поддержке этих технологий в RouterOS v7.20+, MikroTik теперь может конкурировать с ведущими вендорами в сегменте enterprise и data center решений.

< Назад к списку новостей