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

使用 vpn 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 系统中配置 VPN 连接。您可以使用它来设置主机到主机、网络到网络、VPN 远程访问服务器和网格配置。

对于主机到主机连接,角色使用默认参数在 vpn_connections 列表中的每一对主机之间设置 VPN 通道,包括根据需要生成密钥。另外,您还可以将其配置为在列出的所有主机之间创建 机会主义网格配置。该角色假定 hosts 下的主机名称与 Ansible 清单中使用的主机的名称相同,并且您可以使用这些名称来配置通道。

注意

vpn RHEL 系统角色目前仅支持 Libreswan (即 IPsec 实现),作为 VPN 供应商。

13.1. 使用 vpn 系统角色使用 IPsec 创建主机到主机的 VPN

您可以通过在控制节点上运行 Ansible playbook 来使用 vpn 系统角色配置主机到主机的连接,这将配置清单文件中列出的所有受管节点。

先决条件

  • 对一个或多个 受管节点 的访问权限(即您要使用 vpn 系统角色配置的系统)。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    - name: Host to host VPN
      hosts: managed_node1, managed_node2
      roles:
        - rhel-system-roles.vpn
      vars:
        vpn_connections:
          - hosts:
              managed_node1:
              managed_node2:

    此 playbook 使用系统角色自动生成的密钥进行预共享密钥身份验证,来配置 managed_node1-to-managed_node2 的连接。

  2. 可选:通过将以下部分添加到主机的 vpn_connections 列表中,配置从受管主机到清单文件中未列出的外部主机的连接:

        vpn_connections:
          - hosts:
              managed_node1:
              managed_node2:
              external_node:
                hostname: 192.0.2.2

    这将配置另外两个连接:managed_node1-to-external_nodemanaged_node2-to-external_node

注意

连接仅在受管节点上配置,而不在外部节点上配置。

  1. 可选:您可以使用 vpn_connections 中的额外部分为受管节点指定多个 VPN 连接,如控制平面和数据平面:

    - name: Multiple VPN
      hosts: managed_node1, managed_node2
      roles:
        - rhel-system-roles.vpn
      vars:
        vpn_connections:
          - name: control_plane_vpn
            hosts:
              managed_node1:
                hostname: 192.0.2.0 # IP for the control plane
              managed_node2:
                hostname: 192.0.2.1
          - name: data_plane_vpn
            hosts:
              managed_node1:
                hostname: 10.0.0.1 # IP for the data plane
              managed_node2:
                hostname: 10.0.0.2
  2. 可选:您可以根据您的偏好修改变量。详情请查看 /usr/share/doc/rhel-system-roles/vpn/README.md 文件。
  3. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check /path/to/file/playbook.yml -i /path/to/file/inventory_file
  4. 在清单文件上运行 playbook:

    # ansible-playbook -i /path/to/file/inventory_file /path/to/file/playbook.yml

验证

  1. 在受管节点上,确认连接已成功载入:

    # ipsec status | grep connection.name

    connection.name 替换为来自此节点的连接的名称,如 managed_node1-to-managed_node2

注意

默认情况下,从每个系统的角度来看,角色为其创建的每个连接生成一个描述性名称。例如,当在 managed_node1managed_node2 之间创建连接时,此连接在 managed_node1 上的描述性名称为 managed_node1-to-managed_node2,但在 managed_node2 上,连接的描述性名称为 managed_node2-to-managed_node1

  1. 在受管节点上,确认连接是否成功启动:

    # ipsec trafficstatus | grep connection.name
  2. 可选:如果连接没有成功加载,请输入以下命令来手动添加连接。这将提供更具体的信息,说明连接未能建立的原因:

    # ipsec auto --add connection.name
    注意

    加载和启动连接过程中可能出现的任何错误都会在日志中报告,这些错误可以在 /var/log/pluto.log 中找到。由于这些日志难以解析,因此请尝试手动添加连接来获得日志消息,而不是从标准输出中获得。