Nebula是Slack开发的高安全性与性能的网络服务,这可以为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网络范围进行网络分段,管理起来就变得更复杂了。
我们考虑到加密、分段和操作需求,我们决定创建自己的解决方案。
我们的目标
软件编写
从一开始,我们就研究现代最好的加密策略。研究之中,我们发现了Trevor Perrin 所创建的Noise Protocol Framework,他也是Signal Protocol的合著者,这也是Signal Messenger的基础。在早期的规划,我们决定把Noise成为密钥交换和对称加密的基础。需要一提,我们并没有自己的crypto 密码。
当我们研究软件定义网络(SDN)和mesh网络软件时,Tinc出现了。在难以到达的节点之间,Tinc用来建立隧道的一些策略对于Nebula的设计有很大帮助。
和别人共享Nebula
在本版本发布之前,我们已经与一群工程师共享了Nebula,并收到了系统的积极反馈。Nebula对于连接数千台计算机的亮点极大,但对于连接两台或三台计算机的效果也一样很出色。
Nebula进行了系统上付费安全评估,同时进行了多次内部安全审查。我们正在将Nebula添加到我们的官方bug悬赏计划中,同时欢迎软件中遭遇的bug相关的回馈信息。
LiveVideoStack 秋季招聘
LiveVideoStack正在招募编辑/记者/运营,与全球顶尖多媒体技术专家和LiveVideoStack年轻的伙伴一起,推动多媒体技术生态发展。同时,也欢迎你利用业余时间、远程参与内容生产。了解岗位信息请在BOSS直聘上搜索“LiveVideoStack”,或通过微信“Tony_Bao_”与主编包研交流。
本文分享自 LiveVideoStack 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!