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

WireGuard + VXLAN — overlay-сети на MikroTik

RouterOS 7.xVPN11 мин230 мар. 2026 г.
TelegramVK

Объединение удалённых площадок в единый L2-сегмент — одна из самых востребованных задач в корпоративных сетях. WireGuard обеспечивает шифрованный L3-туннель, но не умеет передавать Ethernet-фреймы. VXLAN (Virtual Extensible LAN) решает эту проблему, инкапсулируя L2-трафик в UDP-пакеты. Комбинация WireGuard + VXLAN позволяет получить безопасную overlay-сеть уровня L2 через интернет: устройства на удалённых площадках оказываются в одном broadcast-домене, как если бы были подключены к одному коммутатору.

Описание

Архитектура решения

Схема WireGuard + VXLAN overlay:

code
Site A                                                   Site B
┌──────────────────┐                                    ┌──────────────────┐
│  PC-A             │                                    │  PC-B             │
│  192.168.100.10   │                                    │  192.168.100.20   │
│       │           │                                    │       │           │
│  ┌────┴────┐      │                                    │  ┌────┴────┐      │
│  │ bridge1 │      │                                    │  │ bridge1 │      │
│  │         │      │                                    │  │         │      │
│  │ vxlan100│      │                                    │  │ vxlan100│      │
│  └────┬────┘      │                                    │  └────┬────┘      │
│       │           │                                    │       │           │
│  VXLAN (VNI 100)  │                                    │  VXLAN (VNI 100)  │
│  remote=10.255.0.2│                                    │  remote=10.255.0.1│
│       │           │                                    │       │           │
│  ┌────┴────┐      │                                    │  ┌────┴────┐      │
│  │  wg0    │      │        Internet (encrypted)        │  │  wg0    │      │
│  │10.255.0.1/30│  │◄──────────────────────────────────►│  │10.255.0.2/30│  │
│  └────┬────┘      │         WireGuard tunnel           │  └────┬────┘      │
│       │           │                                    │       │           │
│  WAN: 203.0.113.1 │                                    │  WAN: 198.51.100.1│
└──────────────────┘                                    └──────────────────┘

Уровни инкапсуляции (изнутри наружу):

  1. Оригинальный Ethernet-фрейм — трафик между PC-A и PC-B (L2)
  2. VXLAN — инкапсуляция L2 фрейма в UDP (порт 4789), добавляет ~50 байт overhead
  3. WireGuard — шифрование и инкапсуляция в UDP (порт 13231), добавляет ~60 байт overhead
  4. Транспортный IP — доставка через интернет

Итого overhead: ~110 байт. При стандартном MTU 1500 полезная нагрузка VXLAN-фрейма составит около 1370 байт (необходимо учитывать для корректной работы).

Зачем нужна связка WireGuard + VXLAN

  • L2-связность через интернет — устройства на обеих площадках в одной подсети (один broadcast-домен)
  • Шифрование — VXLAN сам по себе не шифрует трафик; WireGuard обеспечивает confidentiality
  • Миграция виртуальных машин — vMotion, Live Migration требуют L2-связности между гипервизорами
  • Legacy-приложения — программы, работающие только в L2 (NetBIOS, некоторые SCADA-системы)
  • Единый DHCP-сервер — один DHCP выдаёт адреса на обеих площадках
  • Кластеризация — некоторые кластерные решения требуют L2 между узлами

WireGuard + VXLAN vs другие L2 VPN

КритерийWireGuard + VXLANEoIPVPLS/MPLSL2TP
ШифрованиеДа (WireGuard)Нет (нужен IPsec)НетНет (нужен IPsec)
СовместимостьLinux, MikroTikТолько MikroTikMikroTik, Cisco, JuniperШирокая
ПроизводительностьВысокаяСредняяМаксимальнаяНизкая
MTU overhead~110 байт~42 байта~8 байт (метки)~40 байт
УровеньL2 overlayL2L2L2
МасштабируемостьДо 16M VNI65535 tunnel-idВысокаяСредняя
Требования к инфраструктуреИнтернетИнтернетСобственная сетьИнтернет

WireGuard + VXLAN — оптимальный выбор для L2 overlay через интернет, когда нужна шифрование и совместимость с не-MikroTik оборудованием.

Настройка

Требования

  • RouterOS 7.20+ на обоих MikroTik
  • Публичный IP хотя бы на одной стороне (для WireGuard)
  • Сетевые данные:
ПараметрSite ASite B
WAN IP203.0.113.1198.51.100.1
WireGuard IP10.255.0.1/3010.255.0.2/30
WireGuard Port1323113231
LAN Subnet192.168.100.0/24192.168.100.0/24
VXLAN VNI100100

Обратите внимание: LAN subnet одинаковая на обеих площадках — это суть L2 overlay.

Шаг 1: WireGuard туннель

Site A:

[admin@MikroTik] >
# Создаём WireGuard интерфейс
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420

# Смотрим публичный ключ
/interface/wireguard print
# Запишите public-key — нужен для Site B

# Назначаем IP на WireGuard туннель
/ip/address add address=10.255.0.1/30 interface=wg0

# Добавляем peer (Site B)
/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_B>" \
  allowed-address=10.255.0.2/32 \
  endpoint-address=198.51.100.1 \
  endpoint-port=13231

# Firewall: разрешаем WireGuard
/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0

Site B:

[admin@MikroTik] >
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420

/interface/wireguard print
# Запишите public-key для Site A

/ip/address add address=10.255.0.2/30 interface=wg0

/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_A>" \
  allowed-address=10.255.0.1/32 \
  endpoint-address=203.0.113.1 \
  endpoint-port=13231

/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0

Проверка WireGuard:

[admin@MikroTik] >
/ping 10.255.0.2 count=5 src-address=10.255.0.1

Шаг 2: VXLAN overlay поверх WireGuard

После установки WireGuard-туннеля создаём VXLAN-интерфейс, который будет работать внутри туннеля.

Site A:

[admin@MikroTik] >
# Создаём VXLAN интерфейс
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.2

# Устанавливаем MTU с учётом overhead
# WireGuard MTU 1420 - VXLAN overhead 50 = 1370
/interface/vxlan set vxlan100 mtu=1370

Site B:

[admin@MikroTik] >
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.2 remote-address=10.255.0.1

/interface/vxlan set vxlan100 mtu=1370

Параметры VXLAN:

  • vni=100 — VXLAN Network Identifier (аналог VLAN ID, диапазон 1–16777215)
  • port=4789 — стандартный UDP-порт VXLAN (RFC 7348)
  • local-address — IP WireGuard-интерфейса на этой стороне
  • remote-address — IP WireGuard-интерфейса на удалённой стороне

VXLAN использует адреса WireGuard-туннеля (10.255.0.x), поэтому весь VXLAN-трафик автоматически идёт через шифрованный WireGuard-туннель.

Шаг 3: Добавление VXLAN в bridge

Для объединения локальной сети с VXLAN-туннелем добавляем оба интерфейса в один bridge.

Site A:

[admin@MikroTik] >
# Создаём bridge (или используем существующий)
/interface/bridge add name=bridge1 protocol-mode=none \
  vlan-filtering=no

# Добавляем локальный порт (например, ether2-ether5)
/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=ether4
/interface/bridge/port add bridge=bridge1 interface=ether5

# Добавляем VXLAN в тот же bridge
/interface/bridge/port add bridge=bridge1 interface=vxlan100

# IP-адрес на bridge (gateway для LAN)
/ip/address add address=192.168.100.1/24 interface=bridge1

Site B:

[admin@MikroTik] >
/interface/bridge add name=bridge1 protocol-mode=none \
  vlan-filtering=no

/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=ether4
/interface/bridge/port add bridge=bridge1 interface=ether5

/interface/bridge/port add bridge=bridge1 interface=vxlan100

# На Site B НЕ назначаем тот же IP — bridge один, но gateway один
# Если нужен gateway — используйте VRRP или один DHCP-сервер
/ip/address add address=192.168.100.2/24 interface=bridge1

Шаг 4: DHCP (опционально)

Если хотите единый DHCP для обеих площадок — настройте его только на одной стороне:

Site A (DHCP-сервер):

[admin@MikroTik] >
/ip/pool add name=pool-lan ranges=192.168.100.10-192.168.100.250

/ip/dhcp-server add name=dhcp-lan interface=bridge1 \
  address-pool=pool-lan lease-time=1h

/ip/dhcp-server/network add address=192.168.100.0/24 \
  gateway=192.168.100.1 dns-server=8.8.8.8,8.8.4.4

DHCP-запросы (broadcast) от клиентов Site B пройдут через VXLAN-туннель до DHCP-сервера на Site A.

Шаг 5: Firewall для VXLAN

VXLAN-трафик идёт внутри WireGuard, поэтому дополнительные правила нужны только для forward через bridge:

[admin@MikroTik] >
# Разрешить forward для bridge-трафика
/ip/firewall/filter add chain=forward in-interface=bridge1 \
  out-interface=bridge1 action=accept \
  comment="Allow bridge L2 forward" place-before=0

Полная конфигурация (copy-paste)

Site A — полная конфигурация:

[admin@MikroTik] >
# WireGuard
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420
/ip/address add address=10.255.0.1/30 interface=wg0
/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_B>" \
  allowed-address=10.255.0.2/32 \
  endpoint-address=198.51.100.1 \
  endpoint-port=13231

# VXLAN over WireGuard
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.2 mtu=1370

# Bridge (L2 domain)
/interface/bridge add name=bridge1 protocol-mode=none
/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=vxlan100
/ip/address add address=192.168.100.1/24 interface=bridge1

# Firewall
/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0
/ip/firewall/filter add chain=forward in-interface=bridge1 \
  out-interface=bridge1 action=accept \
  comment="Allow bridge forward" place-before=0

Site B — полная конфигурация:

[admin@MikroTik] >
# WireGuard
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420
/ip/address add address=10.255.0.2/30 interface=wg0
/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_A>" \
  allowed-address=10.255.0.1/32 \
  endpoint-address=203.0.113.1 \
  endpoint-port=13231

# VXLAN over WireGuard
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.2 remote-address=10.255.0.1 mtu=1370

# Bridge (L2 domain)
/interface/bridge add name=bridge1 protocol-mode=none
/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=vxlan100
/ip/address add address=192.168.100.2/24 interface=bridge1

# Firewall
/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0
/ip/firewall/filter add chain=forward in-interface=bridge1 \
  out-interface=bridge1 action=accept \
  comment="Allow bridge forward" place-before=0

Проверка

Проверка WireGuard

[admin@MikroTik] >
# Статус WireGuard-туннеля
/interface/wireguard/peers print detail

# Пинг через туннель
/ping 10.255.0.2 count=5

В выводе peers обратите внимание на поля:

  • last-handshake — время последнего handshake (должно быть < 2 минут)
  • rx / tx — количество переданных байт (должно расти)

Проверка VXLAN

[admin@MikroTik] >
# Состояние VXLAN-интерфейса
/interface/vxlan print detail

# Проверка что интерфейс running
/interface print where name=vxlan100

Интерфейс vxlan100 должен иметь флаг R (running).

Проверка Bridge

[admin@MikroTik] >
# Порты bridge
/interface/bridge/port print where bridge=bridge1

# MAC-таблица bridge (должны быть MAC-адреса с обеих площадок)
/interface/bridge/host print where bridge=bridge1

В MAC-таблице вы должны видеть:

  • MAC-адреса локальных устройств (на портах ether2-ether5)
  • MAC-адреса удалённых устройств (на порту vxlan100)

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

С PC-A (192.168.100.10) выполните пинг PC-B (192.168.100.20):

code
ping 192.168.100.20

Если пинг проходит — L2 overlay работает. Проверьте ARP:

code
arp -a

MAC-адрес PC-B должен быть видим с PC-A, несмотря на то что они физически в разных локациях.

Проверка MTU

Критически важно убедиться, что MTU настроен корректно:

[admin@MikroTik] >
# Пинг с большим пакетом через VXLAN
/ping 192.168.100.20 size=1342 do-not-fragment count=5

Если пинг с size=1342 проходит, а с size=1400 — нет, MTU настроен верно (1342 + 28 bytes IP/ICMP header = 1370).

Масштабирование: несколько площадок

Для трёх и более площадок потребуется VXLAN с несколькими remote-адресами или использование multicast/BUM-трафика.

Пример для трёх площадок (Site A, B, C):

Site A:

[admin@MikroTik] >
# WireGuard peers для B и C
/interface/wireguard/peers add interface=wg0 \
  public-key="<KEY_B>" \
  allowed-address=10.255.0.2/32 \
  endpoint-address=198.51.100.1 endpoint-port=13231

/interface/wireguard/peers add interface=wg0 \
  public-key="<KEY_C>" \
  allowed-address=10.255.0.5/32 \
  endpoint-address=192.0.2.1 endpoint-port=13231

# VXLAN VTEPs — по одному на каждый remote
/interface/vxlan add name=vxlan100-b vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.2

/interface/vxlan add name=vxlan100-c vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.5

# Оба VXLAN в один bridge
/interface/bridge/port add bridge=bridge1 interface=vxlan100-b
/interface/bridge/port add bridge=bridge1 interface=vxlan100-c

При большом количестве площадок (N > 5) количество туннелей растёт как N*(N-1)/2 в full-mesh. В таких случаях рассмотрите hub-and-spoke топологию или EVPN.

Оптимизация MTU

MTU — самый частый источник проблем в overlay-сетях. Разберём расчёт подробно.

Расчёт MTU

code
Интернет MTU:                1500
- WireGuard overhead:         -80  (40 IPv4/IPv6 + 8 UDP + 32 WG header)
= WireGuard MTU:             1420
- VXLAN overhead:             -50  (20 IP + 8 UDP + 8 VXLAN + 14 inner Ethernet)
= VXLAN payload MTU:         1370

Итого: полезная нагрузка через VXLAN — 1370 байт.

Настройка MTU на всех уровнях

[admin@MikroTik] >
# WireGuard — 1420
/interface/wireguard set wg0 mtu=1420

# VXLAN — 1370
/interface/vxlan set vxlan100 mtu=1370

# Bridge — наследует минимальный MTU портов (1370)
# Клиентские устройства должны использовать MTU ≤ 1370

MSS Clamping

Для TCP-трафика настройте MSS clamping, чтобы избежать фрагментации:

[admin@MikroTik] >
/ip/firewall/mangle add chain=forward out-interface=bridge1 \
  protocol=tcp tcp-flags=syn action=change-mss \
  new-mss=clamp-to-pmtu passthrough=yes \
  comment="MSS clamp for VXLAN overlay"

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

1. VXLAN не работает — фрагментация пакетов

Причина: MTU не учитывает overhead WireGuard + VXLAN. Пакеты фрагментируются или отбрасываются.

Симптомы: пинг маленькими пакетами работает, большие файлы не передаются, SSH "зависает" после авторизации.

Решение: корректно настройте MTU и MSS:

[admin@MikroTik] >
/interface/wireguard set wg0 mtu=1420
/interface/vxlan set vxlan100 mtu=1370
/ip/firewall/mangle add chain=forward out-interface=bridge1 \
  protocol=tcp tcp-flags=syn action=change-mss \
  new-mss=1330 passthrough=yes

2. Broadcast storm через VXLAN

Причина: L2 overlay означает, что весь broadcast-трафик (ARP, DHCP, NetBIOS) проходит через WAN-канал. При большом количестве устройств это может перегрузить канал.

Решение:

[admin@MikroTik] >
# Включите storm control на bridge
/interface/bridge set bridge1 \
  multicast-flood=no \
  unknown-multicast-flood=no

# Ограничьте broadcast на VXLAN-порту
/interface/bridge/port set [find interface=vxlan100] \
  broadcast-flood=yes unknown-multicast-flood=no unknown-unicast-flood=no

Также рассмотрите ARP proxy для уменьшения broadcast-трафика.

3. VXLAN remote-address указывает на WAN IP вместо WireGuard IP

Причина: VXLAN настроен с remote-address=198.51.100.1 (WAN) вместо remote-address=10.255.0.2 (WireGuard). Трафик идёт мимо WireGuard-туннеля — нешифрованным.

Решение: VXLAN remote-address должен быть IP из WireGuard-подсети:

[admin@MikroTik] >
# Правильно:
/interface/vxlan set vxlan100 remote-address=10.255.0.2

# Неправильно:
# /interface/vxlan set vxlan100 remote-address=198.51.100.1

4. Bridge loop при неправильной топологии

Причина: на обеих сторонах включён STP, и bridge видит одинаковые MAC-адреса через разные порты.

Решение:

[admin@MikroTik] >
# Отключите STP на VXLAN-порту
/interface/bridge/port set [find interface=vxlan100] \
  auto-isolate=no bpdu-guard=yes

# Или используйте protocol-mode=none на bridge
/interface/bridge set bridge1 protocol-mode=none

5. WireGuard allowed-address не включает VXLAN-трафик

Причина: в WireGuard peers allowed-address не включает IP VXLAN remote-side. WireGuard отбрасывает VXLAN-пакеты.

Решение: allowed-address должен включать IP WireGuard-пира:

[admin@MikroTik] >
# Убедитесь что 10.255.0.2/32 есть в allowed-address
/interface/wireguard/peers print detail
# При необходимости исправьте:
/interface/wireguard/peers set 0 allowed-address=10.255.0.2/32

6. Разные VNI на разных сторонах

Причина: на Site A vni=100, на Site B vni=200. VXLAN отбрасывает пакеты с неверным VNI.

Решение: VNI должен быть одинаковым на всех участниках overlay-сети:

[admin@MikroTik] >
# Проверьте VNI на обеих сторонах
/interface/vxlan print
# При необходимости исправьте:
/interface/vxlan set vxlan100 vni=100

Итоги

WireGuard + VXLAN — мощная комбинация для построения шифрованных L2 overlay-сетей через интернет на MikroTik. WireGuard обеспечивает шифрование и аутентификацию, VXLAN — L2-инкапсуляцию. Устройства на удалённых площадках видят друг друга как в одной локальной сети.

Ключевые моменты: правильный расчёт MTU (1370 для payload), VXLAN remote-address должен указывать на WireGuard IP (не WAN), MSS clamping обязателен для TCP. Broadcast storm — главный риск при масштабировании: ограничивайте количество устройств в одном L2-домене и используйте storm control.

Для малого количества площадок (2-5) решение работает отлично. При масштабировании до десятков площадок рассмотрите EVPN/VXLAN с BGP или коммерческие SD-WAN решения.

[admin@MikroTik] >
Site A                                                   Site B
┌──────────────────┐                                    ┌──────────────────┐
│  PC-A             │                                    │  PC-B             │
│  192.168.100.10   │                                    │  192.168.100.20   │
│       │           │                                    │       │           │
│  ┌────┴────┐      │                                    │  ┌────┴────┐      │
│  │ bridge1 │      │                                    │  │ bridge1 │      │
│  │         │      │                                    │  │         │      │
│  │ vxlan100│      │                                    │  │ vxlan100│      │
│  └────┬────┘      │                                    │  └────┬────┘      │
│       │           │                                    │       │           │
│  VXLAN (VNI 100)  │                                    │  VXLAN (VNI 100)  │
│  remote=10.255.0.2│                                    │  remote=10.255.0.1│
│       │           │                                    │       │           │
│  ┌────┴────┐      │                                    │  ┌────┴────┐      │
│  │  wg0    │      │        Internet (encrypted)        │  │  wg0    │      │
│  │10.255.0.1/30│  │◄──────────────────────────────────►│  │10.255.0.2/30│  │
│  └────┬────┘      │         WireGuard tunnel           │  └────┬────┘      │
│       │           │                                    │       │           │
│  WAN: 203.0.113.1 │                                    │  WAN: 198.51.100.1│
└──────────────────┘                                    └──────────────────┘
# Создаём WireGuard интерфейс
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420

# Смотрим публичный ключ
/interface/wireguard print
# Запишите public-key — нужен для Site B

# Назначаем IP на WireGuard туннель
/ip/address add address=10.255.0.1/30 interface=wg0

# Добавляем peer (Site B)
/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_B>" \
  allowed-address=10.255.0.2/32 \
  endpoint-address=198.51.100.1 \
  endpoint-port=13231

# Firewall: разрешаем WireGuard
/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420

/interface/wireguard print
# Запишите public-key для Site A

/ip/address add address=10.255.0.2/30 interface=wg0

/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_A>" \
  allowed-address=10.255.0.1/32 \
  endpoint-address=203.0.113.1 \
  endpoint-port=13231

/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0
/ping 10.255.0.2 count=5 src-address=10.255.0.1
# Создаём VXLAN интерфейс
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.2

# Устанавливаем MTU с учётом overhead
# WireGuard MTU 1420 - VXLAN overhead 50 = 1370
/interface/vxlan set vxlan100 mtu=1370
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.2 remote-address=10.255.0.1

/interface/vxlan set vxlan100 mtu=1370
# Создаём bridge (или используем существующий)
/interface/bridge add name=bridge1 protocol-mode=none \
  vlan-filtering=no

# Добавляем локальный порт (например, ether2-ether5)
/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=ether4
/interface/bridge/port add bridge=bridge1 interface=ether5

# Добавляем VXLAN в тот же bridge
/interface/bridge/port add bridge=bridge1 interface=vxlan100

# IP-адрес на bridge (gateway для LAN)
/ip/address add address=192.168.100.1/24 interface=bridge1
/interface/bridge add name=bridge1 protocol-mode=none \
  vlan-filtering=no

/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=ether4
/interface/bridge/port add bridge=bridge1 interface=ether5

/interface/bridge/port add bridge=bridge1 interface=vxlan100

# На Site B НЕ назначаем тот же IP — bridge один, но gateway один
# Если нужен gateway — используйте VRRP или один DHCP-сервер
/ip/address add address=192.168.100.2/24 interface=bridge1
/ip/pool add name=pool-lan ranges=192.168.100.10-192.168.100.250

/ip/dhcp-server add name=dhcp-lan interface=bridge1 \
  address-pool=pool-lan lease-time=1h

/ip/dhcp-server/network add address=192.168.100.0/24 \
  gateway=192.168.100.1 dns-server=8.8.8.8,8.8.4.4
# Разрешить forward для bridge-трафика
/ip/firewall/filter add chain=forward in-interface=bridge1 \
  out-interface=bridge1 action=accept \
  comment="Allow bridge L2 forward" place-before=0
# WireGuard
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420
/ip/address add address=10.255.0.1/30 interface=wg0
/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_B>" \
  allowed-address=10.255.0.2/32 \
  endpoint-address=198.51.100.1 \
  endpoint-port=13231

# VXLAN over WireGuard
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.2 mtu=1370

# Bridge (L2 domain)
/interface/bridge add name=bridge1 protocol-mode=none
/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=vxlan100
/ip/address add address=192.168.100.1/24 interface=bridge1

# Firewall
/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0
/ip/firewall/filter add chain=forward in-interface=bridge1 \
  out-interface=bridge1 action=accept \
  comment="Allow bridge forward" place-before=0
# WireGuard
/interface/wireguard add name=wg0 listen-port=13231 mtu=1420
/ip/address add address=10.255.0.2/30 interface=wg0
/interface/wireguard/peers add interface=wg0 \
  public-key="<PUBLIC_KEY_SITE_A>" \
  allowed-address=10.255.0.1/32 \
  endpoint-address=203.0.113.1 \
  endpoint-port=13231

# VXLAN over WireGuard
/interface/vxlan add name=vxlan100 vni=100 port=4789 \
  local-address=10.255.0.2 remote-address=10.255.0.1 mtu=1370

# Bridge (L2 domain)
/interface/bridge add name=bridge1 protocol-mode=none
/interface/bridge/port add bridge=bridge1 interface=ether2
/interface/bridge/port add bridge=bridge1 interface=ether3
/interface/bridge/port add bridge=bridge1 interface=vxlan100
/ip/address add address=192.168.100.2/24 interface=bridge1

# Firewall
/ip/firewall/filter add chain=input protocol=udp dst-port=13231 \
  action=accept comment="Allow WireGuard" place-before=0
/ip/firewall/filter add chain=forward in-interface=bridge1 \
  out-interface=bridge1 action=accept \
  comment="Allow bridge forward" place-before=0
# Статус WireGuard-туннеля
/interface/wireguard/peers print detail

# Пинг через туннель
/ping 10.255.0.2 count=5
# Состояние VXLAN-интерфейса
/interface/vxlan print detail

# Проверка что интерфейс running
/interface print where name=vxlan100
# Порты bridge
/interface/bridge/port print where bridge=bridge1

# MAC-таблица bridge (должны быть MAC-адреса с обеих площадок)
/interface/bridge/host print where bridge=bridge1
ping 192.168.100.20
arp -a
# Пинг с большим пакетом через VXLAN
/ping 192.168.100.20 size=1342 do-not-fragment count=5
# WireGuard peers для B и C
/interface/wireguard/peers add interface=wg0 \
  public-key="<KEY_B>" \
  allowed-address=10.255.0.2/32 \
  endpoint-address=198.51.100.1 endpoint-port=13231

/interface/wireguard/peers add interface=wg0 \
  public-key="<KEY_C>" \
  allowed-address=10.255.0.5/32 \
  endpoint-address=192.0.2.1 endpoint-port=13231

# VXLAN VTEPs — по одному на каждый remote
/interface/vxlan add name=vxlan100-b vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.2

/interface/vxlan add name=vxlan100-c vni=100 port=4789 \
  local-address=10.255.0.1 remote-address=10.255.0.5

# Оба VXLAN в один bridge
/interface/bridge/port add bridge=bridge1 interface=vxlan100-b
/interface/bridge/port add bridge=bridge1 interface=vxlan100-c
Интернет MTU:                1500
- WireGuard overhead:         -80  (40 IPv4/IPv6 + 8 UDP + 32 WG header)
= WireGuard MTU:             1420
- VXLAN overhead:             -50  (20 IP + 8 UDP + 8 VXLAN + 14 inner Ethernet)
= VXLAN payload MTU:         1370
# WireGuard — 1420
/interface/wireguard set wg0 mtu=1420

# VXLAN — 1370
/interface/vxlan set vxlan100 mtu=1370

# Bridge — наследует минимальный MTU портов (1370)
# Клиентские устройства должны использовать MTU ≤ 1370
/ip/firewall/mangle add chain=forward out-interface=bridge1 \
  protocol=tcp tcp-flags=syn action=change-mss \
  new-mss=clamp-to-pmtu passthrough=yes \
  comment="MSS clamp for VXLAN overlay"
/interface/wireguard set wg0 mtu=1420
/interface/vxlan set vxlan100 mtu=1370
/ip/firewall/mangle add chain=forward out-interface=bridge1 \
  protocol=tcp tcp-flags=syn action=change-mss \
  new-mss=1330 passthrough=yes
# Включите storm control на bridge
/interface/bridge set bridge1 \
  multicast-flood=no \
  unknown-multicast-flood=no

# Ограничьте broadcast на VXLAN-порту
/interface/bridge/port set [find interface=vxlan100] \
  broadcast-flood=yes unknown-multicast-flood=no unknown-unicast-flood=no
# Правильно:
/interface/vxlan set vxlan100 remote-address=10.255.0.2

# Неправильно:
# /interface/vxlan set vxlan100 remote-address=198.51.100.1
# Отключите STP на VXLAN-порту
/interface/bridge/port set [find interface=vxlan100] \
  auto-isolate=no bpdu-guard=yes

# Или используйте protocol-mode=none на bridge
/interface/bridge set bridge1 protocol-mode=none
# Убедитесь что 10.255.0.2/32 есть в allowed-address
/interface/wireguard/peers print detail
# При необходимости исправьте:
/interface/wireguard/peers set 0 allowed-address=10.255.0.2/32
# Проверьте VNI на обеих сторонах
/interface/vxlan print
# При необходимости исправьте:
/interface/vxlan set vxlan100 vni=100
VPN / WireGuard + VXLAN — overlay-сети на MikroTik