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 假设每个节点的证书以 PKCSautomationhub 格式(.p12 文件)提供,其中包含私钥、节点证书和用于验证其他节点的 X.509 证书的 Root CA 证书。

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

前提条件

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

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

      # systemctl stop ipsec
      # rm /etc/ipsec.d/*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 变量有几个选项:

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

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

add 选项
加载连接配置,并为响应远程启动做好准备。但是,连接不会自动从本地端启动。您可以使用 ipsec auto --up 命令手动启动 IPsec 连接。
start 选项
加载连接配置,并为响应远程启动做好准备。此外,它会立即启动到远程对等点的连接。您可以将这个选项用于永久的和一直活跃的连接。
2
leftidrightid 变量标识 IPsec 隧道连接的右侧和左侧频道。如果您配置了证书,您可以使用这些变量来获取本地 IP 地址或本地证书的主题 DN 的值。
3
leftcert 变量定义您要使用的 NSS 数据库的 nickname。
  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.