30.3. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 站点到站点 VPN
站点到站点的 VPN 在两个不同的网络之间建立了一个加密的隧道,在不安全的公共网络中无缝链接它们。通过使用 vpn RHEL 系统角色,您可以自动化创建 IPsec 站点到站点 VPN 连接的过程。
站点到站点 VPN 允许分支机构中的设备访问公司总部的资源,就如同它们都是同一本地网络的一部分一样。
对于身份验证,预共享密钥(PSK)是一个直接的方法,其使用一个只有两个对等点知道的共享 secret 。这种方法易于配置,非常适合优先考虑易于部署的基本设置。但是,您必须对密钥进行严格保密。可以访问密钥的攻击者可能会破坏连接。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
用于连接到受管节点的帐户具有这些节点的
sudo权限。
流程
创建一个包含以下内容的 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: subnets: - 192.0.2.0/24 managed-node-02.example.com: subnets: - 198.51.100.0/24 - 203.0.113.0/24 auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true示例 playbook 中指定的设置包括如下:
hosts: <list>使用您要配置 VPN 的网关定义一个 YAML 字典。如果条目不是一个 Ansible 管理的节点,您必须在
hostname参数中指定其完全限定域名(FQDN)或 IP 地址,例如:... - hosts: ... external-host.example.com: hostname: 192.0.2.1角色在每个受管节点上配置 VPN 连接。连接名为
<gateway_A>-to-<gateway_B>,例如managed-node-01.example.com-to-managed-node-02.example.com。请注意,角色无法在外部(未管理的)节点上配置 Libreswan。您必须在这些对等点上手动创建配置。subnets: <yaml_list_of_subnets>- 定义通过隧道连接的无类别域间路由(CIDR)格式的子网。
auth_method: psk-
在对等点之间启用 PSK 身份验证。角色在控制节点上使用
openssl来创建 PSK。 auto: <startup_method>-
指定连接的启动方法。有效值是
add、ondemand、start和ignore。详情请查看安装了 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文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 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以外的值,您可能需要首先手动激活受管节点上的连接。