ネットワーク●●●●○

BGP

Border Gateway Protocol ・ びーじーぴー

独立に運用されるネットワーク(AS)同士が、どのアドレス帯へどう届くかを教え合うプロトコル。

✦ 30秒で試す — 航海世界の経路は、数万の組織の「言い分」だけでつながっている本物に近い組織は、どちらへデータを送る?予想してみる

概要

BGP(Border Gateway Protocol)は、インターネットを構成する組織のネットワーク同士が「自分はどのIPアドレス帯を持っていて、どの経路で届くか」を教え合うためのプロトコルです。インターネットには全体を統括する管制塔が存在しません。ISP、クラウド事業者、大学、大企業といった無数の独立したネットワークが相互に接続し、BGP でお互いの行き先情報を交換し合うことで、結果として1つの巨大な網として機能しています。組織の内側の経路は OSPF や IS-IS といった別のプロトコル(IGP)が受け持ちますが、組織と組織の間の経路交換を担う標準は、事実上 BGP ただ1つです。インターネット全体のルーティングは、この BGP の上に組み上がっています。

この「独立して運用されるネットワークのまとまり」を AS(Autonomous System、自律システム)と呼び、それぞれに AS番号という識別子が割り当てられています。世界には数万の AS があり、NTTコミュニケーションズも Google も AWS も、それぞれが1つ(あるいは複数)の AS です。BGP は AS と AS の境界(Border)に立つルータ同士が話すプロトコルであり、その名の通り「境界のゲートウェイのためのプロトコル」なのです。

普段のアプリケーション開発で BGP を直接触ることはまれですが、「特定の国から自社サービスに届かない」「クラウド事業者の経路設定ミスで世界的な障害が起きた」といったニュースの裏側には、ほぼ必ず BGP がいます。インターネットという足場がどう組まれているかを知る、いちばん深い一枚です。

なぜ生まれたか

初期のインターネットでは、EGP という素朴なプロトコルが組織間の経路交換を担っていました。しかし EGP はネットワーク全体が木構造(中心のバックボーンから枝分かれする形)であることを前提としており、ISP が乱立して網の目状に相互接続する商用インターネットには対応できませんでした。網の目状のトポロジでは経路がループする恐れがあり、また「どの組織のネットワークを経由するか」は技術だけでなく契約や政治の問題でもあるため、「最短だから通す」ではなく「この経路は使う・使わない」を各組織が自分のポリシーで決められる必要があったのです。

こうして1989年に設計されたのが BGP です(現行版の BGP-4 は1994年〜、現在の仕様は RFC 4271)。経路情報に「その経路が通過する AS 番号の並び(ASパス)」を含めることでループを機械的に検出し、同時に各 AS が自分の方針で経路を選別・加工できる柔軟性を持たせました。逸話として、初期の設計は IETF の会合中に3枚のナプキンに書かれたため「3枚のナプキンのプロトコル」と呼ばれます。その即興的な出自のプロトコルが、30年以上たった今も全インターネットを支え続けています。

詳細

経路広告 — 「うちを通ればそこへ行けます」の伝播

BGP の基本動作は「経路広告(アドバタイズ)」です。ある AS が自分の持つIPアドレス帯(プレフィックス)を隣接 AS に知らせると、受け取った AS は自分の AS 番号を ASパスの先頭に付け足して、さらにその隣へ伝えます。伝言ゲームのように広告が伝播した結果、世界中の AS が「そのプレフィックス宛てはどの隣人に渡せばよいか」を知る、という仕組みです。

AS64503 海外ISPAS64502 大手ISPAS64501 中堅ISPAS64500 コンテンツ事業者AS64503 海外ISPAS64502 大手ISPAS64501 中堅ISPAS64500 コンテンツ事業者宛先203.0.113.0/24へはAS64502経由と学習する203.0.113.0/24 を広告 ASパス 64500同じ経路を再広告 ASパス 64501 64500同じ経路を再広告 ASパス 64502 64501 64500以後そのプレフィックス宛てのパケットを転送ASパスを逆にたどって転送発信元のASに到達
経路広告の向き →(「203.0.113.0/24 へはうちを通れば届く」)AS64500起点・持ち主AS64501AS64502AS645036450064501 6450064502 64501 64500← パケットの向き(203.0.113.10 宛て): 広告をくれた隣へ渡す受け取った AS パスに自分の番号がもう入っていたら捨てる(ループ防止)
経路広告は起点から外へ広がり、パケットはその逆向きに起点へ流れる。広告を受け取った AS は自分の AS 番号を先頭に足して次へ渡す

ポイントは、パケットの流れが広告の流れの逆向きになることです。「うちを通ればそこへ行けます」という広告が東へ伝われば、パケットは西へ流れてきます。また、受け取った ASパスに自分の AS 番号がすでに含まれていたらその広告を破棄する、という単純なルールで経路ループを防いでいます。隣接ルータ同士は TCP のポート179で接続を張り(この関係を「ピア」と呼びます)、最初に全経路を交換した後は差分だけを送り合います。フルルート(インターネットの全経路)は現在100万経路前後に達しており、これを保持・処理できることが基幹ルータの要件になっています。

経路選択とポリシー — 最短ではなく「契約に従って」選ぶ

同じ宛先への経路を複数の隣人から教わったとき、BGP は組織内で使う OSPF のような「距離の最短」では選びません。最優先されるのは管理者が設定するポリシー(LOCAL_PREF などの属性)で、その次に ASパスの短さなどが比較されます。これは AS 間の接続に「顧客・事業者(トランジット)」「対等交換(ピアリング)」といった商業的関係があるためです。お金を払って接続してもらう経路より、無料で交換できるピアの経路を優先する — そんな経済的判断がプロトコルの経路選択に直接組み込まれているのが BGP の際立った特徴で、インターネットの地図は技術と契約の両方で描かれているのです。

Tier1 事業者AS64510Tier1 事業者AS64511ピアリング中堅ISPAS64501中堅ISPAS64502トランジットトランジットピアリング(対等・無償)コンテンツ事業者AS64500企業ネットワークAS64520矢印は顧客から事業者への契約関係。経路広告はこの網の目を伝わって全世界に届く
インターネットの構造 — 数万のASがトランジットとピアリングで網の目につながる

経路ハイジャック — 嘘の広告が世界を巻き込む

BGP の最大の弱点は、広告の内容を検証する仕組みが元々なかったことです。ある AS が「そのアドレス帯はうちのものです」と嘘の(あるいは誤った)広告を流すと、周囲の AS はそれを信じて経路を切り替えてしまいます。同じ長さのプレフィックスなら、各 AS は AS パスの短いほうを選ぶので、被害は偽の広告を出した AS の近くにとどまります。ところが正規の広告より細かいプレフィックス(/24 に対して /25 など)で広告すると、話が変わります。ルータはパケットの宛先に一致する経路のうち、最も細かいものを使う(ルーティングのロンゲストマッチ)ので、細かい偽の広告は AS パスの長さに関係なく、届いた先のすべてで正規の経路に勝ってしまうのです。これが「経路ハイジャック(BGPハイジャック)」です。

下の部品で、偽の広告をどこか1つの AS に運んで、同じ長さの /24 と、より細かい /25 で広がり方を比べてみてください。パケットは広告と逆向きに流れるので、経路が吸い込まれた AS からは、パケットが乗っ取り役へ向かいます。

⚡ 体験: 偽の経路広告で、世界の経路を吸い込む
広告する範囲
RPKI の検証
AS64500本物の持ち主AS64501AS64502AS64510AS64511AS64512AS64520AS64521あなたの ISP偽の広告 /24あなたの ISP(AS64521)の BGP の表プレフィックスAS パス(左が隣、右端が起点)203.0.113.0/2464511 64501 64500
本物へ向かう経路・パケット乗っ取り役へ吸い込まれる経路・偽の広告RPKI で偽の広告を捨てた AS
乗っ取り役—吸い込まれた AS0 / 6あなたの ISP のパケットの行き先本物(AS64500)

朱の「偽の広告」チップを、どれか1つの AS へドラッグしてください(タップでおまかせ)。その AS が、AS64500 の持ち物である 203.0.113.0/24 を「うちにある」と広告し始めます。右下の「あなたの ISP」からは、宛先へパケットが流れ続けています。

有名な事故が2008年のパキスタンの事例です。国内での YouTube 遮断を意図した ISP が YouTube のアドレス帯をより細かいプレフィックスで広告したところ、その経路が誤って国外にまで伝播し、世界中の YouTube 宛てトラフィックがパキスタンに吸い込まれて数時間のグローバル障害となりました。悪意による攻撃としては、2018年の Amazon Route 53 の事件が知られています。攻撃者は、Route 53 の DNS サーバが使うアドレス帯をより細かいプレフィックスで広告して乗っ取り、暗号資産のウォレットサービス MyEtherWallet の名前解決に偽のDNSサーバで答えて、利用者を偽サイトへ誘導しました。偽サイトの証明書は正規のものではなく、ブラウザは警告を出していましたが、警告を押し切った利用者の資産が盗まれました。通信の中身は TLS で守れても、「そもそもパケットがどこへ運ばれるか」は BGP の信頼の上に成り立っているのです。

対策として現在進んでいるのが RPKI(Resource Public Key Infrastructure)です。公開鍵暗号の証明書によって「このアドレス帯を広告してよいのはこの AS だけ、許す長さはここまで」という対応(ROA)を登録し、各 AS が受け取った広告を検証して、起点の AS や長さが合わない経路を捨てます(ROV: Route Origin Validation)。大手クラウドや主要 ISP での導入が進み、状況は改善しつつあります。ただし、検証しない AS が経路の途中に残っていれば、そこから先では偽の経路が使われます。また ROA が確かめるのは起点の AS だけなので、正しい AS 番号を名乗って AS パスを偽る手口には、AS パスそのものを検証する仕組み(ASPA など)の普及が必要です。経路ハイジャックは今もインターネットの構造的なリスクであり続けています。

運用の現場感

BGP はサービスの可用性設計にも直結します。複数の ISP に接続して片方の障害時に経路を切り替えるマルチホーミングは BGP があってこそ成立しますし、CDN や大手 DNS サービスが使うエニーキャスト(世界中の拠点から同じアドレス帯を広告し、利用者を最寄り拠点に誘導する技術)も BGP の応用です。一方で、設定ミス1つの影響範囲が世界規模になるのも BGP の怖さです。2021年の Facebook の大規模障害では、メンテナンス中の誤操作をきっかけに自社の経路広告が取り下げられ、DNS サーバごとインターネットから消滅した結果、外部サービスだけでなく社内システムまで巻き込む約6時間の全面停止となりました。インターネットの「つながっている」という当たり前は、数万の AS が BGP で交わし続ける広告の上に、かろうじて成立しているのです。

試問

8つの AS(独立に運用されるネットワーク)がつながる網で、AS64500 がアドレス帯 203.0.113.0/24 の本物の持ち主です。朱の「偽の広告」チップを、どれか1つの AS へドラッグすると、その AS が「203.0.113.0 はうちにある」と広告し始めます(タップでおまかせ)。上の切り替えで、広告の範囲を /24(本物と同じ長さ)か /25(半分の、より細かい範囲)に、RPKI(署名つきの登録簿との照合)の検証をする・しないに変えられます。

✦ 命題挑戦中

偽の経路広告1つで、ほかの6個の AS すべての経路を乗っ取り役へ吸い込め。そのうえで、RPKI の検証がそれを止めることを確かめよ

  • 偽の広告1つで、ほかの 6 個の AS をすべて乗っ取り役へ吸い込む
  • 同じ種類の広告が、RPKI の検証のもとでは1個も吸い込めないことを確かめる
⚡ 体験: 偽の広告で、6個すべてを吸い込む
広告する範囲
RPKI の検証
AS64500本物の持ち主AS64501AS64502AS64510AS64511AS64512AS64520AS64521あなたの ISP偽の広告 /24あなたの ISP(AS64521)の BGP の表プレフィックスAS パス(左が隣、右端が起点)203.0.113.0/2464511 64501 64500
本物へ向かう経路・パケット乗っ取り役へ吸い込まれる経路・偽の広告RPKI で偽の広告を捨てた AS
乗っ取り役—吸い込まれた AS0 / 6あなたの ISP のパケットの行き先本物(AS64500)

朱の「偽の広告」チップを、どれか1つの AS へドラッグしてください(タップでおまかせ)。その AS が、AS64500 の持ち物である 203.0.113.0/24 を「うちにある」と広告し始めます。右下の「あなたの ISP」からは、宛先へパケットが流れ続けています。