我正在寻找一种方法让所有主机安全,保密地相互通信.第3层很好,第2层确定(但不是必需的).由于我无法访问VLAN,因此它必须是某种VPN.
对我来说重要的是:
>高吞吐量,理想情况下接近线速
>分散式网状体系结构 – 这是为了确保吞吐量不会因中央元素(例如VPN集中器)而减慢
> cpu占用空间不大(给定AESNI和GCM-cipher套件,我希望这不是一个荒谬的要求)
>操作简便;设置不太复杂;网络可以在不失去既定连接的情况下发展
我们目前正在使用tinc.它打[2]和[4],但我只达到了大约600Mbit / s(单工)的960Mbit / s线速,我完全松开了一个核心.此外,tinc 1.1 – 目前正在开发中 – 还没有多线程,所以我坚持单一性能.
传统的IPSec是不可能的,因为它需要一个中心元素,或者需要配置sh * tload的隧道(实现[2]).具有机会加密的IPsec将是一种解决方案,但我不确定它是否已成为稳定的生产代码.
我今天偶然发现了tcpcrypt.除了缺少身份验证,它看起来像我想要的.用户空间实现的速度很慢,但所有其他VPN也是如此.他们谈到了内核实现.我还没有尝试过,我对它的表现感兴趣[1]和[3].
还有哪些其他选择?人们在做什么,谁不在AWS上?
附加信息
我对GCM感兴趣,希望它能减少cpu占用空间.参见Intel’s paper on the topic.在与其中一位开发人员交谈时,他解释说即使使用AESNI进行加密,HMAC(例如SHA-1)在Gbit速度下仍然非常昂贵.
最后更新
传输模式下的IPsec工作完美,完全符合我的要求.经过多次评估后,我选择了Openswan而不是ipsec-tools,因为它支持AES-GCM.在Haswell cpu上,我测量了大约910-920Mbit / sec的单工吞吐量,一个kworkerd的cpu负载大约为8-9%.
解决方法
在此配置中,每个主机直接与其对等方通信,并且仅对数据包有效负载进行加密,从而保留IP报头.这样,你就不需要做任何路由体操来让事情顺利进行.
是的,您需要为每个主机提供IPsec连接节(除非您的主机分组在子网中,在这种情况下您可以通过CIDR块执行此操作),但这些可以通过配置管理系统以编程方式轻松生成.
你没有问过配置细节,但是如果你需要一些指针(传输模式上没有那么多可靠的信息),你可以参考我最近写的this blog post.