5.15.4. 使用 nmstatectl 配置具有 PKI 身份验证和隧道模式的主机到主机的 IPsec VPN
IPsec (互联网协议安全)是一个安全协议套件,用于验证和加密网络和设备中的 IP 通信。Libreswan 软件为 VPN 提供一个 IPsec 实现。
在隧道模式中,通信的源和目标 IP 地址在 IPsec 隧道中被加密。外部网络嗅探器只能获取左侧 IP 和右侧 IP。通常,对于隧道模式,它支持 host-to-host、host-to-subnet 和 subnet-to-subnet。在此模式中,新的 IP 数据包封装现有的数据包及其有效负载和标头。此模式下的封装保护不安全网络上的 IP 数据、源和目标标头。此模式可用于在 subnet-to-subnet、远程访问连接和不受信任的网络(如开放的公共 Wi-Fi 网络)中传输数据。默认情况下,IPsec 在隧道模式下,在两个站点之间建立一个安全通道。使用以下配置,您可以将 VPN 连接建立成一个 host-to-host 架构。
通过使用 Nmstate (一个用于网络管理的声明性 API),您可以配置 IPsec VPN 连接。设置配置后,Nmstate API 确保结果与配置文件匹配。如果有任何失败,nmstate 会自动回滚更改,以避免不正确的系统状态。
在 host-to-host 配置中,您需要设置 leftmodecfgclient: no,以便它不能从服务器接收网络配置,因此该值为 no。在 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-vpn-authentication.yml:--- interfaces: - name: 'example_ipsec_conn1'1 type: ipsec libreswan: left: '192.0.2.150'2 leftid: 'local-host.example.com'3 leftcert: 'local-host.example.com'4 leftmodecfgclient: no5 right: '192.0.2.250'6 rightid: 'remote-host.example.com'7 rightsubnet: '192.0.2.150/32'8 ikev2: 'insist'9 YAML 文件定义以下设置:
将设置应用到系统:
# nmstatectl apply ~/create-p2p-vpn-authentication.yml- 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能很容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
验证
显示创建的 P2P 策略:
# ip xfrm policy验证 IPsec 状态:
# ip xfrm state