Red Hat Training
A Red Hat training course is available for RHEL 8
4.7. 配置网格 VPN
网格 VPN 网络(也称为 any-to-any VPN ) 是一个所有节点都使用 IPsec 进行通信的网络。该配置可以对于无法使用 IPsec 的节点进行例外处理。可使用两种方式配置网格 VPN 网络:
- 需要 IPsec。
- 首选 IPsec,但允许回退到使用明文通信。
节点之间的身份验证可以基于 X.509 证书或 DNS 安全扩展(DNSSEC)。
以下流程使用 X.509 证书。这些证书可以使用任何类型的证书颁发机构(CA)管理系统生成,如 Dogtag 证书系统。Dogtag 假定每个节点的证书可用 PKCS #12 格式(.p12 文件)提供,其中包含私钥、节点证书和用于验证其他节点的 X.509 证书的根 CA 证书。
每个节点的配置与其 X.509 证书不同。这允许在不重新配置网络中的任何现有节点的情况下添加新节点。PKCS #12 文件需要一个"友好名称",为此,我们使用名称"节点",这样引用友好名称的配置文件对所有节点都是相同的。
前提条件
-
Libreswan 已安装 ,并在每个节点上启动了
ipsec
服务。
流程
在每个节点中导入 PKCS #12 文件。此步骤需要用于生成 PKCS #12 文件的密码:
# ipsec import nodeXXX.p12
为
IPsec 需要的
(专用)、IPsec 可选的
(private-or-clear)和No IPsec
(clear)配置文件创建以下三个连接定义:# cat /etc/ipsec.d/mesh.conf conn clear auto=ondemand type=passthrough authby=never left=%defaultroute right=%group conn private auto=ondemand type=transport authby=rsasig failureshunt=drop negotiationshunt=drop # left left=%defaultroute leftcert=nodeXXXX leftid=%fromcert leftrsasigkey=%cert # right rightrsasigkey=%cert rightid=%fromcert right=%opportunisticgroup conn private-or-clear auto=ondemand type=transport authby=rsasig failureshunt=passthrough negotiationshunt=passthrough # left left=%defaultroute leftcert=nodeXXXX leftid=%fromcert leftrsasigkey=%cert # right rightrsasigkey=%cert rightid=%fromcert right=%opportunisticgroup
以适当的类别添加网络的 IP 地址。例如,如果所有节点都在 10.15.0.0/16 网络中,那么所有节点都应强制执行 IPsec 加密:
# echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
要允许某些节点(如 10.15.34.0/24)使用或不使用 IPsec,请使用以下方法将这些节点添加到 private-or-clear 组中:
# echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
要将一个不支持 IPsec 的主机(如 10.15.1.2)定义到 clear 组,请使用:
# echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
/etc/ipsec.d/policies
目录中的文件可以从每个新节点的模板创建,也可以使用 Puppet 或 Ansible 来提供。请注意,每个节点都有相同的异常列表或不同的流量预期。因此,两个节点可能无法通信,因为一个节点需要 IPsec,而另一个节点无法使用 IPsec。
重启节点将其添加到配置的网格中:
# systemctl restart ipsec
完成添加节点后,
ping
命令就足以打开一个 IPsec 隧道。查看节点已打开的隧道:# ipsec trafficstatus