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右边 是任意的。但是,NetworkManager 始终使用 左侧 为本地主机的术语,并为远程主机使用 右边

先决条件

  • 远程 peer 运行 Libreswan IPsec,并为 主机到主机 连接准备。

    由于 NetworkManager-libreswan 插件的设计,Nmstate 无法与其他使用此插件进行同一连接的对等点通信。

流程

  1. 如果 Libreswan 尚未安装,请执行以下步骤:

    1. 安装所需的软件包:

      # dnf install nmstate libreswan NetworkManager-libreswan
      Copy to Clipboard Toggle word wrap
    2. 重启 NetworkManager 服务:

      # systemctl restart NetworkManager
      Copy to Clipboard Toggle word wrap
    3. 初始化网络安全服务(NSS)数据库:

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      该命令在 /var/lib/ipsec/nss/ 目录中创建数据库。

    4. 在防火墙中打开 IPsec 端口和协议:

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. 创建 RSA 密钥对:

    # ipsec newhostkey
    Copy to Clipboard Toggle word wrap

    ipsec 实用程序将密钥对存储在 NSS 数据库中。

  3. 在左侧和右侧对等点上显示证书密钥属性 ID (CKAID):

    # ipsec showhostkey --list
    < 1> RSA keyid: <key_id> ckaid: <ckaid>
    Copy to Clipboard Toggle word wrap

    下一步需要两个对等点的 CKAID。

  4. 显示公钥:

    1. 在左侧 peer 中,输入:

      # ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
              # rsakey AwEAAdKCx
              leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
      Copy to Clipboard Toggle word wrap
    2. 在右 peer 中,输入:

      # ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
              # rsakey AwEAAcNWC
              rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
      Copy to Clipboard Toggle word wrap

    命令会显示公钥,以及必须在配置文件中使用的对应参数。

  5. 创建包含以下内容的 YAML 文件,如 ~/ipsec-host-to-host-rsa-auth.yml

    ---
    interfaces:
    - name: '<connection_name>'
      type: ipsec
      libreswan:
        ikev2: insist
    
        left: <ip_address_or_fqdn_of_left_peer>
        leftid: peer_b
        leftrsasigkey: <public_key_of_left_peer>
        leftmodecfgclient: false
    
        right: <ip_address_or_fqdn_of_right_peer>
        rightid: peer_a
        rightrsasigkey: <public_key_of_right_peer>
        rightsubnet: <ip_address_of_right_peer>/32
    Copy to Clipboard Toggle word wrap

    示例中指定的设置包括:

    ikev2: insist
    将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。在带有 Nmstate 的主机配置中,此设置是必须的。
    left= &lt;ip_address_or_fqdn_of_left_peer>right= &lt;ip_address_or_fqdn_of_right_peer>
    定义对等点的 IP 地址或 DNS 名称。
    leftid= &lt;id>rightid= &lt;id>
    定义如何在互联网密钥交换(IKE)协商过程中识别每个对等点。这可以是 IP 地址或字面字符串。请注意,NetworkManager 将 IP 地址以外的所有值解释为字面字符串,并在内部添加前导 @ 符号。这要求 Libreswan peer 还使用字面字符串作为 ID 或身份验证失败。
    leftrsasigkey=<public_key> and rightrsasigkey=<public_key>
    指定对等点的公钥。使用上一步中 ipsec showhostkey 命令显示的值。
    leftmodecfgclient: false
    禁用此主机上的动态配置。在带有 Nmstate 的主机配置中,此设置是必须的。
    rightsubnet: <ip_address_of_right_peer>/32
    定义主机只能访问这个对等点。在带有 Nmstate 的主机配置中,此设置是必须的。
  6. 将设置应用到系统:

    # nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
    Copy to Clipboard Toggle word wrap

验证

  • 显示 IPsec 状态:

    # ipsec status
    Copy to Clipboard Toggle word wrap

    如果成功建立连接,输出包含如下行:

    • 互联网密钥交换版本 2 (IKEv2)协商的阶段 1 成功完成:

      000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
      Copy to Clipboard Toggle word wrap

      安全关联(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;
      Copy to Clipboard Toggle word wrap

      这是您的数据流量通过的实际隧道。

故障排除

  • 要显示 NetworkManager 传递给 Libreswan 的实际配置,请输入:

    # nmcli connection export <connection_name>
    Copy to Clipboard Toggle word wrap

    当您将设置与远程主机上的 Libreswan 配置进行比较时,输出可帮助识别设置(如 ID 和密钥)。

后续步骤

站点到站点的 VPN 在两个不同的网络之间建立一个安全、加密的隧道,在不安全的公共网络(如互联网)中无缝链接。例如,这可让分支机构中的设备访问公司总部的资源,就如同它们都是同一本地网络的一部分一样。

为对网关设备进行身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需求来简化部署,同时仍然提供强大的对等身份验证。

您可以使用 Nmstate API 来配置与现有 Libreswan IPsec 网关的连接。在这种情况下,Nmstate 可确保生成的配置与 YAML 文件中的定义匹配,或者自动回滚更改以避免系统出现不正确的状态。请注意,Nmstate 只验证状态,且不会防止错误但有效配置。

注意

通常,选择将哪些主机命名为 left右边 是任意的。但是,NetworkManager 始终使用 左侧 为本地主机的术语,并为远程主机使用 右边

先决条件

  • 远程网关运行 Libreswan IPsec,并为 站点到站点 连接准备。

    由于 NetworkManager-libreswan 插件的设计,Nmstate 无法与其他使用此插件进行同一连接的对等点通信。

流程

  1. 如果 Libreswan 尚未安装,请执行以下步骤:

    1. 安装所需的软件包:

      # dnf install nmstate libreswan NetworkManager-libreswan
      Copy to Clipboard Toggle word wrap
    2. 重启 NetworkManager 服务:

      # systemctl restart NetworkManager
      Copy to Clipboard Toggle word wrap
    3. 初始化网络安全服务(NSS)数据库:

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      该命令在 /var/lib/ipsec/nss/ 目录中创建数据库。

    4. 在防火墙中打开 IPsec 端口和协议:

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. 创建 RSA 密钥对:

    # ipsec newhostkey
    Copy to Clipboard Toggle word wrap

    ipsec 实用程序将密钥对存储在 NSS 数据库中。

  3. 在左侧和右侧显示证书密钥属性 ID (CKAID):

    # ipsec showhostkey --list
    < 1> RSA keyid: <key_id> ckaid: <ckaid>
    Copy to Clipboard Toggle word wrap

    在以下步骤中,您需要两个对等点的 CKAID。

  4. 显示公钥:

    1. 在左侧 peer 中,输入:

      # ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
              # rsakey AwEAAdKCx
              leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
      Copy to Clipboard Toggle word wrap
    2. 在右 peer 中,输入:

      # ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
              # rsakey AwEAAcNWC
              rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
      Copy to Clipboard Toggle word wrap

    命令会显示公钥,以及必须在配置文件中使用的对应参数。

  5. 创建包含以下内容的 YAML 文件,如 ~/ipsec-site-to-site-rsa-auth.yml

    ---
    interfaces:
    - name: '<connection_name>'
      type: ipsec
      libreswan:
        ikev2: insist
    
        left: <ip_address_or_fqdn_of_left_peer>
        leftid: peer_b
        leftrsasigkey: <public_key_of_left_peer>
        leftmodecfgclient: false
        leftsubnet: 198.51.100.0/24
    
        right: <ip_address_or_fqdn_of_right_peer>
        rightid: peer_a
        rightrsasigkey: <public_key_of_right_peer>
        rightsubnet: 192.0.2.0/24
    Copy to Clipboard Toggle word wrap

    示例中指定的设置包括:

    ikev2: insist
    将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。在带有 Nmstate 的站点到站点配置中,此设置是必须的。
    left= &lt;ip_address_or_fqdn_of_left_peer>right= &lt;ip_address_or_fqdn_of_right_peer>
    定义对等点的 IP 地址或 DNS 名称。
    leftid= &lt;id>rightid= &lt;id>
    定义如何在互联网密钥交换(IKE)协商过程中识别每个对等点。这可以是 IP 地址或字面字符串。请注意,NetworkManager 将 IP 地址以外的所有值解释为字面字符串,并在内部添加前导 @ 符号。这要求 Libreswan peer 还使用字面字符串作为 ID 或身份验证失败。
    leftrsasigkey=<public_key> and rightrsasigkey=<public_key>
    指定对等点的公钥。使用上一步中 ipsec showhostkey 命令显示的值。
    leftmodecfgclient: false
    禁用此主机上的动态配置。在带有 Nmstate 的站点到站点配置中,此设置是必须的。
    leftsubnet= &lt;subnet>rightsubnet= &lt;subnet>
    定义通过隧道连接的无类别域间路由(CIDR)格式的子网。
  6. 启用数据包转发:

    # 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 Toggle word wrap
  7. 将设置应用到系统:

    # nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
    Copy to Clipboard Toggle word wrap

验证

  1. 显示 IPsec 状态:

    # ipsec status
    Copy to Clipboard Toggle word wrap

    如果成功建立连接,输出包含如下行:

    • 互联网密钥交换版本 2 (IKEv2)协商的阶段 1 成功完成:

      000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
      Copy to Clipboard Toggle word wrap

      安全关联(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;
      Copy to Clipboard Toggle word wrap

      这是您的数据流量通过的实际隧道。

  2. 从本地子网中的客户端 ping 远程子网中的客户端。

故障排除

  • 要显示 NetworkManager 传递给 Libreswan 的实际配置,请输入:

    # nmcli connection export <connection_name>
    Copy to Clipboard Toggle word wrap

    当您将设置与远程主机上的 Libreswan 配置进行比较时,输出可帮助识别设置(如 ID 和密钥)。

后续步骤

要访问远程私有网络上的资源,用户必须首先配置 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 客户端身份验证

流程

  1. 如果 Libreswan 尚未安装:

    1. 安装所需的软件包:

      # dnf install nmstate libreswan NetworkManager-libreswan
      Copy to Clipboard Toggle word wrap
    2. 重启 NetworkManager 服务:

      # systemctl restart NetworkManager
      Copy to Clipboard Toggle word wrap
    3. 初始化网络安全服务(NSS)数据库:

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      该命令在 /var/lib/ipsec/nss/ 目录中创建数据库。

    4. 在防火墙中打开 IPsec 端口和协议:

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. 将 PKCSautomationhub 文件导入到 NSS 数据库中:

    # ipsec import ~/file.p12
    Enter password for PKCS12 file: <password>
    pk12util: PKCS12 IMPORT SUCCESSFUL
    correcting trust bits for Example-CA
    Copy to Clipboard Toggle word wrap
  3. 显示用户和 CA 证书的别名:

    # certutil -L -d /var/lib/ipsec/nss/
    Certificate Nickname     Trust Attributes
                             SSL,S/MIME,JAR/XPI
    
    user                     u,u,u
    Example-CA               CT,,
    ...
    Copy to Clipboard Toggle word wrap

    在 Nmstate YAML 文件中需要此信息。

  4. 创建包含以下内容的 YAML 文件,如 ~/ipsec-host-to-site-cert-auth.yml

    ---
    interfaces:
    - name: '<connection_name>'
      type: ipsec
      libreswan:
        ikev2: insist
    
        left: <ip_address_or_fqdn_of_left_peer>
        leftid: '%fromcert'
        leftcert: <user_certificate_nickname>
    
        right: <ip_address_or_fqdn_of_right_peer>
        rightid: '%fromcert'
        rightsubnet: 192.0.2.0/24
    Copy to Clipboard Toggle word wrap

    示例中指定的设置包括:

    ikev2: insist
    将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。在带有 Nmstate 的主机到站点配置中,此设置是必须的。
    left= &lt;ip_address_or_fqdn_of_left_peer>right= &lt;ip_address_or_fqdn_of_right_peer>
    定义对等点的 IP 地址或 DNS 名称。
    leftid=%fromcertrightid=%fromcert
    将 Libreswan 配置为从证书的可分辨名称(DN)字段检索身份。
    leftcert="<server_certificate_nickname>"
    设置 NSS 数据库中使用的服务器证书的别名。
    rightsubnet: &lt ;subnet>
    以无类别域间路由(CIDR)格式定义连接到网关的子网。
  5. 将设置应用到系统:

    # nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
    Copy to Clipboard Toggle word wrap

验证

  • 建立与远程网络中主机的连接或 ping 它。

故障排除

  • 要显示 NetworkManager 传递给 Libreswan 的实际配置,请输入:

    # nmcli connection export <connection_name>
    Copy to Clipboard Toggle word wrap

    当您将设置与远程主机上的 Libreswan 配置进行比较时,输出可帮助识别设置(如 ID 和密钥)。

后续步骤

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat