Nebula:Slack 的覆盖全球性的开源网络

文 / Ryan Huber


译 / Adrian Ng


技术审校 / 刘连响


原文  https://slack.engineering/introducing-nebula-the-open-source-global-overlay-network-from-slack-884110a5579


如何安全的连接分布在全球多个地区的多个云服务商的成千上万台机器?我们的答案是-Nebula,你想知道为什么吗?


在Slack,我们几年前已在研究这问题。我们尝试了许多方法来解决这个问题,但每种方法都在性能、安全性、特性或易用性方面艰难的权衡。我们很乐意在以后的演讲和写作中分享整这些经历,但是之前我们并没想过着手编写软件来解决这个问题。Slack的营业范围是为了促进人类关系而不是计算机。


什么是Nebula?


Nebula 是一个专注于性能、简单性和安全,可扩展的网络覆盖工具。它可以让你无缝连接全世界每个角落、任何地方的计算机。Nebula是便携式的,也可以通过Linux、OSX和Windows系统上运行(另外:我们有个早期的prototype也可以在iOS上运行了)。


我们需要注意的是Nebula包含了一些现有的概念,例如encryption、securitygroups、certificates及tunneling,之前这些单件都来自于各自的形式。Nebula的不同点是把它们都结合在一起,产生更理想的效果。


如今Nebula在Slack的每一台服务器上运行,全面地提供一个全球覆盖网络。这也许是你第一次听说Nebula,但是实际上在Slack已被应用上两年了。


Nebula从何而来


好几年前,Slack 使用 IPSec 提供区域间的加密连接。此方法起先的运行能力不错,但是随着更高的需求,在大规模网络管理方面捉襟见肘。它也带来一个性能影响,因为每一个发往另一个区域的packet都必须先通过IPSectunnel主机路由,在网络路由中添加了跃点(hop)。我们尝试了一些代替IPSec的解决方案,但是没有一个能满足我们的需求。


随着我们的软件堆栈和服务的复杂性越来越高,网络分割也变得越来越困难。其中我们的核心问题还是在于跨越各种网络边界时的分割。大多数云上服务商提供某种用户定义的网络主机分组,通常称为“securitygroups”,它允许你根据组成员身份筛选网络流量,而不是单独的IP地址或范围。很可惜的是许多securitygroups已被分离到宿主提供者的每个单独区域。此外,不同宿主提供程序之间没有可互操作的安全组版本。这表示当你扩展到多个区域或提供程序时,你唯一的选择还是按IP地址或IP网络范围进行网络分段,管理起来就变得更复杂了。


我们考虑到加密、分段和操作需求,我们决定创建自己的解决方案。


我们的目标


  1. 主机之间加密连接 – 这有可能是比较无趣但也是最重要的目标。它对本地和互联网上流量进行加密,是非常重要的。


  1. 对服务提供者是透明的 - 我们希望这个解决方案适用于任何计算机,无论是基于云的主机、数据中心中的服务器、单个笔记本电脑,还是位于地下室壁橱中的一组计算机。


  1. 允许高级流量过滤 – 该解决方案应使网络上的各个节点能够给予连接主机的标识(不仅仅是IP地址)允许或拒绝通信。特别是在处理短暂主机的时候,你不需考虑盒里应有的IP。


  1. 提供强身份认证 – 主机应该通过证书颁发机构颁发的certificate来标识自己,并且连接到对等方时会对用户定义的属性(数据中心、角色、环境等)进行编码。


  1. 性能要好 - 不会有性能损失,从而大大增加主机之间的延迟或减少可用带宽。


  1. 可测试性 – 首先系统应该先允许单独测试,这是现代团队发布软件的方式。当前大多数的网络管理都要求整个主机集进行全部或全部更改,这使得更改筛选规则变得越来越可怕。如果通过条例评估下推到各个主机,你就可以测试对筛选条例的更改,就像在将新软件版本分发到100%的主机之前测试的更改一样。


  1. 给每个人一匹小马 - 开个玩笑吧,我们的要求太多了,所以我想我们可以把以上合称为一个伸展性的目标。


软件编写


从一开始,我们就研究现代最好的加密策略。研究之中,我们发现了Trevor Perrin 所创建的Noise Protocol Framework,他也是Signal Protocol的合著者,这也是Signal Messenger的基础。在早期的规划,我们决定把Noise成为密钥交换和对称加密的基础。需要一提,我们并没有自己的crypto 密码。


当我们研究软件定义网络(SDN)和mesh网络软件时,Tinc出现了。在难以到达的节点之间,Tinc用来建立隧道的一些策略对于Nebula的设计有很大帮助。


和别人共享Nebula


在本版本发布之前,我们已经与一群工程师共享了Nebula,并收到了系统的积极反馈。Nebula对于连接数千台计算机的亮点极大,但对于连接两台或三台计算机的效果也一样很出色。


Nebula进行了系统上付费安全评估,同时进行了多次内部安全审查。我们正在将Nebula添加到我们的官方bug悬赏计划中,同时欢迎软件中遭遇的bug相关的回馈信息。

————————————————

版权声明:本文为CSDN博主「LiveVideoStack_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/103360210


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

Nebula:Slack 的覆盖全球性的开源网络

上一篇:如何使用下一代编码技术提升流媒体体验


下一篇:Google与Pixar开发Draco支持USD格式 加速3D对象传输