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网络范围进行网络分段,管理起来就变得更复杂了。

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

我们的目标

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

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

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

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

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

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

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

软件编写

从一开始,我们就研究现代最好的加密策略。研究之中,我们发现了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_”与主编包研交流。

Nebula:Slack 的覆盖全球性的开源网络相关推荐

  1. 我们来了!多云架构时代,欢迎加入中国开源网络新势力

    云计算经过十年发展,已经进入到多云网络的时代,企业拥抱多云架构的趋势已十分明确,越来越多的中国用户和企业正加入其中. 与此同时,一群关注和热爱SDN(软件定义网络)的中国极客,开始自发组织起来,研究和 ...

  2. 最好的 8 个免费和开源网络映​​射软件

    纵观人类历史,地图一直是一种以简化方式传达复杂信息.模式和构造的强大工具.已知最早的地图是在公元前 2300 年在洞穴中绘制的.今天,它们被绘制在各种物体上,例如普通纸.帆布.计算机屏幕等等.随着计算 ...

  3. 开源网络风云变幻,看各家爱恨情仇

    近日,美国对中国企业的限制动作不断: 5月15日,美国将华为公司及其附属公司列入出口管制"实体名单". 随后美国谷歌公司宣布将停止提供安卓(Andriod)系统的技术支持与服务,而 ...

  4. 覆盖你 80 % 网络生活的,竟是这样一家神秘实验室

     覆盖你 80 % 网络生活的,竟是这样一家神秘实验室 这个看似「不务正业」的实验室正在改变每个人的生活. 极客公园作者:我是老红啊 你可能正习惯着 Kindle 和各类音乐供应商给你带来的便捷娱 ...

  5. openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...

    日常水开篇 自1991年诞生起,Linux已经走过了接近三十年.Linux早已没有了问世时的稚气,正在各个领域展示自己成熟的魅力. 以Linux为基础,也衍生出了各种开源生态,例如网络和存储.而生态离 ...

  6. 有限状态机的C++实现(2)-bayonet开源网络服务器框架

    有限状态机的C++实现(2)-bayonet开源网络服务器框架 | Vimer的程序世界 有限状态机的C++实现(2)-bayonet开源网络服务器框架 Published on 二月 18, 201 ...

  7. 开源网络数据平面生态:软件正在吞食整个世界

    目录 LFN - Linux基金会网络开源伞项目 ONF基金会下的网络开源项目 数据面开源项目 DPDK ‍‍FD.io NSM ‍‍‍‍IOVisor George Zhao,目前任职华为在美国的研 ...

  8. Barefoot和Stordis在欧洲领导开源网络

    德国公司Stordis在欧洲分销电信设备.但是,Stordis正在重新自己给定位,希望成为欧洲服务提供商的开源网络硬件和软件的领头羊.目前该公司与Barefoot Networks展开密切合作. St ...

  9. centos7 运行 jar_CentOS7下部署开源网络流量回溯分析系统Moloch

    CentOS7下部署开源网络流量回溯分析系统Moloch Moloch 是一个由AOL开源的,能够大规模的捕获IPv4数据包(PCAP).索引和数据库系统,由以下三个部分组成: 1)capture : ...

最新文章

  1. CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3是什么呢?
  2. library “libopencv_java4.so“ not found“
  3. 开发函数计算的正确姿势——使用交互模式安装依赖
  4. 图解ARP协议(六)RARP与IARP:被遗忘的兄弟协议
  5. 函数返回指针类型(strchr函数)
  6. 美团电单车中标警用车采购项目,上千辆定制版警用电单车上线!
  7. 【kafka】kafka 时间轮 TimingWheel
  8. MFC中CString,int,string,char * ,char[] 之间互转
  9. java服务端开发安全_后端开发:APP与后端交互的安全性
  10. 标定精度_【杰瑞课堂】工业机器人运动精度
  11. QT5(一):HelloWord
  12. 来我们公司面试必问的41道 SpringBoot 面试题,不看亏大了!
  13. 网络服务器是硬盘吗,云盘与网络服务器硬盘是什么?它们一样吗?
  14. 【计算机网络微课堂】3.3 差错检测
  15. python中双重循环_python中双循环
  16. 穷举法(枚举法)实例解析
  17. ios屏幕尺寸和分辨率
  18. 使用字节流和字符流向浏览器输出数据
  19. 在WEB页面中根据分辨率自动调整内容宽度,以适应表格宽度
  20. 【动网论坛7.1 sp1 修改】-修改发帖所贴的图的大小

热门文章

  1. JSON数据从OSS迁移到MaxCompute最佳实践
  2. Programming with gtkmm 3
  3. angular-ui-router路由备忘
  4. ios 获取视频截图
  5. HDU - 5316 Magician(线段树区间合并)
  6. 2019ICPC(南昌) - The Nth Item(矩阵快速幂)
  7. php mysql int string_mysql查出的 int 型字段都是 string
  8. python fpga_如何实现用Python开发FPGA?
  9. python绘图函数教程_OpenCV中的绘图函数
  10. TensorRT安装教程