<address id="thnfp"></address>

    <address id="thnfp"><th id="thnfp"><progress id="thnfp"></progress></th></address>
    <listing id="thnfp"><nobr id="thnfp"><meter id="thnfp"></meter></nobr></listing>
    以文本方式查看主題

    -  安易免費財務軟件交流論壇  (http://m.gangyx.cn/bbs/index.asp)
    --  電腦知識交流  (http://m.gangyx.cn/bbs/list.asp?boardid=11)
    ----  Magic Transit:Cloudflare規模的網絡功能  (http://m.gangyx.cn/bbs/dispbbs.asp?boardid=11&id=324699)

    --  作者:莫問天涯
    --  發布時間:2021/11/1 8:49:27
    --  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洪水的截圖。我們的體系架構允許我們進行擴展從而阻止最大的攻擊。
      
      圖片點擊可在新窗口打開查看
      
      用于隔離和控制的網絡命名空間
      
      上面的操作看起來與其他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的內部網絡。
      
      圖片點擊可在新窗口打開查看
      
      現在,我在上面的圖表中省略了一個重要的細節:Cloudflare在GRE隧道一側的IP地址。配置GRE隧道需要為每邊指定一個IP地址,而通過隧道發送的數據包的外部IP請求頭必須使用這些特定的地址。但是Cloudflare有數千臺服務器,每臺服務器都可能需要通過隧道向客戶交付數據包。那么客戶需要與多少Cloudflare IP地址(和GRE隧道)進行通信呢?答案:只有一個,多虧了任播的魔力。
      
      Cloudflare為我們的GRE隧道端點使用任播IP地址,這意味著任意數據中心中的任意服務器都能夠為同一個GRE隧道封裝和解封數據包。這怎么可能呢?隧道不是點對點的鏈接的嗎?GRE協議本身是無狀態的——每個數據包都是獨立處理的,不需要在隧道端點之間進行任何協商或協調。雖然隧道在技術上是綁定到一個IP地址的,但它不需要綁定到特定的設備。任何可以剝離外部請求頭然后路由內部數據包的設備都可以處理通過隧道發送的任意GRE數據包。實際上,在任播背景中,術語“隧道”具有誤導性,因為它字面上意味著兩個定點之間的鏈接。借助Cloudflare的Anycast GRE(任播通用路由封裝),一個“隧道”可以為Cloudflare全球邊緣網絡上的每個數據中心的每臺服務器提供一個通道。
      
      圖片點擊可在新窗口打開查看
      
      Anycast GRE的一個非常強大的作用是它消除了單點故障。傳統上,GRE-over-Internet可能存在問題,因為兩個GRE端點之間的一次互聯網中斷會完全破壞“隧道”。這意味著可靠的數據傳輸需要經歷令人頭疼的問題,即建立和維護端點位于不同物理站點的冗長的GRE隧道,并在其中一個隧道中斷時重新路由流量。但是,由于Cloudflare從每個數據中心的每個服務器封裝和交付來自的客戶流量,因此不會遇到僅有的單條“隧道”被破壞的問題。這意味著Magic Transit的客戶可以享受在多個物理站點的終端隧道的冗余和可靠性,同時只需要設置和維護一個GRE端點,從而使他們的工作更簡單。
      
      我們的規,F在也是您的規模
      
      Magic Transit是一種強大的大規模部署網絡功能的新方法。我們不只是給你一個虛擬實例,我們會給你一個全球虛擬邊緣網絡。Magic Transit采用您通常在本地網絡中安裝的硬件設備,并將它們分布在Cloudflare網絡中的每個數據中心的每個服務器上。這使您可以訪問我們的全球任播網絡,使用我們的服務器群運行您的任務,以及借助我們的工程專業知識,構建快速、可靠、安全的網絡。我們的規模就是你們的規模。
    Channel