VXLAN EVPN на MikroTik: Полное руководство по настройке
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
Топология лаборатории:

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 нужно:
- Добавить IRB (Integrated Routing and Bridging) интерфейсы
- Настроить L3VNI для inter-VNI routing
- Использовать общие 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
Как работает передача данных
Пошаговый процесс:
-
Установка связности (OSPF):
- Все устройства изучают loopback адреса соседей
- Leaf1 знает как дойти до Leaf2 (10.254.254.2)
-
Обмен маршрутной информацией (BGP EVPN):
- Leaf2 сообщает через Spine: "MAC aa:bb:cc в VNI 1000100 за мной"
- Leaf1 получает эту информацию и знает куда слать трафик
-
Передача данных (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 решений.