世界を動かす技術を、日本語で。

BGP処理バグが広範なインターネットルーティングの不安定性を引き起こす

概要

2025年5月20日、BGPメッセージの不具合により大規模なインターネット障害が発生。 JunOSとArista EOSの組み合わせでBGPセッションが自動切断され、接続障害が発生。 原因は破損したBGP Prefix-SID属性のインターネット伝播。 主な関与ASや影響を受けたネットワークも特定。 BGPエラー処理の不備とベンダー間の実装差異が問題の本質。

2025年5月20日のBGP障害概要

  • UTC 2025年5月20日午前7時、不正なBGPメッセージ伝播による大規模障害発生
  • JunOSとArista EOS の組み合わせでBGPセッション自動切断、ルーティング不安定・一部ネットワークで接続断
  • 問題のBGPアップデートは /16プレフィックス に対するもので、 BGP Prefix-SID属性 が付与されていた
  • この属性は全データが 0x00で破損、インターネット向けBGPアップデートでは想定外
  • IOS-XR/Nokia SR-OS はRFC7606準拠で正常にフィルタリング、問題なし
  • JunOS は破損メッセージを転送、 Arista EOS は受信時にセッションリセット
  • 多くのトランジットキャリアがJuniperハードウェアを利用、Arista EOS利用者の接続に影響

問題メッセージの発信元調査

  • bgp.toolsアーカイブ分析により、複数のASが関与していたことが判明
  • 属性がオリジンネットワークではなく、 中継キャリア で付与された可能性
  • 主要な関与AS(全ての問題メッセージに出現)
    • AS9304 (Hutchison Global Communications Limited)
    • AS135338 (Starcloud Information Limited)
    • AS151326 (DCConnect Communication Pte. Ltd.)
    • AS138077 (PT Abhinawa Sumberdaya Asia)
  • bgp.toolsのルート記録から、 AS135338またはAS9304 が属性付与の有力候補
  • 属性付きアップデートで観測されたプレフィックス例
    • 156.230.0.0/16
    • 138.113.116.0/24
    • 163.171.102.0/24
    • 163.171.103.0/24
    • 163.171.104.0/24

影響拡大の理由

  • Hutchison/AS9304 が多くのIXに接続、IXのルートサーバー(bird)がBGP SID非対応
  • フィルタされず多くのIXに配信、マルチテラビット規模で障害拡大

BGP Prefix-SID属性とは

  • BGP Prefix-SID属性 はRFC8669で規定、主に 内部BGPセッション で利用
  • ネットワーク内の経路制御用、インターネット全体へ伝播するものではない
  • 外部BGPセッションを内部用として誤設定した場合などにリーク発生

影響を受けたネットワーク例

  • 規模に対して大きな経路変動が観測されたネットワーク
    • SpaceX Starlink (AS14593)
    • Zscaler (AS62044 / AS53813)
    • Bytedance (AS396986)
    • Disney Worldwide Services (AS23344)
    • Nagasaki Cable Media Inc (AS10000)
    • Global Secure Layer (AS7578)
    • UpCloud (AS202053)
    • Netskope (AS55256)
    • Teleguam Holdings (AS9246)
  • bgp.toolsの通常時は毎秒2万〜3万メッセージ、障害時は 毎秒15万超 に急増

ベンダー間のBGPエラー処理問題

  • 根本原因や真犯人は断定できないが、 インターネット全体に伝播 した事実が問題
  • Juniper は自装置のセッションリセットは防ぐが、不正メッセージを他ピアに転送
  • Arista EOSはエラー処理コードの不備でセッションリセット
  • JunOSのBGPエラー耐性は全メッセージ部分を検査せず、結果として顧客側に障害を波及

まとめと今後の課題

  • 障害は短時間だったが、影響範囲は広大
  • IPベースサービスの拡大で、インターネット障害の社会的リスクが増大
    • 例:TV放送停止や緊急通報不能などの重大な影響
  • BGPエラー処理の実装不備や運用ミスが、現実世界の被害を引き起こすリスク
  • bgp.toolsへのデータ提供で、今後の障害解析や防止に貢献可能
  • 継続的な監視・情報共有・実装改善の必要性

参考

  • bgp.tools
  • RFC7606 “BGP error tolerance”
  • RFC8669 “BGP Prefix-SID”

Hackerたちの意見

インターネットでのマルチキャストって、実際に機能するの?BGPはプライベートネットワーク専用だと思ってたんだけど。

BGPはプライベートネットワークだけのものじゃないよ。インターネットの基盤になってるんだから。もしかして、iBGPとかOSPFのことを考えてるのかな?

いや、BGPはプライベートネットワークだけのものじゃないよ。AS番号を使って、お互いにメッセージを交換してるんだ。

BGPはインターネットのルーティングプロトコルだよ。他の自律システム間のルーティングプロトコルは実質的にこれしかない。 "インターネット"の合理的な同義語は"グローバルBGPルーティングテーブル"だね。BGPはマルチキャストを使わないから、マルチアクセスネットワークのOSPFを考えてるかもしれない。BGPはtcp/179のユニキャストを設定されたピアのIPアドレスに送るんだ。とはいえ、インターネット上でマルチキャストはちゃんと機能するよ。一般的にはあまり使われてないし、家庭ユーザーにはまず使われないし、企業ユーザーでもあまり見かけないけど、2021年にはInternet2で段階的に廃止されたと思う。でも、原理的には全く問題なく機能するよ。

マルチキャストについてはよくわからないな…直感ではダメだと思うけど、その答えには賭けられないな。BGPは自律システム同士が話し合って交渉する唯一の方法だよ。

インターネット上の全トラフィックは、BGPを通じて伝播されたルートによってルーティングされてるんだ。隣接するネットワークが、お互いにどのIPを発信しているか、どのネットワークに接続しているかを伝える方法だよ。

「インターネット」っていうのは、異なる団体が運営する別々のネットワークの集合体なんだ。BGPは、それらがルーティング情報を交換することで接続できるようにするもの。昔はmboneっていうものがあったけど、今はランダムなマルチキャストを送ることはあまりできないけど、ISPsがIPTVのために使ってるのは確かだね。

標準的なアプローチは、受け入れるものには寛容で、出すものには具体的であることだよ。1) 壊れたメッセージをフィルタリングする 2) 壊れたメッセージを破棄する 3) 壊れた属性を無視して渡す 4) 壊れた属性で破綻する 俺にとって、4(Arista)は本当に受け入れられない行動だね。3(Juniper)は望ましくないけど、壊滅的な行動ではない。追記:再読してみたら、Aristaは4じゃなくて2をやったみたい。完全にクラッシュするんじゃなくて、無効な接続として閉じたんだと思う。それはある意味許容できるけど、ユーザーにはあまり良くないね。

このアプローチには賛成できないな。受け入れるものにはすごく具体的で、出すものにもすごく具体的である方がいいと思う。

問題は、BGPがローカルデバイスが理解できない属性を転送する挙動を利用して、ネットワーク全体でいろんなことをやってた人たちがいたことだね。今はその挙動に頼ってる人が多い。今、私たちはこの「機能」の悪影響を経験してるところだよ。

Aristaは2つのことをしたけど、全接続を切断しちゃったのは多分良くなかったと思う。私見だけど、壊れた属性はメッセージから削除してログに残して、残っている有効なデータがあればそれを渡せばいいんじゃないかな。もしなければ、その特定のピアからUPDATEメッセージを受け取っていないふりをすればいい。監視をすれば問題のある発信元を見つけられるし、ネットワークの不安定さを気にせずに対処できると思う。

著者は関連する投稿でこの点を指摘してるね。「一見すると、この“機能”は非常に悪いアイデアに思える。なぜなら、理解していないシステムを通じて盲目的に未知の情報が伝播される可能性があるからだ。しかし、この機能のおかげで、Large Communitiesのようなものが迅速に広まることができたし、新しいBGP機能の導入も可能になったと言える。」

Hacker Newsで議論の続きを見る