Практическое руководство с 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 x Intel(R) Xeon(R) Gold 6230R CPU
RAM - 8 x 32Gb
NIC - 2 x Intel X710 2x10GbE SFP+
NIC - 2 x Intel X710 2x10GbE SFP+
Тип трафика: UDP 1500B IMIX, EMIX
Состав EMIX профиля:
Гипервизор VMware ESXi / KVM:
CPU - 2 x Intel(R) Xeon(R) Gold 6230R CPU
RAM - 8 x 32Gb
NIC - 2 x Intel X710 2x10GbE SFP+
NIC - 2 x Intel X710 2x10GbE SFP+
PT NGFW / Linux host:
CPU – 14 vCPU
RAM – 32Gb
Интерфейсы в KVM: 6 х Virtio (Ethernet interface)
Интерфейсы в VMware ESXi: 6 х 82574L Gigabit Network Connection
Рассмотрим результаты нагрузочного тестирования PT NGFW, запущенного на VMware ESXi.
На графике «PPS Total» можно заметить, что при превышении 1,2 Mpp/s начинается расхождение между входящим (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 Mpp/s
Теперь рассмотрим аналогичный нагрузочный тест, но с ВМ, поднятой на KVM.
При подаче нагрузки на 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 к запуску.
Чтобы настроить PCI passthrough в KVM, необходимо предварительно определить на гипервизоре PCI адреса сетевых карт, которые будут подключаться к ВМ NGFW.
Для этого можно воспользоваться командой:
lspci | grep -i eth
либо
shw -c network -businfo
В результате мы получим следующий вывод и в рамках него определим карты, которые будем подключать к ВМ:
После этого можно воспользоваться virt manager для подключения PCI к PT NGFW.
В virt manager переходим в свойства ВМ и нажимаем «Add Hardware», далее в списке выбираем PCI-устройство.
Далее необходимо убедиться, что PCI устройство подключилось к ВМ, для этого необходимо внутри ВМ воспользоваться командой:
lspci | grep -i eth
В полученном выводе мы должны увидеть подключенные PCI:
После необходимо скорректировать конфиг NGFW, прописав корректные PCI-адреса для интерфейсов в параметре «addr»:
sudo nano /opt/pt-ngfw/ngfw-core/etc/config/pt-ngfw.conf
Далее перезапускаем службу NGFW:
sudo systemctl restart pt-ngfw-core
После чего мы можем проследить за процессом запуска PT NGFW посредствам вывода лога:
sudo tail -f /opt/pt-ngfw/ngfw-core/logs/ngfw.log
В результате запуска мы получим следующие сообщения, уведомляющие нас, что NGFW успешно запустился и увидел физические линки.
Для стабильной работы PT NGFW VM необходимо гарантировать выделение и резервирование ресурсов, чтобы виртуальная машина всегда получала назначенные мощности без конкуренции с другими VM или процессами гипервизора.
Для этого необходимо скорректировать XML виртуальной машины следующим образом:
sudo virsh edit «имя ВМ»
Прописываем в блок domain секции <cputune> и <memtune>:
Секция <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 Гб, что свидетельствует о значительных потерях из-за нехватки ресурсов. Это подчёркивает важность правильного закрепления и выделения ресурсов за ВМ для обеспечения стабильной и эффективной работы.
Для настройки PCI passthrough в ESXI необходимо выполнить следующее:
1. Включить поддержку passthrough в настройках EXSI.
На вкладке «Hardware» -> «PCI Devices» выбрать сетевую карту, которую мы будем подключать к ВМ, и нажать «Toggle passthrough».
После этого в поле «Passthrough» отобразится состояние «Active».
2. Подключить PCI Devices к ВМ.
Перейти в параметры ВМ и нажать «Add other device», в выпадающем списке выбрать «PCI Devices».
Далее выбрать необходимую карту.
Затем нужно подготовить PT NGFW к запуску, выполнив следующие шаги:
1. На ВМ убедиться, что PCI-устройства успешно подключены командой:
lspci | grep -i eth
либо
lshw -c network -businfo
2. Скорректировать файл конфигурации загрузчика GRUB, отключив поддержку Intel IOMMU:
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX="quiet splash intel_iommu=off“
sudo update-grub
3. Отредактировать pt-ngfw.conf:
sudo nano /opt/pt-ngfw/ngfw-core/etc/config/pt-ngfw.conf
Прописываем PCI-адреса для интерфейсов:
После этого в pt-ngfw.conf необходимо скорректировать «uio_driver», прописав «igb_uio».
4.Скачиваем пакет, содержащий модули ядра (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
5. Перезагружаем ВМ:
sudo reboot
6. Запускаем команду для отслеживания процесса запуска NGFW:
sudo tail -f /opt/pt-ngfw/ngfw-core/logs/ngfw.log
7. В результате запуска мы увидим, что NGFW подтянул интерфейсы и успешно запустился:
При работе с PT NGFW на платформе VMware, по аналогии с KVM, важно обеспечить гарантированное и приоритетное выделение ресурсов виртуальной машине. Для этого в свойствах VM необходимо настроить параметры CPU и RAM – Reservation, Limit и Shares.
Reservation устанавливает минимальное количество ресурсов, которые гарантированно будут выделены для виртуальной машины.
Limit устанавливает максимальное количество ресурсов, которое ВМ может использовать.
Shares определяет относительный приоритет доступа к ресурсам между ВМ.
Настройка этих параметров позволяет эффективно резервировать ресурсы за PT NGFW VM, обеспечивая её стабильную работу и необходимый уровень производительности в виртуальной среде VMware.
После того, как мы настроили PCI passthrough, на ВМ была подана нагрузка ~18Гб/c с использованием emix профиля.
В результатах нагрузочного тестирования не наблюдается расхождение между показателями RX и TX, что свидетельствует об успешном прохождении теста. Это означает, что ограничения виртуальных коммутаторов больше не являются узким местом, что позволяет достигать значительно более высоких показателей производительности PT NGFW VM.
PT NGFW использует проприетарный протокол для работы в кластере, что позволяет на data-интерфейсах обеих нод использовать одинаковую адресацию. Это значительно упрощает архитектуру сети, устраняя необходимость в использовании протокола VRRP.
Реализация кластера в PT NGFW кроме виртуального IP-адреса опционально предлагает возможность использовать виртуальный MAC-адрес. Такой сценарий позволяет адаптировать встраивание кластера в том числе и в подсеть с приложениями, которые не адаптированы к изменению MAC-адреса шлюза по умолчанию в следствии рассылки сообщений GARP.
Стоит отметить, что для корректной работы VMAC в некоторых средах виртуализации требуется соответствующая настройка гипервизора.
Рассмотрим ключевые шаги настройки Port Groups в VMware:
После настройки гипервизора необходимо активировать использование VMAC в системе управления межсетевыми экранами, указав соответствующую опцию в параметрах кластера, и применить политику.
Убедиться в том, что обе ноды используют одинаковые MAC-адреса на data-интерфейсах, можно посредствам CLI с помощью команды:
show interface
Ниже приведен вывод с обеих нод.
Для подтверждения правильности настройки выполним вывод ARP-таблицы на клиентском рабочем месте. В нем будет видно, что хост распознает NGFW по виртуальному MAC-адресу, что гарантирует прозрачное и стабильное сетевое взаимодействие в кластере.
При использовании PT NGFW в виртуальном исполнении необходимо учитывать следующие нюансы: