GENEVE - Generic Network Virtualization Encapsulation

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::10

Source Address (опционально)

# Если не указан - выбирается автоматически на основе routing table
set interfaces geneve gnv0 source-address 203.0.113.1

UDP Port

# Порт назначения UDP (по умолчанию 6081)
set interfaces geneve gnv0 port 6081

# Использовать custom порт
set interfaces geneve gnv0 port 8472

Default 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/24

MTU 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
save

Yandex 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
save

Use 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       0

Packet Capture

# Захват трафика на GENEVE интерфейсе
monitor traffic interface gnv0

# Фильтр по протоколу
monitor traffic interface gnv0 filter "icmp"

# Сохранить в файл
monitor traffic interface gnv0 save /tmp/geneve-capture.pcap

Debugging

# Проверить encapsulated трафик на underlay
monitor traffic interface eth0 filter "udp port 6081"

# Проверить kernel messages
show log kernel | match geneve

Troubleshooting

Проблема: 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

ХарактеристикаGENEVEVXLAN
Default UDP Port60814789
Header SizeVariable (min 8 bytes)Fixed 8 bytes
VNI Bits24-bit24-bit
ExtensibilityYes (TLV options)Limited
Multicast SupportOptionalYes
Metadata SupportYesNo
OAM SupportBuilt-inExternal
IETF StandardDraftRFC 7348
AdoptionGrowing (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 3000

2. 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 8950

3. 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 info

4. 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-IN

5. 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.

Дополнительные ресурсы