VXLAN

VXLAN (Virtual Extensible LAN) — технология сетевой виртуализации, предназначенная для преодоления ограничений масштабируемости при развёртывании крупных облачных инфраструктур. VXLAN реализует инкапсуляцию Ethernet-кадров уровня 2 модели OSI в UDP-дейтаграммы уровня 4. Стандартный UDP-порт, выделенный IANA для VXLAN, — 4789.

Туннелирование осуществляется между конечными точками VXLAN (VTEP — VXLAN Tunnel Endpoints), которые могут быть реализованы как на физических, так и на виртуальных коммутационных портах и отвечают за инкапсуляцию и декапсуляцию трафика.

Для корректной работы VXLAN необходимо:

  • открыть UDP-порт 4789 на межсетевом экране;

  • установить значение MTU не менее 1554 байт на всех интерфейсах, участвующих в передаче VXLAN-трафика.

Общие параментры

  1. Назначение IP-адресов интерфейсу:

set interfaces vxlan <vxlanN> address <address>

где:

  • <vxlanN> - имя VXLAN-интерфейса, где «N» — числовой идентификатор, задаваемый пользователем;

  • <address> - IP-адрес интерфейса. Допускается многократное указание адресов в форматах: IPv4 - <x.x.x.x/x>, IPv6 - <h:h:h:h:h:h:h:h/x>.

  1. Указание описания интерфейса:

set interfaces vxlan <vxlanN> description <description>

где <description> - текстовое описание vxlan интерфейса.

  1. Отключение интерфейса:

set interfaces vxlan <vxlanN> disable

Команда переводит интерфейс в административно выключенное состояние (A/D). Конфигурация сохраняется.

  1. Назначение пользовательского MAC-адреса:

set interfaces vxlan <vxlanN> mac <xx:xx:xx:xx:xx:xx>

где <xx:xx:xx:xx:xx:xx> - пользовательский MAC-адрес.

  1. Установка значения MTU для интерфейса:

set interfaces vxlan <vxlanN> mtu <mtu>

где <mtu> - размер максимальной передаваемой единицы (MTU) в байтах. Возможно указать значения в диапазоне от «1200» до «16000». По умолчанию используется значение «1500».

  1. Задание идентификатора VXLAN-сегмента (VNI):

set interfaces vxlan <vxlanN> vni <number>

где <number> - 24-битное значение, уникально определяющие сегмент. Возможно указать значения в диапазоне от «0» до «16777214».

Позволяет одновременно использовать до 16 миллионов VXLAN-сегментов в пределах одного административного домена.

  1. Указание UDP-порта удалённой VTEP:

set interfaces vxlan <vxlanN> port <port>

где <port> - номер UDP-порта. Возможно указать значения в диапазоне от «1» до «65535». Значение по умолчанию - «4789».

  1. Указание исходного IP-адреса транспортной сети:

set interfaces vxlan <vxlanN> source-address <address>

где <address> - IP-адрес в формате IPv4 (x.x.x.x) или IPv6 (h:h:h:h:h:h:h:h). Обязателен при развёртывании VXLAN через L2VPN/EVPN.

  1. Включение поддержки VXLAN-GPE:

set interfaces vxlan <vxlanN> gpe

При включении данной опции VXLAN-трафик инкапсулируется с использованием формата VXLAN-GPE (RFC 9184), что позволяет транспортировать не только Ethernet-кадры, но и другие типы сетевых пакетов (например, IPv4, IPv6, MPLS) через VXLAN-туннель.

Примечание

Функция доступна только при включённом внешнем (external) режиме.

  1. Включение внешнего (external) режима:

set interfaces vxlan <vxlanN> parameters external

В данном режиме управление инкапсуляцией и маршрутизацией VXLAN-трафика передаётся внешнему агенту (например, контроллеру или пользовательскому dataplane).

  1. Включение подавления ARP/NDP-запросов:

set interfaces vxlan <vxlanN> parameters neighbor-suppress

При активации устройство не пересылает ARP- (IPv4) или NDP- (IPv6) запросы, если запрашиваемый MAC-адрес уже присутствует в локальной FDB. Вместо этого устройство само генерирует и отправляет ответ от имени целевого узла.

  1. Отключение динамического обучения FDB:

set interfaces vxlan <vxlanN> parameters nolearning

Запрещает автоматическое добавление MAC-адресов в таблицу FDB на основе входящего трафика. Все записи должны быть заданы статически или предоставлены внешним контроллером (например, через EVPN).

  1. Включение фильтрации по VNI:

set interfaces vxlan <vxlanN> parameters vni-filter

При активации принимаются только те VXLAN-пакеты, у которых VNI присутствует в предварительно настроенной таблице разрешённых идентификаторов. Остальные пакеты отбрасываются.

Примечание

При отсутствии настроенной таблицы разрешённых VNI интерфейс может не принимать трафик. Необходимо обеспечить наличие механизма управления VNI (например, EVPN).

  1. Настройка бита DF в IP-заголовке транспортного пакета:

set interfaces vxlan <vxlanN> parameters ip df <mode>

где <mode> - режим обработки бита Don’t Fragment. Возможно указать следующие значения:

  • set — всегда устанавливать бит DF в 1. Инкапсулированные пакеты не могут быть фрагментированы промежуточными маршрутизаторами. Если MTU недостаточно, пакет будет отброшен, и отправителю может быть возвращено сообщение ICMP «Fragmentation Needed».

  • unset — всегда сбрасывать бит DF в 0 (значение по умолчанию). Разрешает фрагментацию инкапсулированных пакетов на транспортном уровне при необходимости.

  • inherit — копировать значение бита DF из исходного (внутреннего) IP-заголовка инкапсулируемого пакета. Поведение фрагментации наследуется от оригинального трафика.

  1. Установка значения поля TOS:

set interfaces vxlan <vxlanN> parameters ip tos <value>

где <value> - целое число в диапазоне от «0» до «99», представляющее значение TOS.

  1. Установка значения TTL:

set interfaces vxlan <vxlanN> parameters ip ttl <value>

где <value> - значение Time to Live:

  • 0 - включает режим наследования: значение TTL копируется из исходного (внутреннего) IP-заголовка инкапсулируемого пакета;

  • Значение в диапазоне от «1» до «255» - устанавливает фиксированное значение TTL для всех исходящих инкапсулированных пакетов, независимо от содержимого внутреннего трафика.

По умолчанию используется значение «16».

  1. Установка Flow Label для IPv6:

set interfaces vxlan <vxlanN> parameters ipv6 flowlabel <value>

где <value> - значение поля Flow Label. Возможно указать следующие значения:

  • inherit — копировать значение Flow Label из исходного (внутреннего) IPv6-заголовка;

  • 0x0–0xFFFFF — задать фиксированное шестнадцатеричное значение в диапазоне от «0x0» до «0xFFFFF». Это значение будет использоваться во всех исходящих инкапсулированных IPv6-пакетах, независимо от содержимого внутреннего трафика.

  1. Перенаправление трафика на другой интерфейс:

set interfaces vxlan <vxlanN> redirect <interface-name>

где <interface-name> - имя существующего сетевого интерфейса назначения, на который будет перенаправлен трафик.

Используется для передачи трафика внешним анализаторам или пользовательским dataplane-приложениям без обработки в стандартном сетевом стеке.

  1. Привязка интерфейса к VRF:

set interfaces vxlan <vxlanN> vrf <vrf-name>

где <vrf-name> - имя существующего VRF-экземпляра в системе.

Режимы туннеля

VXLAN поддерживает два режима установления туннелей: multicast и unicast.

Multicast-режим

Активируется при указании multicast-группы:

set interfaces vxlan <vxlanN> group <multicast-address>

где <multicast-address> - IPv4 (x.x.x.x) или IPv6 (h:h:h:h:h:h:h:h) multicast-адрес.

Дополнительно требуется указать интерфейс источника:

set interfaces vxlan <vxlanN> source-interface <interface>

где <interface> - имя физического или логического интерфейса, через который передаётся VXLAN-трафик. Параметр обязателен в multicast-режиме.

Unicast-режим

Активируется при указании адреса удалённой VTEP:

set interfaces vxlan <vxlanN> remote <address>

где <address> - IPv4 (x.x.x.x) или IPv6 (h:h:h:h:h:h:h:h) адрес удалённой стороны.

Single VXLAN Device (SVD)

FRRouting (FRR) поддерживает метод настройки VLAN–VNI-ассоциаций через единый контейнерный VXLAN-интерфейс — Single VXLAN Device (SVD). Это позволяет назначать несколько VLAN–VNI-сопоставлений одному интерфейсу, устраняя необходимость создания отдельного VXLAN-интерфейса на каждый VNI и повышая масштабируемость.

Конфигурация:

set interfaces vxlan <vxlanN> vlan-to-vni <vlan-id> vni <vni-id>

где:

  • <vlan-id> - идентификатор VLAN в диапазоне от «0» до «4094» или диапазон в формате <start-end> (например, 100-200);

  • <vni-id> - идентификатор VLAN в диапазоне от «0» до «16777214» или диапазон в формате <start-end> (например, 10100-10200).

Параметры маршрутизации IPv4

  1. Корректировка MSS:

set interfaces vxlan <vxlanN> ip adjust-mss <mss | clamp-mss-to-pmtu>

где:

  • <mss> - фиксированное значение MSS в диапазоне от «536» до «65535».

  • <clamp-mss-to-pmtu> - автоматически вычисляет и устанавливает MSS на основе Path MTU (PMTU) для каждого соединения. MSS = PMTU − 40 (20 байт IP + 20 байт TCP).

  1. Тайм-аут ARP-кэша:

set interfaces vxlan <vxlanN> ip arp-cache-timeout <timeout>

где <timeout> - значение тайм-аута записи в ARP-кэш в секундах. Возможно указать значение в диапазоне от «1» до «86400». По умолчанию используется значение «30».

  1. Отключение ARP-фильтрации:

set interfaces vxlan <vxlanN> ip disable-arp-filter

Разрешает ответ на ARP-запросы любым интерфейсом, на котором настроен запрашиваемый IP-адрес.

  1. Отключение IP-маршрутизации:

set interfaces vxlan <vxlanN> ip disable-forwarding

Переводит интерфейс в режим хоста.

  1. Разрешение направленной широковещательной пересылки:

set interfaces vxlan <vxlanN> ip enable-directed-broadcast

При активации данной опции пакеты, адресованные широковещательному адресу подсети, связанной с интерфейсом, будут рассылаться всем хостам в этой подсети.

  1. Автоматическое создание записей ARP по GARP:

set interfaces vxlan <vxlanN> ip enable-arp-accept

Разрешает автоматическое создание новых записей в ARP-таблице интерфейса vxlan при получении gratuitous ARP-пакетов (GARP). Эта функция ускоряет обновление ARP-кэша при динамических изменениях в сети.

  1. Ограниченный выбор исходного адреса в ARP-запросах:

set interfaces vxlan <vxlanN> ip enable-arp-announce

Если параметр не задан, используется любой локальный адрес, который настроен на любом интерфейсе. Если параметр установлен, рекомендуется избегать использования локальных адресов, которые не входят в подсеть цели для данного интерфейса. Этот режим полезен, когда целевые узлы, доступные через данный интерфейс, требуют, чтобы IP-адрес источника в ARP-запросах был частью их логической сети, настроенной на принимающем интерфейсе. При генерации запроса система проверяем все подсети, включающие целевой IP-адрес, и сохраняем адрес источника, если он принадлежит такой подсети. Если подходящей подсети не найдено, система выбирает адрес источника в соответствии с правилами для уровня 2.

  1. Игнорирование ARP-запросов для чужих адресов:

set interfaces vxlan <vxlanN> ip enable-arp-ignore

Ограничивает ответы на входящие ARP-запросы только в том случае, если запрашиваемый IP-адрес назначен непосредственно на интерфейс, через который получен ARP-запрос. При активации данной опции система игнорирует ARP-запросы, направленные на локальные IP-адреса, назначенные на других интерфейсах. Если параметр отключён (по умолчанию), ответ будет получен для любого локального целевого IP-адреса, настроенного на любом интерфейсе.

  1. Включение Proxy ARP:

set interfaces vxlan <vxlanN> ip enable-proxy-arp

При активации система будет отвечать на ARP-запросы, направленные на IP-адреса, не назначенные локально на этом интерфейсе, но доступные через маршрутизацию на другие интерфейсы или подсети. В ответе указывается MAC-адрес интерфейса vxlan, что позволяет отправителю направлять трафик на этот MAC, после чего система пересылает пакеты по назначению.

  1. Включение Private VLAN Proxy ARP:

set interfaces vxlan <vxlanN> ip proxy-arp-pvlan

Эта функция позволяет системе отвечать на ARP-запросы отправителю на тот же интерфейс, с которого был получен запрос, даже если запрашиваемый IP-адрес принадлежит другому хосту в той же подсети. Это необходимо для поддержки сценариев изоляции портов (port isolation), при которых хосты в одном L2-сегменте не могут напрямую обмениваться трафиком, но могут взаимодействовать через центральный маршрутизатор (например, шлюз).

Необязательно использовать вместе с proxy_arp.

  1. Проверка источника по обратному пути (RPF):

set interfaces vxlan <vxlanN> ip source-validation <strict | loose | disable>

где <strict | loose | disable> - режим проверки источника. Возможно указать следующие значения:

  • strict - каждый входящий пакет проверяется по FIB, и принимается только если пришёл через оптимальный (наилучший) обратный путь, определённый в таблице маршрутизации. Все пакеты, не удовлетворяющие этому условию, автоматически отбрасываются.

  • loose - адрес источника каждого входящего пакета также проверяется по FIB, и если адрес источника не достижим ни через один интерфейс, проверка пакета будет неудачной.

  • disable - нет проверки источника. Все пакеты принимаются независимо от маршрутизации.

Рекомендуется strict для защиты от IP-спуфинга.

Параметры маршрутизации IPv6

  1. Настройка DAD:

set interfaces vxlan <vxlanN> ipv6 accept-dad <mode>

где <mode> - режим приёма DAD. Возможно указать следующие значения:

  • 0 - DAD отключён. Адреса (включая link-local) активируются немедленно без проверки дублирования.

  • 1 - DAD включён (по умолчанию). Система отправляет Neighbor Solicitation (NS) для проверки уникальности адреса. Если получен ответ — адрес не активируется.

  • 2 - DAD включён с дополнительной проверкой MAC-адреса. Если обнаружен дубликат link-local-адреса, сгенерированного на основе MAC-адреса интерфейса, IPv6 на интерфейсе полностью отключается.

DAD — обязательная процедура в IPv6 (RFC 4862), предназначенная для проверки уникальности адреса в пределах локального канального сегмента до его активации.

  1. Включение поддержки Stateless Address Autoconfiguration (SLAAC):

set interfaces vxlan <vxlanN> ipv6 address autoconf

При активации интерфейс автоматически конфигурирует свои IPv6-адреса на основе Router Advertisement (RA) сообщений, получаемых от локальных IPv6-маршрутизаторов через протокол Neighbor Discovery Protocol (NDP).

Примечание

Данный метод отключает IPv6-маршрутизацию (forwarding) на интерфейсе vxlan, переводя его в режим хоста. Это требование RFC 4862: устройства, использующие SLAAC, не должны одновременно быть маршрутизаторами.

  1. Получить IPv6-адрес на VXLAN-интерфейс с использованием метода EUI-64 (RFC 4291):

set interfaces vxlan <vxlanN> ipv6 address eui64 <prefix>

где <prefix> - cеть IPv6 в формате <h:h:h:h:h:h:h:h/64>.

  1. Отключение link-local-адреса:

set interfaces vxlan <vxlanN> ipv6 address no-default-link-local

По умолчанию ядро системы присваивает link-local-адрес каждому IPv6-включённому интерфейсу; данная команда отключает это поведение.

  1. Корректировка MSS для IPv6:

set interfaces vxlan <vxlanN> ipv6 adjust-mss <mss | clamp-mss-to-pmtu>

где:

  • <mss> - фиксированное значение MSS в диапазоне от «536» до «65535».

  • <clamp-mss-to-pmtu> - автоматически вычисляет и устанавливает MSS на основе Path MTU (PMTU) для каждого соединения. MSS = PMTU − 40 (20 байт IP + 20 байт TCP).

  1. Базовое время достижимости соседей:

set interfaces vxlan <vxlanN> ipv6 base-reachable-time <seconds>

где <seconds> - значение в диапазоне от «1» до «86400» секунд (1 секунда – 24 часа). Значение по умолчание - «30». Это значение определяет, как долго система считает, что MAC-адрес соседа (полученный через NDP) остаётся действительным, прежде чем потребуется повторная проверка его доступности.

  1. Отключение IPv6-маршрутизации:

set interfaces vxlan <vxlanN> ipv6 disable-forwarding

После выполнения команды интерфейс переходит в режим хоста (host mode): система будет обрабатывать только пакеты, адресованные локально (на назначенные IPv6-адреса), и не будет пересылать через этот интерфейс трафик между другими узлами.

  1. Количество DAD-запросов:

set interfaces vxlan <vxlanN> ipv6 dup-addr-detect-transmits <n>

где <n> - целое число:

  • 0 - отключает DAD полностью; адрес активируется немедленно без проверки;

  • 1-n - количество NS-пакетов, отправляемых с интервалом ~1 секунда.

По умолчанию используется значение «1».

  1. Проверка источника IPv6 (RPF):

set interfaces vxlan <vxlanN> ipv6 source-validation <strict | loose | disable>

где <strict | loose | disable> - режим проверки источника. Возможно указать следующие значения:

  • strict - каждый входящий пакет проверяется по FIB, и принимается только если пришёл через оптимальный (наилучший) обратный путь, определённый в таблице маршрутизации. Все пакеты, не удовлетворяющие этому условию, автоматически отбрасываются.

  • loose - адрес источника каждого входящего пакета также проверяется по FIB, и если адрес источника не достижим ни через один интерфейс, проверка пакета будет неудачной.

  • disable - нет проверки источника. Все пакеты принимаются независимо от маршрутизации.

В настоящее время в RFC 3704 рекомендуется включать strict режим для предотвращения подмены IP адресов в результате DDos атак. При использовании асимметричной или другой сложной маршрутизации рекомендуется использовать loose режим.

SPAN

Функция зеркалирования интерфейсов в ARMA Стена позволяет копировать входящий и исходящий трафик интерфейса на другой интерфейс. Функция используется для анализа трафика и должна поддерживаться принимающим устройством, например, коммутатором.

Для настройки зеркалирования интерфейсов в системе ARMA Стена используется опция «mirror». При этом необходимо указать зеркальный порт как для входящего, так и для исходящего трафика.

Для настройки зеркалирования интерфейса для входящего трафика необходимо ввести команду:

set interfaces vxlan <vxlanN> mirror ingress <inbound-interface>

где <inbound-interface> - имя интерфейса, на который будет дублироваться весь входящий трафик. Интерфейс должен быть определён в системе.

Для настройки зеркалирования интерфейса для исходящего трафика необходимо ввести команду:

set interfaces vxlan <vxlanN> mirror egress <outbound-interface>

где <outbound-interface> - имя интерфейса, на который будет дублироваться весь исходящий трафик. Интерфейс должен быть определён в системе.

Пример настройки VXLAN

Для демонстрации настройки VXLAN-туннеля используется тестовая топология, представленная на рисунке (см. Рисунок – VXLAN).

В примере реализована базовая конфигурация точечного (unicast) VXLAN-туннеля между двумя узлами ARMA Стена, обеспечивающего прозрачное L2-соединение между двумя географически разнесёнными сегментами локальной сети.

Такой подход позволяет расширить VLAN через IP-инфраструктуру (overlay-сеть) без изменения конфигурации конечных хостов. Подобные схемы широко применяются при объединении дата-центров, подключении удалённых филиалов или создании изолированных tenant-сетей в мультиарендных средах.

../../../../../_images/ngfw.r.cli.interfaces.vxlan_7.1.png

Рисунок – VXLAN

Конфигурация узлов

ARMA Стена 1:

set interfaces ethernet eth0 address '100.96.0.2/30'
set protocols static route 0.0.0.0/0 next-hop 100.96.0.1
set interfaces vxlan vxlan1 remote '100.96.1.2'
set interfaces vxlan vxlan1 vni '300'
set interfaces bridge br0 member interface eth1
set interfaces bridge br0 member interface vxlan1

ARMA Стена 2:

set interfaces ethernet eth0 address '100.96.1.2/30'
set protocols static route 0.0.0.0/0 next-hop 100.96.1.1
set interfaces vxlan vxlan1 remote '100.96.0.2'
set interfaces vxlan vxlan1 vni '300'
set interfaces bridge br0 member interface eth1
set interfaces bridge br0 member interface vxlan1

Интерфейсы eth0 используются как транспортные (underlay) для передачи инкапсулированного VXLAN-трафика. Параметр remote задаёт IP-адрес удалённой VTEP, что активирует unicast-режим. Общий VNI (300) обеспечивает принадлежность обоих узлов к одному overlay-сегменту. L2-мост br0 объединяет локальный клиентский интерфейс (eth1) и VXLAN-интерфейс (vxlan1), создавая единый broadcast-домен.

Проверка соединения

Для проверки работоспособности туннеля выполняется ICMP-запрос между конечными хостами Client1 (192.168.1.2) и Client2 (192.168.1.3).

Выполнить ICMP запрос на Client1 - ping 192.168.1.3

Соединение считается установленным, если ICMP-запросы успешно проходят между хостами. Успешная проверка подтверждает корректность настройки VXLAN-туннеля, включая инкапсуляцию/декапсуляцию трафика, сопоставление VNI и работу L2-моста на обоих узлах.