Resumen
Quería realizar una prueba de carga con un poco de tráfico de paquetes cortos, así que probé Pktgen-DPDK.
Es necesario habilitar IOMMU de antemano. Notas sobre la habilitación de IOMMU
Entorno
Entorno objetivo | Versión |
---|---|
Ubuntu | 22.04 |
DPDK | 23.11.1 |
Pktgen-DPDK | rama principal |
NIC | Intel X520 DA2 |
Instalación de paquetes necesarios
Instalación de dependencias
sudo apt-get update sudo apt-get install -y git build-essential libnuma-dev python3-pyelftools linux-headers-$(uname -r) meson ninja-build
Construcción e instalación de DPDK
Descarga de la biblioteca DPDK
- Descarga de DPDK Vamos a utilizar la versión más reciente del LTS, 23.11.1.
wget https://fast.dpdk.org/rel/dpdk-23.11.1.tar.xz tar xf dpdk-23.11.1.tar.xz cd dpdk-stable-23.11.1
Construcción de DPDK
meson setup build ninja -C build
Instalación
ninja -C build install ldconfig
Configuración de Hugepages
Configuración de Hugepages DPDK utiliza páginas de memoria grandes (Hugepages) para lograr un alto rendimiento.
echo "vm.nr_hugepages=1024" > /etc/sysctl.d/90-hugapage.conf sysctl --system
Construcción e instalación de Pktgen-DPDK
git clone https://github.com/pktgen/Pktgen-DPDK.git cd Pktgen-DPDK
Construcción
meson setup build ninja -C build
Instalación
ninja -C build install
Vínculo de la interfaz de red
Verificación de la interfaz de red
dpdk-devbind.py --status Dispositivos de red utilizando el controlador del kernel =================================== 0000:07:00.0 'RTL8111/8168/8211/8411 Controlador Ethernet Gigabit PCI Express 8168' if=enp7s0 drv=r8169 unused= 0000:09:00.0 '82599ES Conexión de Red SFI/SFP+ de 10 Gigabits 10fb' if=enp9s0f0 drv=ixgbe unused= 0000:09:00.1 '82599ES Conexión de Red SFI/SFP+ de 10 Gigabits 10fb' if=enp9s0f1 drv=ixgbe unused=
Vínculo de vfio-pci
dpdk-devbind.py --bind=vfio-pci 0000:09:00.1
En caso de
Error: Driver 'vfio-pci' is not loaded.
Cargar el controlador vfio-pcimodprobe vfio-pci
Verificar si se pudo vincular
dpdk-devbind.py --status Dispositivos de red utilizando el controlador compatible con DPDK ============================================ 0000:09:00.1 '82599ES Conexión de Red SFI/SFP+ de 10 Gigabits 10fb' drv=vfio-pci unused=ixgbe
El controlador debe estar como drv=vfio-pci, así que está bien.
Uso de Pktgen-DPDK
Iniciando Pktgen-DPDK
pktgen -l 0-1 -n 2 --proc-type auto --socket-mem 512 -- -P -m "[1-2].0"
Opciones de DPDK
- -l 0-1
- Utiliza los núcleos lógicos 0-1 en DPDK.
- -n 2
- Utiliza 2 canales de memoria.
- –proc-type auto
- Determina automáticamente el tipo de proceso.
- –socket-mem 512
- Asigna 512 MB al socket 0.
- -l 0-1
Opciones de pktgen
- -P
- Habilita el modo promiscuo.
- -m “[1-2].0”
- Especifica la asignación de núcleos para cada puerto. En este caso, asigna los puertos 1 y 2 al núcleo 0.
- -P
Enviando paquetes en la práctica
reset 0
set 0 dst mac XX:XX:XX:XX:XX:XX // Dirección MAC de destino
set 0 dst ip 192.168.3.2 // Dirección IP de destino
set 0 src ip 192.168.3.1/24 // Dirección IP de origen
set 0 size 64 // Tamaño de carga útil
start 0
Por último
Con esto, deberíamos ser capaces de enviar paquetes cortos a alrededor de 10Mpps desde el NIC.
¡Con esto podemos recrear una situación similar a un DDoS! Así que probé Pktgen-DPDK.