DOCA 东-西 向 Overlay 加密应用
本指南介绍了基于 IPsec 的 strongSwan 解决方案,该方案基于 NVIDIA® BlueField® DPU 之上。
如果您的目标应用使用 100Gb/s 或更高的带宽,其中大部分带宽分配给 IPsec 流量,请参阅NVIDIA BlueField-2 DPU 产品发行说明,了解潜在的带宽限制。要访问相关的产品发行说明,请联系您的 NVIDIA 销售代表。
IPsec 用于在不同设备之间建立加密连接。它有助于确保通过公共网络发送的数据安全。IPsec 通常用于建立 VPN,其工作原理是对 IP 数据包进行加密,并验证数据包的来源。
IPsec 包含以下主要模块
密钥交换 – 密钥是一个随机字节字符串,可用于消息的加密和解密。IPsec 通过连接设备之间的密钥交换来设置密钥,以便每个设备都可以解密另一设备的消息。
身份验证 – IPsec 为每个数据包提供身份验证,以确保它们来自可信来源。
加密 – IPsec 加密每个数据包中的有效载荷,并可能根据传输模式加密数据包的 IP 标头。
解密 – 在通信的另一端,数据包由 IPsec 支持的节点解密。
IPsec 支持两种类型的标头
身份验证标头 (AH) – AH 协议确保数据包来自可信来源。AH 不提供任何加密。
封装安全协议 (ESP) – ESP 加密每个数据包的有效载荷以及 IP 标头(取决于传输模式)。ESP 为每个数据包添加了自己的标头和尾部。
IPsec 支持两种类型的传输模式
IPsec 隧道模式 – 在两个网络节点之间使用,每个节点在公共网络上充当隧道发起者/终止者。在此模式下,原始 IP 标头和有效载荷都被加密。由于 IP 标头已加密,因此添加了一个 IP 隧道用于网络转发。在隧道的每一端,路由器都会解密 IP 标头以将数据包路由到其目的地。
传输模式 – 每个数据包的有效载荷都被加密,但原始 IP 标头未加密。因此,中间网络节点能够查看每个数据包的目的地并路由数据包,除非使用单独的隧道协议。
strongSwan 是一个基于 IPsec 的开源 VPN 解决方案。有关更多信息,请参阅strongSwan 文档。
IPsec 数据包卸载将 IPsec 加密(加密/解密)和 IPsec 封装都卸载到硬件。
部署模型允许 IPsec 卸载对主机透明,其优势在于保护传统工作负载(不依赖于主机 SW 堆栈)和主机上零 CPU 利用率。
IPsec 数据包卸载配置与 OVS 卸载一起工作并对其透明。这意味着来自 OVS 卸载的所有数据包都由 IPsec 规则加密。
下图说明了 IPsec 数据包卸载和 OVS VXLAN 卸载之间的交互。

IPsec 数据包卸载仅在 Ubuntu Bluefield 内核 5.15 上受支持
OVS 卸载和 IPsec IPv6 不能一起工作。

使用
swanctl.conf
配置文件配置 strongSwan IPsec 卸载。流量从主机通过 BlueField 发送。
使用 OVS,数据包在入口处使用隧道协议(例如 VXLAN)进行封装,以匹配 strongSwan 的 IPsec 配置。
由 strongSwan 配置文件设置,流量将使用硬件卸载进行加密。
出口流程首先是解密,然后是隧道标头的解封装,并转发到相关的物理功能。
不适用
需要 NVIDIA® BlueField®-2 平台或更高版本
带有内核 5.15 的 BlueField Ubuntu BFB
strongSwan 版本 5.9.10 或更高版本
编译和安装 strongSwan
以下部分提供了编译和安装 NVIDIA 的 strongSwan 分支(分支 BF-5.9.10)的说明,但用户可以使用上游 strongSwan 说明(只要版本为 5.9.10 或更高版本)。
要从源代码编译和安装 strongswan,请在 BlueField (Arm 核) 上执行以下步骤
安装依赖项
sudo apt install dpkg-dev devscripts debhelper dh-autoreconf autoconf flex libtool gperf lzip yacc bison flex m4 libgmp-dev libsystemd-dev -y
克隆和编译 strongSwan
$ git clone https:
//github.com/Mellanox/strongswan.git
$ cd strongswan $ git checkout BF-5.9
.10
$ dpkg-buildpackage -uc -us -b这应该在父文件夹中创建两个
.deb
文件,strongswan_5.9.10-2.bf_arm64.deb
和strongswan-swanctl_5.9.10-2.bf_arm64.deb
。注意strongSwan BF-5.9.10 基于官方 strongSwan 5.9.10 分支,并添加了对 DOCA IPsec 插件的打包和支持。有关 strongSwan DOCA 插件的更多信息,请参阅DOCA IPsec 安全网关应用指南。
卸载所有旧的 strongSwan 和 charon 软件包以防止冲突
$ sudo dpkg -P --force-depends <packages>
示例
$ sudo dpkg -P --force-depends libstrongswan libstrongswan-standard-plugins strongswan strongswan-charon strongswan-libcharon strongswan-starter libcharon-extauth-plugins
信息用户可以通过运行
dpkg -l | grep strongswan
和dpkg -l | grep charon
来查找所有 strongSwan 和 charon 软件包。安装两个 strongSwan .deb 文件(它们应该已在父文件夹中创建)。
$ sudo dpkg -i ../strongswan_5.
9.10
-2
.bf_arm64.deb ../strongswan-swanctl_5.9.10
-2
.bf_arm64.deb
以下部分提供有关手动配置 IPsec 数据包卸载的常规信息,以及有关将 OVS IPsec 与 strongSwan 结合使用的具体信息。
有一个脚本 east_west_overlay_encryption.sh
,它会自动执行本节中的步骤。
如果您直接使用 ip xfrm
工具,请使用 /opt/mellanox/iproute2/sbin/ip
以从 IPsec 数据包卸载支持中受益。
配置流程分为两个部分
启用 IPsec 数据包卸载模式。
使用三种身份验证模式之一配置 IPsec OVS 网桥。
步骤二的替代方案是手动配置 swanctl.conf
文件(strongSwan 的配置文件),并直接使用 strongSwan 而不是使用 IPsec OVS(它会自动生成 swanctl.conf
文件),如“使用 strongSwan 手动配置 OVS IPsec”部分中所述。
启用 IPsec 数据包卸载
本节显式地在 Arm 内核上启用 IPsec 数据包卸载,然后再设置支持卸载的 IPsec 隧道。
如果 OVS VXLAN 隧道配置已存在,请在执行以下步骤之前停止 openvswitch
服务,并在之后重新启动该服务。
在 Arm 内核上显式启用 IPsec 完全卸载。
在
/etc/mellanox/mlnx-bf.conf
中设置IPSEC_FULL_OFFLOAD="yes"
。注意如果
IPSEC_FULL_OFFLOAD
未出现在/etc/mellanox/mlnx-bf.conf
中,则您可能正在使用旧版本的 BlueField 镜像。在DOCA 归档中查看以前 DOCA 版本中启用 IPsec 完全卸载的方式。重启 IB 驱动程序(重启也有效)。运行
/etc/init.d/openibd restart
要恢复 IPsec 完全卸载模式,请重复步骤 1 中的过程,唯一的区别是在 /etc/mellanox/mlnx-bf.conf
中设置 IPSEC_FULL_OFFLOAD="no"
。
配置 OVS IPsec
在继续本节之前,请确保按照“启用 IPsec 数据包卸载”部分中的步骤对两个 DPU 执行操作。
本节配置 OVS IPsec VXLAN 隧道,该隧道自动生成 swanctl.conf
文件并运行 strongSwan(IPsec 守护程序)。下图说明了两个 BlueField DPU(左和右)使用安全 VXLAN 通道的示例。

需要在两个 BlueField DPU 之间构建 OVS IPsec 隧道,以连接两个主机(右和左)。
OVS IPsec 隧道配置了两个主机 InfiniBand 设备之间未知的 IPsec 连接。在本示例中,主机的 InfiniBand 网络设备为 HOST_PF
,DPU 的主机表示为 PF_REP
,DPU 的物理功能为 PF
。
此示例在两个 Arm 上设置以下变量
# host_ip1=1.1.1.1
# host_ip2=1.1.1.2
# HOST_PF=ens7np0
# ip1=192.168.50.1
# ip2=192.168.50.2
# PF=p0
# PF_REP=pf0hpf
HOST_PF
的名称在您的机器中可能有所不同。您可以通过运行以下命令进行验证
host# ibdev2netdev
mlx5_0 port 1
==> ens7np0 (Down)
mlx5_1 port 1
==> ens8np1 (Down)
本示例使用第一个 InfiniBand 的 (mlx5_0
) 网络设备,即 ens7np0
。
为主机 (x86) 的
HOST_PF
配置 IP 地址在
host_1
上# ifconfig $HOST_PF $host_ip1/24 up
在
host_2
上# ifconfig $HOST_PF $host_ip2/24 up
注意步骤 1 是唯一在主机上执行的命令,其余命令在 Arm (DPU) 侧执行。
为两个 Arm 的 PF 配置 IP 地址
在
Arm_1
上# ifconfig $PF $ip1/24 up
在
Arm_2
上# ifconfig $PF $ip2/24 up
启动 Open vSwitch。如果您的操作系统是 Ubuntu,请在
Arm_1
和Arm_2
上运行以下命令# service openvswitch-
switch
start如果您的操作系统是 CentOS,请在
Arm_1
和Arm_2
上运行以下命令# service openvswitch restart
启动 OVS IPsec 服务。在
Arm_1
和Arm_2
上运行# systemctl start openvswitch-ipsec.service
在两个 DPU 中设置 OVS 网桥。在
Arm_1
和Arm_2
上运行# ovs-vsctl add-br vxlan-br # ovs-vsctl add-port ovs-br $PF_REP # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
注意配置
other_config:hw-offload=true
会设置 IPsec 数据包卸载。将其设置为false
会设置软件 IPsec。注意隧道接口 (PF) 的 MTU 应至少比上方隧道端点 (PF_REP) 的 MTU 大 50 字节,以考虑 VXLAN 隧道标头的大小。例如,如果 PF_REP 的 MTU 为 1500,则 PF 的 MTU 应至少为 1550。
要配置 PF 的 MTU
# ifconfig $PF mtu $PF_MTU up
在 OVS 网桥上设置 IPsec 隧道。可能存在三种身份验证方法,选择您首选的身份验证方法,然后按照与其相关的步骤操作。请注意,后两种身份验证方法需要您创建证书(自签名证书或证书颁发机构证书)。
在使用三种身份验证方法之一设置 IPsec 隧道后,strongSwan 配置将自动完成,并且将生成 swanctl.conf
文件,并且 strongSwan 将自动运行。
身份验证方法
以下小节详细介绍了在 OVS 网桥上设置 IPsec 隧道的可能身份验证方法。
预共享密钥
此方法使用预共享密钥配置 OVS IPsec。您必须选择一个预共享密钥,例如
psk=swordfish
设置 VXLAN 隧道
在
Arm_1
上,运行# ovs-vsctl add-port vxlan-br tun -- \ set interface tun type=vxlan \ options:local_ip=$ip1 \ options:remote_ip=$ip2 \ options:key=100 \ options:dst_port=4789 \ options:psk=$psk
在
Arm_2
上,运行# ovs-vsctl add-port vxlan-br tun -- \ set interface tun type=vxlan \ options:local_ip=$ip2 \ options:remote_ip=$ip1 \ options:key=100 \ options:dst_port=4789\ options:psk=$psk
自签名证书
此方法使用自签名证书配置 OVS IPsec。您必须生成自签名证书和密钥。本示例演示了如何使用 ovs-pki
生成自签名证书,但您可以以任何其他方式生成它们,同时跳过步骤 1。
使用
ovs-pki
生成自签名证书在
Arm_1
上,运行# ovs-pki req -u host_1 # ovs-pki self-sign host_1
运行此代码后,您应该拥有
host_1-cert.pem
和host_1-privkey.pem
。在
Arm_2
上,运行# ovs-pki req -u host_2 # ovs-pki self-sign host_2
运行此代码后,您应该拥有
host_2-cert.pem
和host_2-privkey.pem
。
配置证书和私钥
将
Arm_1
的证书复制到Arm_2
,并将Arm_2
的证书复制到Arm_1
。在每台机器上,将
host_1-privkey.pem
和host_2-cert.pem
移动到/etc/swanctl/x509/
(如果在 Ubuntu 上)或/etc/strongswan/swanctl/x509/
(如果在 CentOS 上)。在每台机器上,将本地私钥(
Arm_1
上的host_1-privkey.pem
和Arm_2
上的host_2-privkey.pem
)移动到/etc/swanctl/private
(如果在 Ubuntu 上)或/etc/strongswan/swanctl/private
(如果在 CentOS 上)。
在两侧设置 OVS
other_config
。在
A
rm_1
上# ovs-vsctl set Open_vSwitch . other_config:certificate=/etc/swanctl/x509/host_1-cert.pem \ other_config:private_key=/etc/swanctl/private/host_1-privkey.pem
在
Arm_2
上# ovs-vsctl set Open_vSwitch . other_config:certificate=/etc/swanctl/x509/host_2-cert.pem \ other_config:private_key=/etc/swanctl/private/host_2-privkey.pem
设置 VXLAN 隧道
在
Arm_1
上# ovs-vsctl add-port vxlan-br vxlanp0 -- set interface vxlanp0 type=vxlan options:local_ip=$ip1 \ options:remote_ip=$ip2 options:key=100 options:dst_port=4789 \ options:remote_cert=/etc/swanctl/x509/host_2-cert.pem # service openvswitch-switch restart
在
Arm_2
上# ovs-vsctl add-port vxlan-br vxlanp0 -- set interface vxlanp0 type=vxlan options:local_ip=$ip2 \ options:remote_ip=$ip1 options:key=100 options:dst_port=4789 \ options:remote_cert=/etc/swanctl/x509/host_1-cert.pem # service openvswitch-switch restart
在步骤 3 和 4 中,如果您使用的是 CentOS,则必须将证书的路径更改为 /etc/strongswan/swanctl/x509/
,并将私钥的路径更改为 /etc/strongswan/swanctl/private
。
CA 签名证书
此方法使用证书颁发机构 (CA) 签名证书配置 OVS IPsec。您必须生成 CA 签名证书和密钥。本示例演示了如何使用 ovs-pki
生成 CA 签名证书,但您可以以任何其他方式生成它们,同时跳过步骤 1。
使用
ovs-pki
生成 CA 签名证书。对于此方法,所有证书和请求都必须在证书生成和签名期间位于同一目录中。本示例将此目录称为certsworkspace
。在
Arm_1
上,运行# ovs-pki init --force # cp /var/lib/openvswitch/pki/controllerca/cacert.pem <path_to>/certsworkspace # cd <path_to>/certsworkspace # ovs-pki req -u host_1 # ovs-pki sign host1
switch
运行此代码后,您应该在
certsworkspace
文件夹中拥有host_1-cert.pem
、host_1-privkey.pem
和cacert.pm
。在
Arm_2
上,运行# ovs-pki init --force # cp /var/lib/openvswitch/pki/controllerca/cacert.pem <path_to>/certsworkspace # cd <path_to>/certsworkspace # ovs-pki req -u host_2 # ovs-pki sign host_2
switch
运行此代码后,您应该在
certsworkspace
文件夹中拥有host_2-cert.pem
、host_2-privkey.pem
和cacert.pm
。
配置证书和私钥
将
Arm_1
的证书复制到Arm_2
,并将Arm_2
的证书复制到Arm_1
。在每台机器上,将
host_1-privkey.pem
和host_2-cert.pem
移动到/etc/swanctl/x509/
(如果在 Ubuntu 上)或/etc/strongswan/swanctl/x509/
(如果在 CentOS 上)。在每台机器上,将本地私钥(如果是
Arm_1
则为host_1-privkey.pem
,如果是Arm_2
则为host_2-privkey.pem
)移动到/etc/swanctl/private
(如果在 Ubuntu 上)或/etc/strongswan/swanctl/private
(如果在 CentOS 上)。在每台机器上,将
cacert.pem
复制到x509ca
目录下的/etc/swanctl/x509ca/
(如果在 Ubuntu 上)或/etc/strongswan/swanctl/x509ca/
(如果在 CentOS 上)。
在两侧设置 OVS
other_config
。在
Arm_1
上# ovs-vsctl set Open_vSwitch . \ other_config:certificate=/etc/strongswan/swanctl/x509/host_1.pem \ other_config:private_key=/etc/strongswan/swanctl/private/host_1-privkey.pem \ other_config:ca_cert=/etc/strongswan/swanctl/x509ca/cacert.pem
在
Arm_2
上# ovs-vsctl set Open_vSwitch . \ other_config:certificate=/etc/strongswan/swanctl/x509/host_2.pem \ other_config:private_key=/etc/strongswan/swanctl/private/host_2-privkey.pem \ other_config:ca_cert=/etc/strongswan/swanctl/x509ca/cacert.pem
设置隧道
在
Arm_1
上# ovs-vsctl add-port vxlan-br vxlanp0 -- set interface vxlanp0 type=vxlan options:local_ip=$ip1 \ options:remote_ip=$ip2 options:key=100 options:dst_port=4789 \ options:remote_name=host_2 # service openvswitch-switch restart
在
Arm_2
上# ovs-vsctl add-port vxlan-br vxlanp0 -- set interface vxlanp0 type=vxlan options:local_ip=$ip2 \ options:remote_ip=$ip1 options:key=100 options:dst_port=4789 \ options:remote_name=host_1 # service openvswitch-switch restart
在步骤 3 和 4 中,如果您使用的是 CenOS,则必须将证书的路径更改为 /etc/strongswan/swanctl/x509/
,将 CA 证书的路径更改为 /etc/strongswan/swanctl/x509ca/
,并将私钥的路径更改为 /etc/strongswan/swanctl/private/
。
确保 IPsec 已配置
使用 /opt/mellanox/iproute2/sbin/ip xfrm state show
,您应该能够看到为使用关键字 in mode packet
配置的 IPsec 连接的 4 个 IPsec 状态,这意味着您处于 IPsec 数据包硬件卸载模式。
例如,在使用预共享密钥方法配置 IPsec 后,您将在 Arm_1
上获得类似于以下内容的结果
# /opt/mellanox/iproute2/sbin/ip xfrm state show
src 192.168
.50.1
dst 192.168
.50.2
proto esp spi 0xcc8bf8ad
reqid 1
mode transport
replay-window 0
flag esn
aead rfc4106(gcm(aes)) 0x9f45cc4577e70c4e077bcc0c1473a782143e7ad199f58566519639d03b593b8996383f11
128
anti-replay esn context:
seq-hi 0x0
, seq 0x0
, oseq-hi 0x0
, oseq 0x0
replay_window 1
, bitmap-length 1
00000000
crypto offload parameters: dev p0 dir out mode packet
sel src 192.168
.50.1
/32
dst 192.168
.50.2
/32
proto udp sport 4789
src 192.168
.50.2
dst 192.168
.50.1
proto esp spi 0xce8bf4b6
reqid 1
mode transport
replay-window 0
flag esn
aead rfc4106(gcm(aes)) 0xf2d0e335d9a64ef6e385a630a32b0e43bb52f581290cd34bbb8f7592d54f11657ed0258e
128
anti-replay esn context:
seq-hi 0x0
, seq 0x0
, oseq-hi 0x0
, oseq 0x0
replay_window 32
, bitmap-length 1
00000000
crypto offload parameters: dev p0 dir in mode packet
sel src 192.168
.50.2
/32
dst 192.168
.50.1
/32
proto udp dport 4789
src 192.168
.50.1
dst 192.168
.50.2
proto esp spi 0xcb600a84
reqid 2
mode transport
replay-window 0
flag esn
aead rfc4106(gcm(aes)) 0x7fb26035299bcc9b973abea5d581acfbcf87cbf0bd053b745c4d95c62311f934010973f6
128
anti-replay esn context:
seq-hi 0x0
, seq 0x0
, oseq-hi 0x0
, oseq 0x0
replay_window 1
, bitmap-length 1
00000000
crypto offload parameters: dev p0 dir out mode packet
sel src 192.168
.50.1
/32
dst 192.168
.50.2
/32
proto udp dport 4789
src 192.168
.50.2
dst 192.168
.50.1
proto esp spi 0xc137d5a0
reqid 2
mode transport
replay-window 0
flag esn
aead rfc4106(gcm(aes)) 0x28e3d12ad4e24aa9d9de9459de8ef8bb4379e8e12faac0054c5b629b6aa50fdeda8e4574
128
anti-replay esn context:
seq-hi 0x0
, seq 0x0
, oseq-hi 0x0
, oseq 0x0
replay_window 32
, bitmap-length 1
00000000
crypto offload parameters: dev p0 dir in mode packet
sel src 192.168
.50.2
/32
dst 192.168
.50.1
/32
proto udp sport 4789
在确保 IPsec 连接已配置后,您可以使用 HOST_PF
的 IP 地址在 host_1
和 host_2
之间发送加密流量。
使用 strongSwan 手动配置 OVS IPsec
本节配置一个 OVS VXLAN 隧道,然后手动使用 swanctl.conf
文件并运行 strongSwan(IPsec 守护程序)。
在继续本节之前,请确保按照“启用 IPsec 数据包卸载”部分中的步骤对两个 DPU 执行操作。
在 OVS 上构建 VXLAN 隧道,并将 PF 表示器连接到同一 OVS 网桥。
在
Arm_1
上# ovs-vsctl add-br vxlan-br # ovs-vsctl add-port vxlan-br PF_REP # ovs-vsctl add-port vxlan-br vxlan11 -- set interface vxlan11 type=vxlan options:local_ip=$ip1 \ options:remote_ip=$ip2 options:key=100 options:dst_port=4789 \ # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
在
Arm_2
上# ovs-vsctl add-br vxlan-br # ovs-vsctl add-port vxlan-br PF_REP # ovs-vsctl add-port vxlan-br vxlan11 -- set interface vxlan11 type=vxlan options:local_ip=$ip2 \ options:remote_ip=$ip1 options:key=100 options:dst_port=4789 \ # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
如果您的操作系统是 Ubuntu,请在
Arm_1
和Arm_2
上运行service openvswitch-
switch
start如果您的操作系统是 CentOS,请运行
service openvswitch restart
为 PF 启用 TC 卸载。在
Arm_1
和Arm_2
上运行# ethtool -K $PF hw-tc-offload on
从 Arm 禁用主机 PF 作为端口所有者。在
Arm_1
和Arm_2
上运行# mlxprivhost -d /dev/mst/mt${pciconf} --disable_port_owner r
注意要获取
${pciconf}
,请在 DPU 上运行以下命令# ls --color=never /dev/mst/ | grep --color=never
'^m.*f0$'
| cut -c3
-例如
# mlxprivhost -d /dev/mst/mt41686_pciconf0 --disable_port_owner r
为每台机器配置
swanctl.conf
文件。请参阅 swanctl.conf 文件部分。注意每台机器在
/etc/swanctl/conf.d/
中应正好有一个 .swanctl.conf
文件。加载
swanctl.conf
文件并初始化 strongSwan。运行在
Arm_2
上,运行systemctl restart strongswan.service swanctl --load-all
在
Arm_1
上,运行systemctl restart strongswan.service swanctl --load-all swanctl -i --child bf
现在应该建立 IPsec 连接。
swanctl.conf 文件
strongSwan 使用添加到其配置文件 swanctl.conf
中的新值来配置 IPSec 数据包硬件卸载。该文件应放置在 sysconfdir
下,默认情况下可以在 /etc/swanctl/swanctl.conf
中找到。
术语左 (BFL) 和右 (BFR) 参考“应用架构”下的图示,用于标识通信的两个节点(或机器)。
任何一方(BFL 或 BFR)都可以履行任何角色(发起者或接收者)。
在本示例中,192.168.50.1 用于左 PF 上行链路,192.168.50.2 用于右 PF 上行链路。
connections {
BFL-BFR {
local_addrs = 192.168
.50.1
remote_addrs = 192.168
.50.2
local {
auth = psk
id = host1
}
remote {
auth = psk
id = host2
}
children {
bf-out {
local_ts = 192.168
.50.1
/24
[udp]
remote_ts = 192.168
.50.2
/24
[udp/4789
]
esp_proposals = aes128gcm128-x25519-esn
mode = transport
policies_fwd_out = yes
hw_offload = packet
}
bf-in {
local_ts = 192.168
.50.1
/24
[udp/4789
]
remote_ts = 192.168
.50.2
/24
[udp]
esp_proposals = aes128gcm128-x25519-esn
mode = transport
policies_fwd_out = yes
hw_offload = packet
}
}
version = 2
mobike = no
reauth_time = 0
proposals = aes128-sha256-x25519
}
}
secrets {
ike-BF {
id-host1 = host1
id-host2 = host2
secret = 0sv+NkxY9LLZvwj4qCC2o/gGrWDF2d21jL
}
}
BFB 安装程序将在 strongSwan conf.d
目录中放置两个示例 swanctl.conf
文件,分别用于 BFL 和 BFR(BFL.swanctl.conf
和 BFR.swanctl.conf
)。每个节点在其 strongSwan conf.d
目录中应只有一个 swanctl.conf
文件。
请注意
“
hw_offload = packet"
负责配置 IPsec 数据包卸载数据包卸载支持已添加到现有的
hw_offload
字段中,并保持向后兼容性。供您参考
值
描述
否
不配置硬件卸载。
crypto
如果内核和硬件支持,则配置加密硬件卸载;如果不支持,则失败。
是
与 crypto 相同(被认为是旧版)。
packet
如果内核和硬件支持,则配置数据包硬件卸载;如果不支持,则失败。
auto
如果内核和硬件支持,则配置数据包硬件卸载;不失败(必要时执行回退到 crypto 或 否)。
每当
hw_offload
的值更改时,都必须重新加载 strongSwan 配置。切换到加密硬件卸载需要事先将
devlink/ipsec_mode
设置为none
。切换到数据包硬件卸载需要设置
[udp/4789]
对于指示 strongSwan 仅对 VXLAN 通信进行 IPSec 至关重要。数据包硬件卸载只能在通过 VXLAN 流式传输的内容上完成。
请注意以下限制
字段 | 限制 |
reauth_time | 如果设置则忽略 |
rekey_time | 请勿使用。如果设置则忽略。 |
rekey_bytes | 请勿使用。不支持,如果设置则会失败。 |
rekey_packets | 用于重新密钥 |
安装
有关如何安装 BlueField 相关软件的详细信息,请参阅DOCA Linux 安装指南。
应用执行
注释
IPsec 守护程序由
systemd strongswan.service
启动使用
systemctl [start | stop | restart]
通过strongswan.service
控制 IPsec 守护程序。例如,要重启,请运行systemctl restart strongswan.service
此命令与
ipsec restart
的效果相同。注意请勿使用
ipsec
脚本(位于/usr/sbin/ipsec
下)来重启/停止/启动 IPsec 连接。
本小节介绍如何使用脚本配置和设置 IPsec 连接。要配置 IPsec 连接,您需要两个 DPU,分别称为发起方和接收方机器。两台机器之间没有区别,只是发起方是启动两者之间连接的机器(并且应在接收方之后运行脚本)。
该脚本位于 /opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh
下。
脚本参数
参数 | 描述 | 有效值 | 何时使用 | 注释 |
| 连接的一方(接收方或发起方)。 |
| 始终 | 此参数必须始终在命令行上传递,并且不能在 JSON 参数文件中传递。 |
| JSON 参数文件的完整路径。 | JSON 文件路径,根据以下文件中演示的模板编写: | 要将参数作为 JSON 文件传递 | 当使用 JSON 文件运行脚本时,您不能在命令行上传递 |
| 发起方机器端口接口的 IP 地址,用于 IPsec 连接。 | 有效的 IP 地址,范围从 1.1.1.1 到 255.255.255.255。 | 始终 | 在 JSON 文件中,默认设置为 192.168.50.1。 |
| 接收方机器端口接口的 IP 地址,用于 IPsec 连接。 | 有效的 IP 地址,范围从 1.1.1.1 到 255.255.255.255。 | 始终 | 在 JSON 文件中,默认设置为 192.168.50.2。 |
| 端口接口的编号 (p0/p1),用于 IPsec 连接。 | 0 或 1。 | 始终 | 在 JSON 文件中,默认设置为 0。 |
| IPsec 的身份验证方法。可以是 | 可以是 | 始终 | 在 JSON 文件中,默认设置为 |
| 预共享密钥。 | 字符序列(字符串)。 |
| 在 JSON 文件中,默认设置为 |
| 发起方的证书。 | 任何有效的自签名或 CA 签名证书。必须提供证书的完整路径。 |
| 发起方和接收方都必须配置相同的 |
| 接收方的证书。 | 任何有效的自签名或 CA 签名证书。必须提供证书的完整路径。 |
| 发起方和接收方都必须配置相同的 |
| 发起方的私钥。 | 使用证书生成的任何有效私钥。必须提供私钥的完整路径。 |
| 不适用 |
| 接收方的私钥。 | 使用证书生成的任何有效私钥。必须提供私钥的完整路径。 |
| 不适用 |
| 发起方的 CA 证书。 | 任何有效的 CA 证书。必须提供证书的完整路径。 |
| 不适用 |
| 接收方的 CA 证书。 | 任何有效的 CA 证书。必须提供证书的完整路径。 |
| 不适用 |
| 发起方证书的通用名称 (CN)。 | 必须与发起方证书中描述的 CN 相同。 |
| 不适用 |
| 接收方证书的 CN。 | 必须与接收方证书中描述的 CN 相同。 |
| 不适用 |
有两种传递参数的方法,一种是使用 JSON 参数文件,另一种是通过在命令行上传递参数。
使用 JSON 参数文件
在此方法中,您必须配置参数文件,然后运行脚本
配置位于
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption_params.json
下的 JSON 参数文件,或根据east_west_overlay_encryption_params.json
的模板为脚本创建一个 JSON 文件,具体说明请参见“脚本参数”部分。在接收方的 DPU 上使用 JSON 文件运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=r --json=/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption_params.json
在发起方的 DPU 上运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=i --json=/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption_params.json
您现在可以通过为 VXLAN 配置的 PF 接口 (192.168.50.[1|2]) 发送加密数据。
在命令行上传递参数
在此方法中,您无需配置参数文件,可以使用适当的参数运行脚本。
传递预共享密钥身份验证方法的参数
在接收方的 DPU 上运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=r --initiator_ip_addr=INITIATOR_IP_ADDRESS --receiver_ip_addr=RECEIVER_IP_ADDRESS --port_num=PORT_NUM \ --auth_method=psk --preshared_key=PRESHARED_KEY
在发起方的 DPU 上运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=i --initiator_ip_addr=INITIATOR_IP_ADDRESS --receiver_ip_addr=RECEIVER_IP_ADDRESS --port_num=PORT_NUM \ --auth_method=psk --preshared_key=PRESHARED_KEY
传递自签名证书身份验证方法的参数
在接收方的 DPU 上运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=r --initiator_ip_addr=INITIATOR_IP_ADDRESS --receiver_ip_addr=RECEIVER_IP_ADDRESS --port_num=PORT_NUM \ --auth_method=ssc --initiator_cert_path=INITIATOR_CERT_PATH --receiver_cert_path=RECEIVER_CERT_PATH --receiver_key_path=RECEIVER_KEY_PATH
在发起方的 DPU 上运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=i --initiator_ip_addr=INITIATOR_IP_ADDRESS --receiver_ip_addr=RECEIVER_IP_ADDRESS --port_num=PORT_NUM \ --auth_method=ssc --initiator_cert_path=INITIATOR_CERT_PATH --receiver_cert_path=RECEIVER_CERT_PATH --initiator_key_path=INITIATOR_KEY_PATH
传递 CA 证书身份验证方法的参数
在接收方的 DPU 上运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=r --initiator_ip_addr=INITIATOR_IP_ADDRESS --receiver_ip_addr=RECEIVER_IP_ADDRESS --port_num=PORT_NUM \ --auth_method=ca --initiator_cert_path=INITIATOR_CERT_PATH --receiver_cert_path=RECEIVER_CERT_PATH --receiver_key_path=RECEIVER_KEY_PATH --receiver_cacert_path=RECEIVER_CACERT_PATH --initiator_cn=INITIATOR_CN
在发起方的 DPU 上运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh --side=i --initiator_ip_addr=INITIATOR_IP_ADDRESS --receiver_ip_addr=RECEIVER_IP_ADDRESS --port_num=PORT_NUM \ --auth_method=ssc --initiator_cert_path=INITIATOR_CERT_PATH --receiver_cert_path=RECEIVER_CERT_PATH --initiator_key_path=INITIATOR_KEY_PATH --initiator_cacert_path=INITIATOR_CACERT_PATH --receiver_cn=RECEIVER_CN
如需帮助和使用方法,请使用 --help
/-h
标志运行脚本
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh -h
故障排除
请参考 DOCA 故障排除 文档,以解决您在安装或执行 DOCA 应用程序时可能遇到的任何问题。
恢复 IPsec 配置
要销毁 IPsec 配置,请在两台机器上运行以下命令
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh -d
请确保在任一机器上运行应用程序至少两分钟后,再运行此命令。 否则,可能会导致错误。
如果您在未先初始化连接的情况下运行此命令(在 运行 strongSwan 示例 中),您可能会收到错误。 这些错误没有功能影响,可以安全地忽略。
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption.sh
/opt/mellanox/doca/applications/east_west_overlay_encryption/east_west_overlay_encryption_params.json