BGP

BGP ルートリフレクタ ( Route-Reflector )

iBGPはルータ間をフルメッシュに接続する必要があります。

iBGPのルータをフルメッシュに接続する必要性があるため、AS内のBGPルータの台数が増えるとiBGPのpeerの数が多くなりスケールの問題が発生します。
AS内のルータn台 peer数 = n * (n - 1) / 2 例:4台構成 4 x (4-1) / 2 = 6 peer

iBGPのpeer数を接続数を減らす技術として

  • ルートリフレクタ
  • コンフェデレーション

があります。今回はルートリフレクタ(RFC4456)の解説します。

BGP ルートリフレクタ

iBGPを受信した経路をiBGPに反射(リフレクタ)する機能がルートリフレクタ(以下RRと記載)になります。

図1 BGP ルートリフレクタ構成例

図1ではAS10が3台(R11,R12,R13)のルータで構成されています。本来はフルメッシュに接続する必要があるため、R11-R13間にiBGPの設定が必要です。RRの設定がない場合はAS20からの20.0.0.0/8の経路をR12でiBGPで受信した経路はiBGPに送信しないルールがあるため、R13に経路が到達しません。
今回はRRを利用することでR11-R13間のiBGPのpeer設定なしでR12がRRとしてクライアントの経路を反射することでR13まで経路が到達する形になります。

ルートリフレクタ用語

  • ルートリフレクタ
    経路を反射するルータがルートリフレクタ
  • クライアント
    反射する経路を受け取るルータをクライアント
  • 非クライアント
    上記図では登場しませんが、通常のiBGPを接続されているのは非クライアント
  • クラスタ
    ルートリフレクタとクライアントの集まりをクラスタ

ルートリフレクタ動作

クライントから受信した経路ベストパスの経路は、全てのクライアント、非クライントともにリフレクタする
非クライントから受信した経路ベストパスの経路は、全てのクライントにリフレクタする。非クライントには経路を送信しない
eBGPから受信した経路ベストパスの経路は、 全てのクライアント、非クライントに経路を送信(従来(ルートリフレクタ設定前)と同じ動作)

ルーティングループを回避のため追加されたパスアトリビュート

フルメッシュで接続する目的の一つにiBGPの経路をスプリットホライズンにすることでループを回避していました。RRはルーティングループを回避するために、下記2つのアトリビュートを追加することで実現しています。

ORIGINATOR_ID (Type 9)

RRが反射する際に追加されるパスアトリビュート
経路を反射する元のルータのRouter_IDを ORIGINATOR_ID として格納されます。ただし、すでに ORIGINATOR_ID が既に格納されている場合は変更しません。結果、ルートリフレクタを複数通過してもLocalAS内での経路の起点となる識別情報となります。
経路を受け取った側は、 ORIGINATOR_ID と自身のROUTER_IDが一致した経路を廃棄します。

Updateメッセージ パラメータ説明
Type Code 9
属性Optional Non Transitive ( 実装によっては識別できない可能性がある。その場合には、他BGPネイバーには通知しない。)

CLUSTER_LIST (Type10)

図1のようにセグメント内にRRを1台しかない場合はシングル構成はRRが障害が発生するとセグメント内のBGPを維持することができない。そのため実際の構成はセグメント内にRRを複数台用意して冗長化する。冗長化するにあたりループを防止する仕組みに利用される。

RRが反射する際に追加されるパスアトリビュート(MUST)
RRが反射する際に自身の CLUSTER_ID を CLUSTER_LIST に追記します。別のRRがさらに反射する際も同様にRRのCLUSTER_ID を CLUSTER_LISTの先頭に追加することでリストを作成する。
RRが受信した経路の CLUSTER_LIST 内に自身の CLUSTER_ID が含まれる場合は経路を廃棄します。(e-BGP のAS-PATH と同様のループ防止の仕組み)
ベストパスセレクションの際に CLUSTER_LIST の長さが短い経路を優先します。CLUSTER_LISTがない場合は長さを0とする。

CLUSTER_ID はクラスタ内のRRは同一の値を設定する必要があります。CLUSTER_IDを設定していない場合は、自身のROUTER_IDがCLUSTER_IDとなります。

Updateメッセージ パラメータ 説明
Type Code10
属性 Optional Non Transitive ( 実装によっては識別できない可能性がある。その場合には、他BGPネイバーには通知しない。)

BGPテーブル

R11 show ip bgp 20.0.0.0 の結果

R20(AS20)からeBGPで経路を受信 external

R12 show ip bgp 20.0.0.0 の結果

R11(ルートリフレクタ クライント)からiBGPでクライントからの経路を受信 Pathアトリビュートに変化なし external -> から internal に変わる

R13 show ip bgp 20.0.0.0 の結果

R12(ルートリフレクタ)は R11(ルートリフレクタクライアント)からの 20.0.0.0 の経路を反射するそのさいに、 Originator 10.11.11.11 ( R11のRouter-ID ) , Cluster List 10.12.12.12 ( R12 のCLUSTER_ID) のパスアトリビュートが追加される。
※Cluster IDが設定していないため、Router-ID(10.12.12.12)が格納されます

パケットキャプチャー

BGP UPDATE Message 20.0.0.0/8 From R11 To R12

20.0.0.0/8 R12からR13向けのBGP Updateパケットキャプチャー

BGP UPDATE Message 20.0.0.0/8 From R12 To R13

20.0.0.0/8 R12からR13向けのBGP Updateパケットキャプチャー

リフレクタ(反射)した経路には Path Attribute ORIGINATOR_ID ( 10.11.11.11) CLUSTER_LIST ( 10.12.12.12 ) が追加される。

Cisco IOS-XE 設定Config

図ⅠをCiscoIOS-XEで設定したshow run の結果

スポンサーリンク

RFC

BGP記事一覧

BGP RFC/関連サイト

BGP参考図書

私が所持しているBGP関連の本を紹介します。ただし絶版になっている本も紹介していますのでご容赦ください。

著:サム・ハラビ, 著:ダニー・マクファーソン, 翻訳:鈴木 弥生

その他ネットワーク

-BGP