第 30 章 使用 RHEL 系统角色配置 IPsec VPN 连接


您可以使用虚拟专用网络(VPN)通过不可信网络(如互联网)建立安全加密的隧道。此类隧道可确保传输中数据的保密性和完整性。常见用例包括将分支机构连接到总部。

通过使用 vpn RHEL 系统角色,您可以自动创建 Libreswan IPsec VPN 配置的过程。

注意

vpn RHEL 系统角色只能创建使用预共享密钥(PSK)或证书的 VPN 配置来相互验证对等点。

主机到主机 VPN 在两个设备之间建立直接、安全和加密的连接,允许应用程序通过不安全的网络(如互联网)安全地进行通信。

为了进行身份验证,预共享密钥(PSK)是使用只给两个对等点已知的单一共享 secret 的直接方法。这种方法易于配置,非常适合易于部署是优先级的基本设置。但是,您必须严格保密密钥。可以访问该密钥的攻击者可能会破坏连接。

通过使用 vpn RHEL 系统角色,您可以自动化创建带有 PSK 身份验证的 IPsec 主机到主机连接的过程。默认情况下,角色创建一个基于隧道的 VPN。

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com
      tasks:
        - name: IPsec VPN with PSK authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - hosts:
                  managed-node-01.example.com:
                  managed-node-02.example.com:
                auth_method: psk
                auto: start
            vpn_manage_firewall: true
            vpn_manage_selinux: true

    示例 playbook 中指定的设置包括如下:

    hosts: &lt ;list>

    使用您要配置 VPN 的对等点定义 YAML 字典。如果条目不是一个 Ansible 管理的节点,则您必须在 hostname 参数中指定其完全限定域名(FQDN)或 IP 地址,例如:

              ...
              - hosts:
                  ...
                  external-host.example.com:
                    hostname: 192.0.2.1

    角色在每个受管节点上配置 VPN 连接。连接名为 < peer_A&gt;-to-<peer_B >,例如 managed-node-01.example.com-to-managed-node-02.example.com。请注意,该角色无法在外部(未管理)节点上配置 Libreswan。您必须在这些对等点上手动创建配置。

    auth_method: psk
    启用对等点之间的 PSK 身份验证。角色在控制节点上使用 openssl 来创建 PSK。
    auto: <startup_method>
    指定连接的启动方法。有效值是 addondemandstartignore。详情请查看安装了 Libreswan 的系统上的 ipsec.conf (5) 手册页。此变量的默认值为 null,这意味着没有自动启动操作。
    vpn_manage_firewall: true
    定义角色在受管节点上的 firewalld 服务中打开所需的端口。
    vpn_manage_selinux: true
    定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml

验证

  • 确认连接已成功启动,例如:

    # ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"'
    ...
    006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'

    请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的 auto 变量设置为 start 以外的值,您可能需要首先手动激活受管节点上的连接。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部