
Практическое руководство по PT NGFW
Всем привет! Долгое время считалось, что виртуальные продукты не способны сравниться по производительности с аппаратными аналогами. Особенно остро эта проблема проявляется в сегменте NGFW, где высокий трафик и глубокий анализ требуют значительных ресурсов. Но так ли это на самом деле? Действительно ли виртуальный межсетевой экран не способен обеспечить производительность в 5 Гбит/с и более, необходимую для современных корпоративных сетей и высоконагруженных систем?
Данная статья призвана ответить на этот вопрос. На примере PT NGFW мы не только продемонстрируем потенциал виртуальных межсетевых экранов, но и дадим практические рекомендации по настройке виртуальной инфраструктуры, а также подсветим важные нюансы, которые стоит учесть при использовании NGFW в виртуальной среде.
Производительность NGFW в средах виртуализации
Начиная с версии PT NGFW 1.7 были зафиксированы показатели по производительности и технические характеристики виртуальных PT NGFW. Ознакомится с ними можно на официальном сайте Positive Technologies в разделе PT NGFW.
В документации отмечены некоторые показатели по производительности, выделенные звездочкой. В сноске к этим показателям указано, что для достижения заявленных значений необходимо правильно настроить среду виртуализации.
Давайте подробно рассмотрим, почему подготовка гипервизора имеет критическое значение и как настроить PT NGFW для эффективной работы в виртуальной среде.
Ограничения виртуальных коммутаторов в гипервизорах
Для оценки ограничений виртуальных коммутаторов было проведено нагрузочное тестирование PT NGFW и Linux-хоста при следующих условиях:
Генератор трафика:
CPU — 2 × Intel Xeon Gold 6230R CPU
RAM — 8 × 32 ГБ
NIC — 2 × Intel X710 2x10GbE SFP+
NIC — 2 × Intel X710 2x10GbE SFP+
Тип трафика: UDP 1500B IMIX, EMIX
Состав профиля EMIX:
Гипервизор VMware ESXi / KVM:
CPU — 2 × Intel Xeon Gold 6230R CPU
RAM — 8 × 32 ГБ
NIC — 2 × Intel X710 2x10GbE SFP+
NIC — 2 × Intel X710 2x10GbE SFP+
PT NGFW / Linux host:
CPU — 14 vCPU
RAM — 32 ГБ
Интерфейсы в KVM: 6 × Virtio (Ethernet interface)
Интерфейсы в VMware ESXi: 6 × 82574L Gigabit Network Connection
Рассмотрим результаты нагрузочного тестирования PT NGFW, запущенного на VMware ESXi.

На графике PPS Total можно заметить, что при превышении 1,2 Mpps начинается расхождение между входящим (RX) и исходящим (TX) трафиком.
При анализе утилизации CPU самой виртуальной машины PT NGFW видно, что процессор виртуальной машины нагружен на уровне около 12%.

Это позволяет сделать вывод, что vSwitch VMware имеет ограничение по количеству пакетов в секунду (PPS), которые он может обработать, а именно порядка 1,2 Mpps.
Данную цифру мы получаем из суммы RX и TX:
RX = 600 kp/s
TX = 600 kp/s
600 kp/s + 600 kp/s = 1,2 Mpps
Теперь рассмотрим аналогичный нагрузочный тест, но с ВМ, поднятой на KVM.
При подаче нагрузки на PT NGFW мы начинаем наблюдать потери после 1,2 Mpps. Анализируя график CPU, демонстрирующий нагрузку на сервер с гипервизором, можно увидеть несколько процессов, которые полностью утилизируют процессор гипервизора.


При этом уровень нагрузки на CPU виртуальной машины PT NGFW составляет порядка 8%.

Чтобы убедиться, что ограничение не связано с PT NGFW, проведем нагрузочный тест на Linux-хосте, используя стандартный стек TCP/IP.
По результатам тестирования видно, что мы также достигаем предела производительности виртуального коммутатора и полностью утилизируем процессор гипервизора.


Таким образом, виртуальный коммутатор на базе KVM также имеет ограничения, схожие с vSwitch VMware.
Если вернуться к даташиту PT NGFW VM, можно заметить, что начиная с модели VM-1050 указано количество PPS, превышающее те значения, которые удалось получить при нагрузочных тестах.

Одним из эффективных способов получить максимальную производительность PT NGFW в виртуальной среде является использование функции PCI passthrough. Эта технология позволяет напрямую передавать физические PCI-устройства виртуальной машине, обеспечивая ей прямой доступ к аппаратным ресурсам. Благодаря этому существенно снижаются задержки и накладные расходы, связанные с виртуализацией, что значительно повышает скорость обработки трафика и общую производительность PT NGFW.
Далее разберем, как настроить PCI passthrough в средах виртуализации и подготовить PT NGFW VM к запуску.
Настройка гипервизора
KVM, настройка PCI passthrough
Чтобы настроить PCI passthrough в KVM, необходимо предварительно определить на гипервизоре PCI-адреса сетевых карт, которые будут подключаться к виртуальной машине PT NGFW.
Для этого можно воспользоваться командой:
lspci | grep -i eth
либо
lshw -c network -businfo
В результате мы получим следующий вывод и в рамках него определим карты, которые будем подключать к ВМ:

После этого можно воспользоваться virt manager для подключения PCI к PT NGFW.
В virt manager переходим к свойствам ВМ и нажимаем Add Hardware, далее в списке выбираем PCI-устройство.

Далее необходимо убедиться, что PCI-устройство подключилось к ВМ, для этого необходимо внутри ВМ воспользоваться командой:
lspci | grep -i eth
В полученном выводе мы должны увидеть подключенные PCI:

После необходимо скорректировать конфиг PT NGFW, прописав корректные PCI-адреса для интерфейсов в параметре addr:
sudo nano /opt/pt-ngfw/ngfw-core/etc/config/pt-ngfw.conf

Далее перезапускаем службу PT NGFW:
sudo systemctl restart pt-ngfw-core
После этого мы можем проследить за процессом запуска PT NGFW посредством вывода журнала:
sudo tail -f /opt/pt-ngfw/ngfw-core/logs/ngfw.log
В результате запуска мы получим следующие сообщения, уведомляющие нас, что PT NGFW успешно запустился и «увидел» физические линки.

Резервирование ресурсов KVM
Для стабильной работы PT NGFW VM необходимо гарантировать выделение и резервирование ресурсов, чтобы виртуальная машина всегда получала назначенные мощности без конкуренции с другими ВМ или процессами гипервизора. Для этого необходимо скорректировать XML виртуальной машины следующим образом:
sudo virsh edit <Имя ВМ>
Прописываем в блок domain секции <cputune> и <memtune>:
<domain>
...
<memory unit='KiB'>33554432</memory>
<currentMemory unit='KiB'>33554432</currentMemory>
<memtune>
<min_guarantee unit='KiB'>33554432</min_guarantee>
</memtune>
<vcpu placement='static'>14</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='1'/>
<vcpupin vcpu='2' cpuset='2'/>
<vcpupin vcpu='3' cpuset='3'/>
<vcpupin vcpu='4' cpuset='4'/>
<vcpupin vcpu='5' cpuset='5'/>
<vcpupin vcpu='6' cpuset='6'/>
<vcpupin vcpu='7' cpuset='7'/>
<vcpupin vcpu='8' cpuset='8'/>
<vcpupin vcpu='9' cpuset='9'/>
<vcpupin vcpu='10' cpuset='10'/>
<vcpupin vcpu='11' cpuset='11'/>
<vcpupin vcpu='12' cpuset='12'/>
<vcpupin vcpu='13' cpuset='13'/>
</cputune>
Секция <memtune> используется для настройки управления памятью виртуальной машины.
Параметр <min_guarantee> устанавливает минимальный объем памяти, который будет гарантированно выделен ВМ.
Секция <cputune> используется для управления распределением процессорных ресурсов.
<vcpu> указывает количество виртуальных процессоров (VCPU), выделенных для ВМ. Параметр <vcpupin> привязывает каждый виртуальный процессор (VCPU) к конкретному физическому ядру (CPU).
Далее необходимо выключить ВМ и запустить ее:
sudo virsh shutdown <Имя ВМ>
sudo virsh start <Имя ВМ>
Таким образом, ВМ будет гарантированно получать необходимые ресурсы.
Если ресурсы не закреплены за виртуальной машиной, это может привести к потерям трафика при высокой нагрузке, когда гипервизор и другие ВМ активно используют общие вычислительные ресурсы. Рассмотрим результаты нагрузочного тестирования PT NGFW в условиях, когда ресурсов недостаточно.
Во время теста на PT NGFW VM была подана нагрузка в 8 ГБ, профиль EMIX. Анализ графиков CPU Usage и Handlers pools usage показал, что вычислительные ресурсы CPU использованы на 40–60%, при этом оперативная память была полностью исчерпана.


В итоге из подаваемых 8 ГБ трафика ВМ смогла обработать лишь около 2 ГБ, что свидетельствует о значительных потерях из-за нехватки ресурсов. Это подчеркивает важность правильного выделения и закрепления ресурсов за ВМ для обеспечения стабильной и эффективной работы.

ESXI, настройка PCI passthrough
Для настройки PCI passthrough в ESXI необходимо выполнить следующее:
Включить поддержку passthrough в параметрах EXSI.
На вкладке Hardware → PCI Devices выбрать сетевую карту, которую мы будем подключать к ВМ, и нажать Toggle passthrough.
После этого в поле Passthrough отобразится состояние Active.
Подключить PCI Devices к ВМ.
Перейти к параметрам ВМ и нажать Add other device, в раскрывающемся списке выбрать PCI Devices.
Далее выбрать необходимую карту.



Затем нужно подготовить PT NGFW к запуску, выполнив следующие шаги:
На ВМ убедиться, что PCI-устройства успешно подключены командой:
lspci | grep -i eth
либо
lshw -c network -businfo
Скорректировать файл конфигурации загрузчика GRUB, отключив поддержку Intel IOMMU:
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX="quiet splash intel_iommu=off“
sudo update-grub
Отредактировать pt-ngfw.conf:
sudo nano /opt/pt-ngfw/ngfw-core/etc/config/pt-ngfw.conf
Прописываем PCI-адреса для интерфейсов:
После этого в pt-ngfw.conf необходимо скорректировать uio_driver, прописав igb_uio.
Скачиваем пакет, содержащий модули ядра (kernel modules) для DPDK, и загружаем его в ядро Linux:
sudo apt install dpdk-kmods-dkms/oldstable
sudo insmod /usr/lib/modules/5.10.0-34-amd64/updates/dkms/igb_uio.ko
Перезагрузить ВМ:
sudo reboot
Запустить команду для отслеживания процесса запуска PT NGFW:
sudo tail -f /opt/pt-ngfw/ngfw-core/logs/ngfw.log
В результате мы увидим, что PT NGFW «подтянул» интерфейсы и успешно запустился:

Резервирование ресурсов ESXI
При работе с PT NGFW на платформе VMware, по аналогии с KVM, важно обеспечить гарантированное и приоритетное выделение ресурсов виртуальной машине. Для этого в свойствах ВМ необходимо настроить параметры CPU и RAM — Reservation, Limit и Shares.
Reservation устанавливает минимальное количество ресурсов, которые гарантированно будут выделены для виртуальной машины.
Limit устанавливает максимальное количество ресурсов, которое ВМ может использовать.
Shares определяет относительный приоритет доступа к ресурсам между ВМ.


Настройка этих параметров позволяет эффективно резервировать ресурсы за PT NGFW VM, обеспечивая ее стабильную работу и необходимый уровень производительности в виртуальной среде VMware.
Подача нагрузки на PT NGFW VM
После того как мы настроили PCI passthrough, на ВМ была подана нагрузка ~18 ГБ/c с использованием профиля EMIX.

В результатах нагрузочного тестирования не наблюдается расхождения между показателями RX и TX, что свидетельствует об успешном прохождении теста. Это означает, что ограничения виртуальных коммутаторов больше не являются узким местом, что позволяет достигать значительно более высоких показателей производительности PT NGFW VM.
Настройка кластера PT NGFW в средах виртуализации
PT NGFW использует проприетарный протокол для работы в кластере, что позволяет на data-интерфейсах обеих нод использовать одинаковую адресацию. Это значительно упрощает архитектуру сети, устраняя необходимость в использовании протокола VRRP.
Реализация кластера в PT NGFW кроме виртуального IP-адреса опционально предлагает возможность использовать виртуальный MAC-адрес. Такой сценарий позволяет адаптировать встраивание кластера среди прочего и в подсеть с приложениями, которые не адаптированы к изменению MAC-адреса шлюза по умолчанию вследствие рассылки сообщений GARP.
Стоит отметить, что для корректной работы VMAC в некоторых средах виртуализации требуется соответствующая настройка гипервизора.
Рассмотрим ключевые шаги настройки Port Groups в VMware:
Включить Promiscuous Mode. В этом режиме сетевой интерфейс принимает все пакеты, проходящие через сеть, независимо от их адресата. Обычно сетевой адаптер фильтрует трафик, пропуская только пакеты, адресованные собственному MAC-адресу, широковещательные или многоадресные пакеты. В режиме Promiscuous Mode устройство получает полный сетевой трафик, что необходимо для корректной работы VMAC, обеспечивая обработку пакетов, адресованных виртуальному MAC-адресу, который используется в кластере.
Выключить MAC Address Changes. Выключение этой опции предотвращает динамическое изменение MAC-адреса сетевого интерфейса. Это важно для стабильности сетевого взаимодействия, так как VMAC должен оставаться неизменным для корректного распознавания и маршрутизации трафика в кластере.
Включить Forget Transmits. Данная функция управляет кэшем MAC-адресов, обеспечивая очистку информации о недавно переданных пакетах. Это помогает избежать повторной передачи или неправильной маршрутизации пакетов при переключениях или изменениях в сетевой топологии.
После настройки гипервизора необходимо активировать использование VMAC в системе управления межсетевыми экранами, указав соответствующую опцию в параметрах кластера, и применить политику.

Убедиться в том, что обе ноды используют одинаковые MAC-адреса на data-интерфейсах, можно посредством CLI с помощью команды:
show interface
Ниже приведен вывод с обеих нод.


Для подтверждения правильности настройки выполним вывод ARP-таблицы на клиентском рабочем месте. В нем будет видно, что хост распознает PT NGFW по виртуальному MAC-адресу: это гарантирует прозрачное и стабильное сетевое взаимодействие в кластере.

Заключение
При использовании PT NGFW в виртуальном исполнении необходимо учитывать следующие нюансы:
При использовании функции PCI passthrough необходима правильная настройка драйверов в гостевой операционной системе. Например, в среде ESXi потребовалось внести изменения в драйвер uio_driver для запуска PT NGFW — несмотря на то, что в KVM и ESXi использовались одинаковые сетевые карты Intel X710. Выбор драйвера зависит от среды виртуализации, типа сетевых карт и метода проброса в виртуальную машину, будь то PCI passthrough или SR-IOV.
Выбор сетевых карт для подключения к PT NGFW. PT NGFW работает на базе DPDK, который имеет список поддерживаемых карт. С ним можно ознакомиться на официальном сайте DPDK.
Ограничения сред виртуализации. Например, в KVM, работающей на Debian 12 с ядром 6.1.0-33-amd64, возникла проблема: виртуальная машина перестала запускаться после подключения PCI Devices. Выяснилось, что данная версия ядра содержит баг, который не позволяет использовать функцию PCI passthrough. В этом случае решение заключалось в даунгрейде до версии ядра 6.1.0-32-amd64. Делюсь ссылкой на форум, где данная проблема подсвечивалась.
Сложности с обновлением и обслуживанием системы виртуализации. Прямой доступ к PCI Devices может ограничить использование таких функций, как vMotion в VMware, что может повлиять на гибкость и управляемость виртуальной инфраструктуры.
Необходимость в резервировании ресурсов за ВМ. PT NGFW VM работает в общем пуле ресурсов физического хоста, который одновременно обслуживает множество ВМ. Без резервирования ресурсов PT NGFW может столкнуться с нехваткой CPU или памяти в моменты пиковых нагрузок других ВМ, что приведет к снижению производительности, увеличению задержек, сетевым сбоям и другим негативным последствиям.