第 31 章 使用 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
    Copy to Clipboard Toggle word wrap

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

    hosts: &lt ;list>

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

              ...
              - hosts:
                  ...
                  external-host.example.com:
                    hostname: 192.0.2.1
    Copy to Clipboard Toggle word wrap

    角色在每个受管节点上配置 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
    Copy to Clipboard Toggle word wrap

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

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

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

    # 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'
    Copy to Clipboard Toggle word wrap

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat