5.7. 配置网格 VPN


网格 VPN 网络(也称为 any-to-any VPN ) 是一个所有节点都使用 IPsec 进行通信的网络。该配置可以对于无法使用 IPsec 的节点进行例外处理。可使用两种方式配置网格 VPN 网络:

  • 需要 IPsec。
  • 首选 IPsec,但允许回退到使用明文通信。

节点之间的身份验证可以基于 X.509 证书或 DNS 安全扩展(DNSSEC)。

您可以对 opportunistic IPsec 使用任何常规 IKEv2 验证方法,因为这些连接是常规的 Libreswan 配置,除了由 right=%opportunisticgroup 条目定义的机会 IPsec 之外。常见的身份验证方法是用于主机使用常用的共享认证机构(CA)根据 X.509 证书互相验证。作为标准流程的一部分,云部署通常为云中的每个节点发布证书。

重要

不要使用 PreSharedKey (PSK)身份验证,因为一个被破坏的主机会导致组 PSK secret 也被破坏。

您可以使用 NULL 身份验证部署没有身份验证的节点间加密,这只防止被动攻击者。

以下流程使用 X.509 证书。您可以使用任何类型的 CA 管理系统(如 Dogtag 证书系统)生成这些证书。Dogtag 假设每个节点的证书都以 PKCS #12 格式(.p12 文件)提供,其包含私钥、节点证书和用于验证其他节点的 X.509 证书的 Root CA 证书。

每个节点的配置与其 X.509 证书不同。这允许在不重新配置网络中的任何现有节点的情况下添加新节点。PKCS #12 文件需要一个"友好名称",为此,我们使用名称"节点",这样引用友好名称的配置文件对所有节点都是相同的。

先决条件

  • Libreswan 已安装 ,并在每个节点上启动了 ipsec 服务。
  • 新的 NSS 数据库已初始化。

    1. 如果您已经有旧的 NSS 数据库,请删除旧的数据库文件:

      # systemctl stop ipsec
      # rm /var/lib/ipsec/nss/*db
    2. 您可以使用以下命令初始化新数据库:

      # ipsec initnss

流程

  1. 在每个节点中导入 PKCS #12 文件。此步骤需要用于生成 PKCS #12 文件的密码:

    # ipsec import nodeXXX.p12
  2. IPsec 需要的(专用)、IPsec 可选的 (private-or-clear)和 No IPsec (clear)配置文件创建以下三个连接定义:

    # cat /etc/ipsec.d/mesh.conf
    conn clear
    	auto=ondemand 1
    	type=passthrough
    	authby=never
    	left=%defaultroute
    	right=%group
    
    conn private
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=drop
    	negotiationshunt=drop
    	ikev2=insist
    	left=%defaultroute
    	leftcert=nodeXXXX
    	leftid=%fromcert 2
    	rightid=%fromcert
    	right=%opportunisticgroup
    
    conn private-or-clear
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=passthrough
    	negotiationshunt=passthrough
    	# left
    	left=%defaultroute
    	leftcert=nodeXXXX 3
    	leftid=%fromcert
    	leftrsasigkey=%cert
    	# right
    	rightrsasigkey=%cert
    	rightid=%fromcert
    	right=%opportunisticgroup
1
auto 变量有几个选项:

您可以使用带有机会 IPsec 的 ondemand 连接选项来启动 IPsec 连接,或者显式配置不需要一直处于活动状态的连接。这个选项在内核中设置一个陷阱 XFRM 策略,使 IPsec 连接在收到与该策略匹配的第一个数据包时开始。

您可以使用以下选项有效地配置和管理 IPsec 连接,无论是使用机会 IPsec 还是明确配置的连接:

add 选项
加载连接配置,并准备好响应远程启动。但是,连接不会自动从本地端启动。您可以使用命令 ipsec auto --up 手动启动 IPsec 连接。
start 选项
加载连接配置,并准备好响应远程启动。此外,它会立即启动到远程对等点的连接。您可以将这个选项用于永久的和一直活跃的连接。
2
leftidrightid 变量标识 IPsec 隧道连接的右和左通道。如果您配置了一个,您可以使用这些变量来获取本地 IP 地址或本地证书的主题 DN 的值。
3
leftcert 变量定义您要使用的 NSS 数据库的昵称。
  1. 将网络的 IP 地址添加到对应的类中。例如,如果所有节点都位于 10.15.0.0/16 网络中,则所有节点都必须使用 IPsec 加密:

    # echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
  2. 要允许某些节点(如 10.15.34.0/24 )使用或不使用 IPsec,请将这些节点添加到 private-or-clear 组中:

    # echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
  3. 要将一个不具有 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。

  4. 重启节点将其添加到配置的网格中:

    # systemctl restart ipsec

验证

  1. 使用 ping 命令打开 IPsec 隧道:

    # ping <nodeYYY>
  2. 使用导入的认证显示 NSS 数据库:

    # certutil -L -d sql:/etc/ipsec.d
    
    Certificate Nickname    Trust Attributes
                            SSL,S/MIME,JAR/XPI
    
    west                    u,u,u
    ca                      CT,,
  3. 查看节点上打开了哪个隧道:

    # 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'

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.