Red Hat Training

A Red Hat training course is available for RHEL 8

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

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

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

注意

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

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

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

前提条件

  • 您已准备好控制节点和受管节点
  • 以可在受管主机上运行 playbook 的用户登录到控制节点。
  • 用于连接到受管节点的帐户具有 sudo 权限。
  • 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/vpn-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>:
        vpn_manage_firewall: true
        vpn_manage_selinux: true

    此 playbook 使用系统角色自动生成的密钥,使用预共享密钥认证配置 <managed_node1><managed_node2> 的连接。因为 vpn_manage_firewallvpn_manage_selinux 都被设为 true,因此 vpn 角色使用 firewallselinux 角色来管理 vpn 角色使用的端口。

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

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

    这配置了两个额外的连接:<managed_node1><external_node><managed_node2><external_node>

    注意

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

  3. 可选:您可以使用 vpn_connections 中的其它部分为受管节点指定多个 VPN 连接,如 control plane 和 data plane :

    - 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
  4. 可选: 您可以根据您的喜好修改变量。详情请查看 /usr/share/doc/rhel-system-roles/vpn/README.md 文件。
  5. 验证 playbook 语法:

    # ansible-playbook ~/vpn-playbook.yml --syntax-check

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

  6. 运行 playbook:

    # ansible-playbook ~/vpn-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

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

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

    # ipsec auto --add <connection_name>
    注意

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