BGP (RFC 4271) 経路選択の原則

ネットワーク>BGP

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

BGP (RFC 4271) 経路選択の原則

BGP (Border Gateway Protocol) は、インターネットの中核を成す自律システム (AS) 間ルーティングプロトコルであり、複数の経路情報が存在する場合に最適なパスを決定する経路選択プロセスは、ネットワークの安定性とポリシー適用に不可欠です。

背景

BGPは、異なるAS間で経路情報を交換し、インターネット全体の接続性を維持する役割を担っています。各BGPルータは、同一の宛先プレフィックスに対して複数の経路情報を受信する可能性があり、これらの候補の中から一つを最適な経路として選択し、ルーティングテーブルにインストールする必要があります。この経路選択のメカニズムは、トラフィックの効率的な転送、AS間のルーティングポリシーの反映、およびネットワークの安定性確保において極めて大切です。

設計目標

RFC 4271で規定されるBGP経路選択の設計目標は、AS間の複雑なルーティングポリシーを反映しつつ、ループのない安定した経路を提供することにあります。具体的には、ネットワーク管理者が自身のASの要件に基づいてトラフィックフローを制御できるよう、柔軟なポリシー適用メカニズムを提供することを目標としています。最適な経路とは、単に最短パスであるだけでなく、信頼性、コスト、セキュリティ、および特定のビジネス要件を考慮に入れたものです。

詳細

BGPルータは、受信した全ての経路情報をLoc-RIB (Local Routing Information Base) に格納し、以下の原則に基づいた多段階のプロセスを通じて最適な経路を決定します (RFC 4271, Section 9.1)。以下のリストは、一般的なBGP実装における経路選択ステップの優先順位を示しています。

  1. Next Hop Reachability
    • アドバタイズされたNext Hopが自身のルーティングテーブルに存在し、到達可能であるかを確認します。到達不能な経路は破棄されます。
  2. Weight属性
    • Cisco Systemsの独自属性であり、ルータローカルに最も優先度の高い経路を選択するために使用されます。値が大きいほど優先され、同一ルータ上でのみ意味を持ちます。
  3. Local Preference (ローカル優先)
    • AS内におけるBGPルータ間で共有される属性で、どの出口パスを優先するかをAS全体で決定するために使用されます。値が大きいほど優先されます (RFC 4271, Section 5.1.5)。
  4. AS Path Length (ASパス長)
    • 最も短いASパスを持つ経路が優先されます。ASパスは、その経路が通過してきたASのリストであり、ループ回避のメカニズムとしても機能します (RFC 4271, Section 5.1.2)。
  5. Origin Type (オリジンタイプ)
    • 経路のオリジン(発生源)がIGP (Interior Gateway Protocol) 経由で学習されたものである場合 (i) が最も優先され、次いでEGP (e)、最後にIncomplete (?) が続きます (RFC 4271, Section 5.1.1)。
  6. MED (Multi-Exit Discriminator)
    • 隣接するASに、自身のASに入るための最も望ましいエントリポイントを通知するために使用されます。値が小さいほど優先されます (RFC 4271, Section 5.1.4)。
  7. eBGPよりiBGPを優先
    • 複数の経路が利用可能な場合、通常はeBGP (external BGP) ピアから学習した経路よりも、iBGP (internal BGP) ピアから学習した経路が優先されます。これは、iBGP経路が通常、より信頼性が高い内部パスを示すためです。
  8. IGP Metric (内部ゲートウェイプロトコルメトリック)
    • iBGP経路の場合、Next Hopへのパスコストが最も低いものが優先されます。これは通常、AS内のIGP (OSPF, EIGRPなど) によって決定されます。
  9. Oldest Route (経路の安定性)
    • パス属性が同一で、上記のステップで区別できない場合、より長く安定して稼働している経路が優先されることがあります。これは経路フラッピングを避けるための一部の実装で採用されるヒューリスティックです。
  10. Router ID (ルータID)
    • 最も低いBGP Router IDを持つルータからアドバタイズされた経路が優先されます (RFC 4271, Section 4.2)。
  11. Cluster List Length (クラスタリスト長)
    • BGP Route Reflector環境において、最も短いクラスタリストを持つ経路が優先されます。
  12. IPアドレスの最小値
    • 最終的なタイブレーカーとして、ピアのIPアドレスが最も小さい経路が優先されます。

BGPメッセージヘッダ構造 (RFC 4271, Section 4.1):

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |                          Marker (16 octets)                   |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          Length (2 octets)            |     Type (1 octet)    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Marker:128 bits
Length:16 bits
Type:8 bits
sequenceDiagram
    participant "R_A as |BGP Router A|"
    participant "R_B as |BGP Router B|"
    participant "R_C as |BGP Router C|"

    R_A ->> R_B: |OPEN|
    R_B ->> R_A: |OPEN|
    R_A ->> R_B: |KEEPALIVE|
    R_B ->> R_A: |KEEPALIVE|
    Note over R_A,R_B: |TCP Session & BGP Peer Established|

    R_C ->> R_B: |UPDATE (Prefix X, Path1)|
    Note over R_B: |Loc-RIB更新|
    R_A ->> R_B: |UPDATE (Prefix X, Path2)|
    Note over R_B: |Loc-RIB更新|

    R_B ->> R_B: |経路選択プロセス実行|
    Note over R_B: |Next Hop Reachability確認|
    Note over R_B: |Weight/Local Pref/AS Path比較|
    Note over R_B: |最適な経路 (Path1) を選択|

    R_B ->> R_B: |Adj-RIB-Out更新|
    R_B ->> R_A: |UPDATE (Prefix X, Best Path1)|
    Note over R_A: |Loc-RIB更新 & 自身の経路選択|
graph TD
    A["|開始|"] --> B{"Next Hop Reachable?"};
    B -- |No| --> Z["|経路を破棄|"];
    B -- |Yes| --> C{"Weight比較?"};
    C -- |Yes| --> C1{"最大Weight経路を選択"};
    C -- |No| --> D{"Local Preference比較?"};
    D -- |Yes| --> D1{"最大Local Pref経路を選択"};
    D -- |No| --> E{"AS Path Length比較?"};
    E -- |Yes| --> E1{"最短AS Path経路を選択"};
    E -- |No| --> F{"Origin Type比較?"};
    F -- |Yes| --> F1{"IGP > EGP > Incomplete"};
    F -- |No| --> G{"MED比較?"};
    G -- |Yes| --> G1{"最小MED経路を選択"};
    G -- |No| --> H{"eBGP vs iBGP?"};
    H -- |Yes| --> H1{"iBGPを優先"};
    H -- |No| --> I{"IGP Metric比較?"};
    I -- |Yes| --> I1{"最小IGP Metric経路を選択"};
    I -- |No| --> J{"安定性/Oldest Route?"};
    J -- |Yes| --> J1{"より古い経路を優先"};
    J -- |No| --> K{"Router ID比較?"};
    K -- |Yes| --> K1{"最小Router ID経路を選択"};
    K -- |No| --> L{"Cluster List Length比較?"};
    L -- |Yes| --> L1{"最短Cluster List経路を選択"};
    L -- |No| --> M{"Peer IPアドレス比較?"};
    M -- |Yes| --> M1{"最小IPアドレス経路を選択"};
    M -- |No| --> N["|最終選択|"];
    C1 --> N; D1 --> N; E1 --> N; F1 --> N; G1 --> N; H1 --> N; I1 --> N; J1 --> N; K1 --> N; L1 --> N; M1 --> N;
    N --> O["|RIBにインストール|"];
    O --> P["|終了|"];

相互運用

BGPの経路選択プロセスはRFC 4271に厳密に定義されており、異なるベンダーの実装間でも基本的な経路選択ルールは共通しているため、高い相互運用性を持っています。しかし、以下の点で差異が生じる可能性があります。

  • ベンダー固有の属性や機能: WeightのようなCisco Systems独自の属性は、当該ベンダーのルータ間でのみ有効であり、他ベンダーのルータでは無視されるか、異なるポリシーとして扱われます。
  • デフォルト値と実装の詳細: 各属性のデフォルト値や、特定のシナリオでのタイブレーキングメカニズムの細かい実装は、ベンダーによって異なる場合があります。
  • コミュニティ属性の解釈: BGPコミュニティ属性 (RFC 1997, RFC 8092など) を利用したポリシーは、AS間で異なる解釈や適用がなされる可能性があり、意図しないルーティング挙動を引き起こすことがあります。

既存プロトコルとの比較: * BGP vs. IGP (OSPF/EIGRP/IS-IS): BGPはAS間ルーティングプロトコルであり、広範なポリシー制御とスケーラビリティに重点を置いています。対して、OSPFやEIGRPのようなIGPはAS内ルーティングプロトコルであり、高速な収束とメトリックベースの最短パス計算に特化しています。BGPはパスベクター型ですが、IGPはリンクステート型またはディスタンスベクター型です。 * BGP vs. RIP: RIPはディスタンスベクター型IGPであり、ホップカウントをメトリックとして使用し、小規模ネットワーク向けです。BGPはパスベクター型であり、ASパスや様々な属性を基にポリシーベースの経路選択を行い、大規模なインターネットルーティングを担います。

セキュリティ

BGPは本来、信頼できるピア間での情報交換を前提として設計されているため、セキュリティ面でいくつかの脆弱性を持つ可能性があります。

  • 経路ハイジャック: 攻撃者が不正な経路情報を広告することで、正当なトラフィックを乗っ取ることができます。
  • ルートリーク: 意図しない経路情報が外部に漏洩し、グローバルルーティングテーブルの汚染やトラフィックのリダイレクトを引き起こします。
  • リプレイ攻撃: TCPセッションを保護するメカニズムがない場合、過去のBGPメッセージが再送され、経路情報が不正に更新される可能性があります。
  • ダウングレード攻撃: より弱いセキュリティメカニズムの使用を強制される可能性があります。例えば、認証されていないBGPセッションへの切り替えを誘導する試みです。
  • 0-RTTの再送リスク: BGPセッション確立に直接0-RTTのような機構は通常用いられませんが、もし用いられた場合、初期ハンドシェイクなしでのデータ送信はリプレイ攻撃のリスクを増大させます。

これらの脅威に対する対策: * TCP MD5 Signature Option (RFC 2385) または TCP Authentication Option (TCP-AO, RFC 5925): BGPセッション確立時の認証とパケットの完全性保護を提供し、不正なBGPピアからの接続やメッセージの改ざんを防ぎます。これはリプレイ攻撃のリスクを軽減します。 * BGPsec (RFC 8205): 経路のオリジン検証とASパスの完全性検証を可能にし、経路ハイジャックやルートリークのリスクを大幅に低減します。公開鍵基盤 (PKI) を利用し、経路広告が正当なASから行われたこと、およびASパスが改ざんされていないことを検証します。 * RPKI (Resource Public Key Infrastructure): IPアドレス空間の所有権を暗号的に証明し、誤った経路広告を防ぐための技術です。BGPsecと連携してオリジン検証を強化します。 * フィルタリング: インターネットルーティングポリシーに合致しない経路情報の送受信を拒否するインバウンド/アウトバウンドフィルタリングが必須です。 * キー更新: TCP-AOやBGPsecで利用される暗号鍵は定期的に更新することが推奨され、鍵漏洩時のリスクを最小限に抑えます。

実装メモ

BGPルータの実装は、多数の経路情報と複雑なポリシーを効率的に処理する必要があるため、高度な最適化が求められます。

  • MTU/Path MTU: BGP自体はTCP上で動作するため、TCPレベルでのPath MTU Discovery (PMTUD) が重要となります。BGP UPDATEメッセージは大量のプレフィックスを含む場合、最大TCPセグメントサイズに達する可能性があるため、PMTUDが正しく機能しないとフラグメンテーションやパケットロスによるパフォーマンス低下を招きます。
  • HOL blocking回避: BGPメッセージはTCPストリームとして配信されるため、TCPレイヤーでのHead-of-Line (HOL) blockingはBGPセッションのデータ転送効率に影響を与える可能性があります。特に、TCPスタックの輻輳制御が不適切に機能する場合、UPDATEメッセージの遅延につながります。
  • キュー制御: BGPメッセージ、特にUPDATEメッセージの送信キューと受信キューの管理は大切です。大量の経路変更が発生した場合、キューが溢れてメッセージがドロップされることを防ぐため、適切なバッファリングとフロー制御が必要です。
  • 優先度: 重要なBGPメッセージ(KEEPALIVE、NOTIFICATION)は、UPDATEメッセージよりも高い処理優先度を持つべきです。これにより、ピアリングの安定性が維持され、緊急事態への対応が迅速に行えます。
  • ルーティングテーブルの規模: インターネットのフルルーティングテーブルは数十万エントリに及ぶため、経路情報の格納と検索を高速に行うためのデータ構造(例: TRIE)とアルゴリズムの最適化が不可欠です。
  • ポリシー適用エンジン: 経路選択ポリシーは複雑になりがちであり、これを柔軟かつ効率的に適用できる設定言語と実行エンジンが必要です。

まとめ

BGP (RFC 4271) の経路選択は、インターネットの安定性と可用性を支える最も重要なメカニズムの一つです。Next Hop Reachability、Weight、Local Preference、AS Path Length、Origin Type、MEDなど、多岐にわたる属性に基づく段階的な決定プロセスを通じて、最適な経路が選択されます。このプロセスは、ASのルーティングポリシーを反映し、トラフィックフローを制御するために不可欠です。セキュリティ対策としては、TCP認証オプション、BGPsec、RPKI、適切なフィルタリングが重要であり、実装においては、スケーラビリティ、効率性、そしてメッセージの優先度管理が求められます。これらの原則と考慮事項を理解することは、堅牢で効率的なネットワークを設計・運用する上で不可欠です。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました