高吞吐量网状 VPN 连接数据中心主机

高吞吐量网状 VPN 连接数据中心主机

我们在公共数据中心租用了一些主机。数据中心不提供私有 VLAN;所有主机都接收一个(或多个)公共 IPv4/IPv6 地址。主机配备了非常现代的 CPU(Haswell 四核,3.4GHz)并具有 Gbit 上行链路。据我所知,数据中心的不同区域(房间?楼层?建筑物?)通过 Gbit 或 500Mbit 链路互连。我们的主机运行的是 debian wheezy。目前,我们运行着 10 台以上的主机,预计在不久的将来会有所增长。

我正在寻找一种让所有主机安全且保密地相互通信的方法。第 3 层可以,第 2 层也可以(但不是必需的)。由于我无法访问 VLAN,因此必须使用某种 VPN。

对我来说重要的是:

  1. 高吞吐量,理想情况下接近线速
  2. 分散式、网状架构——这是为了确保吞吐量不会因中央元素(例如 VPN 集中器)而降低
  3. CPU 占用并不大(考虑到 AESNI 和 GCM 密码套件,我希望这不是一个荒谬的要求)
  4. 操作简单;设置不太复杂;网络可以扩展而不会丢失已建立的连接

我们目前正在使用锡克。它勾选了 [2] 和 [4],但我只达到了 960Mbit/s 线速中的 600Mbit/s(单工),并且我完全失去了一个核心。此外,tinc 1.1 - 目前正在开发中 - 尚未实现多线程,因此我只能使用单核性能。

传统的 IPSec 是不可能的,因为它需要一个中心元素,或者配置一大堆隧道(才能实现 [2])。带有机会加密的 IPsec 可能是一个解决方案,但我不确定它是否能成为稳定的生产代码。

我偶然发现tcpcrypt今天。除了缺少身份验证之外,它看起来就像我想要的那样。用户空间实现很慢,但其他所有 VPN 也是如此。他们说是内核实现。我还没有尝试过,对它的表现很感兴趣,关于 [1] 和 [3]。

还有什么其他选择?人们在做什么,谁在不是在 AWS 上?

附加信息

我对 GCM 很感兴趣,希望它能减少 CPU 占用。请参阅英特尔关于该主题的论文在与其中一位 tinc 开发人员交谈时,他解释说,即使使用 AESNI 进行加密,HMAC(例如 SHA-1)在 Gbit 速度下仍然非常昂贵。

最后更新

传输模式下的 IPsec 运行完美,完全符合我的要求。经过多次评估,我选择了 Openswan 而不是 ipsec-tools,因为它支持 AES-GCM。在 Haswell CPU 上,我测量到的单工吞吐量约为 910-920Mbit/秒,CPU 负载约为 8-9% kworkerd

答案1

您需要的是 VPN。确实需要 IPsec,但不能采用隧道模式。相反,您需要采用运输模式。

在这种配置中,每个主机都直接与其对等主机通信,并且只有数据包有效载荷已加密,IP 标头保持不变。这样,您无需进行任何路由操作即可让一切正常运行。

是的,您需要为每个主机建立一个 IPsec 连接节(除非您的主机分组在子网中,在这种情况下您可以通过 CIDR 块执行此操作),但这些可以通过您的配置管理系统轻松地以编程方式生成。

你没有询问配置细节,但如果你需要一些指示(关于传输模式的可靠信息并不多),你可以参考这篇博文我最近写了。

相关内容