Multicast-настройка VXLAN в Linux

VXLAN (Virtual eXtensible Local Area Network) – это оверлейная сеть, предназначенная для передачи Ethernet-трафика по существующей (масштабируемой и высокодоступной) IP-сети с одновременным размещением множества пользовательских групп. Именно такое определение мы увидим, если ознакомимся с технической спецификацией RFC 7348. В этой статье мы рассмотрим стандартную настройку сети VXLAN в Линукс в IP-сети мультивещания.

VXLAN вполне себе реализован в Linux, а уже начиная с версии 3.12, обеспечивается поддержка как мультивещания (multicast), так и одноадресной передачи (unicast), ну и, разумеется, IPv6 и IPv4. Так как традиционно VXLAN работают с применением групп мультивещания, о них и поговорим.

Вообще, термин “оверлейная” означает, что сеть VXLAN создаёт логические сети поверх физических: в нашем случае — логические сети L2 поверх IP-сети. В результате VXLAN имеет основные характеристики оверлейных сетей: • связь устанавливается между 2-мя конечными точками туннеля (VXLAN Tunnel Endpoints или VTEP); • в сети VXLAN оригинальные пакеты инкапсулируются в новый заголовок. К примеру, оверлейная технология IPSec VPN инкапсулирует в IP-заголовок оригинальный IP-кадр.

Перейдём к способам конфигурации VXLAN и рассмотрим пример развёртывания:

Для иллюстрации наших примеров будем использовать следующие настройки: • транспортная IP-сеть (масштабируемая и высокодоступная); • три Linux-моста в качестве VTEP; • четыре сервера, находящиеся в общем Ethernet-сегменте.

VXLAN-туннель распределяет отдельные сегменты Ethernet по 3-м мостам, предоставляя тем самым единый виртуальный Ethernet-сегмент, где с одного хоста (к примеру, H1) можно связаться с остальными хостами, сделав это напрямую.

Стандартная настройка VXLAN

В случае стандартного развёртывания, VXLAN использует IP-группу мультивещания (multicast) в целях соединения c другими VTEP:

Вышеуказанные команды создают новый интерфейс, который выступает в роли конечной точки туннеля VXLAN vxlan100, помещая его в мост с обычными интерфейсами (говоря по правде, это лишь один из вариантов реализации. Дело в том, что мост нужен, только если надо обеспечить присоединение локальных интерфейсов к VXLAN. Другой вариант заключается в применении интерфейсов MACVLAN).

Каждый VXLAN-сегмент связан с 24-битным ID, VXLAN Network Identifier либо VNI. В нашем случае в качестве VNI по дефолту указан id 100.

Когда сеть VXLAN впервые реализовали в Linux 3.7, порт UDP не был определен. Ряд вендоров использовали 8472, в результате чего Linux стал применять то же значение. Дабы не нарушать уже существующие конфигурации, такое значение применяется по умолчанию. Следовательно, если вам надо использовать порт, назначенный IANA, нужно точно указать его посредством dstport 4789.

Раз мы используем multicast, следует указать группу мультивещания (group ff05::100) и, разумеется, физическое устройство (dev eth0). При применении multicast значение TTL по дефолту равняется единице. Если же ваша multicast-сеть задействует какую-нибудь маршрутизацию, значение надо немного увеличить, допустим, как в примере выше — ttl 5.

Устройство vxlan100 играет функцию транспортного устройства для моста с удалёнными VTEP в виде виртуальных портов: • оно обеспечивает рассылку широковещательных, одноадресных и многоадресных (BUM) кадров всем VTEP, применяя группу мультивещания; • оно обеспечивает обнаружение связи MAC-адресов Ethernet с IP-адресами VTEP, изучая для этого адреса источников кадров.

Ниже отображена общая конфигурация с применением базы MAC (FDB, Forwarding Database) моста Линукс (с изучением локальных МАС-адресов) и FDB устройства VXLAN (с изучением удалённых МАС-адресов):

Используя команду bridge, вы сможете посмотреть содержимое FDB на устройстве VXLAN. Когда MAC-адрес назначения существует, кадр посылается VTEP, который с ним связан (если речь идёт об одноадресной сети). Нулевой адрес применяется лишь в том случае, если МАС-адрес назначения не обнаружен.

Какие преимущества несёт использование VXLAN в IP-сети мультивещания: • автоматическое обнаружение других VTEP внутри одной multicast-группы; • эффективное применение полосы пропускания (репликация пакетов осуществляется как можно позднее); • дизайн отличается децентрализованностью и не требует управления.

По материалам статьи «VXLAN & Linux».