メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. BGP記事一覧/

BGPルートリフレクタ

目次

ルートリフレクタとは

ルートリフレクタ(RR: Route Reflector)は、iBGPのフルメッシュ要件を緩和するための仕組みです。RFC 4456で定義されています。

iBGPとeBGPの違いで解説したとおり、iBGPには「iBGPピアから学習した経路を他のiBGPピアへ広告しない」というスプリットホライズンのルールがあります。このためAS内でBGPを動かすすべてのルータが互いにピアを張る(フルメッシュ)必要があり、ルータ台数 n に対して n × (n - 1) ÷ 2 本のピアが必要でした。

ルートリフレクタは、特定のルータに「iBGPで受け取った経路を他のiBGPピアへ反射(reflect)してよい」という例外を与えることで、この制約を外します。各ルータはRRとだけピアを張ればよくなり、必要なピア数が n - 1 本に減ります。

用語

用語意味
ルートリフレクタ(RR)経路の反射を行うルータ。route-reflector-clientの設定を持つ。
クライアント(Client)RRから見てroute-reflector-clientに指定されたiBGPピア。RRとだけピアを張ればよい。
非クライアント(Non-client)RRの通常のiBGPピア。クライアントに指定されていないもの。非クライアント同士は従来どおりフルメッシュが必要。
クラスタ(Cluster)RRとそのクライアントの集合。クラスタIDで識別され、既定ではRRのBGP Router IDが使われる。

クライアント側には特別な設定は不要です。RR側で「このピアはクライアントである」と指定するだけで、クライアントは自分がクライアントであることを意識しません。

反射のルール

RRは、経路をどこから受け取ったかによって、他のiBGPピアへ反射するかどうかを変えます。eBGPピアへの広告は通常のBGPと同じで、受信元によらず行われます。

受信元他のiBGPピアへの反射eBGPピアへの広告
クライアント他のクライアントと非クライアントの両方へ反射するする
非クライアントクライアントへのみ反射する(非クライアント同士はフルメッシュが前提のため反射しない)する
eBGPピアクライアントと非クライアントの両方へ広告する(通常のiBGPと同じ)する

ループを防ぐ2つの属性

iBGPスプリットホライズンを緩和したことで、経路が同じクラスタ内を巡回するおそれが生まれます。これを防ぐため、RFC 4456では2つのパス属性が追加されました。どちらもオプションかつ非推移的(Optional Non-transitive)で、ASの外へは出ません。

属性Type code内容
ORIGINATOR_ID9経路をAS内に最初に持ち込んだルータのBGP Router ID。RRが反射する際に付与する。自身のRouter IDと一致する経路を受け取ったルータは、その経路を無視する。
CLUSTER_LIST10経路が通過したクラスタIDのリスト。RRが反射する際に自身のクラスタIDを先頭に追加する。自身のクラスタIDが含まれる経路を受け取ったRRは、その経路を破棄する。

AS_PATHがAS間のループを防ぐのに対し、これらはAS内のループを防ぎます。

設定方法

IOS XRでは、RRとなるルータで、クライアントにするiBGPネイバーのアドレスファミリー配下にroute-reflector-clientを設定します。

IOS XR ルートリフレクタの設定(RR側)
router bgp <AS番号>
 neighbor <クライアントのアドレス>
  address-family ipv4 unicast
   route-reflector-client

クラスタIDを明示する場合はbgp cluster-idを使います。既定ではBGP Router IDがクラスタIDになるため、RRが1台であれば省略できます。冗長構成で複数のRRを同一クラスタとして扱いたい場合に設定します。

IOS XR クラスタIDの設定
router bgp <AS番号>
 bgp cluster-id <クラスタID>
クライアント側のルータには特別な設定は必要ありません。通常のiBGPネイバーとして設定するだけです。

実機での検証

IOS XR(XRd)のルータ5台で、ルートリフレクタの効果を確認します。AS 65001内にR1・R2・R3の3台を置き、R2をルートリフレクタ、R1とR3をそのクライアントにします。R1 - R3間にはiBGPピアを張りません。

ルータAS役割広告するネットワーク
R165001RRクライアント192.168.1.0/24
R265001ルートリフレクタ192.168.2.0/24
R365001RRクライアント(AS 65002とeBGP)192.168.3.0/24
R465002-192.168.4.0/24
R565003-192.168.5.0/24

AS 65001内はOSPFエリア0(R1 - R2、R2 - R3はポイントツーポイント)で、各ルータのLoopback0を使ってiBGPピアを張っています。R3のGigabitEthernet0/0/0/110.3.4.0/24)はOSPFのpassiveインタフェースとして広告しており、R1が反射された経路のNEXT_HOPに到達できるようにしています。

ルートリフレクタ設定前:R1に届かない経路がある

まずR2にroute-reflector-clientを設定していない状態を見ます。R1のBGPテーブルには2経路しかありません。

R1 show bgp(RR設定前)
RP/0/RP0/CPU0:R1#show bgp
<snip>
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0/24     0.0.0.0                  0         32768 i
*>i192.168.2.0/24     10.0.0.2                 0    100      0 i

Processed 2 prefixes, 2 paths

自分の192.168.1.0/24と、iBGPピアであるR2が自分で広告している192.168.2.0/24だけです。R3が持つ192.168.3.0/24や、R3がeBGPで学習した192.168.4.0/24192.168.5.0/24は届いていません。

R1 show bgp 192.168.3.0/24(RR設定前)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24

%% Network not in table

一方でR2自身は、R1からもR3からも経路を受け取っており、5経路すべてを持っています。

R2 show bgp(RR設定前)
RP/0/RP0/CPU0:R2#show bgp
<snip>
   Network            Next Hop            Metric LocPrf Weight Path
*>i192.168.1.0/24     10.0.0.1                 0    100      0 i
*> 192.168.2.0/24     0.0.0.0                  0         32768 i
*>i192.168.3.0/24     10.0.0.3                 0    100      0 i
*>i192.168.4.0/24     10.3.4.4                 0    100      0 65002 i
*>i192.168.5.0/24     10.3.4.4                      100      0 65002 65003 i

Processed 5 prefixes, 5 paths

つまり「R2は知っているが、他のiBGPピアへ渡していない」状態です。個々の経路を見るとNot advertised to any peerと明示されます。

R2 show bgp 192.168.3.0/24(RR設定前)
RP/0/RP0/CPU0:R2#show bgp 192.168.3.0/24

BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                  5            5
Last Modified: Sep  5 06:46:57.774 for 00:04:20
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  Local
    10.0.0.3 (metric 2) from 10.0.0.3 (10.0.0.3)
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best
      Received Path ID 0, Local Path ID 1, version 5

これがiBGPスプリットホライズンです。R2はiBGPピア(R3)から受け取った経路を、別のiBGPピア(R1)へ広告していません。

ルートリフレクタを設定する

R2で、R1とR3の両方をroute-reflector-clientに指定します。

R2 ルートリフレクタの設定
router bgp 65001
 neighbor 10.0.0.1
  address-family ipv4 unicast
   route-reflector-client
  !
 !
 neighbor 10.0.0.3
  address-family ipv4 unicast
   route-reflector-client
  !
 !
!
route-reflector-clientを追加・削除すると、そのネイバーとのBGPセッションはリセットされます(show bgp neighborLast reset ... due to RR client configuration changedと記録されます)。

ルートリフレクタ設定後:R1が全経路を学習する

R1のBGPテーブルが5経路になりました。

R1 show bgp(RR設定後)
RP/0/RP0/CPU0:R1#show bgp
<snip>
   Network            Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0/24     0.0.0.0                  0         32768 i
*>i192.168.2.0/24     10.0.0.2                 0    100      0 i
*>i192.168.3.0/24     10.0.0.3                 0    100      0 i
*>i192.168.4.0/24     10.3.4.4                 0    100      0 65002 i
*>i192.168.5.0/24     10.3.4.4                      100      0 65002 65003 i

Processed 5 prefixes, 5 paths

反射された経路にはOriginatorCluster listが付いています。from 10.0.0.2(R2から受け取った)に対して、括弧内のRouter IDは10.0.0.3(R3)である点に注目してください。

R1 show bgp 192.168.3.0/24(RR設定後)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24

BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                  9            9
Last Modified: Sep  5 06:53:50.774 for 00:00:44
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  Local
    10.0.0.3 (metric 3) from 10.0.0.2 (10.0.0.3)
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best
      Received Path ID 0, Local Path ID 1, version 9
      Originator: 10.0.0.3, Cluster list: 10.0.0.2

R3側も同様に、R1が広告した192.168.1.0/24Originator: 10.0.0.1付きで学習しています。

R3 show bgp 192.168.1.0/24(RR設定後)
RP/0/RP0/CPU0:R3#show bgp 192.168.1.0/24

BGP routing table entry for 192.168.1.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                  9            9
Last Modified: Sep  5 06:53:50.774 for 00:01:24
Paths: (1 available, best #1)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.3.4.4
  Path #1: Received by speaker 0
  Local
    10.0.0.1 (metric 3) from 10.0.0.2 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best
      Originator: 10.0.0.1, Cluster list: 10.0.0.2

R2側では、クライアントから受け取った経路に(Received from a RR-client)が付きます。

R2 show bgp 192.168.3.0/24(RR設定後)
RP/0/RP0/CPU0:R2#show bgp 192.168.3.0/24

BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 13           13
Last Modified: Sep  5 06:53:50.774 for 00:00:57
Paths: (1 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.1
  Path #1: Received by speaker 0
  Local, (Received from a RR-client)
    10.0.0.3 (metric 2) from 10.0.0.3 (10.0.0.3)
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best

ネイバーの詳細にはRoute-Reflector ClientとクラスタIDが表示されます。クラスタIDは設定していないため、R2のBGP Router IDである10.0.0.2が使われています。

R2 show bgp neighbor 10.0.0.1(RR設定後)
RP/0/RP0/CPU0:R2#show bgp neighbor 10.0.0.1

BGP neighbor is 10.0.0.1
 Remote AS 65001, local AS 65001, internal link
 Description: iBGP to R1 (Loopback0)
 Remote router ID 10.0.0.1
 Cluster ID 10.0.0.2
<snip>
 For Address Family: IPv4 Unicast
<snip>
  Route-Reflector Client
<snip>
  1 accepted prefixes, 1 are bestpaths
  Prefix advertised 5, suppressed 0, withdrawn 0
<snip>
  Last reset 00:01:16, due to RR client configuration changed

RR設定前はPrefix advertised 1(R2自身の192.168.2.0/24のみ)でしたが、設定後はPrefix advertised 5になっています。

R1からR5のLoopback1へも到達できます。

R1 ping(RR設定後)
RP/0/RP0/CPU0:R1#ping 192.168.5.1 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.5.1 timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/15/24 ms

パケットキャプチャーで属性を確認する

R1 - R2間でキャプチャーを取り、clear bgp 10.0.0.2でセッションを張り直したときにR2がR1へ送るUPDATEメッセージを確認します。添付のキャプチャー(bgp-route-reflector.pcap)のNo.19にあたるTCPセグメントで、この中に5つのUPDATEが入っています。以下はWiresharkのtsharkで詳細表示したもので、フラグのビット内訳は<snip>で省略しています。

このNo.19だけを抜き出したもの(bgp-route-reflector-no19.pcap) をダウンロード

反射された192.168.3.0/24にはCLUSTER_LISTORIGINATOR_IDが付いています。

R2 → R1 UPDATE(192.168.3.0/24)
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 75
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 52
    Path attributes
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
            Type Code: MP_REACH_NLRI (14)
            Length: 13
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Unicast (1)
            Next hop: 10.0.0.3
                IPv4 Address: 10.0.0.3
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                192.168.3.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.3.0
        Path Attribute - ORIGIN: IGP
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: ORIGIN (1)
            Length: 1
            Origin: IGP (0)
        Path Attribute - AS_PATH: empty
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: AS_PATH (2)
            Length: 0
        Path Attribute - MULTI_EXIT_DISC: 0
            Flags: 0x80, Optional, Non-transitive, Complete
<snip>
            Type Code: MULTI_EXIT_DISC (4)
            Length: 4
            Multiple exit discriminator: 0
        Path Attribute - LOCAL_PREF: 100
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: LOCAL_PREF (5)
            Length: 4
            Local preference: 100
        Path Attribute - CLUSTER_LIST: 10.0.0.2
            Flags: 0x80, Optional, Non-transitive, Complete
<snip>
            Type Code: CLUSTER_LIST (10)
            Length: 4
            Cluster List: 10.0.0.2
                Cluster ID: 10.0.0.2
        Path Attribute - ORIGINATOR_ID: 10.0.0.3
            Flags: 0x80, Optional, Non-transitive, Complete
<snip>
            Type Code: ORIGINATOR_ID (9)
            Length: 4
            Originator identifier: 10.0.0.3

Flags: 0x80, Optional, Non-transitiveのとおり、どちらもオプションかつ非推移的です。AS 65001の外(R4以降)へは渡りません。Next hopはR3の10.0.0.3のままで、RRはNEXT_HOPを書き換えないことも分かります。

同じUPDATEでも、R2自身が広告する192.168.2.0/24にはこの2つの属性が付きません。反射した経路にだけ付与されることが分かります。

R2 → R1 UPDATE(192.168.2.0/24)
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 61
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 38
    Path attributes
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
            Type Code: MP_REACH_NLRI (14)
            Length: 13
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Unicast (1)
            Next hop: 10.0.0.2
                IPv4 Address: 10.0.0.2
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                192.168.2.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.2.0
        Path Attribute - ORIGIN: IGP
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: ORIGIN (1)
            Length: 1
            Origin: IGP (0)
        Path Attribute - AS_PATH: empty
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: AS_PATH (2)
            Length: 0
        Path Attribute - MULTI_EXIT_DISC: 0
            Flags: 0x80, Optional, Non-transitive, Complete
<snip>
            Type Code: MULTI_EXIT_DISC (4)
            Length: 4
            Multiple exit discriminator: 0
        Path Attribute - LOCAL_PREF: 100
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: LOCAL_PREF (5)
            Length: 4
            Local preference: 100

キャプチャー全体は次からダウンロードできます。

キャプチャー全体(bgp-route-reflector.pcap) をダウンロード

検証Config

R1 config(r1_bgp-route-reflector.cfg) をダウンロード

R2 config(r2_bgp-route-reflector.cfg) をダウンロード

R3 config(r3_bgp-route-reflector.cfg) をダウンロード

R4 config(r4_bgp-route-reflector.cfg) をダウンロード

R5 config(r5_bgp-route-reflector.cfg) をダウンロード

検証環境およびshow結果

各ルータでshow route / show bgp / show bgp <prefix>(5プレフィックス分) / show bgp summary / show bgp neighborを、ルートリフレクタ設定前と設定後の両方で取得しています。

RR設定前:

R1 show出力(r1_bgp-route-reflector_before_show.txt) をダウンロード

R2 show出力(r2_bgp-route-reflector_before_show.txt) をダウンロード

R3 show出力(r3_bgp-route-reflector_before_show.txt) をダウンロード

R4 show出力(r4_bgp-route-reflector_before_show.txt) をダウンロード

R5 show出力(r5_bgp-route-reflector_before_show.txt) をダウンロード

RR設定後:

R1 show出力(r1_bgp-route-reflector_after_show.txt) をダウンロード

R2 show出力(r2_bgp-route-reflector_after_show.txt) をダウンロード

R3 show出力(r3_bgp-route-reflector_after_show.txt) をダウンロード

R4 show出力(r4_bgp-route-reflector_after_show.txt) をダウンロード

R5 show出力(r5_bgp-route-reflector_after_show.txt) をダウンロード

参考

資料タイトル概要
RFC 4456BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP)ルートリフレクタとORIGINATOR_ID / CLUSTER_LIST属性を定義。
RFC 4271A Border Gateway Protocol 4 (BGP-4)BGP-4の基本仕様。iBGPスプリットホライズンを規定。
IANABorder Gateway Protocol (BGP) Parametersパス属性のType codeなど、BGPで使われる番号の割り当て一覧。

関連記事