# VXLAN интерфейсы в VyOS

> Настройка VXLAN в VyOS для overlay-сетей - L2-over-L3 туннели, multicast и unicast flooding, BGP EVPN control plane для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/interfaces/vyos-vxlan/


VXLAN (Virtual Extensible LAN) - это технология сетевой виртуализации для создания overlay сетей поверх существующей IP инфраструктуры.

## Обзор

VXLAN решает проблемы масштабирования традиционных VLAN сетей:
- Инкапсулирует Layer 2 Ethernet фреймы в Layer 4 UDP датаграммы
- Использует 24-битный VNI (VXLAN Network Identifier) вместо 12-битного VLAN ID
- Поддерживает до 16 миллионов логических сетей (против 4096 VLAN)
- Работает поверх существующей IP сети (underlay)
- Позволяет растягивать L2 сегменты через L3 границы

**Ключевые компоненты**:
- **VNI** (VXLAN Network Identifier) - идентификатор виртуальной сети (24 бита)
- **VTEP** (VXLAN Tunnel Endpoint) - точка инкапсуляции/декапсуляции
- **Underlay network** - физическая IP сеть для передачи инкапсулированного трафика
- **Overlay network** - виртуальная L2 сеть поверх underlay

**UDP порт**:
- VyOS по умолчанию: **8472**
- IANA стандарт: **4789**

**Применение**:
- Виртуализация сетей в облачных провайдерах
- Мультитенантные среды
- Data center interconnect (DCI)
- Связывание географически распределенных L2 доменов
- Kubernetes/Docker overlay сети

## Базовая конфигурация

### Создание VXLAN интерфейса

```
set interfaces vxlan vxlan100 vni 100
commit
```

Минимальная конфигурация - только VNI (идентификатор сети).

### Назначение IP-адреса

```
set interfaces vxlan vxlan100 address 10.0.100.1/24
commit
```

### Описание интерфейса

```
set interfaces vxlan vxlan100 description 'VXLAN Overlay Network 100'
commit
```

### MTU

Рекомендуется уменьшить MTU из-за overhead от инкапсуляции:

```
set interfaces vxlan vxlan100 mtu 1450
commit
```

VXLAN добавляет 50 байт overhead:
- 20 байт внешний IP header
- 8 байт UDP header
- 8 байт VXLAN header
- 14 байт внешний Ethernet header

Для стандартного MTU 1500:
- VXLAN MTU = 1500 - 50 = 1450

Для jumbo frames (9000):
- VXLAN MTU = 9000 - 50 = 8950

## Режимы работы VXLAN

### 1. Multicast VXLAN

Использует multicast группы для автоматического обнаружения VTEP и рассылки BUM трафика (Broadcast, Unknown unicast, Multicast).

**Конфигурация**:

```
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-interface eth0
set interfaces vxlan vxlan100 mtu 1450
set interfaces vxlan vxlan100 group 239.0.0.100
commit
```

**Параметры**:
- `vni` - идентификатор VXLAN сети
- `source-interface` - интерфейс для underlay трафика
- `group` - multicast группа для данного VNI
- `mtu` - максимальный размер пакета

**Как работает**:
1. BUM трафик отправляется в multicast группу
2. Все VTEP в группе получают трафик
3. VTEP изучают MAC-адреса и строят FDB (Forwarding Database)
4. Unicast трафик идет напрямую между VTEP

**Требования**:
- Underlay сеть должна поддерживать multicast (PIM)
- Не все облачные провайдеры поддерживают multicast

### 2. Unicast VXLAN (Point-to-Point)

Явное указание удаленного VTEP через IP-адрес. Не требует multicast.

**Конфигурация**:

```
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-interface eth0
set interfaces vxlan vxlan100 remote 203.0.113.10
set interfaces vxlan vxlan100 mtu 1450
commit
```

**Параметры**:
- `remote` - IP-адрес удаленного VTEP

**Как работает**:
- Весь трафик отправляется на указанный remote IP
- Подходит для point-to-point соединений
- Не масштабируется для большого количества VTEP

**Преимущества**:
- Работает в сетях без multicast (большинство облаков)
- Простая конфигурация для малого количества узлов
- Детерминированное поведение

**Недостатки**:
- Не поддерживает автоматическое обнаружение VTEP
- Требует ручной настройки для каждой пары VTEP
- Плохо масштабируется

### 3. Unicast VXLAN с несколькими remote endpoints

Для связи с несколькими VTEP используйте FDB (Forwarding Database) или bridge с fdb entries.

```
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-interface eth0

set interfaces bridge br100
set interfaces bridge br100 member interface vxlan100

# Статические FDB записи (MAC к VTEP mapping)
# Синтаксис зависит от версии VyOS
# Альтернативно используйте BGP EVPN для автоматического распространения
commit
```

### 4. VXLAN через source-address

Вместо source-interface можно указать source IP напрямую:

```
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-address 198.51.100.5
set interfaces vxlan vxlan100 remote 203.0.113.10
commit
```

Полезно когда у вас несколько интерфейсов или loopback адрес.

## VLAN-to-VNI Mapping (Single VXLAN Device)

Single VXLAN Device (SVD) позволяет использовать один VXLAN интерфейс для множественных VNI, сопоставляя VLAN с VNI.

### Конфигурация SVD

```
# VXLAN интерфейс с базовым VNI
set interfaces vxlan vxlan0 vni 10000
set interfaces vxlan vxlan0 source-interface eth0

# Bridge для VLAN management
set interfaces bridge br0
set interfaces bridge br0 member interface vxlan0
set interfaces bridge br0 enable-vlan

# VLAN-to-VNI mapping
set interfaces bridge br0 member interface vxlan0 vlan-to-vni 10 vni 10010
set interfaces bridge br0 member interface vxlan0 vlan-to-vni 20 vni 10020
set interfaces bridge br0 member interface vxlan0 vlan-to-vni 30 vni 10030

# Physical interface для локальных VLANs
set interfaces ethernet eth1 vif 10
set interfaces ethernet eth1 vif 20
set interfaces ethernet eth1 vif 30

set interfaces bridge br0 member interface eth1.10 allowed-vlan 10
set interfaces bridge br0 member interface eth1.20 allowed-vlan 20
set interfaces bridge br0 member interface eth1.30 allowed-vlan 30

commit
```

**Как работает**:
- VLAN 10 локально маппится в VNI 10010
- VLAN 20 локально маппится в VNI 10020
- VLAN 30 локально маппится в VNI 10030
- Один VXLAN интерфейс обслуживает все VNI
- Bridge выполняет VLAN-aware switching

**Преимущества**:
- Масштабирование до тысяч VNI на одном интерфейсе
- Упрощенная конфигурация
- Меньше системных ресурсов

## Примеры конфигурации

### Point-to-Point VXLAN (Yandex Cloud)

Соединение двух VyOS в разных подсетях Yandex Cloud:

**Узел 1** (192.0.2.10):
```
# Underlay конфигурация
set interfaces ethernet eth0 address 192.0.2.10/24

# VXLAN tunnel
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-address 192.0.2.10
set interfaces vxlan vxlan100 remote 192.0.2.20
set interfaces vxlan vxlan100 mtu 1450

# Overlay адрес
set interfaces vxlan vxlan100 address 10.100.0.1/24
set interfaces vxlan vxlan100 description 'VXLAN to Node2'

commit
```

**Узел 2** (192.0.2.20):
```
# Underlay конфигурация
set interfaces ethernet eth0 address 192.0.2.20/24

# VXLAN tunnel
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-address 192.0.2.20
set interfaces vxlan vxlan100 remote 192.0.2.10
set interfaces vxlan vxlan100 mtu 1450

# Overlay адрес
set interfaces vxlan vxlan100 address 10.100.0.2/24
set interfaces vxlan vxlan100 description 'VXLAN to Node1'

commit
```

Теперь узлы могут общаться через 10.100.0.0/24 overlay сеть.

### VXLAN Bridge для растягивания L2 (VK Cloud)

Растягивание L2 домена между двумя датацентрами:

**Site A** (198.51.100.10):
```
# VXLAN интерфейс
set interfaces vxlan vxlan200 vni 200
set interfaces vxlan vxlan200 source-address 198.51.100.10
set interfaces vxlan vxlan200 remote 203.0.113.10
set interfaces vxlan vxlan200 mtu 1450

# Bridge с локальным интерфейсом
set interfaces bridge br200
set interfaces bridge br200 member interface vxlan200
set interfaces bridge br200 member interface eth1
set interfaces bridge br200 description 'Stretched L2 VLAN 200'

# IP для inter-site routing (опционально)
set interfaces bridge br200 address 10.200.0.1/24

commit
```

**Site B** (203.0.113.10):
```
# VXLAN интерфейс
set interfaces vxlan vxlan200 vni 200
set interfaces vxlan vxlan200 source-address 203.0.113.10
set interfaces vxlan vxlan200 remote 198.51.100.10
set interfaces vxlan vxlan200 mtu 1450

# Bridge с локальным интерфейсом
set interfaces bridge br200
set interfaces bridge br200 member interface vxlan200
set interfaces bridge br200 member interface eth1
set interfaces bridge br200 description 'Stretched L2 VLAN 200'

# IP для inter-site routing (опционально)
set interfaces bridge br200 address 10.200.0.2/24

commit
```

Устройства в eth1 на обоих сайтах находятся в одном L2 домене.

### Multi-tenant VXLAN (облачный провайдер)

Изоляция трафика разных клиентов через отдельные VNI:

```
# Клиент A - VNI 1000
set interfaces vxlan vxlan1000 vni 1000
set interfaces vxlan vxlan1000 source-interface eth0
set interfaces vxlan vxlan1000 remote 192.0.2.20

set interfaces bridge brA
set interfaces bridge brA member interface vxlan1000
set interfaces bridge brA member interface eth1.100
set interfaces bridge brA address 10.10.0.1/24
set interfaces bridge brA description 'Tenant A'

# Клиент B - VNI 2000
set interfaces vxlan vxlan2000 vni 2000
set interfaces vxlan vxlan2000 source-interface eth0
set interfaces vxlan vxlan2000 remote 192.0.2.20

set interfaces bridge brB
set interfaces bridge brB member interface vxlan2000
set interfaces bridge brB member interface eth1.200
set interfaces bridge brB address 10.20.0.1/24
set interfaces bridge brB description 'Tenant B'

# Клиент C - VNI 3000
set interfaces vxlan vxlan3000 vni 3000
set interfaces vxlan vxlan3000 source-interface eth0
set interfaces vxlan vxlan3000 remote 192.0.2.20

set interfaces bridge brC
set interfaces bridge brC member interface vxlan3000
set interfaces bridge brC member interface eth1.300
set interfaces bridge brC address 10.30.0.1/24
set interfaces bridge brC description 'Tenant C'

commit
```

Каждый клиент полностью изолирован на L2 уровне через отдельный VNI.

### VXLAN Multicast (on-premises)

Для on-premises датацентров с поддержкой multicast:

```
# VXLAN с multicast
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-interface eth0
set interfaces vxlan vxlan100 group 239.1.1.100
set interfaces vxlan vxlan100 mtu 1450

# Bridge для локального L2
set interfaces bridge br100
set interfaces bridge br100 member interface vxlan100
set interfaces bridge br100 member interface eth1
set interfaces bridge br100 member interface eth2

commit
```

Автоматическое обнаружение VTEP через multicast группу 239.1.1.100.

### VXLAN через loopback (рекомендуется для продакшна)

Использование loopback адреса для стабильности:

```
# Loopback интерфейс
set interfaces loopback lo address 198.51.100.1/32

# VXLAN с source-address на loopback
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-address 198.51.100.1
set interfaces vxlan vxlan100 remote 203.0.113.1
set interfaces vxlan vxlan100 mtu 1450

# Маршрут к remote loopback
set protocols static route 203.0.113.1/32 next-hop 192.0.2.1

commit
```

Loopback адрес не зависит от состояния физических интерфейсов.

### VXLAN с IPv6 underlay

VXLAN поддерживает IPv6 для underlay сети:

```
# IPv6 underlay
set interfaces ethernet eth0 address 2001:db8:1::10/64

# VXLAN через IPv6
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-address 2001:db8:1::10
set interfaces vxlan vxlan100 remote 2001:db8:2::10
set interfaces vxlan vxlan100 mtu 1450

# IPv4 overlay
set interfaces vxlan vxlan100 address 10.100.0.1/24

commit
```

### VXLAN с firewall

Защита VXLAN трафика через firewall:

```
# VXLAN интерфейс
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-interface eth0
set interfaces vxlan vxlan100 remote 192.0.2.20
set interfaces vxlan vxlan100 address 10.100.0.1/24

# Firewall для overlay трафика
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 source address 10.100.0.0/24
set firewall ipv4 input filter rule 100 description 'Allow VXLAN overlay'

# Firewall для underlay VXLAN (UDP 8472)
set firewall ipv4 input filter rule 200 action accept
set firewall ipv4 input filter rule 200 protocol udp
set firewall ipv4 input filter rule 200 destination port 8472
set firewall ipv4 input filter rule 200 source address 192.0.2.0/24
set firewall ipv4 input filter rule 200 description 'Allow VXLAN encapsulation'

commit
```

### VXLAN Full-Mesh (3 узла)

Создание полносвязной топологии для 3 узлов:

**Вариант 1: Отдельные VXLAN на пару** (не рекомендуется):
Слишком много интерфейсов для большого количества узлов.

**Вариант 2: Multicast** (если поддерживается):
```
# На всех узлах одинаковая конфигурация
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-interface eth0
set interfaces vxlan vxlan100 group 239.0.0.100
set interfaces vxlan vxlan100 mtu 1450

set interfaces bridge br100
set interfaces bridge br100 member interface vxlan100
set interfaces bridge br100 address 10.100.0.X/24

commit
```

**Вариант 3: BGP EVPN** (best practice для продакшна):
Используйте BGP EVPN для автоматического распространения MAC/IP маршрутов и построения VXLAN fabric.

## Интеграция с облачными провайдерами

### Yandex Cloud особенности

**Ограничения**:
- Multicast не поддерживается
- Используйте только unicast VXLAN
- MTU: рекомендуется 1450 (Yandex Cloud MTU = 1500)
- Security groups: разрешите UDP 8472 между узлами

**Конфигурация Security Group**:
```
# В консоли Yandex Cloud создайте правило:
Протокол: UDP
Порт: 8472
Источник: CIDR блок с адресами VTEP узлов
```

**Пример для HA кластера**:
```
# Узел 1 (основной)
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-interface eth0
set interfaces vxlan vxlan100 remote 10.128.0.20
set interfaces vxlan vxlan100 address 172.16.0.1/24

# VRRP для HA
set high-availability vrrp group vxlan100 vrid 100
set high-availability vrrp group vxlan100 interface vxlan100
set high-availability vrrp group vxlan100 address 172.16.0.254/24
set high-availability vrrp group vxlan100 priority 200

commit
```

### VK Cloud особенности

**Ограничения**:
- Multicast не поддерживается
- MTU: рекомендуется 1450
- Firewall: разрешите UDP 8472

**Конфигурация Firewall**:
В панели VK Cloud:
```
Правило входящего трафика:
- Протокол: UDP
- Порт: 8472
- Источник: IP адреса VTEP
```

**Overlay для Kubernetes**:
```
# VXLAN для Kubernetes CNI
set interfaces vxlan vxlan10 vni 10
set interfaces vxlan vxlan10 source-interface eth0
set interfaces vxlan vxlan10 remote 10.0.0.20

set interfaces bridge cni0
set interfaces bridge cni0 member interface vxlan10
set interfaces bridge cni0 address 10.244.0.1/24

# IP forwarding для pod routing
# VyOS автоматически включает forwarding

commit
```

### Общие рекомендации для облаков

1. **Используйте unicast VXLAN** - multicast обычно не поддерживается
2. **MTU 1450** - для предотвращения фрагментации
3. **Security groups/Firewall** - разрешите UDP 8472 между VTEP
4. **Source-address на loopback** - для стабильности при failover
5. **Мониторинг underlay** - проверяйте доступность remote VTEP
6. **BGP EVPN** - для автоматизации в больших инсталляциях

## UDP Port конфигурация

Изменение стандартного порта (8472) на IANA (4789):

```
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 port 4789
set interfaces vxlan vxlan100 source-interface eth0
set interfaces vxlan vxlan100 remote 192.0.2.20
commit
```

**Когда менять порт**:
- Интеграция с оборудованием других вендоров (Cisco, Arista используют 4789)
- Корпоративные стандарты требуют IANA порт
- Firewall правила уже настроены на 4789

**Важно**: Порт должен совпадать на всех VTEP в одном VNI.

## MAC Address

Установка статического MAC-адреса для VXLAN интерфейса:

```
set interfaces vxlan vxlan100 mac 00:50:56:00:00:01
commit
```

Может потребоваться для:
- Интеграции с legacy системами
- Лицензирования по MAC
- Debugging

## ARP и ND

### ARP Cache Timeout

```
set interfaces vxlan vxlan100 ip arp-cache-timeout 3600
commit
```

### Disable ARP

```
set interfaces vxlan vxlan100 ip disable-arp-filter
commit
```

### IPv6 Neighbor Discovery

```
set interfaces vxlan vxlan100 ipv6 dup-addr-detect-transmits 1
commit
```

## Операционные команды

### Просмотр VXLAN интерфейсов

```
show interfaces vxlan
```

Пример вывода:
```
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
vxlan100         10.100.0.1/24                     u/u  VXLAN Overlay 100
vxlan200         10.200.0.1/24                     u/u  VXLAN Overlay 200
```

### Детальная информация VXLAN

```
show interfaces vxlan vxlan100
```

Пример вывода:
```
vxlan100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP
    link/ether 00:50:56:00:12:34 brd ff:ff:ff:ff:ff:ff
    inet 10.100.0.1/24 brd 10.100.0.255 scope global vxlan100
    vxlan id 100 remote 192.0.2.20 dev eth0 srcport 0 0 dstport 8472
```

### Статистика VXLAN

```
show interfaces vxlan vxlan100 statistics
```

Пример вывода:
```
RX:  bytes    packets  errors  dropped  overrun  mcast
     1048576  1024     0       0        0        0
TX:  bytes    packets  errors  dropped  carrier  collsns
     2097152  2048     0       0        0        0
```

### FDB (Forwarding Database)

Просмотр изученных MAC-адресов в VXLAN:

```
show bridge vxlan vxlan100 fdb
```

Пример вывода:
```
port    mac addr           flags
vxlan100  00:0c:29:12:34:56  dst 192.0.2.20
vxlan100  00:0c:29:ab:cd:ef  dst 192.0.2.30
```

### Проверка соединения

Ping через overlay сеть:

```
ping 10.100.0.2 source-address 10.100.0.1
```

Traceroute:

```
traceroute 10.100.0.2 source-address 10.100.0.1
```

### Мониторинг инкапсулированного трафика

```
monitor interfaces vxlan vxlan100 traffic
```

Capture VXLAN пакетов:

```
monitor traffic interface eth0 filter 'udp port 8472'
```

## Устранение неполадок

### VXLAN интерфейс не поднимается

Проверьте source-interface:
```
show interfaces ethernet eth0
```

Убедитесь что source интерфейс в состоянии UP.

Проверьте конфигурацию:
```
show configuration interfaces vxlan vxlan100
```

### Нет связности через VXLAN

**1. Проверьте underlay связность**:
```
ping 192.0.2.20 source-address 192.0.2.10
```

Если underlay не работает - VXLAN не заработает.

**2. Проверьте firewall/security groups**:
```
# На удаленном узле
sudo tcpdump -i eth0 udp port 8472
```

Если пакеты не приходят - проблема в firewall.

**3. Проверьте VNI**:
VNI должен совпадать на обоих концах туннеля.

**4. Проверьте MTU**:
```
ping 10.100.0.2 size 1400 do-not-fragment
```

Если пакеты не проходят - уменьшите MTU.

### FDB не обучается (MAC не видны)

Проверьте bridge конфигурацию:
```
show bridge brX fdb
```

Убедитесь что VXLAN интерфейс в bridge:
```
show bridge brX
```

Проверьте aging time:
```
show configuration interfaces bridge brX
```

### Broadcast storm в VXLAN

Возможные причины:
- Петля в overlay топологии
- Неправильная конфигурация STP
- Duplicate MAC addresses

**Решение**:
```
# Включите STP на bridge
set interfaces bridge br100 stp
commit

# Проверьте STP
show bridge br100 spanning-tree
```

### Высокая фрагментация пакетов

Уменьшите VXLAN MTU:

```
set interfaces vxlan vxlan100 mtu 1400
commit
```

Или увеличьте underlay MTU (если возможно):

```
set interfaces ethernet eth0 mtu 1600
commit
```

### Remote VTEP недоступен

Проверьте маршрут:
```
show ip route 192.0.2.20
```

Проверьте ARP:
```
show arp interface eth0
```

Traceroute к remote VTEP:
```
traceroute 192.0.2.20
```

### VXLAN работает только в одну сторону

Проверьте symmetric конфигурацию на обоих концах:
- VNI должен совпадать
- UDP port должен совпадать
- Remote IP должен указывать на правильный peer

### Производительность VXLAN низкая

**1. Проверьте CPU load**:
```
show system cpu
```

VXLAN инкапсуляция использует CPU.

**2. Включите offloading** (если поддерживается):
```
show interfaces ethernet eth0 offload
```

**3. Используйте jumbo frames**:
```
# Underlay
set interfaces ethernet eth0 mtu 9000

# VXLAN
set interfaces vxlan vxlan100 mtu 8950

commit
```

**4. Проверьте bandwidth underlay**:
Возможно bottleneck в физической сети.

## Расчет MTU

### Стандартный MTU (1500)

```
VXLAN MTU = Underlay MTU - VXLAN Overhead
VXLAN MTU = 1500 - 50 = 1450
```

**Overhead компоненты**:
- Outer Ethernet: 14 байт
- Outer IP: 20 байт (IPv4) или 40 байт (IPv6)
- UDP: 8 байт
- VXLAN: 8 байт
- **Total**: 50 байт (IPv4), 70 байт (IPv6)

### Jumbo Frames (9000)

```
VXLAN MTU = 9000 - 50 = 8950
```

### С VLAN tag

```
VXLAN MTU = 1500 - 50 - 4 = 1446
```

VLAN tag добавляет 4 байта.

### Автоматическое определение MTU

```
# Path MTU Discovery включен по умолчанию
show interfaces vxlan vxlan100
```

## Производительность

### Рекомендации по оптимизации

**1. Hardware offloading**:
Используйте NIC с поддержкой VXLAN offload.

**2. Jumbo frames**:
Увеличьте MTU до 9000 на underlay и 8950 на overlay.

**3. Source на loopback**:
Используйте loopback адреса для VTEP - стабильнее при failover.

**4. Multipath routing**:
Используйте ECMP для load balancing VXLAN трафика.

**5. CPU pinning**:
Для критичных workloads настройте CPU affinity.

### Тестирование производительности

**Throughput**:
```
# На сервере
iperf3 -s -B 10.100.0.1

# На клиенте
iperf3 -c 10.100.0.1 -t 60 -P 4
```

**Latency**:
```
ping 10.100.0.2 -i 0.2 -c 1000
```

**Packet loss**:
```
mtr 10.100.0.2 -c 100
```

## Безопасность

### Шифрование VXLAN

VXLAN по умолчанию **не шифрует** трафик. Для шифрования:

**Вариант 1: IPsec поверх VXLAN**:
```
# Создайте IPsec туннель между VTEP
set vpn ipsec site-to-site peer 192.0.2.20 ...

# VXLAN через IPsec туннель
set interfaces vxlan vxlan100 source-interface ipsec0
```

**Вариант 2: WireGuard underlay**:
```
# WireGuard туннель
set interfaces wireguard wg0 ...

# VXLAN через WireGuard
set interfaces vxlan vxlan100 source-interface wg0
```

### Firewall для VXLAN

**Защита underlay**:
```
# Разрешить VXLAN только от известных VTEP
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 protocol udp
set firewall ipv4 input filter rule 100 destination port 8472
set firewall ipv4 input filter rule 100 source address 192.0.2.0/24

set firewall ipv4 input filter rule 110 action drop
set firewall ipv4 input filter rule 110 protocol udp
set firewall ipv4 input filter rule 110 destination port 8472

commit
```

**Защита overlay**:
```
# Firewall для overlay трафика
set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 inbound-interface name vxlan100
set firewall ipv4 forward filter rule 200 state established
set firewall ipv4 forward filter rule 200 state related

commit
```

### Rate Limiting

Защита от flooding:

```
set firewall ipv4 input filter rule 300 action accept
set firewall ipv4 input filter rule 300 protocol udp
set firewall ipv4 input filter rule 300 destination port 8472
set firewall ipv4 input filter rule 300 limit rate 1000/second
commit
```

## Мониторинг

### Ключевые метрики

**1. Interface statistics**:
```
show interfaces vxlan vxlan100 statistics
```

Отслеживайте:
- RX/TX errors
- Dropped packets
- Overruns

**2. FDB размер**:
```
show bridge brX fdb | count
```

**3. CPU usage**:
```
show system cpu
```

VXLAN инкапсуляция использует CPU.

**4. Underlay health**:
```
ping 192.0.2.20 source-address 192.0.2.10
```

### Logging

Включение debug логов для VXLAN:

```
# В VyOS 1.4
set system syslog global facility local7 level debug

# В VyOS 1.5
# Смотрите документацию по logging
```

Просмотр логов:
```
show log | match vxlan
```

## Интеграция

### С BGP EVPN

BGP EVPN автоматизирует распространение MAC/IP маршрутов в VXLAN fabric:

```
# Loopback для VTEP
set interfaces loopback lo address 192.0.2.1/32

# VXLAN
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-address 192.0.2.1

# Bridge
set interfaces bridge br100
set interfaces bridge br100 member interface vxlan100

# BGP для underlay
set protocols bgp system-as 65000
set protocols bgp neighbor 10.0.0.1 remote-as 65000

# BGP EVPN
set protocols bgp address-family l2vpn-evpn advertise-all-vni
set protocols bgp address-family l2vpn-evpn advertise-default-gw
set protocols bgp address-family l2vpn-evpn neighbor 10.0.0.1 activate

commit
```

### С OSPF (underlay)

OSPF для маршрутизации между VTEP:

```
# Loopback
set interfaces loopback lo address 192.0.2.1/32

# OSPF
set protocols ospf area 0 network 192.0.2.1/32
set protocols ospf area 0 network 10.0.0.0/24

# VXLAN с source на loopback
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 source-address 192.0.2.1
set interfaces vxlan vxlan100 remote 192.0.2.2

commit
```

OSPF анонсирует loopback адреса, обеспечивая underlay связность.

### С VRF

Изоляция VXLAN overlay в отдельном VRF:

```
# VRF для tenant
set vrf name TENANT table 100

# VXLAN в VRF
set interfaces vxlan vxlan100 vni 100
set interfaces vxlan vxlan100 vrf TENANT
set interfaces vxlan vxlan100 address 10.100.0.1/24

commit
```

### С QoS

Приоритизация VXLAN трафика:

```
# QoS для VXLAN underlay
set qos policy shaper VXLAN-QOS bandwidth 1gbit
set qos policy shaper VXLAN-QOS class 10 match vxlan ip protocol udp
set qos policy shaper VXLAN-QOS class 10 match vxlan ip destination port 8472
set qos policy shaper VXLAN-QOS class 10 bandwidth 800mbit

set interfaces ethernet eth0 qos egress VXLAN-QOS

commit
```

## Сравнение технологий

### VXLAN vs VLAN

| Характеристика | VXLAN | VLAN |
|---------------|-------|------|
| Идентификатор | 24 бита (16M) | 12 бит (4096) |
| Масштабируемость | Очень высокая | Ограничена |
| Работает через L3 | Да | Нет |
| Overhead | 50 байт | 4 байта |
| Сложность | Высокая | Низкая |
| Применение | Data center, cloud | Campus, enterprise |

### VXLAN vs GRE

| Характеристика | VXLAN | GRE |
|---------------|-------|-----|
| Уровень | L2 over L3 | L3 over L3 |
| Multicast | Поддерживается | Нет |
| NAT traversal | Да (UDP) | Ограничено |
| Идентификатор | VNI (24 бит) | Key (32 бит) |
| Масштабируемость | Высокая | Средняя |

### VXLAN vs MPLS L2VPN

| Характеристика | VXLAN | MPLS L2VPN |
|---------------|-------|-----------|
| Протокол | UDP | MPLS |
| Сложность | Средняя | Высокая |
| Стоимость | Низкая | Высокая |
| Control plane | BGP EVPN/Multicast | LDP/BGP |
| Применение | Cloud/DC | Service provider |

## Лучшие практики

1. **MTU планирование** - всегда вычитайте 50 байт от underlay MTU
2. **Source на loopback** - для стабильности при failover
3. **Unicast для облаков** - multicast обычно не поддерживается
4. **Firewall underlay** - разрешайте UDP 8472 только от известных VTEP
5. **Мониторинг FDB** - отслеживайте размер forwarding database
6. **BGP EVPN для продакшна** - автоматизация в больших инсталляциях
7. **Jumbo frames** - если underlay поддерживает
8. **VNI plan** - документируйте назначение VNI
9. **Overlay security** - используйте firewall на overlay интерфейсах
10. **Testing** - тестируйте failover сценарии

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

- VXLAN добавляет overhead 50 байт (IPv4) или 70 байт (IPv6)
- Инкапсуляция использует CPU (рекомендуется hardware offload)
- Multicast VXLAN не работает в большинстве облачных провайдеров
- Требуется тщательное планирование MTU
- FDB таблицы могут расти в больших сетях
- Debugging сложнее чем обычные L2/L3 сети

## Примеры для конкретных сценариев

### Kubernetes Overlay

```
# VXLAN для Kubernetes pod network
set interfaces vxlan vxlan-pods vni 1000
set interfaces vxlan vxlan-pods source-interface eth0
set interfaces vxlan vxlan-pods remote 10.0.0.20
set interfaces vxlan vxlan-pods mtu 1450

set interfaces bridge kube-bridge
set interfaces bridge kube-bridge member interface vxlan-pods
set interfaces bridge kube-bridge address 10.244.0.1/24

commit
```

### Multi-DC DCI (Data Center Interconnect)

```
# DC1 VTEP
set interfaces loopback lo address 198.51.100.1/32
set interfaces vxlan vxlan-dci vni 5000
set interfaces vxlan vxlan-dci source-address 198.51.100.1
set interfaces vxlan vxlan-dci remote 203.0.113.1
set interfaces vxlan vxlan-dci mtu 1450

# QoS для DCI
set qos policy shaper DCI bandwidth 10gbit

commit
```

### NFV Service Chaining

```
# VNF1 -> VXLAN -> VNF2 -> VXLAN -> VNF3

# VXLAN сегменты
set interfaces vxlan vxlan-vnf1-vnf2 vni 2001
set interfaces vxlan vxlan-vnf1-vnf2 source-interface eth0
set interfaces vxlan vxlan-vnf1-vnf2 remote 192.0.2.20

set interfaces vxlan vxlan-vnf2-vnf3 vni 2002
set interfaces vxlan vxlan-vnf2-vnf3 source-interface eth0
set interfaces vxlan vxlan-vnf2-vnf3 remote 192.0.2.30

# Bridges для service chaining
set interfaces bridge br-vnf1
set interfaces bridge br-vnf1 member interface vxlan-vnf1-vnf2
set interfaces bridge br-vnf1 member interface eth1

set interfaces bridge br-vnf2
set interfaces bridge br-vnf2 member interface vxlan-vnf2-vnf3
set interfaces bridge br-vnf2 member interface eth2

commit
```

## Следующие шаги

- [Bridge интерфейсы](/docs/vyos/interfaces/vyos-bridge/) - L2 bridging и VLAN-aware mode
- [GRE туннели](/docs/vyos/interfaces/vyos-tunnel/) - альтернативная туннельная технология
- [VRF](/docs/vyos/vrf/) - изоляция routing таблиц для multi-tenancy
- [BGP](/docs/vyos/routing/vyos-bgp/) - control plane для VXLAN fabric
- [Firewall](/docs/vyos/firewall/) - защита VXLAN overlay и underlay
- [QoS](/docs/vyos/qos/) - приоритизация VXLAN трафика

## Ссылки

- [RFC 7348 - VXLAN](https://datatracker.ietf.org/doc/html/rfc7348)
- [VXLAN Deployment Guide](https://docs.vyos.io/en/latest/configuration/interfaces/vxlan.html)
- [BGP EVPN для VXLAN](https://datatracker.ietf.org/doc/html/rfc8365)
- [Yandex Cloud Networking](https://cloud.yandex.ru/docs/vpc/)
- [VK Cloud Networking](https://cloud.vk.com/docs/networks)

