Product SiteDocumentation Site

28.3. Режим VXLAN

Режим VXLAN (Virtual eXtensible Local Area Network) обеспечивает изоляцию трафика ВМ за счёт L2-инкапсуляции поверх IP-сети. В отличие от VLAN, VXLAN использует 24-битный идентификатор (VNI), что позволяет создавать до 16 миллионов изолированных сетей.

Примечание

VXLAN не использует теги 802.1Q. Трафик инкапсулируется в UDP-пакеты и передаётся через обычный IP-интерфейс.
Для каждой виртуальной сети:
  • создаётся VXLAN-интерфейс (например, onevni50);
  • создаётся Linux-мост (например, onebr.50);
  • ВМ подключаются к этому мосту.
Трафик между узлами передаётся через UDP-порт 8472 (по умолчанию).

Примечание

Официальный порт IANA для VXLAN — UDP 4789. Если используется сетевое оборудование, соответствующее стандарту, порт следует указать явно через IP_LINK_CONF.
Идентификатор VXLAN (VNI) может быть:
  • автоматически назначен OpenNebula из пула;
  • задан вручную с помощью параметра VLAN_ID.
Для передачи широковещательного, многоадресного и неизвестного одноадресного (BUM) трафика используется многоадресная группа. По умолчанию:
  • базовый multicast-адрес: 239.0.0.0/8;
  • конкретная группа: 239.0.0.<VLAN_ID>.

Примечание

Физический сетевой интерфейс (PHYDEV), используемый для передачи трафика, должен иметь назначенный IP-адрес.
Будет создан мост вида ${PHYSDEV}.${VXLAN_ID}, где PHYDEV — это физический интерфейс, а VXLAN_ID — идентификатор VXLAN (VNI). К этому мосту подключаются сетевые интерфейсы.
Это имеет принципиальное значение, поскольку максимальная длина имени сетевого интерфейса в iproute2 составляет 15 символов.

Примечание

Если имя физического интерфейса и значение VNI в сумме превышают 15 символов, развёртывание ВМ, использующих такую сеть, завершится ошибкой.
Возможное решение — задать альтернативное имя (псевдоним) для физического интерфейса. Например, если используется интерфейс en0s0f0p0, можно выполнить:
# ip link set en0s0f0p0 alias vx
и затем использовать устройство vx в качестве PHYDEV.
Назначение псевдонима не сохраняется после перезагрузки системы. Для постоянного применения необходимо повторять команду при старте системы или внести соответствующие изменения в конфигурационные файлы сети.
Каждый VXLAN связан с одной многоадресной группой (multicast group). В Linux существует ограничение на количество multicast-групп, членом которых может быть узел одновременно. Это ограничение также определяет максимальное число VXLAN, которые могут использоваться на одном физическом узле.
Значение по умолчанию — 20. Его можно изменить с помощью параметра ядра net.ipv4.igmp_max_memberships. Для постоянного увеличения, например до 150, добавьте в файл /etc/sysctl.conf:
net.ipv4.igmp_max_memberships=150
и примените настройки:
# sysctl -p

28.3.1. Глобальная конфигурация

Начальный идентификатор VXLAN можно задать в файле /etc/one/oned.conf:
VXLAN_IDS = [
    START = "2"
]
Параметры поведения сетевого драйвера настраиваются в файле /var/lib/one/remotes/etc/vnm/OpenNebulaNetwork.conf (см. табл. Параметры конфигурации).

Таблица 28.6. Параметры конфигурации

Параметр
Описание
:vxlan_mc
Базовый multicast-адрес (например, "239.0.0.0"). Фактический адрес вычисляется как vxlan_mc + VNI
:vxlan_ttl
TTL для multicast-трафика (должен быть >1 при маршрутизации)
:validate_vlan_id
Проверять конфликты VLAN (true/false)
:keep_empty_bridge
Сохранять мосты без ВМ (true/false)
:ip_bridge_conf
Хеш параметров, передаваемых команде ip при создании моста (ip link add <bridge> type bridge …)
:ip_link_conf
Хеш параметров, передаваемых команде ip при создании VXLAN-интерфейса (ip link add)
Пример:
:ip_link_conf:
    :udp6zerocsumrx:
    :tos: 3

Примечание

После изменения конфигурации необходимо синхронизировать файлы со всеми узлами кластера:
$ onehost sync -f