6.13. 使用 nmstatectl 配置 IPsec VPN 连接
您可以使用虚拟专用网络(VPN)通过不可信网络(如互联网)建立安全加密的隧道。此类隧道可确保传输中数据的保密性和完整性。常见用例包括将分支机构连接到总部。
您可以使用 nmstatectl
工具通过 Nmstate API 配置 Libreswan IPsec VPN 连接。nmstatectl
工具是一个命令行工具,用于通过声明性 Nmstate API 管理主机网络。您不必运行多个必需命令来配置接口,而是在 YAML 文件中定义预期状态。然后,nmstate 会采用此定义并将其应用到系统。这种方法的关键优点是原子结果。nmstate 可确保生成的配置精确与您的 YAML 定义匹配。如果配置的任何部分无法应用,它会自动回滚所有更改,并防止系统进入不正确或损坏的网络状态。
由于 NetworkManager-libreswan
插件的设计,您只能在一个对等点中使用 nmstatectl
,必须在另一个对等点上手动配置 Libreswan。
6.13.1. 使用 nmstatectl使用原始 RSA 密钥身份验证配置 IPsec 主机到主机的 VPN 复制链接链接已复制到粘贴板!
主机到主机 VPN 在两个设备之间建立直接、安全和加密的连接,允许应用程序通过不安全的网络(如互联网)安全地进行通信。
为进行身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需求来简化部署,同时仍然提供强大的对等身份验证。
您可以使用 Nmstate API 来配置与现有 Libreswan IPsec 主机的连接。在这种情况下,Nmstate 可确保生成的配置与 YAML 文件中的定义匹配,或者自动回滚更改以避免系统出现不正确的状态。请注意,Nmstate 只验证状态,且不会防止错误但有效配置。
通常,选择将主机命名为 left,右边 是任意的。但是,NetworkManager 始终使用 左侧 为本地主机的术语,并为远程主机使用 右边。
先决条件
远程 peer 运行 Libreswan IPsec,并为 主机到主机 连接准备。
由于
NetworkManager-libreswan
插件的设计,Nmstate 无法与其他使用此插件进行同一连接的对等点通信。
流程
如果 Libreswan 尚未安装,请执行以下步骤:
安装所需的软件包:
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 NetworkManager 服务:
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令在
/var/lib/ipsec/nss/
目录中创建数据库。在防火墙中打开 IPsec 端口和协议:
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 RSA 密钥对:
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
实用程序将密钥对存储在 NSS 数据库中。在左侧和右侧对等点上显示证书密钥属性 ID (CKAID):
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下一步需要两个对等点的 CKAID。
显示公钥:
在左侧 peer 中,输入:
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在右 peer 中,输入:
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
命令会显示公钥,以及必须在配置文件中使用的对应参数。
创建包含以下内容的 YAML 文件,如
~/ipsec-host-to-host-rsa-auth.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例中指定的设置包括:
ikev2: insist
- 将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。在带有 Nmstate 的主机配置中,此设置是必须的。
left= <ip_address_or_fqdn_of_left_peer>
和right= <ip_address_or_fqdn_of_right_peer>
- 定义对等点的 IP 地址或 DNS 名称。
leftid= <id>
和rightid= <id>
-
定义如何在互联网密钥交换(IKE)协商过程中识别每个对等点。这可以是 IP 地址或字面字符串。请注意,NetworkManager 将 IP 地址以外的所有值解释为字面字符串,并在内部添加前导
@
符号。这要求 Libreswan peer 还使用字面字符串作为 ID 或身份验证失败。 leftrsasigkey=<public_key>
andrightrsasigkey=<public_key>
-
指定对等点的公钥。使用上一步中
ipsec showhostkey
命令显示的值。 leftmodecfgclient: false
- 禁用此主机上的动态配置。在带有 Nmstate 的主机配置中,此设置是必须的。
rightsubnet: <ip_address_of_right_peer>/32
- 定义主机只能访问这个对等点。在带有 Nmstate 的主机配置中,此设置是必须的。
将设置应用到系统:
nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
# nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 IPsec 状态:
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果成功建立连接,输出包含如下行:
互联网密钥交换版本 2 (IKEv2)协商的阶段 1 成功完成:
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安全关联(SA)现在可以协商实际数据加密隧道,称为子 SA 或阶段 2 SA。
已建立了子 SA:
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是您的数据流量通过的实际隧道。
故障排除
要显示 NetworkManager 传递给 Libreswan 的实际配置,请输入:
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您将设置与远程主机上的 Libreswan 配置进行比较时,输出可帮助识别设置(如 ID 和密钥)。
后续步骤
- 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道。
6.13.2. 使用 nmstatectl使用原始 RSA 密钥身份验证配置 IPsec 站点到站点 VPN 复制链接链接已复制到粘贴板!
站点到站点的 VPN 在两个不同的网络之间建立一个安全、加密的隧道,在不安全的公共网络(如互联网)中无缝链接。例如,这可让分支机构中的设备访问公司总部的资源,就如同它们都是同一本地网络的一部分一样。
为对网关设备进行身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需求来简化部署,同时仍然提供强大的对等身份验证。
您可以使用 Nmstate API 来配置与现有 Libreswan IPsec 网关的连接。在这种情况下,Nmstate 可确保生成的配置与 YAML 文件中的定义匹配,或者自动回滚更改以避免系统出现不正确的状态。请注意,Nmstate 只验证状态,且不会防止错误但有效配置。
通常,选择将哪些主机命名为 left,右边 是任意的。但是,NetworkManager 始终使用 左侧 为本地主机的术语,并为远程主机使用 右边。
先决条件
远程网关运行 Libreswan IPsec,并为 站点到站点 连接准备。
由于
NetworkManager-libreswan
插件的设计,Nmstate 无法与其他使用此插件进行同一连接的对等点通信。
流程
如果 Libreswan 尚未安装,请执行以下步骤:
安装所需的软件包:
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 NetworkManager 服务:
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令在
/var/lib/ipsec/nss/
目录中创建数据库。在防火墙中打开 IPsec 端口和协议:
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 RSA 密钥对:
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
实用程序将密钥对存储在 NSS 数据库中。在左侧和右侧显示证书密钥属性 ID (CKAID):
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下步骤中,您需要两个对等点的 CKAID。
显示公钥:
在左侧 peer 中,输入:
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在右 peer 中,输入:
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
命令会显示公钥,以及必须在配置文件中使用的对应参数。
创建包含以下内容的 YAML 文件,如
~/ipsec-site-to-site-rsa-auth.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例中指定的设置包括:
ikev2: insist
- 将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。在带有 Nmstate 的站点到站点配置中,此设置是必须的。
left= <ip_address_or_fqdn_of_left_peer>
和right= <ip_address_or_fqdn_of_right_peer>
- 定义对等点的 IP 地址或 DNS 名称。
leftid= <id>
和rightid= <id>
-
定义如何在互联网密钥交换(IKE)协商过程中识别每个对等点。这可以是 IP 地址或字面字符串。请注意,NetworkManager 将 IP 地址以外的所有值解释为字面字符串,并在内部添加前导
@
符号。这要求 Libreswan peer 还使用字面字符串作为 ID 或身份验证失败。 leftrsasigkey=<public_key>
andrightrsasigkey=<public_key>
-
指定对等点的公钥。使用上一步中
ipsec showhostkey
命令显示的值。 leftmodecfgclient: false
- 禁用此主机上的动态配置。在带有 Nmstate 的站点到站点配置中,此设置是必须的。
leftsubnet= <subnet>
和rightsubnet= <subnet>
- 定义通过隧道连接的无类别域间路由(CIDR)格式的子网。
启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将设置应用到系统:
nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
# nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 IPsec 状态:
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果成功建立连接,输出包含如下行:
互联网密钥交换版本 2 (IKEv2)协商的阶段 1 成功完成:
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安全关联(SA)现在可以协商实际数据加密隧道,称为子 SA 或阶段 2 SA。
已建立了子 SA:
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是您的数据流量通过的实际隧道。
- 从本地子网中的客户端 ping 远程子网中的客户端。
故障排除
要显示 NetworkManager 传递给 Libreswan 的实际配置,请输入:
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您将设置与远程主机上的 Libreswan 配置进行比较时,输出可帮助识别设置(如 ID 和密钥)。
后续步骤
- 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道。
6.13.3. 使用 nmstatectl将客户端配置为连接到 IPsec VPN 网关 复制链接链接已复制到粘贴板!
要访问远程私有网络上的资源,用户必须首先配置 IPsec VPN 连接。您可以使用 Nmstate API 来配置与现有 Libreswan IPsec 网关的连接。在这种情况下,Nmstate 可确保生成的配置与 YAML 文件中的定义匹配,或者自动回滚更改以避免系统出现不正确的状态。请注意,Nmstate 只验证状态,且不会防止错误但有效配置。
通常,选择将主机命名为 left,右边 是任意的。但是,NetworkManager 始终使用 左侧 为本地主机的术语,并为远程主机使用 右边。
先决条件
远程网关运行 Libreswan IPsec,并为带有 基于证书的身份验证的主机到站点 连接做好准备。
由于
NetworkManager-libreswan
插件的设计,Nmstate 无法与其他使用此插件进行同一连接的对等点通信。PKCSburst 文件
~/file.p12
存在于客户端上,其中包含以下内容:- 用户的私钥
- 用户证书
- CA 证书
- 如果需要,则中间证书
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
-
证书中的扩展密钥用法(EKU)被设置为
TLS Web 客户端身份验证
。
流程
如果 Libreswan 尚未安装:
安装所需的软件包:
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 NetworkManager 服务:
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令在
/var/lib/ipsec/nss/
目录中创建数据库。在防火墙中打开 IPsec 端口和协议:
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将 PKCSautomationhub 文件导入到 NSS 数据库中:
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示用户和 CA 证书的别名:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Nmstate YAML 文件中需要此信息。
创建包含以下内容的 YAML 文件,如
~/ipsec-host-to-site-cert-auth.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例中指定的设置包括:
ikev2: insist
- 将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。在带有 Nmstate 的主机到站点配置中,此设置是必须的。
left= <ip_address_or_fqdn_of_left_peer>
和right= <ip_address_or_fqdn_of_right_peer>
- 定义对等点的 IP 地址或 DNS 名称。
leftid=%fromcert
和rightid=%fromcert
- 将 Libreswan 配置为从证书的可分辨名称(DN)字段检索身份。
leftcert="<server_certificate_nickname>"
- 设置 NSS 数据库中使用的服务器证书的别名。
rightsubnet: < ;subnet>
- 以无类别域间路由(CIDR)格式定义连接到网关的子网。
将设置应用到系统:
nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
# nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 建立与远程网络中主机的连接或 ping 它。
故障排除
要显示 NetworkManager 传递给 Libreswan 的实际配置,请输入:
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您将设置与远程主机上的 Libreswan 配置进行比较时,输出可帮助识别设置(如 ID 和密钥)。
后续步骤
- 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道。