GENEVE - Generic Network Virtualization Encapsulation
GENEVE (Generic Network Virtualization Encapsulation) - это протокол сетевой виртуализации, разработанный для преодоления ограничений VXLAN, NVGRE и STT. GENEVE поддерживает сценарии сетевой виртуализации, особенно для создания туннелей между виртуальными коммутаторами.
Введение в GENEVE
Что такое GENEVE?
GENEVE - это современный протокол инкапсуляции, который:
- Использует произвольные IP сети в качестве underlay
- Поддерживает архитектуры Clos network
- Обеспечивает гибкость через расширяемый заголовок
- Разработан IETF NVO3 Working Group
Ключевые особенности
Архитектура заголовка:
- Version - версия протокола
- Option Length - длина опциональных полей
- VNI (Virtual Network Identifier) - идентификатор виртуальной сети
- Protocol Type - тип инкапсулированного протокола
- Variable Length Options - расширяемые опции
Преимущества перед VXLAN:
- Более гибкий формат заголовка
- Поддержка метаданных
- Лучшая расширяемость
- Совместимость с различными transport протоколами
Когда использовать GENEVE?
Рекомендуется для:
- Cloud overlay networks
- Network virtualization в datacenter
- Multi-tenant environments
- SDN/NFV решений
- Kubernetes CNI (например, OVN-Kubernetes)
Применение в облаках:
- Yandex Cloud: Overlay networking для контейнерных платформ
- VK Cloud: Multi-tenant изоляция
- Private Cloud: Network virtualization infrastructure
Конфигурация GENEVE
Базовая настройка
configure
# Создать GENEVE интерфейс
set interfaces geneve gnv0 remote 203.0.113.10
set interfaces geneve gnv0 vni 100
set interfaces geneve gnv0 address 10.10.0.1/24
commit
saveПараметры конфигурации
VNI (Virtual Network Identifier)
# VNI идентифицирует виртуальную сеть (0-16777215)
set interfaces geneve gnv0 vni 100Диапазон VNI: 0 - 16777215 (24-bit)
Remote Address
# IP адрес удаленной конечной точки туннеля
set interfaces geneve gnv0 remote 203.0.113.10
# Поддерживается IPv6
set interfaces geneve gnv0 remote 2001:db8::10Source Address (опционально)
# Если не указан - выбирается автоматически на основе routing table
set interfaces geneve gnv0 source-address 203.0.113.1UDP Port
# Порт назначения UDP (по умолчанию 6081)
set interfaces geneve gnv0 port 6081
# Использовать custom порт
set interfaces geneve gnv0 port 8472Default GENEVE port: 6081 (IANA assigned)
IP Configuration
# IPv4 адрес
set interfaces geneve gnv0 address 10.10.0.1/24
# IPv6 адрес
set interfaces geneve gnv0 address 2001:db8:1::1/64
# Множественные IP адреса
set interfaces geneve gnv0 address 10.10.0.1/24
set interfaces geneve gnv0 address 10.10.1.1/24MTU Settings
# Установить MTU (учесть overhead для инкапсуляции)
set interfaces geneve gnv0 mtu 1450
# GENEVE overhead:
# - IPv4: 50 bytes (20 IP + 8 UDP + 8 GENEVE + 14 Ethernet)
# - IPv6: 70 bytes (40 IP + 8 UDP + 8 GENEVE + 14 Ethernet)Рекомендации MTU:
- Underlay MTU 1500: GENEVE MTU = 1450
- Underlay MTU 9000 (Jumbo): GENEVE MTU = 8950
MAC Address
# Установить custom MAC адрес
set interfaces geneve gnv0 mac '00:50:56:00:00:01'Description
# Добавить описание интерфейса
set interfaces geneve gnv0 description 'GENEVE to DC-EAST'Практические сценарии
Сценарий 1: Point-to-Point GENEVE Tunnel
Топология:
[VyOS-R1] ===== GENEVE Tunnel ===== [VyOS-R2]
10.0.1.1/24 10.0.2.1/24
| |
Overlay: 172.16.0.0/30Конфигурация VyOS-R1:
configure
# WAN интерфейс
set interfaces ethernet eth0 address 10.0.1.1/24
# GENEVE tunnel
set interfaces geneve gnv0 remote 10.0.2.1
set interfaces geneve gnv0 vni 1000
set interfaces geneve gnv0 address 172.16.0.1/30
set interfaces geneve gnv0 mtu 1450
set interfaces geneve gnv0 description 'Tunnel to R2'
# Static route через туннель
set protocols static route 192.168.2.0/24 next-hop 172.16.0.2
commit
saveКонфигурация VyOS-R2:
configure
# WAN интерфейс
set interfaces ethernet eth0 address 10.0.2.1/24
# GENEVE tunnel
set interfaces geneve gnv0 remote 10.0.1.1
set interfaces geneve gnv0 vni 1000
set interfaces geneve gnv0 address 172.16.0.2/30
set interfaces geneve gnv0 mtu 1450
set interfaces geneve gnv0 description 'Tunnel to R1'
# Static route через туннель
set protocols static route 192.168.1.0/24 next-hop 172.16.0.1
commit
saveПроверка:
# Проверить интерфейс
show interfaces geneve
# Ping через туннель
ping 172.16.0.2 source-address 172.16.0.1
# Проверить routing
show ip routeСценарий 2: Multi-Tenant Network Virtualization
Задача: Изоляция трафика нескольких клиентов через отдельные VNI
Топология:
Tenant A (VNI 100): 10.100.0.0/16
Tenant B (VNI 200): 10.200.0.0/16
Tenant C (VNI 300): 10.300.0.0/16Конфигурация:
configure
# Tenant A
set interfaces geneve gnv100 remote 203.0.113.10
set interfaces geneve gnv100 vni 100
set interfaces geneve gnv100 address 10.100.0.1/16
set interfaces geneve gnv100 description 'Tenant-A Network'
# Tenant B
set interfaces geneve gnv200 remote 203.0.113.10
set interfaces geneve gnv200 vni 200
set interfaces geneve gnv200 address 10.200.0.1/16
set interfaces geneve gnv200 description 'Tenant-B Network'
# Tenant C
set interfaces geneve gnv300 remote 203.0.113.10
set interfaces geneve gnv300 vni 300
set interfaces geneve gnv300 address 10.300.0.1/16
set interfaces geneve gnv300 description 'Tenant-C Network'
# Firewall для изоляции
set firewall group network-group TENANT-A network 10.100.0.0/16
set firewall group network-group TENANT-B network 10.200.0.0/16
set firewall group network-group TENANT-C network 10.300.0.0/16
set firewall name TENANT-ISOLATION default-action drop
set firewall name TENANT-ISOLATION rule 10 action accept
set firewall name TENANT-ISOLATION rule 10 state established enable
set firewall name TENANT-ISOLATION rule 10 state related enable
commit
saveСценарий 3: GENEVE в Yandex Cloud
Задача: Overlay network между VMs в Yandex Cloud
Особенности Yandex Cloud:
- Поддержка custom протоколов между VMs
- Требуется security group разрешающий UDP 6081
- MTU в Yandex Cloud: 1500 (использовать GENEVE MTU 1450)
Конфигурация:
configure
# Определить cloud metadata для получения IP
set system option performance throughput
# GENEVE tunnel между облачными VMs
set interfaces geneve gnv0 remote 10.128.0.20
set interfaces geneve gnv0 vni 1000
set interfaces geneve gnv0 address 172.16.100.1/24
set interfaces geneve gnv0 mtu 1450
set interfaces geneve gnv0 description 'Yandex Cloud Overlay'
# Source address - внутренний IP VM
set interfaces geneve gnv0 source-address 10.128.0.10
commit
saveYandex Cloud Security Group:
# Через Yandex Cloud Console или CLI
yc vpc security-group-rule create \
--security-group-id <sg-id> \
--direction ingress \
--protocol udp \
--port 6081 \
--cidr-blocks 10.128.0.0/24 \
--description "GENEVE tunnel"Сценарий 4: GENEVE с Dynamic Routing
Задача: OSPF через GENEVE tunnel
configure
# GENEVE tunnel
set interfaces geneve gnv0 remote 203.0.113.10
set interfaces geneve gnv0 vni 1000
set interfaces geneve gnv0 address 172.16.0.1/30
set interfaces geneve gnv0 mtu 1450
# OSPF через GENEVE
set protocols ospf area 0 network 172.16.0.0/30
set protocols ospf area 0 network 192.168.1.0/24
# Interface parameters для OSPF
set protocols ospf interface gnv0 hello-interval 10
set protocols ospf interface gnv0 dead-interval 40
set protocols ospf interface gnv0 priority 100
commit
saveПроверка OSPF:
show ip ospf neighbor
show ip ospf routeИнтеграция с Bridge
GENEVE интерфейсы можно добавлять в bridge для L2 connectivity:
configure
# Создать bridge
set interfaces bridge br0 address 192.168.100.1/24
# Добавить GENEVE в bridge
set interfaces bridge br0 member interface gnv0
# Добавить локальный интерфейс в bridge
set interfaces bridge br0 member interface eth1
commit
saveUse case: L2 extension через GENEVE tunnel
Мониторинг и отладка
Проверка статуса
# Общая информация
show interfaces geneve
# Детальная статистика
show interfaces geneve gnv0
# Только конфигурация
show interfaces geneve gnv0 briefПример вывода:
gnv0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450
inet 172.16.0.1/30
RX: bytes packets errors dropped
1048576 1024 0 0
TX: bytes packets errors dropped
2097152 2048 0 0Packet Capture
# Захват трафика на GENEVE интерфейсе
monitor traffic interface gnv0
# Фильтр по протоколу
monitor traffic interface gnv0 filter "icmp"
# Сохранить в файл
monitor traffic interface gnv0 save /tmp/geneve-capture.pcapDebugging
# Проверить encapsulated трафик на underlay
monitor traffic interface eth0 filter "udp port 6081"
# Проверить kernel messages
show log kernel | match geneveTroubleshooting
Проблема: GENEVE туннель не поднимается
Диагностика:
# 1. Проверить IP connectivity до remote endpoint
ping 203.0.113.10
# 2. Проверить что UDP 6081 не заблокирован
sudo tcpdump -i eth0 udp port 6081
# 3. Проверить routing до remote
show ip route 203.0.113.10
# 4. Проверить firewall
show firewallТипичные причины:
- Firewall блокирует UDP 6081
- Нет IP connectivity до remote
- Неправильный source-address
- MTU problems
Проблема: Packet Loss через туннель
Диагностика:
# Проверить MTU path
ping 172.16.0.2 size 1450 do-not-fragment
# Проверить фрагментацию
show interfaces geneve gnv0
# Смотреть TX/RX errorsРешение:
# Уменьшить MTU
set interfaces geneve gnv0 mtu 1400
commit
# Или включить TCP MSS clamping
set interfaces geneve gnv0 ip adjust-mss 1360
commitПроблема: Низкая производительность
Причины:
- Высокий overhead инкапсуляции
- CPU ограничения при encap/decap
- Network latency underlay
Оптимизация:
# Включить offloading если поддерживается NIC
set interfaces ethernet eth0 offload gso
set interfaces ethernet eth0 offload gro
set interfaces ethernet eth0 offload tso
# Увеличить MTU на underlay (если возможно)
set interfaces ethernet eth0 mtu 9000
set interfaces geneve gnv0 mtu 8950
commitСравнение GENEVE vs VXLAN
| Характеристика | GENEVE | VXLAN |
|---|---|---|
| Default UDP Port | 6081 | 4789 |
| Header Size | Variable (min 8 bytes) | Fixed 8 bytes |
| VNI Bits | 24-bit | 24-bit |
| Extensibility | Yes (TLV options) | Limited |
| Multicast Support | Optional | Yes |
| Metadata Support | Yes | No |
| OAM Support | Built-in | External |
| IETF Standard | Draft | RFC 7348 |
| Adoption | Growing (OVN, NSX) | Wide (most vendors) |
Когда выбрать GENEVE:
- Нужна расширяемость (metadata, OAM)
- SDN environment (OpenStack, Kubernetes)
- Требуется передача контекста между устройствами
Когда выбрать VXLAN:
- Требуется широкая совместимость
- Hardware offload критичен
- Существующая VXLAN инфраструктура
Best Practices
1. Планирование VNI
# Используйте логичную схему VNI allocation
# Пример:
# 1000-1999: Production networks
# 2000-2999: Development networks
# 3000-3999: Test networks
# 4000-4999: Management networks
set interfaces geneve gnv-prod remote 10.0.1.1 vni 1000
set interfaces geneve gnv-dev remote 10.0.1.1 vni 2000
set interfaces geneve gnv-test remote 10.0.1.1 vni 30002. MTU Configuration
# Всегда учитывайте overhead
# Формула: GENEVE MTU = Underlay MTU - 50 (IPv4) или -70 (IPv6)
# Для underlay MTU 1500
set interfaces geneve gnv0 mtu 1450
# Для Jumbo frames (MTU 9000)
set interfaces geneve gnv0 mtu 89503. Monitoring
# Настройте SNMP для мониторинга
set service snmp community public authorization ro
set service snmp community public network 192.168.1.0/24
# Или используйте syslog для логирования
set system syslog host 192.168.1.100 facility all level info4. Security
# Ограничьте доступ через firewall
set firewall name GENEVE-IN default-action drop
set firewall name GENEVE-IN rule 10 action accept
set firewall name GENEVE-IN rule 10 protocol udp
set firewall name GENEVE-IN rule 10 destination port 6081
set firewall name GENEVE-IN rule 10 source group network-group GENEVE-PEERS
set interfaces ethernet eth0 firewall in name GENEVE-IN5. Documentation
# Всегда документируйте назначение туннелей
set interfaces geneve gnv0 description 'GENEVE to DC-EAST VNI:1000 Prod'
set interfaces geneve gnv1 description 'GENEVE to DC-WEST VNI:1001 Prod'Заключение
GENEVE - это современный, расширяемый протокол для network virtualization, который:
Преимущества:
- Гибкость через расширяемый заголовок
- Поддержка метаданных для SDN
- Совместимость с различными transport
- IETF стандартизация
Применение:
- Cloud overlay networks
- Multi-tenant environments
- Kubernetes/OpenStack networking
- Datacenter fabric virtualization
Лучше всего подходит для:
- Новых SDN/NFV deployments
- Environments требующих metadata
- Multi-vendor integration через open standard
GENEVE является отличным выбором для современных сетевых виртуализаций, особенно в контексте облачных платформ Yandex Cloud и VK Cloud, где требуется гибкая изоляция и overlay networking.