搜索

7.5. 使用 nmstatectl 配置基于 IPsec 的 VPN 连接

download PDF

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 文件。

步骤

  1. 安装所需的软件包:

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. 重启 NetworkManager 服务:

    # systemctl restart NetworkManager
  3. 因为 Libreswan 已安装,请删除其旧的数据库文件并重新创建它们:

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 启用并启动 ipsec 服务:

    # systemctl enable --now ipsec
  5. 导入 PKCScriu 文件:

    # ipsec import node-example.p12

    导入 PKCSbusybox 文件时,请输入用于创建该文件的密码。

  6. 创建包含以下内容的 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 创建一个 IPsec xfrm 虚拟接口 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)的持续时间
  7. 将设置应用到系统:

    # nmstatectl apply ~/create-pki-authentication.yml

验证

  1. 验证 IPsec 状态:

    # ip xfrm status
  2. 验证 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 是远程主机。以下流程需要在两个主机上运行。

步骤

  1. 安装所需的软件包:

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. 重启 NetworkManager 服务:

    # systemctl restart NetworkManager
  3. 如果已安装 Libreswan,请删除其旧的数据库文件并重新创建它们:

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 在每个主机上生成 RSA 密钥对:

    # ipsec newhostkey --output
  5. 显示公钥:

    # ipsec showhostkey --list
  6. 上一步返回生成的密钥 ckaid。在左侧使用以下命令使用 ckaid,例如:

    # ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>
  7. 上一命令的输出生成了配置所需的 leftrsasigkey= 行。在第二个主机(右)上执行相同的操作:

    # ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>
  8. 在引导时启用 ipsec 服务:

    # systemctl enable --now ipsec
  9. 创建包含以下内容的 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 文件定义以下设置:

    1
    IPsec 连接名称
    2
    接口名称
    3
    99 表示 libreswan 创建一个 IPsec xfrm 虚拟接口 ipsec<number& gt;,并自动找到下一个可用数字
    4
    本地主机的 RSA 公钥
    5
    本地主机的公共网络接口的静态 IPv4 地址
    6
    本地主机的可辨识名称(DN)
    7
    远程主机的 RSA 公钥
    8
    远程主机的公共网络接口的静态 IPv4 地址
    9
    远程主机的可辨识名称(DN)
    10
    insist 值只接受并接收互联网密钥交换(IKEv2)协议
  10. 将设置应用到系统:

    # nmstatectl apply ~/create-rsa-authentication.yml

验证

  1. 显示网络接口的 IP 设置:

    # ip addr show example_ipsec_conn1
  2. 验证 IPsec 状态:

    # ip xfrm status
  3. 验证 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 是远程主机。以下流程需要在两个主机上运行。

注意

由于此方法使用静态字符串进行身份验证和加密,因此仅用于测试/开发目的。

流程

  1. 安装所需的软件包:

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. 重启 NetworkManager 服务:

    # systemctl restart NetworkManager
  3. 如果已安装 Libreswan,请删除其旧的数据库文件并重新创建它们:

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 在引导时启用 ipsec 服务:

    # systemctl enable --now ipsec
  5. 创建包含以下内容的 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 文件定义以下设置:

    1
    IPsec 连接名称
    2
    设置 no value 表示 libreswan 只创建 xfrm 策略,而不是虚拟 xfrm 接口
    3
    远程主机的公共网络接口的静态 IPv4 地址
    4
    远程主机的可辨识名称(DN)
    5
    本地主机的公共网络接口的静态 IPv4 地址
    6
    本地主机的可辨识名称(DN)
    7
    insist 值只接受并接收互联网密钥交换(IKEv2)协议
  6. 将设置应用到系统:

    # nmstatectl apply ~/create-pks-authentication.yml

验证

  1. 显示网络接口的 IP 设置:

    # ip addr show example_ipsec_conn1
  2. 验证 IPsec 状态:

    # ip xfrm status
  3. 验证 IPsec 策略:

    # ip xfrm policy

7.5.4. 使用 nmstatectl 配置主机到主机的 IPsec VPN,使用 PKI 身份验证和隧道模式

IPsec (互联网协议安全)是一个安全协议套件,用于验证和加密网络和设备中的 IP 通信。Libreswan 软件为 VPN 提供 IPsec 实现。

在隧道模式中,通信的源和目标 IP 地址在 IPsec 隧道中加密。外部网络嗅探器只能获取左侧 IP 和右 IP。通常,对于隧道模式,它支持 host-to-hosthost-to-subnetsubnet-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 文件。

流程

  1. 安装所需的软件包:

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. 重启 NetworkManager 服务:

    # systemctl restart NetworkManager
  3. 因为 Libreswan 已安装,请删除其旧的数据库文件并重新创建它们:

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 导入 PKCScriu 文件:

    # ipsec import node-example.p12

    在导入 PKCScriu 文件时,输入用于生成该文件的密码。

  5. 启用并启动 ipsec 服务:

    # systemctl enable --now ipsec
  6. 创建包含以下内容的 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 文件定义以下设置:

    1
    IPsec 连接名称
    2
    本地主机的公共网络接口的静态 IPv4 地址
    3
    本地主机的可分辨名称(DN)
    4
    在本地主机上安装的证书名称
    5
    不是从远程主机检索客户端配置的值
    6
    远程主机的公共网络接口的静态 IPv4 地址
    7
    远程主机的可区分名称(DN)
    8
    远程主机的子网范围 - 192.0.2.150,具有 32 IPv4 地址
    9
    只接受和接收互联网密钥交换(IKEv2)协议的值
  7. 将设置应用到系统:

    # nmstatectl apply ~/create-p2p-vpn-authentication.yml

验证

  1. 显示创建的 P2P 策略:

    # ip xfrm policy
  2. 验证 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 文件。

步骤

  1. 安装所需的软件包:

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. 重启 NetworkManager 服务:

    # systemctl restart NetworkManager
  3. 因为 Libreswan 已安装,请删除其旧的数据库文件并重新创建它们:

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 导入 PKCScriu 文件:

    # ipsec import node-example.p12

    导入 PKCSbusybox 文件时,请输入用于创建该文件的密码。

  5. 启用并启动 ipsec 服务:

    # systemctl enable --now ipsec
  6. 创建包含以下内容的 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 创建一个 IPsec xfrm 虚拟接口 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)的持续时间
  7. 将设置应用到系统:

    # nmstatectl apply ~/create-p2p-transport-authentication.yml

验证

  1. 验证 IPsec 状态:

    # ip xfrm status
  2. 验证 IPsec 策略:

    # ip xfrm policy

其他资源

  • ipsec.conf(5) man page
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.