解決方案
路由洩漏會將流量導向非預期的路徑,並曾導致網際網路大片區域離線,然而防範這類問題一直仰賴手寫且容易出錯的路由政策。RFC 9234 將這項意圖移入 BGP:Role 能力讓相鄰路由器就彼此的關係達成共識,而「僅限客戶」(Only to Customer,OTC)屬性則標記出一條只能向下游傳播的路由,因此符合規範的路由器無需仰賴營運者政策即可拒絕洩漏。
衡量 RFC 9234 的採用情況並不容易,因為 OTC 可能由發送方在出口時標記,也可能由接收方在入口時標記,因此單看公開路徑無法得知是誰設定的。在 RouteViews 與 RIPE RIS 中計算不同的 OTC 值,找到 361 個候選,但填充值會使這個數字虛高;將 OTC 與路徑的第一個 AS 比對後剩下九個,而啟發式方法則將估計值提高到 36。Cloudflare 自家的網路消除了這種模糊性:憑藉數千個直接對等體,它檢查 BMP 饋送中 OTC 等於對等體 ASN 的路由,在三個月內找到 67 個設定該屬性的 AS。
為了找出移除該屬性的網路,Cloudflare 從所有對等地點公告了一個 IPv4 與一個 IPv6 前綴,並將 OTC 設為自家的 ASN,隨後再將其撤回以觸發路徑搜尋。任何終止於 Cloudflare ASN 卻沒有 OTC 的路徑,都是被前一個 AS 移除的,這可透過解析來自公開收集器與自家路由器的 UPDATE 訊息來辨識。第一輪發現六個移除者,其中包括兩家一級網路業者 GTT(AS3257)與 Arelion(AS1299);經過信任集合的迭代後又發現九個。這兩家一級網路業者出現在 96.6% 的 IPv4 與 92.9% 的 IPv6 缺少 OTC 路徑中;整體而言,有 33.1% 的 IPv4 與 17% 的 IPv6 路徑失去了 OTC。
移除該屬性之所以重要,是因為 OTC 是選用的可傳遞屬性:即使是不支援 RFC 9234 的路由器也必須將其傳遞下去,而移除它會使相隔數跳、符合規範的 AS 失去洩漏防護。GTT 與 Arelion 告訴 Cloudflare,他們是在過去 BGP 錯誤處理事件(包括一次格式錯誤的 OTC 導致工作階段重置)之後,基於防禦性做法而移除該屬性。Cloudflare 與兩家業者分享了調查結果:Arelion 在不久後推出了保留 OTC 的設定,這可在公開資料中驗證,而 GTT 的設定仍會移除該屬性。
達成什麼
公告帶有 OTC 標記的測試前綴;觀察誰將其移除
為何有效
數千個直接對等體為 Cloudflare 提供了一個觀測點,使 OTC 可歸因於單一 AS,消除了污染公開 RIB 傾印的入口/出口模糊性。
公告將 OTC 設為 Cloudflare 自家 ASN 的測試前綴,隨後再將其撤回,產生了一連串路徑,其中最後一跳缺少 OTC 只可能意味著所指名的鄰居將其移除。
解析 UPDATE 訊息而非 RIB 快照,同時捕捉了公告與撤回階段,為歸因演算法找出遠更多的路由。
由於 OTC 是選用的可傳遞屬性,少數幾家移除該屬性的一級網路業者便悄悄破壞了其後方符合規範的 AS 的洩漏防護,這使得與這兩家網路交涉值得付出努力。
向每家網路出示證據,將測量轉化為改變:Arelion 在對話後數日內便開始保留 OTC。
可應用之處
當公開資料無法判斷誰遵守某項協定時,從多個觀測點發出你自己的測試訊號,並觀察誰將其丟棄:直接觀察能將模糊性轉化為具體名稱,而具體名稱則能轉化為修正。
後續發展
Arelion 在 Cloudflare 分享調查結果後不久便開始保留 OTC 屬性,而這項改變可透過對 Cloudflare 測試前綴的 monocle 查詢,在公開收集器資料中驗證。GTT 的設定仍會移除 OTC,Cloudflare 表示,在 GTT 保留該屬性或是設定 BGP Roles 之前,這將持續阻礙經由 AS3257 的 RFC 9234 路由洩漏防護。Cloudflare 已開始在其自家路由器上逐步部署 Role 設定,並計畫在 Cloudflare Radar 的 Routing 區塊中公布採用資料。
追溯依據
參考來源
- BGP Role model: tracking the adoption of RFC 9234 The Cloudflare Blog · blog.cloudflare.com ·