DOCA 文档 v2.10.0

IPsec 数据包卸载

注意

此功能在启用加密功能的 BlueField-2 DPU 产品以及 ConnectX-6 Dx、ConnectX-6 Lx 和 ConnectX-7 网卡上受支持。请注意,ConnectX-6 网卡不支持此功能。

更新/未来的启用加密功能的 DPU 和适配器产品系列也应支持此功能,除非其文档中另有明确说明。

注意

当仅使用 NVIDIA® BlueField®-2 DPU 和 NVIDIA® ConnectX®-6 Dx 适配器时:如果您的目标应用程序利用 100Gb/s 或更高的带宽,其中大部分带宽分配给 IPsec 流量,请参阅相关的 DPU 或适配器卡产品发行说明,以了解潜在的带宽限制。要访问发行说明,请访问 NVIDIA 网络的文档网站,或联系您的 NVIDIA 销售代表。

注意

ConnectX-6 Dx 适配器仅支持完全卸载:加密叠加(其中 Hypervisor 控制 IPsec 卸载 - 例如,参见 OVS IPsec - https://docs.openvswitch.org/en/latest/tutorials/ipsec/),在装有 NVIDIA 驱动程序的 Linux 操作系统中。

注意

此功能需要 Linux 内核 v6.6 或更高版本。

注意

当仅由 VM(VF 功能)控制时,IPsec 隧道模式在 alpha 级别受支持。

此功能旨在在 switchdev 模式下启用 IPsec 完全卸载。ip-xfrm 命令用于配置 IPsec 状态和策略,它类似于传统模式配置。但是,在这种模式下使用完全卸载有一些限制

  1. 仅支持 IPsec 传输模式和隧道模式。

  2. 如果存在任何已卸载的 TC 规则,则不允许卸载第一个 IPsec TX 状态/策略,第一个 RX 状态/策略也适用。更具体地说,必须先创建 IPsec RX/TX 表,然后才能卸载任何 TC 规则。因此,通常的做法是在添加任何 TC 规则之前配置 IPsec 规则。

以下是使用 VXLan 隧道的 IPsec 配置示例

  • 启用 switchdev 模式

    复制
    已复制!
                

    echo 1 > /sys/class/net/$PF0 /device/sriov_numvfs echo 0000:08:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind devlink dev param set pci/0000:08:00.0 name flow_steering_mode value dmfs cmode runtime devlink dev eswitch set pci/0000:08:00.0 mode switchdev echo 0000:08:00.2 > /sys/bus/pci/drivers/mlx5_core/bind

  • 配置 PF/VF/REP 网络设备,并将 VF 放置在命名空间中

    复制
    已复制!
                

    ifconfig $PF $LOCAL_TUN/16 up ip l set dev $PF mtu 2000   ifconfig $REP up ip netns add ns0 ip link set dev $VF netns ns0 ip netns exec ns0 ifconfig $VF $IP/16 up

  • 配置 IPsec 状态和策略

    复制
    已复制!
                

    ip xfrm state add src $LOCAL_TUN/16 dst $REMOTE_IP/16 proto esp spi 0xb29ed314 reqid 0xb29ed314 mode transport aead 'rfc4106(gcm(aes))' 0x20f01f80a26f633d85617465686c32552c92c42f 128 offload packet dev $PF dir out sel src $LOCAL_TUN/16 dst $REMOTE_IP/16 flag esn replay-window 64 ip xfrm state add src $REMOTE_IP/16 dst $LOCAL_TUN/16 proto esp spi 0xc35aa26e reqid 0xc35aa26e mode transport aead 'rfc4106(gcm(aes))' 0x6cb228189b4c6e82e66e46920a2cde39187de4ba 128 offload packet dev $PF dir in sel src $REMOTE_IP/16 dst $LOCAL_TUN/16 flag esn replay-window 64   ip xfrm policy add src $LOCAL_TUN dst $REMOTE_IP offload packet dev $PF dir out tmpl src $LOCAL_TUN/16 dst $REMOTE_IP/16 proto esp reqid 0xb29ed314 mode transport priority 12 ip xfrm policy add src $REMOTE_IP dst $LOCAL_TUN offload packet dev $PF dir in tmpl src $REMOTE_IP/16 dst $LOCAL_TUN/16 proto esp reqid 0xc35aa26e mode transport priority 12

  • 配置 Openvswitch

    复制
    已复制!
                

    ovs-vsctl add-br br-ovs ovs-vsctl add-port br-ovs $REP ovs-vsctl add-port br-ovs vxlan1 -- set interface vxlan1 type=vxlan options:local_ip=$LOCAL_TUN options:remote_ip=$REMOTE_IP options:key=$VXLAN_ID options:dst_port=4789

与软件 IPsec 对应项相比,此用于 RDMA 流量的 IPsec 完全卸载选项提供了显著的性能改进,并支持在 RoCE 数据包上使用 IPsec,这些数据包在网络堆栈之外,如果没有完全硬件卸载则无法使用。因此,即使在使用 SR-IOV VF 时,用户也可以利用 RoCE V2 的 IPsec 协议的优势。

此功能的配置步骤应与上述步骤相同,但如果支持此功能,则发送的流量也可以是 RoCEV2 IPsec 流量。

要配置此功能

  1. 在 VF 上启用 IPsec。有关更多信息,请参阅 IPsec 功能

  2. 在相关的 VF 网络设备上配置 IPsec 策略和状态。这应与 IPsec 规则的软件配置相同,可以使用以下实现选项之一完成

    命令

    卸载请求参数

    iproute2 ip xfrm

    卸载数据包

    libreswan

    nic-offload=packet

    strongswan 1

    1. 有关使用 strongSwan 配置的示例,请参阅 DOCA 东西向叠加加密应用程序    

  3. 正常配置 SR-IOV VF,并添加其 OVS/TC 规则。

注意

为了使此功能正常工作,必须启用 DMFS 转向模式。

  • 以下是使用 iproute 的完整最小配置示例,其中 PF0 是网络设备 PF,F0_REP 是 VF 表示,NIC 是要在其上配置 IPsec 的 VF 网络设备

    复制
    已复制!
                

    1. echo 1 > /sys/class/net/$PF0 /device/sriov_numvfs 2. echo 0000:08:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind 3. devlink dev eswitch set pci/0000:08:00.0 mode switchdev 4. devlink dev param set pci/0000:08:00.0 name flow_steering_mode value dmfs cmode runtime 5. devlink port function set pci/0000:08:00.0/1 ipsec_packet enable 6. echo 0000:08:00.2 > /sys/bus/pci/drivers/mlx5_core/bind 7. tc qdisc add dev $PF0 ingress tc qdisc add dev $VF0_REP ingress tc filter add dev $PF0 parent ffff: protocol 802.1q chain 0 flower vlan_id 10 vlan_ethtype 802.1q cvlan_id 5 action vlan pop action vlan pop action mirred egress redirect dev $VF0_REP   tc filter add dev $VF0_REP parent ffff: protocol all chain 0 flower action vlan push protocol 802.1q id 5 action vlan push protocol 802.1q id 10 action mirred egress redirect dev $PF0   8. ifconfig $PF0 $PF_IP/24 up ifconfig $NIC $LOC_IP/$SUB_NET up ip link set dev $VF_REP up 9. ip xfrm state flush ip xfrm policy flush

  • 配置 IPsec 状态和策略

    复制
    已复制!
                

    #states ip -4 xfrm state add src $LOC_IP/$SUB_NET dst $REMOTE_IP/$SUB_NET proto esp spi 1000 reqid 10000 aead 'rfc4106(gcm(aes))' 0x010203047aeaca3f87d060a12f4a4487d5a5c335 128 mode transport sel src $LOC_IP dst $REMOTE_IP offload packet dev $NIC dir out ip -4 xfrm state add src $REMOTE_IP/$SUB_NET dst $LOC_IP/$SUB_NET proto esp spi 1001 reqid 10001 aead 'rfc4106(gcm(aes))' 0x010203047aeaca3f87d060a12f4a4487d5a5c335 128 mode transport sel src $REMOTE_IP dst $LOC_IP offload packet dev $NIC dir in #policies ip -4 xfrm policy add src $LOC_IP dst $REMOTE_IP offload packet dev $NIC dir out tmpl src $LOC_IP/$SUB_NET dst $REMOTE_IP/$SUB_NET proto esp reqid 10000 mode transport ip -4 xfrm policy add src $REMOTE_IP dst $LOC_IP offload packet dev $NIC dir in tmpl src $REMOTE_IP/$SUB_NET dst $LOC_IP/$SUB_NET proto esp reqid 10001 mode transport ip -4 xfrm policy add src $REMOTE_IP dst $LOC_IP dir fwd tmpl src $REMOTE_IP/$SUB_NET dst $LOC_IP/$SUB_NET proto esp reqid 10001 mode transport

请注意,以上配置仅适用于一侧,但 IPsec 必须在两侧都配置才能使它们正常通信。另一侧的配置应几乎相同,但步骤 9 将以不对称方式配置,这意味着第一个策略将如下所示,并且所有其他状态/策略将相应调整

复制
已复制!
            

ip -4 xfrm state add src $LOC_IP/$SUB_NET dst $REMOTE_IP/$SUB_NET proto esp spi 1001 reqid 10001 aead 'rfc4106(gcm(aes))' 0x010203047aeaca3f87d060a12f4a4487d5a5c335 128 mode transport sel src $LOC_IP dst $REMOTE_IP offload packet dev $NIC dir out

完成此步骤后,您可以在配置了 IPsec 的两台机器之间发送您选择的任何 RoCE 流量。例如,在一侧使用 ibv_rc_pingpong -g 3 -d VF_device :,在另一侧使用 ibv_rc_pingpong -g 3 -d VF_device $IP_OF_OTHER_SIDE :

最后,您可以使用 ipsec 计数器验证流量是否已使用 IPsec 加密

复制
已复制!
            

ethtool -S VF_NETDEV | grep ipsec

© 版权所有 2025,NVIDIA。 上次更新时间:2025 年 2 月 12 日。