搜索 发表于 2021-11-2 17:29:08

Magic Transit:Cloudflare规模的网络功能

  Cloudflare Magic Transit,使Cloudflare的网络可被互联网上的任意IP流量使用。到目前为止,Cloudflare主要运营代理服务:我们的服务器终止与Internet用户的HTTP、TCP和UDP会话,并通过与原始服务器创建的新会话传递这些数据。通过Magic Transit,我们现在还在IP层进行运营:除了终止会话之外,我们的服务器还在逐个数据包的基础上应用一套网络功能(DoS缓解、防火墙、路由等等)。

  Magic Transit是在与上述相同的网络上使用相同的技术构建的,这意味着我们的客户现在可以在Cloudflare规模的网络上运行他们的网络功能。我们快速、安全、可靠的全球优势同时也成为了客户的优势。要弄清楚这是如何工作的,就让我们来跟踪一下数据包从互联网上的用户到Magic Transit客户网络的旅程吧。

  让我们的DoS缓解功能……为您服务!

  在产品发布博文中,我们讲述了Acme Corp(顶点集团)的一个部署示例。让我们继续讲下这个例子吧。当Acme将其IP前缀203.0.113.0/24提供给Cloudflare时,我们开始向全球每个数据中心的传输提供者、对等网络和互联网交换机公告该前缀。此外,Acme停止向自己的网络服务提供商声明前缀。这意味着互联网上任何目标地址位于Acme前缀内的IP包都将被交付给附近的Cloudflare数据中心,而不是Acme的路由器。

  假设我想从位于伊利诺伊州香槟市的Cloudflare办公室的计算机上访问Acme的FTP服务器203.0.113.100。得益于任播,这个数据包最终到达了Cloudflare位于芝加哥的数据中心,这是离香槟市最近的数据中心(就互联网路由距离而言)。数据包到达数据中心的路由器,该路由器使用ECMP(等价多路径)路由选择应该处理数据包的服务器,并将数据包发送到所选的服务器。

  一旦到达了服务器,数据包就会流经我们基于XDP和iptables的DoS检测和缓解功能。如果这个TCP SYN包被确定为攻击的一部分,它将被丢弃,传输就此结束。而我比较幸运,我发出的数据包通过了检测。

  到目前为止,这看起来和Cloudflare网络上的其他流量完全一样。由于我们有运行全球任播网络方面的专业知识,我们能够将Magic Transit客户的流量吸引到每个数据中心,并部署多年来用于保护Cloudflare的相同DoS缓解解决方案。我们的DoS解决方案已经处理了一些有史以来最大的网络攻击,包括2018年942Gbps的SYN洪水。下面是最近的每秒300Mbps数据包的SYN洪水的截图。我们的体系架构允许我们进行扩展从而阻止最大的攻击。

  https://www.z4a.net/images/2021/11/01/1d75ff394ce7f63a4.png

  用于隔离和控制的网络命名空间

  上面的操作看起来与其他Cloudflare流量的处理方式相同,但也只有这些是相同的。对于我们的其他服务,TCP SYN包现在将被发送到本地代理进程(例如,我们基于nginx的HTTP/S堆栈)。对于Magic Transit,我们希望动态地提供和应用客户定义的网络功能,比如防火墙和路由。我们需要一种方法来快速启动和配置这些网络功能,同时提供网络隔离。为此,我们转向了网络命名空间。

  命名空间是一组Linux内核特性的集合,用于创建可在一组进程之间共享的系统资源的轻量级虚拟实例。命名空间是Linux中容器化的基本构建块。值得注意的是,Docker是基于Linux命名空间构建的。网络命名空间是Linux网络堆栈的一个独立实例,包含它自己的网络接口(带有它们自己的eBPF钩子)、路由表、netfilter配置等等。网络名称空间为我们提供了一种低成本的机制,可以独立地快速应用客户定义的网络配置,所有这些配置都具有内置的Linux内核特性,因此不会因为用户空间包转发或代理而影响性能。

  GRE(通用路由封装) + 任播 = 魔法

  通过边缘网络函数之后,TCP SYN包最终准备好被传送回客户的网络基础设施。因为Acme Corp.在Cloudflare的托管设施中没有网络占用,所以我们需要通过公共互联网交付它们的网络流量。

  这就产生了一个问题。TCP SYN包的目标地址是203.0.113.100,但是Internet上唯一公告IP前缀为203.0.113.0/24的网络是Cloudflare。这意味着我们不能简单地把这个包转发到互联网上——它会直接给我们带来不良后果!为了将这个包交付给Acme,我们需要使用一种称为隧道的技术。

  隧道是将流量从一个网络传输到另一个网络的一种方法。在我们的例子中,它涉及到将Acme的IP包封装在可以通过互联网交付给Acme路由器的IP包中。有许多常见的隧道协议,但我们通常使用的是通用路由封装(GRE),因其简单性和受到广泛的供应商支持。

  GRE隧道端点配置在Cloudflare的服务器(在Acme的网络命名空间内)以及Acme的路由器上。然后,Cloudflare服务器将发送到203.0.113.0/24的IP包封装在发送到Acme路由器的可公开路由IP地址的IP包中,该路由器将这些包解密并将其发送到Acme的内部网络。

  https://www.z4a.net/images/2021/11/01/2.png

  现在,我在上面的图表中省略了一个重要的细节:Cloudflare在GRE隧道一侧的IP地址。配置GRE隧道需要为每边指定一个IP地址,而通过隧道发送的数据包的外部IP请求头必须使用这些特定的地址。但是Cloudflare有数千台服务器,每台服务器都可能需要通过隧道向客户交付数据包。那么客户需要与多少Cloudflare IP地址(和GRE隧道)进行通信呢?答案:只有一个,多亏了任播的魔力。

  Cloudflare为我们的GRE隧道端点使用任播IP地址,这意味着任意数据中心中的任意服务器都能够为同一个GRE隧道封装和解封数据包。这怎么可能呢?隧道不是点对点的链接的吗?GRE协议本身是无状态的——每个数据包都是独立处理的,不需要在隧道端点之间进行任何协商或协调。虽然隧道在技术上是绑定到一个IP地址的,但它不需要绑定到特定的设备。任何可以剥离外部请求头然后路由内部数据包的设备都可以处理通过隧道发送的任意GRE数据包。实际上,在任播背景中,术语“隧道”具有误导性,因为它字面上意味着两个定点之间的链接。借助Cloudflare的Anycast GRE(任播通用路由封装),一个“隧道”可以为Cloudflare全球边缘网络上的每个数据中心的每台服务器提供一个通道。

  https://www.z4a.net/images/2021/11/01/3.png

  Anycast GRE的一个非常强大的作用是它消除了单点故障。传统上,GRE-over-Internet可能存在问题,因为两个GRE端点之间的一次互联网中断会完全破坏“隧道”。这意味着可靠的数据传输需要经历令人头疼的问题,即建立和维护端点位于不同物理站点的冗长的GRE隧道,并在其中一个隧道中断时重新路由流量。但是,由于Cloudflare从每个数据中心的每个服务器封装和交付来自的客户流量,因此不会遇到仅有的单条“隧道”被破坏的问题。这意味着Magic Transit的客户可以享受在多个物理站点的终端隧道的冗余和可靠性,同时只需要设置和维护一个GRE端点,从而使他们的工作更简单。

  我们的规模现在也是您的规模

  Magic Transit是一种强大的大规模部署网络功能的新方法。我们不只是给你一个虚拟实例,我们会给你一个全球虚拟边缘网络。Magic Transit采用您通常在本地网络中安装的硬件设备,并将它们分布在Cloudflare网络中的每个数据中心的每个服务器上。这使您可以访问我们的全球任播网络,使用我们的服务器群运行您的任务,以及借助我们的工程专业知识,构建快速、可靠、安全的网络。我们的规模就是你们的规模。
页: [1]
查看完整版本: Magic Transit:Cloudflare规模的网络功能

深圳网广告位招租