BGP の経路伝播とポリシー制御
経路がどこまで広がりどこで止まるかを伝播ルールから理解でき、ルートリフレクタやAS間ポリシーで到達性と収益構造を狙いどおりに設計する勘所がつかめる。
- 1.eBGPで学んだ経路は全ピアへ広告するが、iBGPで学んだ経路は他のiBGPピアへ再広告しないのが伝播の大原則で、これがフルメッシュとループ回避の根拠。
- 2.iBGPフルメッシュのN*(N-1)/2問題を解くのがルートリフレクタ(RR)とコンフェデレーションで、RRはクラスタ単位で経路を反射し、ConfedはAS内をサブASに分割する。
- 3.AS間のカスタマ/ピア/トランジット関係がGao-Rexfordルールとして経路の広告範囲を決め、これがインターネットの経済構造そのものを形づくる。
なぜ「伝播ルール」が要るのか
BGP の難所は 経路選択 で1本を選ぶことよりも、選んだ経路を誰に伝え、誰に伝えないかにあります。BGP はパスベクタ型で、経路に AS 番号の列(AS_PATH)を積み上げて運びますが、AS の中には複数のルータがあり、AS 番号は内部では増えません。つまり AS 内部ではループ検出の手がかりが効かないため、伝播そのものに厳密なルールを課してループと経路爆発を防ぎます。ここを誤ると、経路が届かない、あるいは届きすぎて事故になります。
eBGP と iBGP の伝播大原則
同じ BGP でも、ピアが別 AS なら eBGP、同一 AS 内なら iBGP と呼び、伝播の扱いが根本的に違います。
| 観点 | eBGP | iBGP |
|---|---|---|
| ピアの相手 | 別ASのルータ | 同一AS内のルータ |
| AS_PATH | 自AS番号を付加して送る | 変更しない |
| LOCAL_PREF | 送らない(AS外には無意味) | AS内で共有する |
| NEXT_HOP | 自分のアドレスに書き換える | 原則そのまま引き継ぐ |
| TTL | 既定1(直結が前提) | 内部経由を許す |
| 再広告ルール | 全ピアへ広告 | iBGP学習路は他iBGPへ流さない |
最重要は最終行です。iBGP ピアから学んだ経路は、別の iBGP ピアへは再広告しない。これは AS_PATH が増えない iBGP では従来のループ検出が使えないための、構造的なループ回避策です。その代償として「AS 内の全 BGP ルータが互いに iBGP で直結する」フルメッシュが要求されます。
フルメッシュの限界とスケーリング
iBGP ルータが N 台あると、必要なセッション数は N*(N-1)/2 で、台数の2乗に比例して膨れます。100 台なら約 5000 本。設定・メモリ・更新負荷が現実的でなくなります。この N*(N-1)/2 問題を解くのが、ルートリフレクタとコンフェデレーションです。
ルートリフレクタ(RR)
RR は「iBGP 学習路は再広告しない」という原則を、RR に限って意図的に緩める仕組みです。ピアをクライアントと非クライアントに分類し、次の規則で反射します。
RR の反射ルール(学習元 → 反射先)
クライアント から学習 → 全クライアント + 全非クライアント + eBGP へ反射
非クライアント から学習 → クライアント + eBGP へ反射(非クライアントへは流さない)
eBGP から学習 → クライアント + 非クライアント + eBGP へ反射
非クライアント同士はフルメッシュを保つ前提なので、非クライアント学習路を非クライアントへ流さない点がポイントです。ループ回避は2つの新属性で行います。ORIGINATOR_ID は経路を最初に出した本人を記録し、自分発の反射を捨てるため。CLUSTER_LIST は通過した RR クラスタの列で、自クラスタ ID が既にあれば破棄します。これは AS_PATH と同じ発想を AS 内に持ち込んだものです。
RR は自分が選んだ最良経路1本だけをクライアントへ反射します。クライアントは AS 内の全経路を見られず、RR の視点(IGP 距離)で選ばれた経路を受け取るため、フルメッシュなら起きない経路振りや、最悪は持続的な振動(MED 絡み)が起こりえます。冗長化で RR を複数置く際はクラスタ設計を慎重に。
コンフェデレーション(Confederation)
もう一つの解が、1つの AS を複数のサブ AS(メンバ AS)に分割するコンフェデレーションです。各サブ AS の内側は通常の iBGP フルメッシュ(小規模なので可能)にし、サブ AS 同士は **eBGP に似た「内部 eBGP(confed-eBGP)」**でつなぎます。
外から見た姿: 単一の AS 65000(コンフェデレーション ID)
内部の実体: サブAS 65001 / 65002 / 65003 …
サブAS間 AS_PATH: (65001 65002) のように括弧付きで内部にだけ積む
外部へ広告する瞬間: 内部のサブAS列を取り除き、65000 だけにする
サブ AS 間では AS_PATH が増えるためループ検出が自然に働きます。外部へ出るときに内部のサブ AS 列を剥がすので、他 AS からは単一 AS に見えます。RR が「再広告制限を緩める」アプローチなら、Confed は「AS を割って eBGP のループ検出を借りる」アプローチで、目的は同じでも手段が逆向きです。
AS 間ポリシー:カスタマ・ピア・トランジット
伝播の最終的な意味は、AS 間の商用関係で決まります。関係は大きく3種類です。
| 関係 | 誰が誰に払うか | 提供される到達性 |
|---|---|---|
| トランジット(プロバイダ→カスタマ) | カスタマがプロバイダへ課金 | インターネット全体(フルルート) |
| ピア(対等接続) | 相互無償が基本(settlement-free) | 互いのカスタマ宛のみ |
| カスタマ(自分が顧客側) | 自分が上位へ課金 | 上位経由で全世界へ |
この関係から、どの経路を誰へ広告するかが機械的に定まります。これを定式化したのが Gao-Rexford ルールです。
広告ルール(自分が学んだ経路を、ある隣接へ広告してよいか)
カスタマから学んだ経路 → 全員(カスタマ/ピア/プロバイダ)へ広告してよい
ピアから学んだ経路 → カスタマへのみ広告(ピア/プロバイダへは出さない)
プロバイダから学んだ経路 → カスタマへのみ広告(ピア/プロバイダへは出さない)
経路選択の優先(収益最大化の観点):
カスタマ経路 > ピア経路 > プロバイダ経路
直観は単純で、カスタマ向けの転送は収入になるから広く広告し、ピアやプロバイダへの転送は費用になるから極力使わせない。「ピア経路をプロバイダへ流さない」を破ると、自分が無償で他人のトランジットを肩代わりすることになり、これがいわゆる経路リーク事故の典型です。
カスタマ>ピア>プロバイダの優先は、受信経路に LOCAL_PREF を段階的に付与して実装するのが定石です(例 カスタマ200・ピア100・プロバイダ50)。経路選択順序の最上位近くにある LOCAL_PREF だからこそ、AS_PATH 長などの技術的指標より商用ポリシーを優先できます。
一段でまとめると
BGP の伝播は「eBGP は積んで配る、iBGP は配らない(だから RR/Confed で補う)」という内部規律と、「カスタマは広く、ピア/プロバイダは狭く」という外部の商用規律の二層で成り立ちます。前者は AS 内のループと爆発を防ぐ工学的制約、後者は ルーティングプロトコル が「速さでなく都合で決まる」と述べた、その都合の正体です。最短性を計算する ダイクストラ/ベルマンフォード の世界とは異なり、ここでは経済関係が経路の形を決めます。実機では show ip bgp 系で AS_PATH・LOCAL_PREF・CLUSTER_LIST を確認し、どの規律で経路が止まったかを必ず裏取りしてください。
ネットワーク Article
BGP の経路伝播とポリシー制御を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
BGP
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 5
導入後に効く点
iBGPフルメッシュのN*(N-1)/2問題を解くのがルートリフレクタ(RR)とコンフェデレーションで、RRはクラスタ単位で経路を反射し、ConfedはAS内をサブASに分割する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「BGP / ルーティング」に近いか確認する。
- 強みである「eBGPで学んだ経路は全ピアへ広告するが、iBGPで学んだ経路は他のiBGPピアへ再広告しないのが伝播の大原則で、これがフルメッシュとループ回避の根拠。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。