31.2. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 主机到主机的 VPN ,并将数据和控制平面分开
主机到主机 VPN 在两个设备之间建立直接、安全和加密的连接,允许应用程序通过不安全的网络(如互联网)安全地进行通信。
为了进行身份验证,预共享密钥(PSK)是使用只给两个对等点已知的单一共享 secret 的直接方法。这种方法易于配置,非常适合易于部署是优先级的基本设置。但是,您必须严格保密密钥。可以访问该密钥的攻击者可能会破坏连接。
例如,要通过最大程度减少被截获或破坏的控制消息的风险来增强安全性,您可以为数据流量和控制流量配置单独的连接。通过使用 vpn
RHEL 系统角色,您可以自动化创建带有单独的数据和控制平面及 PSK 身份验证的 IPsec 主机到主机连接的过程。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
hosts: <list>
使用您要配置 VPN 的主机定义 YAML 字典。连接名为 <
name>-<IP_address_A>-to- <IP_address_B
>,如control_plane_vpn-203.0.113.1-to-198.51.100.2
。该角色在每个受管节点上配置 VPN 连接。请注意,该角色无法在外部(未管理)节点上配置 Libreswan。您必须在这些主机上手动创建配置。
auth_method: psk
-
启用主机间的 PSK 身份验证。该角色在控制节点上使用
openssl
创建预共享密钥。 auto: <startup_method>
-
指定连接的启动方法。有效值包括
添加
、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
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认连接成功启动,例如:
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"' ... 006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的
auto
变量设置为启动
以外的值,您可能需要首先手动激活受管节点上的连接。