6.13. 使用 nmstatectl 配置 IPsec VPN 连接
您可以使用虚拟专用网络(VPN)建立一个在不可信网络(如互联网)上的安全的、加密的隧道。此类隧道确保传输中数据的保密性和完整性。常见用例包括将分支机构连接到总部。
您可以使用 nmstatectl 工具通过 Nmstate API 配置 Libreswan IPsec VPN 连接。nmstatectl 工具是一个命令行工具,来通过声明性 Nmstate API 管理主机网络。不必运行多个必需命令式命令来配置接口,您可以在 YAML 文件中定义预期的状态。然后,nmstate 采用此定义并将其应用到系统。这种方法的关键优点是原子结果。nmstate 确保生成的配置与您的 YAML 定义准确匹配。如果配置的任何一部分无法应用,它会自动回滚所有更改,并防止系统进入到一个不正确或损坏的网络状态。
由于 NetworkManager-libreswan 插件的设计,您只能在一个对等点上使用 nmstatectl,必须在另一个对等点上手动配置 Libreswan。
主机到主机 VPN 在两个设备之间建立一个直接、安全和加密的连接,允许应用程序通过不安全网络(如互联网)安全地进行通信。
对于身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需要简化部署,同时仍然提供强大的对等身份验证。
您可以使用 Nmstate API 配置与现有 Libreswan IPsec 主机的连接。在这种情况下,Nmstate 可确保生成的配置与 YAML 文件中的定义匹配,或者它自动回滚更改,以避免不正确的系统状态。请注意,Nmstate 只验证状态,且不会防止错误但有效的配置。
通常,选择哪个主机是 left,right 是任意的。但是,NetworkManager 始终对本地主机使用术语 left ,对远程主机使用术语 right。
先决条件
远程对等点运行 Libreswan IPsec,并为 主机到主机 连接做好了准备。
由于
NetworkManager-libreswan插件的设计,Nmstate 无法与其他对同一连接使用此插件的对等点进行通信。
流程
如果 Libreswan 尚未安装,请执行以下步骤:
安装所需的软件包:
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 NetworkManager 服务:
systemctl restart NetworkManager
# systemctl restart NetworkManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnssCopy 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 --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个 RSA 密钥对:
ipsec newhostkey
# ipsec newhostkeyCopy 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。
显示公钥:
在左侧对等点中,输入:
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 在右侧对等点中,输入:
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>andright=<ip_address_or_fqdn_of_right_peer>- 定义对等点的 IP 地址或 DNS 名称。
leftid=<id>andrightid=<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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 IPsec 状态:
ipsec status
# ipsec statusCopy 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 和 right 是任意的。但是,NetworkManager 始终对本地主机使用术语 left ,对远程主机使用术语 right。
先决条件
远程网关运行 Libreswan IPsec,并为 站点到站点 连接做好了准备。
由于
NetworkManager-libreswan插件的设计,Nmstate 无法与其他对同一连接使用此插件的对等点进行通信。
流程
如果 Libreswan 尚未安装,请执行以下步骤:
安装所需的软件包:
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 NetworkManager 服务:
systemctl restart NetworkManager
# systemctl restart NetworkManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnssCopy 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 --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个 RSA 密钥对:
ipsec newhostkey
# ipsec newhostkeyCopy 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。
显示公钥:
在左侧对等点中,输入:
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 在右侧对等点中,输入:
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>andright=<ip_address_or_fqdn_of_right_peer>- 定义对等点的 IP 地址或 DNS 名称。
leftid=<id>andrightid=<id>-
定义在互联网密钥交换(IKE)协商过程中每个对等点是如何被识别的。这可以是一个 IP 地址或一个字面字符串。请注意,NetworkManager 将 IP 地址以外的所有值解释为字面字符串,并在内部添加一个前导
@符号。这要求 Libreswan peer 也使用字面字符串作为 ID 或身份验证失败。 leftrsasigkey=<public_key>andrightrsasigkey=<public_key>-
指定对等点的公钥。使用上一步中
ipsec showhostkey命令显示的值。 leftmodecfgclient: false- 在此主机上禁用动态配置。此设置在使用 Nmstate 的站点到站点配置中是必须的。
leftsubnet=<subnet>andrightsubnet=<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.confCopy 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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 IPsec 状态:
ipsec status
# ipsec statusCopy 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,right 是任意的。但是,NetworkManager 始终对本地主机使用术语 left ,对远程主机使用术语 right。
先决条件
远程网关运行 Libreswan IPsec,并为带有 基于证书的身份验证的主机到站点 连接做好了准备。
由于
NetworkManager-libreswan插件的设计,Nmstate 无法与其他对同一连接使用此插件的对等点进行通信。PKCS#12 文件
~/file.p12在客户端上存在,并包含以下内容:- 用户的私钥
- 用户证书
- CA 证书
- 中间证书(如果需要的话)
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
-
证书中的扩展密钥用法(EKU)被设置为
TLS Web Client Authentication。
流程
如果 Libreswan 尚未安装:
安装所需的软件包:
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 NetworkManager 服务:
systemctl restart NetworkManager
# systemctl restart NetworkManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnssCopy 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 --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将 PKCS #12 文件导入到 NSS 数据库中:
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CACopy 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>andright=<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.ymlCopy 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 连接分配给专用路由表,以防止连接绕过隧道。