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

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

我正在寻找一种方式让所有主机相互之间进行安全,保密的通信。 第3层是好的,第2层好(但不是必要的)。 由于我无法访问VLAN,因此必须是某种VPN。

对我来说重要的是:

  1. 吞吐量高,理想接近线速
  2. 分散的,网状体系结构 – 这是为了确保吞吐量不会被一个中心元素(例如VPN集中器)减慢,
  3. CPU足迹不是过度的(给予AESNI和GCM密码套件,我希望这不是一个荒谬的要求)
  4. 操作方便使用; 不要太复杂的设置; networking可以增长而不失去已build立的连接

我们目前正在使用tinc 。 它剔[2]和[4],但是我只能达到960Mbit / s线速的大约600Mbit / s(单工),而且我完全松动了一个内核。 此外,目前正在开发中的tinc 1.1还没有multithreading,所以我坚持单播性能。

传统的IPSec是不可能的,因为它需要一个中心元素,或者需要configuration一大堆隧道来实现[2]。 IPsec与机会encryption将是一个解决scheme,但我不知道它曾经把它变成稳定的生产代码。

我今天偶然发现了tcpcrypt 。 除了缺lessauthentication,它看起来像我想要的。 用户空间的实现闻起来很慢,但所有其他的VPN也是如此。 而且他们提到了内核实现。 我还没有尝试过,并且对它的行为感兴趣[1]和[3]。

还有什么其他的select? 人们在做什么,谁不在 AWS上?

附加信息

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

最终更新

IPsec在传输模式下工作完美,并做我想要的。 经过多次评估,我select了Openswan over IPsec-tools,只是因为它支持AES-GCM。 在Haswell CPU上,我测量的单工吞吐量约为910-920Mbit / s,一个kworkerd CPU负载约为8-9%。

想要的是一个VPN。 你想要的确实是IPsec,但不是隧道模式。 相反,您希望IPsec处于传输模式。

在这个configuration中,每个主机直接与其对等体进行通信,并且只对数据包有效负载进行encryption,留下IP标头。 这样,你就不需要做任何路由操作就可以使事情顺利进行。

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

你没有询问关于configuration的细节,但是如果你需要一些指针(在传输模式中没有那么多可靠的信息),你可以参考我最近写的博客文章 。