С покупкой VMware компании Nicira стало больше разговоров о технологии VXLAN (Virtual eXtensible LAN), которая предоставляет расширенный механизм создания виртуальных сетей VLAN в крупных ИТ-инфраструктурах, объединяющих несколько датацентров компании (о ней мы уже упоминали). Разумеется, она нацелена на виртуализацию, и ее поддержка будет включена в платформу VMware vSphere в недалеком будущем. То есть VXLAN - это замена VLAN для создания прозрачной мобильной сетевой среды для виртуальных машин, имеющих возможность перемещаться между датацентрами.
Суть имеющейся сегодня проблемы заключается в том, что IP-адрес системы определяет две, по-сути разные, сущности: идентификатор системы и указатель на географическое размещение в сети (датацентр, сегмент), кроме того стандартная концепция VLAN позволяет использовать только до 4096 виртуальных сетей для логической изоляции классов систем, что в крупных инфраструктурах иногда оказывается недостаточно (особенно это касается IaaS-инфраструктур сервис-провайдеров, работающих с сотнями организаций, у каждой из которых свои VLAN).
Поэтому компании Cisco и VMware, к которым присоединились Citrix и Red Hat, разработали стандарт VXLAN, позволяющий организовать логические сети L2 поверх уровня L3 с возможностью минимального внесения изменений в существующую инфраструктуру сетевого взаимодействия в организациях. На данный момент черновик стандарта VXLAN в реализации IPv4 отправлен в организацию IETF, вскоре там будет и документ по реализации в IPv6.
Обзорный ролик по технологии VXLAN:
Образно говоря, технология VXLAN - это способ создания новых логических L2-сетей в рамках уже существующих L3-сетей. В одной VXLAN-сети виртуальная машина уникально идентифицируется двумя следующими параметрами:
VXLAN Network Identifier (VNI) - 24-битный идентификатор виртуальной сети, а значит их всего может быть более 16 миллионов штук
MAC-адрес машины
Соответственно, в одной VXLAN-сети не может быть машин с одинаковым MAC-адресом, но в разных VXLAN-сетях они вполне могут существовать (что актуально для виртуальных машин, MAC которых генерируется автоматически и глобально не уникален). Большое количество возможных VXLAN-сетей позволяет виртуальным машинам "путешествовать" между инфраструктурой организации и сторонними сервис-провайдерами без изменения сетевой идентификации, сохранением политик и изоляции внутри виртуальной сети безотносительно ее физического размещения (у себя или у IaaS-провайдера).
Для работы инфраструктуры VXLAN есть следующие компоненты:
Необходима поддержка режимов Multicast, IGMP и PIM
Идентификатор VNI внутри IP-пакета, только машины с одинаковым VNI могут взаимодействовать между собой
Шлюз VXLAN Gateway
Компонент VXLAN Tunnel End Point (VTEP) на стороне сервера виртуализации
Виртуальная сеть VXLAN Segment/VXLAN Overlay
С точки зрения IP-пакета VXLAN, в сети IPv4 его размер увеличивается на 50 байт, а в сети IPv6 - на 70 байт. Работает это примерно так:
Допустим у нас есть виртуальная сеть VXLAN с VNI равным 864. Когда виртуальная машина VM1 хочет послать IP-пакет виртуальной машине VM2 происходят следующие вещи:
VM1 по протоколу ARP посылает пакет с запросом MAC-адреса VM2
Компонент VTEP1, размещенный на первом сервере VMware ESXi, инкапсулирует этот ARP-пакет в мультикаст-пакет, ассоциированный с виртуальной сетью с VNI 864
Все остальные VTEP, получающие этот пакет, добавляют ассоциацию VTEP1 и VM1 в свои VXLAN-таблицы
VTEP2 получает пакет, декапсулирует его и посылает броадкаст на портгруппы виртуальных коммутаторов, которым присвоен VXLAN c VNI 864
VM2, находящаяся в одной из этих портгрупп, получает ARP-пакет и отвечает своим MAC-адресом
VTEP2 на втором хосте ESXi формирует юникастовый пакет и отправляет его уже по существующему маршруту
VTEP1 декапсулирует пакет и передает его виртуальной машине VM1
Теперь обратимся к структуре VXLAN-пакета:
В нем есть следующие заголовки (слева-направо):
Outer MAC Header (Ethernet Header)
Он содержит следующие поля:
Destination Address - это MAC-адрес VTEP назначения, если этот VTEP является локальным по отношению к ближайшему роутеру, или MAC-адрес самого роутера, если VTEP находится за ним
VLAN - опциональное поле с тэгом VLAN (не обязательно в VXLAN-реализации)
Ethertype - тип пакета (для IPv4 установлен в 0×0800
Outer IP Header
Protocol - содержит значение 0×11, чтобы обозначить, что это UDP-пакет
Source IP - IP-адрес VTEP источника
Destination IP - IP-адрес VTEP назначения
UDP Header
Source Port - устанавливается передающим VTEP
VXLAN Port - порт VXLAN IANA (еще не определен)
UDP Checksum - контрольная сумма пакета на уровне VXLAN
VXLAN Header
VXLAN Flags - различные флаги
VNI - 24-битное поле с идентификатором VXLAN
Reserved - набор зарезервированных полей
Итак, VM1 по описанному выше алгоритму узнала MAC-адрес VM2, после чего начинает ей адресно слать пакеты примерно так:
VM1 посылает IP-пакет к VM2 с адреса 192.168.0.100 на адрес 192.168.0.101
VTEP1 берет пакет и инкапсулирует его, добавляя следующие заголовки:
VXLAN header с идентификатором VNI=864
Стандартный UDP-заголовок с назначенным портом (VXLAN IANA)
Стандартный IP-заголовок с IP-адресом VTEP назначения и признаком UDP-пакета
Стандартный MAC-заголовок с MAC-адресом следующего устройства (next hop). В данном случае это роутер с маком 00:10:11:FE:D8:D2, который будет использовать стандартную маршрутизацию пакета по IP-сети до VTEP2.
Далее VTEP2 получает такой пакет, распаковывает его (он узнает, что это VXLAN, так как это UDP-пакет) и вытаскивает VNI (864). Далее уже очищенный от обертки IP-пакет направляется к VM2, которая находится в портгруппе с VNI 864, перед чем VTEP убеждается, что она может получить пакет
Виртуальная машина VM2 получает IP-пакет очищенным, как обычный IP-пакет
Таким образом, технология VXLAN, поддерживаемая в программном обеспечении платформы виртализации и роутеров позволит расширить сферу применения виртуальных сетей VXLAN в виртуальных облачных средах, где виртуальная машина сможет существовать в различных географически разделенных датацентрах, а пользователи смогут распределять нагрузку между своим частным облаком и облаком сервис-провайдера, не прибегая к переконфигурации виртуальных машин в рамках их виртуальных сетей.
Что еще можно почитать на эту тему (источники данной статьи):