7.5. 使用 nmstatectl 配置基于 IPsec 的 VPN 连接
IPsec (互联网协议安全)是一个安全协议套件,由 Libreswan
提供,用于实现 VPN。IPsec 包括在连接建立时启动身份验证的协议,以及在数据传输过程中管理密钥。当应用程序在网络中部署并使用 IP 协议进行通信时,IPsec 可以保护数据通信。
要管理基于 IPsec 的配置来验证 VPN 连接,您可以使用 nmstatectl
工具。此实用程序提供对主机网络管理的声明性 API 的命令行访问。以下是 host-to-subnet
和 主机到主机通信模式
的身份验证类型:
- host-to-subnet PKI 身份验证
- 主机到子网 RSA 身份验证
- 主机到子网 PSK 验证
- 主机到主机的隧道模式身份验证
- 主机到主机的传输模式身份验证
7.5.1. 使用 nmstatectl 配置带有 PKI 身份验证和隧道模式的主机到子网 IPSec VPN
如果要根据 IPsec 中的可信实体身份验证使用加密,公钥基础架构(PKI)通过使用两个主机之间的加密密钥来提供安全通信。两者都通过与可信实体证书颁发机构(CA)共享公钥来生成每个主机维护私钥的私钥和公钥。验证真实性后,CA 会生成数字证书。如果是加密和解密,主机将使用私钥进行加密和公钥解密。
通过使用 Nmstate (用于网络管理的声明性 API),您可以配置基于 PKI 身份验证的 IPsec 连接。设置配置后,Nmstate API 可确保结果与配置文件匹配。如果有任何失败,nmstate
会自动回滚更改以避免系统的状态不正确。
要在 主机到
子网配置中建立加密通信,远程 IPsec 端通过使用参数 dhcp: true
为主机提供另一个 IP。在 nmstate 中定义 IPsec
的系统时,left
-named system 是本地主机,而 右
-named system 是远程主机。以下流程需要在两个主机上运行。
先决条件
- 通过使用密码,您生成了一个存储证书和密钥的 PKCSzFCP 文件。
步骤
安装所需的软件包:
# dnf install nmstate libreswan NetworkManager-libreswan
重启 NetworkManager 服务:
# systemctl restart NetworkManager
因为
Libreswan
已安装,请删除其旧的数据库文件并重新创建它们:# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
启用并启动
ipsec
服务:# systemctl enable --now ipsec
导入 PKCScriu 文件:
# ipsec import node-example.p12
导入 PKCSbusybox 文件时,请输入用于创建该文件的密码。
创建包含以下内容的 YAML 文件,如
~/create-pki-authentication.yml
:--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'yes' 2 left: '192.0.2.250' 3 leftid: '%fromcert' 4 leftcert: 'local-host.example.com' 5 right: '192.0.2.150' 6 rightid: '%fromcert' 7 ikev2: 'insist' 8 ikelifetime: '24h' 9 salifetime: '24h' 10
YAML 文件定义以下设置:
- 1
- IPsec 连接名称
- 2
- 值
yes
表示libreswan
创建一个 IPsecxfrm
虚拟接口ipsec<number&
gt;,并自动找到下一个可用数字 - 3
- 本地主机的公共网络接口的静态 IPv4 地址
- 4
- 在本地主机中,
%fromcert
的值将 ID 设置为从加载的证书获取的可辨识名称(DN) - 5
- 本地主机公钥的可辨识名称(DN)
- 6
- 远程主机的公共网络接口的静态 IPv4 地址
- 7
- 在远程主机上,
%fromcert
的值将 ID 设置为从加载的证书获取的可辨识名称(DN)。 - 8
insist
值只接受并接收互联网密钥交换(IKEv2)协议- 9
- IKE 协议的持续时间
- 10
- IPsec 安全关联(SA)的持续时间
将设置应用到系统:
# nmstatectl apply ~/create-pki-authentication.yml
验证
验证 IPsec 状态:
# ip xfrm status
验证 IPsec 策略:
# ip xfrm policy
其他资源
-
ipsec.conf(5)
man page
7.5.2. 使用 nmstatectl 配置带有 RSA 身份验证和隧道模式的主机到子网 IPSec VPN
如果要在 IPsec 中使用基于非对称加密密钥身份验证,则 RSA 算法通过使用私钥和公钥在两个主机之间加密和解密提供安全通信。此方法使用私钥进行加密,以及用于解密的公钥。
通过使用 Nmstate (用于网络管理的声明性 API),您可以配置基于 RSA 的 IPsec 身份验证。设置配置后,Nmstate API 可确保结果与配置文件匹配。如果有任何失败,nmstate
会自动回滚更改以避免系统的状态不正确。
要在 主机到
子网配置中建立加密通信,远程 IPsec 端通过使用参数 dhcp: true
为主机提供另一个 IP。在 nmstate 中定义 IPsec
的系统时,left
-named system 是本地主机,而 右
-named system 是远程主机。以下流程需要在两个主机上运行。
步骤
安装所需的软件包:
# dnf install nmstate libreswan NetworkManager-libreswan
重启 NetworkManager 服务:
# systemctl restart NetworkManager
如果已安装
Libreswan
,请删除其旧的数据库文件并重新创建它们:# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
在每个主机上生成 RSA 密钥对:
# ipsec newhostkey --output
显示公钥:
# ipsec showhostkey --list
上一步返回生成的密钥
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: ipsec 2 ipv4: enabled: true dhcp: true libreswan: ipsec-interface: '99' 3 leftrsasigkey: '0sAwEAAesFfVZqFzRA9F' 4 left: '192.0.2.250' 5 leftid: 'local-host-rsa.example.com' 6 right: '192.0.2.150' 7 rightrsasigkey: '0sAwEAAesFfVZqFzRA9E' 8 rightid: 'remote-host-rsa.example.com' 9 ikev2: 'insist' 10
YAML 文件定义以下设置:
将设置应用到系统:
# nmstatectl apply ~/create-rsa-authentication.yml
验证
显示网络接口的 IP 设置:
# ip addr show example_ipsec_conn1
验证 IPsec 状态:
# ip xfrm status
验证 IPsec 策略:
# ip xfrm policy
其他资源
-
ipsec.conf(5)
man page
7.5.3. 使用 nmstatectl 配置带有 PSK 身份验证和隧道模式的主机到子网 IPSec VPN
如果要在 IPsec 中使用基于 mutual 身份验证的加密,Pre-Shared Key (PSK)方法通过使用两个主机之间的 secret 密钥提供安全通信。文件存储机密密钥和相同的密钥加密通过隧道流的数据流。
通过使用 Nmstate (用于网络管理的声明性 API),您可以配置基于 PSK 的 IPsec 身份验证。设置配置后,Nmstate API 可确保结果与配置文件匹配。如果有任何失败,nmstate
会自动回滚更改以避免系统不正确状态。
要在 主机到
子网配置中建立加密通信,远程 IPsec 端通过使用参数 dhcp: true
为主机提供另一个 IP。在 nmstate 中定义 IPsec
的系统时,left
-named system 是本地主机,而 右
-named system 是远程主机。以下流程需要在两个主机上运行。
由于此方法使用静态字符串进行身份验证和加密,因此仅用于测试/开发目的。
流程
安装所需的软件包:
# dnf install nmstate libreswan NetworkManager-libreswan
重启 NetworkManager 服务:
# systemctl restart NetworkManager
如果已安装
Libreswan
,请删除其旧的数据库文件并重新创建它们:# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
在引导时启用
ipsec
服务:# systemctl enable --now ipsec
创建包含以下内容的 YAML 文件,如
~/create-pks-authentication.yml
:--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'no' 2 right: '192.0.2.250' 3 rightid: 'remote-host.example.org' 4 left: '192.0.2.150' 5 leftid: 'local-host.example.org' 6 psk: "example_password" ikev2: 'insist' 7
YAML 文件定义以下设置:
将设置应用到系统:
# nmstatectl apply ~/create-pks-authentication.yml
验证
显示网络接口的 IP 设置:
# ip addr show example_ipsec_conn1
验证 IPsec 状态:
# ip xfrm status
验证 IPsec 策略:
# ip xfrm policy
7.5.4. 使用 nmstatectl 配置主机到主机的 IPsec VPN,使用 PKI 身份验证和隧道模式
IPsec (互联网协议安全)是一个安全协议套件,用于验证和加密网络和设备中的 IP 通信。Libreswan
软件为 VPN 提供 IPsec 实现。
在隧道模式中,通信的源和目标 IP 地址在 IPsec 隧道中加密。外部网络嗅探器只能获取左侧 IP 和右 IP。通常,对于隧道模式,它支持 host-to-host
、host-to-subnet
和 subnet-to-subnet
。在此模式中,新的 IP 数据包封装现有的数据包及其有效负载和标头。这个模式的封装通过不安全的网络保护 IP 数据、源和目标标头。此模式可用于在子网到 子网
、远程访问连接和不受信任的网络(如开放公共 Wi-Fi 网络)中传输数据。默认情况下,IPsec 在隧道模式的两个站点之间建立安全频道。使用以下配置,您可以建立 VPN 连接作为 主机到主机
架构。
通过使用 Nmstate (用于网络管理的声明性 API),您可以配置 IPsec VPN 连接。设置配置后,Nmstate API 可确保结果与配置文件匹配。如果有任何失败,nmstate
会自动回滚更改以避免系统不正确状态。
在 主机到主机
配置中,您需要设置 leftmodecfgclient: no
,以便它无法从服务器接收网络配置,因此该值为 no
。在 nmstate 中定义 IPsec
的系统时,left
-named system 是本地主机,而 右
-named system 是远程主机。以下流程需要在两个主机上运行。
先决条件
- 通过使用密码,您生成了一个存储证书和密钥的 PKCSzFCP 文件。
流程
安装所需的软件包:
# dnf install nmstate libreswan NetworkManager-libreswan
重启 NetworkManager 服务:
# systemctl restart NetworkManager
因为
Libreswan
已安装,请删除其旧的数据库文件并重新创建它们:# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
导入 PKCScriu 文件:
# ipsec import node-example.p12
在导入 PKCScriu 文件时,输入用于生成该文件的密码。
启用并启动
ipsec
服务:# systemctl enable --now ipsec
创建包含以下内容的 YAML 文件,如
~/create-p2p-vpn-authentication.yml
:--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec libreswan: left: '192.0.2.250' 2 leftid: 'local-host.example.com' 3 leftcert: 'local-host.example.com' 4 leftmodecfgclient: 'no' 5 right: '192.0.2.150' 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
验证
显示创建的 P2P 策略:
# ip xfrm policy
验证 IPsec 状态:
# ip xfrm status
其他资源
-
ipsec.conf(5)
man page
7.5.5. 使用 nmstatectl 使用 PSK 验证和传输模式配置主机到主机的 IPsec VPN
IPsec (互联网协议安全)是一个安全协议套件,用于验证和加密网络和设备中的 IP 通信。Libreswan
工具为 VPN 提供基于 IPsec 的实现。
在传输模式中,加密仅适用于 IP 数据包的有效负载。另外,新的 IPsec 标头也会附加到 IP 数据包中,方法是保留原始 IP 标头。传输模式不会加密通信的源和目标 IP,而是将它们复制到外部 IP 标头中。因此,加密只保护网络中的 IP 数据。此模式可用于在网络的 主机到主机连接中
传输数据。此模式通常与 GRE 隧道一起使用,以节省 20 字节(IP 标头)的开销。默认情况下,IPsec
实用程序使用隧道模式。要使用传输模式,请为 主机到主机
连接数据传输设置 type: transport
。
通过使用 Nmstate (用于网络管理的声明性 API),您可以配置 IPsec VPN 连接。设置配置后,Nmstate API 可确保结果与配置文件匹配。如果有任何失败,nmstate
会自动回滚更改以避免系统不正确状态。要覆盖默认的 隧道
模式,请指定 传输模式
。
在 nmstate 中定义 IPsec
的系统时,left
-named system 是本地主机,而 右
-named system 是远程主机。以下流程需要在两个主机上运行。
先决条件
- 通过使用密码,您生成了一个存储证书和密钥的 PKCSzFCP 文件。
步骤
安装所需的软件包:
# dnf install nmstate libreswan NetworkManager-libreswan
重启 NetworkManager 服务:
# systemctl restart NetworkManager
因为
Libreswan
已安装,请删除其旧的数据库文件并重新创建它们:# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
导入 PKCScriu 文件:
# ipsec import node-example.p12
导入 PKCSbusybox 文件时,请输入用于创建该文件的密码。
启用并启动
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.250' 4 leftid: '%fromcert' 5 leftcert: 'local-host.example.org' 6 right: '192.0.2.150' 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&
gt;,并自动找到下一个可用数字 - 4
- 本地主机的公共网络接口的静态 IPv4 地址
- 5
- 在本地主机中,
%fromcert
的值设置为从加载的证书获取的可辨识名称(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
验证
验证 IPsec 状态:
# ip xfrm status
验证 IPsec 策略:
# ip xfrm policy
其他资源
-
ipsec.conf(5)
man page