IPsec 加密卸载
此功能在 NVIDIA® BlueField®-2 DPU 和 NVIDIA® ConnectX®-6 Dx 以及 ConnectX-7 适配器(但不包括 ConnectX-6)的启用加密产品上受支持。
更新/未来的启用加密 DPU 和适配器产品世代也应支持此功能,除非其文档中明确声明不支持。
仅对于 BlueField-2 和 ConnectX-6 Dx 设备:如果您的目标应用程序将使用 100Gb/s 或更高的带宽,其中大部分带宽将分配给 IPsec 流量,请参阅NVIDIA BlueField-2 DPU 产品发行说明或NVIDIA ConnectX-6 Dx 适配器产品发行说明,以了解潜在的带宽限制。要访问相关的产品发行说明,请联系您的 NVIDIA 销售代表。
IPsec 加密卸载功能,也称为 IPsec 内联卸载或 IPsec 感知卸载功能,使用户能够将 IPsec 加密和解密操作卸载到硬件。
硬件实现仅支持 AES-GCM 加密方案。
要启用此功能,内核和适配器固件都需要支持。
要在内核中添加 IPsec 加密卸载支持,请相应地设置以下标志
CONFIG_XFRM_OFFLOAD=y CONFIG_INET_ESP_OFFLOAD=m CONFIG_INET6_ESP_OFFLOAD=m
注意这些标志在 RedHat 8 和 Ubuntu 18.04.0 中默认启用。
要检查固件是否支持 IPsec 加密卸载,请在 dmesg 中查找以下字符串
mlx5e: IPSec ESP acceleration enabled
要编程内联卸载安全关联 (SA),请在 ip xfrm state 命令中添加选项 offload dev <netdev interface> dir out/in,用于发送和接收 SA。
发送内联卸载 SA xfrm 命令示例
sudo ip xfrm state add src
192.168.1.64/24dst192.168.1.65/24proto esp spi0x46dc6204reqid0x46dc6204mode transport aead'rfc4106(gcm(aes))'0x60bd6c3eafba371a46411830fd56c53af93883261ed1fb26767820ff493f43ba35b0dcca128offload dev p4p1 dir out sel src192.168.1.64dst192.168.1.65
接收内联卸载 SA xfrm 命令示例
sudo ip xfrm state add src
192.168.1.65/24dst192.168.1.64/24proto esp spi0xaea0846creqid0xaea0846cmode transport aead'rfc4106(gcm(aes))'0x81d5c3167c912c1dd50dab0cb4b6d815b6ace8844304db362215a258cd19deda8f89deda128offload dev p4p1 dir in sel src192.168.1.65dst192.168.1.64
设置 xfrm 策略的示例
第一台服务器
+ sudo ip xfrm state add src
192.168.1.64/24dst192.168.1.65/24proto esp spi0x28f39549reqid0x28f39549mode transport aead'rfc4106(gcm(aes))'0x492e8ffe718a95a00c1893ea61afc64997f4732848ccfe6ea07db483175cb18de9ae411a128offload dev enp4s0 dir out sel src192.168.1.64dst192.168.1.65+ sudo ip xfrm state add src192.168.1.65/24dst192.168.1.64/24proto esp spi0x622a73b4reqid0x622a73b4mode transport aead'rfc4106(gcm(aes))'0x093bfee2212802d626716815f862da31bcc7d9c44cfe3ab8049e7604b2feb1254869d25b128offload dev enp4s0 dir in sel src192.168.1.65dst192.168.1.64+ sudo ip xfrm policy add src192.168.1.64dst192.168.1.65dir out tmpl src192.168.1.64/24dst192.168.1.65/24proto esp reqid0x28f39549mode transport + sudo ip xfrm policy add src192.168.1.65dst192.168.1.64dir in tmpl src192.168.1.65/24dst192.168.1.64/24proto esp reqid0x622a73b4mode transport + sudo ip xfrm policy add src192.168.1.65dst192.168.1.64dir fwd tmpl src192.168.1.65/24dst192.168.1.64/24proto esp reqid0x622a73b4mode transport第二台服务器
+ ssh -A -t root
@l-csi-0921d /bin/bash + set -e +'['0==1']'+ sudo ip xfrm state add src192.168.1.64/24dst192.168.1.65/24proto esp spi0x28f39549reqid0x28f39549mode transport aead'rfc4106(gcm(aes))'0x492e8ffe718a95a00c1893ea61afc64997f4732848ccfe6ea07db483175cb18de9ae411a128offload dev enp4s0 dir in sel src192.168.1.64dst192.168.1.65+ sudo ip xfrm state add src192.168.1.65/24dst192.168.1.64/24proto esp spi0x622a73b4reqid0x622a73b4mode transport aead'rfc4106(gcm(aes))'0x093bfee2212802d626716815f862da31bcc7d9c44cfe3ab8049e7604b2feb1254869d25b128offload dev enp4s0 dir out sel src192.168.1.65dst192.168.1.64+ sudo ip xfrm policy add src192.168.1.65dst192.168.1.64dir out tmpl src192.168.1.65/24dst192.168.1.64/24proto esp reqid0x622a73b4mode transport + sudo ip xfrm policy add src192.168.1.64dst192.168.1.65dir in tmpl src192.168.1.64/24dst192.168.1.65/24proto esp reqid0x28f39549mode transport + sudo ip xfrm policy add src192.168.1.64dst192.168.1.65dir fwd tmpl src192.168.1.64/24dst192.168.1.65/24proto esp reqid0x28f39549mode transport + echo'IPSec tunnel configured successfully'