5.7. 配置网格 VPN
网格 VPN 网络(也称为 any-to-any VPN ) 是一个所有节点都使用 IPsec 进行通信的网络。该配置可以对于无法使用 IPsec 的节点进行例外处理。可使用两种方式配置网格 VPN 网络:
- 需要 IPsec。
- 首选 IPsec,但允许回退到使用明文通信。
节点之间的身份验证可以基于 X.509 证书或 DNS 安全扩展(DNSSEC)。
				您对 opportunistic IPsec 使用任何常规的 IKEv2 验证方法,因为这些连接是常规的 Libreswan 配置,除了由 right=%opportunisticgroup 条目定义的 opportunistic IPsec 之外。常见的身份验证方法是主机使用常用共享认证机构(CA)根据 X.509 证书进行互相验证。作为标准流程的一部分,云部署通常为云中的每个节点发布证书。
			
不要使用 PreSharedKey (PSK)身份验证,因为一个有危险的主机会导致组 PSK secret 也有危险。
您可以使用 NULL 身份验证在节点间部署加密,而无需认证,这只防止被动攻击者。
				以下流程使用 X.509 证书。您可以使用任何类型的 CA 管理系统(如 Dogtag 证书系统)生成这些证书。Dogtag 假设每个节点的证书都以 PKCS #12 格式(.p12 文件)提供,其包含私钥、节点证书和用于验证其他节点的 X.509 证书的根 CA 证书。
			
每个节点的配置与其 X.509 证书不同。这允许在不重新配置网络中的任何现有节点的情况下添加新节点。PKCS #12 文件需要一个"友好名称",为此,我们使用名称"节点",这样引用友好名称的配置文件对所有节点都是相同的。
先决条件
- 
						Libreswan 已安装 ,并在每个节点上启动了 ipsec服务。
- 一个新的 NSS 数据库已初始化。 - 如果您已经有一个旧的 NSS 数据库,请删除旧的数据库文件: - systemctl stop ipsec rm /etc/ipsec.d/*db - # systemctl stop ipsec # rm /etc/ipsec.d/*db- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 您可以使用以下命令初始化新数据库: - ipsec initnss - # ipsec initnss- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
流程
- 在每个节点中导入 PKCS #12 文件。此步骤需要用于生成 PKCS #12 文件的密码: - ipsec import nodeXXX.p12 - # ipsec import nodeXXX.p12- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为 - IPsec 需要的(专用)、- IPsec 可选的(private-or-clear)和- No IPsec(clear)配置文件创建以下三个连接定义:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- auto变量有几个选项:- 您可以使用带有 opportunistic IPsec 的 - ondemand连接选项来启动 IPsec 连接,或者用于显式配置不需要一直激活的连接。这个选项在内核中建立一个陷阱 XFRM 策略,使 IPsec 连接在收到与该策略匹配的第一个数据包时开始。- 您可以使用以下选项有效地配置和管理 IPsec 连接,无论是使用 Opportunistic IPsec 还是明确配置的连接: - add选项
- 
											加载连接配置,并为响应远程启动做好准备。但是,连接不会自动从本地端启动。您可以使用 ipsec auto --up命令手动启动 IPsec 连接。
- start选项
- 加载连接配置,并为响应远程启动做好准备。此外,它会立即启动到远程对等点的连接。您可以将这个选项用于永久的和一直活跃的连接。
 
- 2
- leftid和- rightid变量标识 IPsec 隧道连接的右和左通道。如果您配置了证书,您可以使用这些变量来获取本地 IP 地址或本地证书的主题 DN 的值。
- 3
- leftcert变量定义您要使用的 NSS 数据库的昵称。
 
- 将网络的 IP 地址添加到对应的类中。例如,如果所有节点都位于 - 10.15.0.0/16网络中,则所有节点都必须使用 IPsec 加密:- echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private - # echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要允许某些节点(如 - 10.15.34.0/24)使用或不使用 IPsec,请将这些节点添加到 private-or-clear 组中:- echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear - # echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要定义一个主机(如 - 10.15.1.2),其不能将 IPsec 添加到 clear 组中,请使用:- echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear - # echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 您可以在 - /etc/ipsec.d/policies目录中从每个新节点的模板创建文件,也可以使用 Puppet 或 Ansible 来置备它们。- 请注意,每个节点都有相同的异常列表或不同的流量预期。因此,两个节点可能无法通信,因为一个节点需要 IPsec,而另一个节点无法使用 IPsec。 
- 重启节点将其添加到配置的网格中: - systemctl restart ipsec - # systemctl restart ipsec- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅将 VPN 连接分配给专用路由表,以防止连接绕过隧道。
验证
- 使用 - ping命令打开 IPsec 隧道:- ping <nodeYYY> - # ping <nodeYYY>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 显示带有导入认证的 NSS 数据库: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 查看节点上哪个隧道打开了: - ipsec trafficstatus - # ipsec trafficstatus 006 #2: "private#10.15.0.0/16"[1] ...<nodeYYY>, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow