Slack开源覆盖网络项目Nebula

Slack开源自行开发的覆盖网络工具Nebula,在Slack内部,已经使用了Nebula两年,他们在每台服务器上安装Nebula,以安全地连接分散在不同公有云以及自家数据中心等,全球数十个地点的数万台主机。

Slack提到,他们原本使用IPSec提供地区间的加密连接,虽然一开始的时候运行良好,但随着发展反成了管理上的负担,而且由于要发送到其他区域的封包,都要流经IPSec信道主机进行路由,这个动作增加了额外的网络路由跳跃节点,因此会为这些封包发送带来微小但是可测量的性能影响。

为了解决这些问题,Slack研究了各种IPSec替代方案,但是都无法解决他们的核心需求,他们需要能够即便跨不同网络边界,仍可以维持安全连接的解决方案,Slack提到,大多数云计算供应商提供称为安全群组(Security Groups)由用户定义的网络主机分群功能,让群组成员可以依身份过滤网络流量,但是这些安全群组有其边界,安全群组在主机供应商的各地区都独立,而且主机供应商之间也都没有互通,也就是说,对于跨多区域或是供应商的主机连接,唯一有用的选择只有按IP位置或是IP范围进行网络分区隔离(Network Segmentation),但这又让服务管理更加复杂。

为了满足内部加密、分区隔离以及其他操作的需求,Slack开发了可扩展的覆盖网络(Overlay Network)工具Nebula。覆盖网络是一种创建在互联网之上的网络,覆盖网络中的节点,可通过虚拟或是逻辑相连接。Nebula让Slack能够无缝地连接位在世界各地的计算机,目前支持在Linux、OSX和Windows,甚至Slack也正在开发iOS的版本。

Nebula提供了主机间的加密连接,Slack提到,虽然这项功能看起来并不特别,但是要全加密本地端以及互联网上的流量,有许多需要考量以及克服的障碍。Nebula所创建的覆盖网络与服务供应商无关,这代表任何一台计算机,无论是云计算供应商上的主机、数据中心的服务器或是个人计算机等,都能以Nebula相连。

Nebula也提供了高端流量过滤的功能,让网络上的各节点可以根据连接主机的身份,而非IP位置作为允许或是拒绝流量的条件,因此用户可以在任何地方进行连接,而不需要在意IP位置是否被接受。另外,Nebula也可提供隔离测试,Slack表示,目前多数网络管理都要求一次性地对主机集合进行规则变更,而这使得更改过滤规则的过程充满风险,在Nebula中,用户能用测试软件的方式测试过滤规则,没问题后再部署到所有的主机上。

Nebula适用于各种规模的主机连接,可用于连接数千台的主机,但在只有3或4台主机连接也相同有用,Slack对Nebula进行了安全漏洞审查,并且提供了bug赏金计划,以持续确保Nebula的安全性。Nebula现在于GitHub开源,供社群使用。