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 只验证状态,且不会防止错误但有效的配置。

注意

通常,选择哪个主机是 leftright 是任意的。但是,NetworkManager 始终对本地主机使用术语 left ,对远程主机使用术语 right

先决条件

  • 远程对等点运行 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. 在左侧对等点中,输入:

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

      # 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=<ip_address_or_fqdn_of_left_peer> and right=<ip_address_or_fqdn_of_right_peer>
    定义对等点的 IP 地址或 DNS 名称。
    leftid=<id> and rightid=<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 只验证状态,且不会防止错误但有效的配置。

注意

通常,选择哪个主机命是 leftright 是任意的。但是,NetworkManager 始终对本地主机使用术语 left ,对远程主机使用术语 right

先决条件

  • 远程网关运行 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. 在左侧对等点中,输入:

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

      # 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=<ip_address_or_fqdn_of_left_peer> and right=<ip_address_or_fqdn_of_right_peer>
    定义对等点的 IP 地址或 DNS 名称。
    leftid=<id> and rightid=<id>
    定义在互联网密钥交换(IKE)协商过程中每个对等点是如何被识别的。这可以是一个 IP 地址或一个字面字符串。请注意,NetworkManager 将 IP 地址以外的所有值解释为字面字符串,并在内部添加一个前导 @ 符号。这要求 Libreswan peer 也使用字面字符串作为 ID 或身份验证失败。
    leftrsasigkey=<public_key> and rightrsasigkey=<public_key>
    指定对等点的公钥。使用上一步中 ipsec showhostkey 命令显示的值。
    leftmodecfgclient: false
    在此主机上禁用动态配置。此设置在使用 Nmstate 的站点到站点配置中是必须的。
    leftsubnet=<subnet> and rightsubnet=<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 只验证状态,且不会防止错误但有效的配置。

注意

通常,选择哪个主机是 leftright 是任意的。但是,NetworkManager 始终对本地主机使用术语 left ,对远程主机使用术语 right

先决条件

  • 远程网关运行 Libreswan IPsec,并为带有 基于证书的身份验证的主机到站点 连接做好了准备。

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

  • PKCS#12 文件 ~/file.p12 在客户端上存在,并包含以下内容:

    • 用户的私钥
    • 用户证书
    • CA 证书
    • 中间证书(如果需要的话)

    有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。

  • 证书中的扩展密钥用法(EKU)被设置为 TLS Web Client Authentication

流程

  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. 将 PKCS #12 文件导入到 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=<ip_address_or_fqdn_of_left_peer> and right=<ip_address_or_fqdn_of_right_peer>
    定义对等点的 IP 地址或 DNS 名称。
    leftid=%fromcertrightid=%fromcert
    将 Libreswan 配置为从证书的可分辨名称(DN)字段检索身份。
    leftcert="<server_certificate_nickname>"
    设置 NSS 数据库中使用的服务器证书的昵称。
    rightsubnet: <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