5.15.2. 使用 nmstatectl 配置带有 RSA 身份验证和隧道模式的主机到子网 IPSec VPN
如果要在 IPsec 中使用基于非对称加密的密钥身份验证,则 RSA 算法通过使用私钥和公钥在两个主机之间进行加密和解密来提供安全通信。此方法使用私钥进行加密,使用公钥进行解密。
通过使用 Nmstate (一个用于网络管理的声明性 API),您可以配置基于 RSA 的 IPsec 身份验证。设置配置后,Nmstate API 确保结果与配置文件匹配。如果有任何失败,nmstate 会自动回滚更改,以避免不正确的系统状态。
要在 主机到子网 配置中建立加密通信,远程 IPsec 端通过使用参数 dhcp: true 向主机提供另一个 IP。在 nmstate 中为 IPsec 定义系统的情况,左侧 命名的系统是本地主机,而 右侧 命名的系统是远程主机。
请注意,由于 NetworkManager-libreswan 插件的设计,您可以在一端使用 nmstatectl,且您必须在另一端手动配置 IPsec。
流程
安装所需的软件包:
# dnf install nmstate libreswan NetworkManager-libreswan重启 NetworkManager 服务:
# systemctl restart NetworkManager如果
Libreswan已安装,请删除其旧的数据库文件,并重新创建它们:# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss在每个主机上生成一个 RSA 密钥对:
# ipsec newhostkey上一步返回的生成的密钥
ckaid。对左侧使用以下命令和ckaid,例如:# ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>上一命令的输出生成了配置所需的
leftrsasigkey=行。在第二个主机(右侧)上执行相同的操作:# ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>启用
ipsec服务,来在引导时自动启动:# systemctl enable --now ipsec创建一个包含以下内容的 YAML 文件,如
~/create-rsa-authentication.yml:--- interfaces: - name: 'example_ipsec_conn1'1 type: ipsec2 ipv4: enabled: true dhcp: true libreswan: ipsec-interface: '99'3 leftrsasigkey: '0sAwEAAesFfVZqFzRA9F'4 left: '192.0.2.150'5 leftid: 'local-host-rsa.example.com'6 right: '192.0.2.250'7 rightrsasigkey: '0sAwEAAesFfVZqFzRA9E'8 rightid: 'remote-host-rsa.example.com'9 ikev2: 'insist'10 YAML 文件定义以下设置:
将设置应用到系统:
# nmstatectl apply ~/create-rsa-authentication.yml- 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能很容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
验证
显示网络接口的 IP 设置:
# ip addr show <device_name>验证 IPsec 状态:
# ip xfrm state验证 IPsec 策略:
# ip xfrm policy