Assine para receber notificações de novos posts:

瞭解臉書如何從網際網路消失

04/10/2021

11 min. de leitura

「臉書不能可能當掉,對吧?」有一瞬間,我們這樣覺得。

今天世界標準時間 15:51,我們開啟了一個名為「臉書 DNS 查找回應 SERVFAIL」的內部事件,因為我們擔心是我們的 DNS 解析器 1.1.1.1 出了問題。但是當我們準備在我們的公開狀態頁面上發文時,我們意識到還有更嚴重的事情正在發生。

社群媒體立刻開始熱烈討論,我們的工程師也很快地證實報導是真的。臉書和其子服務 WhatsApp、Instagram 真的當機了。他們的 DNS 名稱無法被解析,其基礎結構的 IP 也無法觸及。就好像有人一下子把他們的資料中心「拔掉線」,並斷開它們與網際網路的連線。

這不是 DNS 本身的問題,但 DNS 失效是我們看到臉書廣大服務中斷的第一個症狀。

這怎麼可能?

臉書發布的最新消息

臉書現在發布了一篇部落格,對於其內部發生的事說明一些詳情。從外部,我們觀察到這篇部落格中概述的 BGP 和 DNS 問題,但問題實際上始於影響整個內部骨幹網的配置更改。這導致臉書和其他資產消失,臉書內部員工難以讓服務再次運轉。

臉書發布了另一篇部落格,對發生的事提供了更多細節。您可以閱讀該篇貼文以從內部視角瞭解;並閱讀本文以從外部視角觀察。

現在回到我們從外部觀察到的事。

認識 BGP

BGP 是邊界閘道通訊協定 (Border Gateway Protocol) 的縮寫。它是一種在網際網路上的自主系統 (autonomous systems,簡稱 AS) 之間交換路由資訊的機制。讓網際網路可以運作的大型路由器有龐大、不斷更新的可能路由列表,用於將每個網絡數據包傳送到其最終目的地。如果沒有 BGP,網際網路路由器將不知道該做什麼,網際網路也無法運作。

網際網路一如其名,是網路之間的網路,由 BGP 聯結起來。BGP 讓一個網路 (例如臉書) 能對網際網路上的其他網路公告自己的存在。在撰文的此刻,臉書並沒有公告自己的存在,ISP 和其他網路找不到臉書的網路,所以無法觸及它。

每個網路都有一個 ASN,意即自主系統碼 (Autonomous System Number)。一個自主系統就是一個各別的網路加上一個統一的內部選路政策。AS 可以產生前綴 (可以說它們控制一組 IP 位址),以及傳輸前綴 (可以說它們知道如何到達特定的一組 IP 位址)。

Cloudflare 的 ASN 是 AS13335。每個 ASN 要用 BGP 向網際網路宣示其前綴路由,否則就沒有人知道要如何連接和找到我們。

我們的學習中心有很好的資源,概述 BGPASN,以及它們如何運作。

在這個簡圖中,您可以看到網際網路上的六個自主系統,以及一個數據包從起點到終點可用的兩個可能路由。AS1 → AS2 → AS3 速度最快,AS1 → AS6 → AS5 → AS4 → AS3 速度最慢,但如果第一個路由失效,就可以用第二個。

在世界標準時間 15:58,我們發現臉書停止向他們的 DNS 前綴公告路由。這表示,至少臉書的 DNS 伺服器不能使用。因為 Cloudflare 的 1.1.1.1DNS 解析器無法再回應對 facebook.com 的 IP 位址的查詢。

route-views>show ip bgp 185.89.218.0/23
% Network not in table
route-views>

route-views>show ip bgp 129.134.30.0/23
% Network not in table
route-views>

同時,其他臉書 IP 位址可以選路,但其實也沒用,因為沒有 DNS,臉書和相關服務實際上不能用:

route-views>show ip bgp 129.134.30.0   
BGP routing table entry for 129.134.0.0/17, version 1025798334
Paths: (24 available, best #14, table default)
  Not advertised to any peer
  Refresh Epoch 2
  3303 6453 32934
    217.192.89.50 from 217.192.89.50 (138.187.128.158)
      Origin IGP, localpref 100, valid, external
      Community: 3303:1004 3303:1006 3303:3075 6453:3000 6453:3400 6453:3402
      path 7FE1408ED9C8 RPKI State not found
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
route-views>

我們會繼續追踪在全球網路中看到的所有 BGP 更新和公告。以我們的規模,我們收集的資料讓我們能夠了解網際網路的連接方式,以及流量應該在地球上何處流入和流出。

若對前綴公告做任何更改或完全撤銷前綴,BGP 更新訊息會通知路由器。檢查我們的時間序列 BGP 資料庫時,可以清楚看到從臉書收到的更新數字。一般來說這張圖很安靜:臉書不會每分鐘對其網路進行很多更動。

但是世界標準時 15:40 左右,我們看到臉書發出的路由變更衝上高峰。這就是麻煩的開端。

如果我們按照路由公告及撤銷來劃分這個圖表,就能更瞭解發生什麼事。路由被撤銷,臉書的 DNS 伺服器離線,問題發生一分鐘後,Cloudflare 工程師齊聚一堂,想知道為什麼 1.1.1.1 無法解析 facebook.com,擔心是我們系統何處出了故障。

因為這些撤銷,臉書及其網站實際上是從網際網路斷開了連線。

DNS 受到影響

直接的後果就是世界各地的 DNS 解析器停止解析其網域名。

➜  ~ dig @1.1.1.1 facebook.com
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322
;facebook.com.			IN	A
➜  ~ dig @1.1.1.1 whatsapp.com
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322
;whatsapp.com.			IN	A
➜  ~ dig @8.8.8.8 facebook.com
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322
;facebook.com.			IN	A
➜  ~ dig @8.8.8.8 whatsapp.com
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322
;whatsapp.com.			IN	A

發生這種情況是因為 DNS 與網際網路上的許多其他系統一樣,有其路由機制。當有人在瀏覽器中鍵入 https://facebook.com 網址時,DNS 解析器負責將網域名轉換為要連接的實際 IP 位址,首先會檢查它的快取中是否存有內容並加以使用。如果沒有,它會嘗試從網域名稱服務器中獲取答案,網域名稱伺服器通常由擁有它的實體管理。

如果名稱伺服器無法使用或由於其他原因無法回應,則會收到 SERVFAIL 失效訊息,瀏覽器會向用戶提示錯誤訊息。

同樣地,我們的學習中心有很好的資源,解釋 DNS 如何運作。

由於臉書不再透過 BGP 公告其 DNS 前綴路由,我們和所有其他單位的 DNS 解析器就無法連接到他們的名稱伺服器。連帶地,1.1.1.1、8.8.8.8 和其他主要的公共 DNS 解析器開始發出 (並快取) SERVFAIL 失效訊息。

還不只這樣。此時,人類行為和應用程式邏輯開始發揮作用,並導致另一個呈指數發展的效應。額外的 DNS 流量海嘯隨之而來。

發生這種情況的部分原因是,應用程式不接受錯誤回應並開始重試,有時是很積極地,部分原因是終端用戶也不會接受錯誤回應並開始重新下載頁面,或關閉並重新啟動手上的 App,有時也是很積極地。

這樣的流量暴增 (反映在請求的數量上) 可以在 1.1.1.1 上看到:

問題來了,因為臉書和他們的網站如此巨大,全球的 DNS 解析器處理的查詢比平時多出 30 倍,可能導致其他平台出現延遲和逾時問題。

幸好 1.1.1.1 是生而免費、專有、快速的 (獨立的 DNS 監控器 DNSPerf 可以證明這一點),並且可擴充,因此我們能繼續為用戶提供服務,只受到非常小的影響。

我們絕大多數 DNS 請求的解析時間都在 10 毫秒以內。同時,p95 和 p99 百分位數的小部分回應時間增加,可能是由於失效的 TTL 不得不求助於臉書名稱伺服器因而逾時。10 秒 DNS 逾時限制在工程師中是眾所周知。

對其他伺服器的影響

人們尋找替代方案、想瞭解更多,或想討論現在發生什麼事。當臉書變成不能使用時,我們開始看到對 Twitter、Signal 和其他訊息傳遞和社交媒體平台的 DNS 查詢增加。

我們還可以看到這種不可用的另一個副作用,出現在我們的 WARP 流量,它往返臉書受到影響的 ASN 32934。這張圖表顯示每個國家/地區從世界標準時 15:45 到 16:45 的流量,與三小時前相比的變化情形。全世界進出臉書網路的 WARP 流量都消失了。

網際網路

今天的事件對人們是溫和的提醒:網際網路是一個非常複雜且相互依賴的系統,由數以百萬計的系統和通訊協議合作。各個實體之間的信任、標準化和合作是核心,讓網際網路能為全球近 50 億活躍用戶服務。

更新

在世界標準時 21:00 左右,我們看到來自臉書網路的 BGP 更新活動,在 21:17 達到巔峰。

這張圖表顯示了 DNS 網域名稱 facebook.com 在 Cloudflare 的 DNS 解析器 1.1.1.1 上的可用性。在世界標準時 15:50 左右不再可用,並在 21:20 恢復。

毫無疑問,臉書、WhatsApp 和 Instagram 服務會需要更多時間才能上線,但截至世界標準時 21:28,臉書似乎已重新連接到全球網際網路,DNS 也再次正常運作。

Protegemos redes corporativas inteiras, ajudamos os clientes a criarem aplicativos em escala de internet com eficiência, aceleramos qualquer site ou aplicativo de internet, evitamos os ataques de DDoS, mantemos os invasores afastados e podemos ajudar você em sua jornada rumo ao Zero Trust.

Acesse 1.1.1.1 a partir de qualquer dispositivo para começar a usar nosso aplicativo gratuito que torna sua internet mais rápida e mais segura.

Para saber mais sobre nossa missão de construir uma internet melhor, comece aqui. Se estiver procurando uma nova carreira para trilhar, confira nossas vagas disponíveis.
DNS (TW)繁體中文

Seguir no X

Celso Martinho|@celso
Tom Strickx|@tstrickx
Cloudflare|@cloudflare

Posts relacionados