5.15.5. 使用 nmstatectl 使用 PKI 身份验证和传输模式配置主机到主机的 IPsec VPN
IPsec (互联网协议安全)是一个安全协议套件,用于验证和加密网络和设备中的 IP 通信。Libreswan 工具为 VPN 提供基于 IPsec 的实现。
在传输模式下,加密仅适用于 IP 数据包的有效负载。另外,通过保持原始 IP 标头,新的 IPsec 标头被附加到 IP 数据包中。传输模式不会加密通信的源和目标 IP,而是将它们复制到外部 IP 标头中。因此,加密只保护网络中的 IP 数据。此模式可用于在网络的 host-to-host 连接中传输数据。此模式通常与 GRE 隧道一起使用,以节省 20 字节(IP 标头)的开销。默认情况下,IPsec 工具使用隧道模式。要使用传输模式,请为 host-to-host 连接数据传输设置 type: transport。
通过使用 Nmstate (一个用于网络管理的声明性 API),您可以配置 IPsec VPN 连接。设置配置后,Nmstate API 确保结果与配置文件匹配。如果有任何失败,nmstate 会自动回滚更改,以避免不正确的系统状态。要覆盖默认的 tunnel 模式,请指定 transport 模式。
在 nmstate 中为 IPsec 定义系统的情况,左侧 命名的系统是本地主机,而 右侧 命名的系统是远程主机。
请注意,由于 NetworkManager-libreswan 插件的设计,您可以在一端使用 nmstatectl,且您必须在另一端手动配置 IPsec。
先决条件
- 通过使用密码,您已生成了一个存储证书和加密密钥的 PKCS #12 文件。
流程
安装所需的软件包:
# dnf install nmstate libreswan NetworkManager-libreswan重启 NetworkManager 服务:
# systemctl restart NetworkManager由于
Libreswan已安装,请删除其旧的数据库文件,并重新创建它们:# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss导入 PKCS#12 文件:
# ipsec import node-example.p12导入 PKCS#12 文件时,请输入用来创建该文件的密码。
启用并启动
ipsec服务:# systemctl enable --now ipsec创建一个包含以下内容的 YAML 文件,如
~/create-p2p-transport-authentication.yml:--- interfaces: - name: 'example_ipsec_conn1'1 type: ipsec libreswan: type: 'transport'2 ipsec-interface: '99'3 left: '192.0.2.150'4 leftid: '%fromcert'5 leftcert: 'local-host.example.org'6 right: '192.0.2.250'7 prefix-length: '32'8 rightid: '%fromcert'9 ikev2: 'insist'10 ikelifetime: '24h'11 salifetime: '24h'12 YAML 文件定义以下设置:
- 1
- IPsec 连接名称
- 2
- IPsec 模式
- 3
- 值
99表示libreswan创建一个 IPsecxfrm虚拟接口ipsec<number>,并自动查找下一个可用数字 - 4
- 用于本地主机的公共网络接口的静态 IPv4 地址
- 5
- 在本地主机上,
%fromcert的值将 ID 设置为从加载的证书获取的可分辨名称(DN) - 6
- 本地主机的公钥的可分辨名称(DN)
- 7
- 用于远程主机的公共网络接口的静态 IPv4 地址
- 8
- 本地主机的静态 IPv4 地址的子网掩码
- 9
- 在远程主机上,
%fromcert的值将 ID 设置为从加载的证书中获取的可分辨名称(DN) - 10
- 只接受和接收互联网密钥交换(IKEv2)协议的值
- 11
- IKE 协议的持续时间
- 12
- IPsec 安全联盟(SA)的持续时间
将设置应用到系统:
# nmstatectl apply ~/create-p2p-transport-authentication.yml- 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能很容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
验证
验证 IPsec 状态:
# ip xfrm state验证 IPsec 策略:
# ip xfrm policy