BGP(Border Gateway Protocol)を理解するうえで、最初に整理しておきたいのが eBGP と iBGP の違いです。
どちらも同じ BGP を使用しますが、経路を交換する範囲と役割が異なります。
さらに、iBGP の仕組みを掘り下げると、Route Reflector(RR)が必要になる理由も整理できます。
この記事では、eBGP と iBGP の違い、iBGP フルメッシュの制約、Route Reflector の経路反射ルール、ループ防止属性、冗長化を順に整理します。Route Reflector は単なる中継装置ではなく、iBGP の再広告制約をどこへ移すのかという設計上の仕組みです。セッション数の削減だけでなく、経路選択、反射ルール、冗長化、ループ防止属性を合わせて扱います。
| 論点 | 見るポイント | この記事での位置づけ |
|---|---|---|
| eBGP | 異なる AS 間で経路を交換し、AS_PATH に自 AS 番号を追加する | AS 間の経路交換とループ検知の基本です |
| iBGP | 同じ AS 内で BGP 経路を共有し、自 AS 番号を AS_PATH へ追加しない | AS 内で経路を配るための仕組みです |
| フルメッシュ | iBGP で学習した経路を別の iBGP ピアへ原則再広告しない制約への対応 | ルーター数が増えるほど運用負荷が急増します |
| Route Reflector | 一定のルールで iBGP 経路を反射し、セッション数を減らす | 複雑性を RR 側の設計へ移します |
| ORIGINATOR_ID / CLUSTER_LIST | 経路反射で生じる AS 内部のループを検知する | AS_PATH を置き換えるのではなく補完します |
書籍
ネットワーク設計とルーティングに関する本
BGP、ルーティング、ネットワーク設計を体系的に確認したい場合の参考リンクです。価格や在庫、内容はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
BGP と AS
BGP は、ネットワーク間で経路情報を交換するためのルーティングプロトコルです。
BGP を理解するうえでは、AS(Autonomous System:自律システム)という単位が重要です。
AS は、単一の管理方針によって運用されるネットワークのまとまりです。
例えば、次のような組織が AS を運用します。
- ISP
- 通信キャリア
- クラウド事業者
- 大規模企業
- コンテンツ事業者
BGP は、異なる AS 間で経路を交換するだけではありません。同じ AS の内部で、外部から学習した経路を共有するためにも利用されます。
この違いによって、BGP は次の 2 つに分かれます。
- eBGP(External BGP)
- iBGP(Internal BGP )
eBGP とは
eBGP は、異なる AS 間で経路情報を交換するために使用されます。
| 接続 | 内容 |
|---|---|
| AS65001 の R1 | AS65002 の R2 と eBGP ピアを形成します。 |
| 境界 | 異なる AS 間の接続であり、広告時に AS_PATH へ自 AS 番号を追加します。 |
eBGP では、経路を別の AS へ広告するときに、自身の AS 番号を AS_PATH 属性へ追加します。
R1 が AS_PATH: 65002 を持つ経路を受信した状態を例にします。
| 経路 | AS_PATH |
|---|---|
| 10.0.0.0/24 | 65002 |
R1 がこの経路を別の AS へ広告する場合、AS_PATH には自 AS 番号が追加されます。
| 経路 | AS_PATH |
|---|---|
| 10.0.0.0/24 | 65001 65002 |
AS_PATH は、経路選択だけでなく、AS 間のループ検知にも使用されます。
BGP ルーターは、自身の AS 番号が AS_PATH に含まれている経路を受信すると、その経路を原則として拒否します。
iBGP とは
iBGP は、同じ AS 内で BGP 経路を共有するために使用されます。
| 接続 | 内容 |
|---|---|
| AS65001 内の R1 と R2 | 同じ AS 内で iBGP ピアを形成します。 |
| 目的 | 外部から学習した BGP 経路を AS 内部へ共有します。 |
R1 が ISP から eBGP で経路を学習した場合、その経路を AS 内の R2 へ伝えるために iBGP を使用します。
eBGP と異なり、iBGP で経路を広告しても、自 AS 番号は AS_PATH へ追加されません。同じ AS の内部を移動しているだけであり、新たな AS を通過したわけではないからです。
ただし、iBGP 経路から AS_PATH 属性そのものがなくなるわけではありません。eBGP で受信した経路が持っていた AS_PATH は維持されますが、iBGP で AS 内部を伝搬しても、自 AS 番号は追加されません。
eBGP と iBGP の主な違い
| 項目 | eBGP | iBGP |
|---|---|---|
| 接続先 | 異なる AS | 同じ AS |
| 主な目的 | AS 間の経路交換 | AS 内の BGP 経路共有 |
| AS_PATH | 広告時に自 AS 番号を追加 | 自 AS 番号を追加しない |
| ループ検知 | 主に AS_PATH を使用 | AS_PATH だけでは AS 内部のループを検知できない |
| 経路の再広告 | 通常の BGP 広告ルールに従う | iBGP で学習した経路を別の iBGP ピアへ原則広告しない |
この再広告制約が、Route Reflector を理解する前提になります。
iBGP で受信した経路は再広告しない
iBGP には、次の基本ルールがあります。
iBGP では、iBGP ピアから受信した経路を、別の iBGP ピアへ原則として再広告しません。
R1、R2、R3 が直列に iBGP セッションを形成している構成では、R2 は iBGP 経路を単純に中継しません。
| 区間 | 関係 | 注意点 |
|---|---|---|
| R1 – R2 | iBGP | R2 は R1 から受信した iBGP 経路を、そのまま R3 へ再広告しません。 |
| R2 – R3 | iBGP | 単純な中継構成では、R1 の経路は R3 へ届きません。 |
この構成では、R1 → R2 → R3 という iBGP 経路伝搬は成立しません。
eBGP では、AS を通過するごとに AS_PATH が変化するため、AS_PATH によるループ検知が可能です。
一方、iBGP で AS 内部を移動しても、自 AS 番号は AS_PATH へ追加されません。その状態で iBGP 経路を自由に再広告すると、AS_PATH だけでは AS 内部の経路情報ループを検知できません。
そのため、通常の iBGP では再広告を禁止することで、AS 内部の経路伝搬を制御しています。
iBGP フルメッシュ
iBGP で受信した経路を別の iBGP ピアへ再広告できない場合、AS 内のすべての BGP ルーターへ経路を届けるには、各ルーターが相互に iBGP セッションを形成します。この構成が iBGP フルメッシュ です。
必要なセッション数は、ルーター数を N とすると N × (N – 1) / 2 です。4 台であれば 6 セッション、100 台であれば 4,950 セッションになります。
| ルーター数 | 必要な iBGP セッション数 |
|---|---|
| 4 台 | 6 セッション |
| 100 台 | 4,950 セッション |
| N 台 | N × (N – 1) / 2 |
ルーター数が増えるほど、セッション数、設定量、障害時の影響範囲、運用負荷が急速に増加します。小規模な環境ではフルメッシュでも運用できますが、大規模な AS では現実的ではありません。
Route Reflector とは
iBGP フルメッシュの問題を緩和するために使用されるのが、Route Reflector です。Route Reflector は、通常の iBGP では禁止されている経路の再広告を、一定のルールに従って行います。
| 役割 | 接続 |
|---|---|
| RR | R1、R2、R3 と iBGP セッションを形成します。 |
| R1 / R2 / R3 | RR クライアントとして、RR から反射された経路を受け取ります。 |
この構成では、各ルーターが RR と iBGP セッションを形成し、RR クライアントとして動作します。
| クライアント | iBGP ピア |
|---|---|
| R1 | RR |
| R2 | RR |
| R3 | RR |
通常、R1、R2、R3 の間には直接の iBGP セッションを構成しません。
RR クライアント同士は直接経路交換しない
R1 が外部 AS から eBGP で経路を受信した場合、その経路は R1 から RR へ広告され、RR から R2 へ反射されます。
| 位置 | 役割 |
|---|---|
| ISP | 外部 AS |
| R1 | eBGP で外部経路を受信 |
| RR | R1 から受信した経路を反射 |
| R2 | RR から経路を受信 |
| 順序 | 経路情報の流れ |
|---|---|
| 1 | ISP から R1 |
| 2 | R1 から RR |
| 3 | RR から R2 |
R1 と R2 は、直接 iBGP ピアを形成しているわけではありません。R1 が RR へ経路を広告し、RR がその経路を R2 へ反射します。
RR クライアント同士は直接経路を交換するのではなく、RR を通して経路情報を受け取ります。ただし、RR は受信した BGP UPDATE を無条件に転送する単純な中継装置ではありません。
通常の BGP 経路選択を行い、選択した経路を広告または反射します。
RR の反射ルールは非対称である
Route Reflector の反射ルールは、経路をどこから学習したかによって異なります。
RR に接続する iBGP ピアは、次の 2 種類に分かれます。
- クライアント
- 非クライアント
基本的な広告規則は次のとおりです。
| 経路の学習元 | 広告先 | 分類 |
|---|---|---|
| クライアント | 他のクライアントおよび非クライアント | 経路反射 |
| 非クライアント iBGP ピア | クライアント | 経路反射 |
| eBGP ピア | 通常の BGP 広告規則に従って iBGP ピアへ広告 | 通常広告 |
eBGP ピアから学習した経路の広告は、Route Reflector 固有の反射ではありません。eBGP で学習した経路は、RR が存在しない通常の iBGP 構成でも、iBGP ピアへ広告できます。
Route Reflector によって特別な扱いが必要になるのは、iBGP から学習した経路を別の iBGP ピアへ広告する場合です。
クライアント R1 から受信した経路は、別のクライアント R2 にも、非クライアント iBGP ピア R4 にも反射します。
| 学習元 | 広告先 | 扱い |
|---|---|---|
| クライアント R1 | クライアント R2 | 反射します。 |
| クライアント R1 | 非クライアント R4 | 反射します。 |
| 非クライアント R4 | クライアント R1 / R2 | 反射します。 |
| 非クライアント R4 | 別の非クライアント | 通常の iBGP 制約により反射しません。 |
一方、非クライアント R4 から学習した iBGP 経路は、クライアント R1 と R2 には反射しますが、別の非クライアントへは反射できません。
非クライアント同士は、従来どおり iBGP フルメッシュを構成する必要があります。Route Reflector は、AS 内のあらゆる iBGP フルメッシュを無条件に不要にする仕組みではありません。
クライアントと非クライアントの関係を設計することで、必要な iBGP セッションを削減する仕組みです。
Route Reflector によって新しいループの可能性が生まれる
通常の iBGP では、iBGP から受信した経路を別の iBGP ピアへ再広告しないことで、AS 内部の経路情報ループを抑止しています。
Route Reflector は、この制約を緩和します。その結果、誤った構成や複数 RR 間の経路反射によって、同じ経路が AS 内部を循環する可能性が生まれます。
Route Reflector は単に iBGP の再広告禁止を解除しているわけではありません。従来の制約を緩和する代わりに、別のループ検知機構を導入しています。
RFC 4456 では、そのために次の 2 つの BGP 属性が定義されています。
- ORIGINATOR_ID
- CLUSTER_LIST
ORIGINATOR_ID
ORIGINATOR_ID は、反射された経路をローカル AS 内で最初に生成した BGP スピーカーを識別するための属性です。
RR が iBGP で学習した経路を反射するとき、経路に ORIGINATOR_ID が存在しなければ、その経路をローカル AS 内で生成した BGP スピーカーの BGP Identifier を設定します。これは、クライアントから受信した経路だけに限定されません。
非クライアント iBGP ピアから受信した経路をクライアントへ反射する場合にも、ORIGINATOR_ID が存在しなければ付与されます。例えば、R1 が生成した経路を RR が R2 へ反射する場合、ORIGINATOR_ID には R1 の BGP Identifier が記録されます。
| 順序 | 内容 |
|---|---|
| 1 | R1 が経路を生成します。 |
| 2 | RR が経路を反射するときに ORIGINATOR_ID として R1 の BGP Identifier を設定します。 |
| 3 | R2 は RR から反射された経路を受信します。 |
その経路が何らかの理由で R1 へ戻った場合、R1 は ORIGINATOR_ID が自身の BGP Identifier と一致することを確認できます。
自身が生成した経路であるため、その経路を無視します。ORIGINATOR_ID は、経路が元の BGP スピーカーへ戻ることを検知するための仕組みです。
CLUSTER_ID と CLUSTER_LIST
クラスタ は、Route Reflector と、その RR に所属するクライアントの集合です。クラスタは、CLUSTER_ID によって識別されます。
RFC 4456 では、RR が 1 台だけのクラスタは、その RR の BGP Identifier によって識別されます。RR が経路を反射するときは、ローカルの CLUSTER_ID を CLUSTER_LIST の先頭へ追加します。
例えば、経路が Cluster A と Cluster B を通過した場合、CLUSTER_LIST には通過したクラスタが記録されます。
| 属性 | 値の例 | 意味 |
|---|---|---|
| CLUSTER_LIST | Cluster B, Cluster A | 経路が Cluster A を通過し、その後 Cluster B を通過したことを示します。 |
RR が経路を受信した際、自身の CLUSTER_ID がすでに CLUSTER_LIST に含まれていれば、その経路は以前に同じクラスタを通過したことになります。
その場合、RR はその経路を無視します。
| 段階 | 動作 |
|---|---|
| 1 | Cluster A の RR1 が経路を反射し、CLUSTER_LIST に Cluster A を追加します。 |
| 2 | Cluster B の RR2 が同じ経路を反射し、CLUSTER_LIST に Cluster B を追加します。 |
| 3 | 経路が再び Cluster A へ戻ると、RR1 は自身の CLUSTER_ID が CLUSTER_LIST に含まれることを確認し、その経路を破棄します。 |
CLUSTER_LIST は、経路が同じ RR クラスタを繰り返し通過することを検知するための仕組みです。
AS_PATH を置き換えるのではなく、AS 内部を補完する
eBGP では、AS_PATH に自 AS 番号を追加することで AS 間のループを検知します。しかし、iBGP では AS 内部を経路が移動しても、自 AS 番号は AS_PATH へ追加されません。
そのため、AS_PATH だけでは Route Reflector によって発生する AS 内部の経路反射ループを検知できません。
そこで、Route Reflector では次の属性を使用します。
- ORIGINATOR_ID:元の BGP スピーカーへの回帰を検知する
- CLUSTER_LIST:同じ RR クラスタへの回帰を検知する
ORIGINATOR_ID と CLUSTER_LIST は、AS_PATH を置き換えるものではありません。AS_PATH が AS 間の経路を記録するのに対し、ORIGINATOR_ID と CLUSTER_LIST は、同一 AS 内で Route Reflector によって反射された経路を識別します。
つまり、Route Reflector は iBGP のループ防止をなくしたのではありません。
再広告禁止という制約に依存していたループ抑止を、ORIGINATOR_ID と CLUSTER_LIST による明示的なループ検知で補っています。
Route Reflector の冗長化
単一の RR だけで構成すると、その RR の障害によってクライアントが BGP 経路を受信できなくなる可能性があります。
そのため、実運用では複数の RR を配置し、クライアントが複数 RR と iBGP セッションを形成する構成が一般的です。
| 対象 | 接続する RR |
|---|---|
| R1 | RR1 と RR2 |
| R2 | RR1 と RR2 |
| R3 | RR1 と RR2 |
| R4 | RR1 と RR2 |
各クライアントは、RR1 と RR2 の両方に接続します。
| 対象 | 接続する RR |
|---|---|
| R1 | RR1 と RR2 |
| R2 | RR1 と RR2 |
| R3 | RR1 と RR2 |
| R4 | RR1 と RR2 |
一方の RR に障害が発生しても、もう一方の RR から経路情報を受信できます。
なぜ複数 RR では共通の CLUSTER_ID が必要なのか
RFC 4456 では、RR が 1 台だけのクラスタは、その RR の BGP Identifier によって識別されます。しかし、同じクラスタ内に複数の RR を配置する場合、各 RR はそれぞれ異なる BGP Identifier を持っています。
そこで、同一クラスタとして動作させる複数の RR には、共通の 4 バイト CLUSTER_ID を設定します。
| 対象 | 接続する RR |
|---|---|
| R1 | RR1 と RR2 |
| R2 | RR1 と RR2 |
| R3 | RR1 と RR2 |
| R4 | RR1 と RR2 |
RR1 と RR2 は異なる BGP Identifier を持っていますが、共通の CLUSTER_ID を設定することで、一つの論理的なクラスタとして扱われます。どちらかの RR によって反射された経路には、共通の CLUSTER_ID が CLUSTER_LIST へ追加されます。
もう一方の RR がその経路を受信した場合、CLUSTER_LIST に自身のクラスタと同じ CLUSTER_ID が含まれていることを確認し、同一クラスタへ戻ってきた経路として無視できます。
CLUSTER_ID は個々の RR を識別するための値ではなく、複数の RR を含む論理的な反射クラスタを識別するための値です。ただし、RR を複数設置するだけで、すべての問題が自動的に解決するわけではありません。
次の点は別途設計する必要があります。
- クライアントが接続する RR の数
- RR 間の iBGP 構成
- クラスタの分割方法
- 経路選択の一貫性
- 障害時の収束
- RR に集中する経路数と処理負荷
Route Reflector はフルメッシュを減らしますが、冗長化やクラスタ設計という新しい設計要素を持ち込みます。
RR 機能と実際の通信経路は別の話
Route Reflector が反射するのは、BGP UPDATE に含まれる経路情報です。これはコントロールプレーン上の処理であり、RR 機能そのものがユーザートラフィックを転送するわけではありません。
ただし、RR 機能を持つ装置がデータプレーン上に存在しない、という意味でもありません。専用のルーターやサーバーに RR 機能を持たせて転送経路から分離する構成もあれば、既存のコアルーターやエッジルーターに RR の役割を持たせる構成もあります。
後者では、その装置をユーザートラフィックが通過する可能性があります。しかし、その場合でも、Route Reflector として処理しているのは経路情報です。実際のパケット転送は、各ルーターがルーティングテーブルや転送テーブルに従って行います。
Route Reflector は複雑性を移動する
Route Reflector を使うと、iBGP フルメッシュに必要だった大量のセッションを削減できます。ただし、複雑性そのものが消えるわけではありません。フルメッシュ構成では各 BGP スピーカーの接続関係に分散していた複雑性が、RR を中心とした経路反射の設計へ移ります。
Route Reflector の設計では、少なくとも次の要素を管理します。
- クライアントと非クライアントの区別
- 学習元によって異なる反射ルール
- 通常広告と経路反射の区別
- ORIGINATOR_ID、CLUSTER_LIST、CLUSTER_ID
- 複数 RR による冗長化
- RR へ集中する経路処理
- RR を基準とした経路選択と障害時の収束
したがって、Route Reflector は iBGP の複雑性をなくす機能ではなく、接続関係の複雑性を RR 側の設計と運用へ移す仕組みです。重要なのは、複雑性がどこへ移動し、誰が管理する構造になったのかを把握することです。
まとめ
eBGP と iBGP は、同じ BGP を使用しますが、役割と経路伝搬のルールが異なります。
- eBGP は異なる AS 間で経路を交換する
- iBGP は同じ AS 内で BGP 経路を共有する
- eBGP では経路広告時に自 AS 番号を AS_PATH へ追加する
- iBGP では AS 内部を移動しても自 AS 番号を AS_PATH へ追加しない
- iBGP で受信した経路は、別の iBGP ピアへ原則として再広告しない
- そのため、通常の iBGP ではフルメッシュが必要になる
- Route Reflector は一定のルールに従って iBGP 経路を反射する
- クライアントから学習した経路と、非クライアントから学習した経路では反射先が異なる
- eBGP から学習した経路の広告は、Route Reflector 固有の反射ではなく通常の BGP 広告である
- 非クライアント同士には、引き続き iBGP フルメッシュが必要になる
- RR クライアント同士は通常、直接 iBGP ピアを形成しない
- ORIGINATOR_ID と CLUSTER_LIST によって、経路反射によるループを検知する
- RFC 4456 では、単一 RR のクラスタは RR の BGP Identifier によって識別される
- 同一クラスタ内に複数 RR を配置する場合は、共通の CLUSTER_ID を設定する
- 実運用では、複数 RR による冗長化が必要になる
- RR 機能が扱うのは経路情報であり、装置がデータ転送経路上にあるかどうかは別の設計問題である
Route Reflector を単に「iBGP フルメッシュを不要にする機能」と理解すると、その一部しか見えません。
Route Reflector は、iBGP の接続構造を変更すると同時に、経路反射ルールと新しいループ検知機構を導入します。
フルメッシュの複雑性を消すのではなく、経路制御の責務を RR へ集約し、AS 全体のコントロールプレーンを拡張可能にする仕組みと捉えると、その設計上の意味が明確になります。
参考資料
あわせて読みたい:
- 送信元 IP だけでは不正と判断できない
BGP や uRPF を含む経路とトポロジーの整合性を考える記事です。 - すべてを境界ファイアウォールで防がない
経路制御、境界、実施点の分担を考える記事です。 - SRv6 とは何か
経路制御の複雑性をどこへ移動するのかを考える関連記事です。

