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 清单文件中。
流程
创建一个包含以下内容的 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_firewall
和vpn_manage_selinux
都被设为true
,因此vpn
角色使用firewall
和selinux
角色来管理vpn
角色使用的端口。可选:将以下部分添加到主机的
vpn_connections
列表中,来配置从受管主机到清单文件中未列出的外部主机之间的连接:vpn_connections: - hosts: <managed_node1>: <managed_node2>: <external_node>: hostname: <192.0.2.2>
这配置了两个额外的连接:
<managed_node1> 到 <external_node>
和<managed_node2> 到 <external_node>
。注意连接仅在受管节点上配置,而不在外部节点上配置。
可选:您可以使用
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
-
可选: 您可以根据您的喜好修改变量。详情请查看
/usr/share/doc/rhel-system-roles/vpn/README.md
文件。 验证 playbook 语法:
# ansible-playbook ~/vpn-playbook.yml --syntax-check
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
# ansible-playbook ~/vpn-playbook.yml
验证
在受管节点上,确认连接已成功载入:
# ipsec status | grep <connection_name>
将 <connection_name> 替换为来自此节点的连接名称,如
managed_node1-to-managed_node2
。注意默认情况下,从每个系统的角度来看,角色为其创建的每个连接生成一个描述性名称。例如,当在
managed_node1
和managed_node2
之间创建连接时,此连接在managed_node1
上的描述性名称为managed_node1-to-managed_node2
,但在managed_node2
上,连接的描述性名称为managed_node2-to-managed_node1
。在受管节点上,确认连接是否成功启动:
# ipsec trafficstatus | grep <connection_name>
可选:如果连接没有成功加载,请输入以下命令来手动添加连接。这提供了更具体的信息,说明连接未能建立的原因:
# ipsec auto --add <connection_name>
注意加载和启动连接过程中可能会出现的任何错误都会在
/var/log/pluto.log
文件中报告。由于这些日志很难解析,因此请手动添加连接以从标准输出中获取日志消息。