ルートリフレクタとは
ルートリフレクタ(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_ID | 9 | 経路をAS内に最初に持ち込んだルータのBGP Router ID。RRが反射する際に付与する。自身のRouter IDと一致する経路を受け取ったルータは、その経路を無視する。 |
CLUSTER_LIST | 10 | 経路が通過したクラスタIDのリスト。RRが反射する際に自身のクラスタIDを先頭に追加する。自身のクラスタIDが含まれる経路を受け取ったRRは、その経路を破棄する。 |
AS_PATHがAS間のループを防ぐのに対し、これらはAS内のループを防ぎます。
設定方法
IOS XRでは、RRとなるルータで、クライアントにするiBGPネイバーのアドレスファミリー配下にroute-reflector-clientを設定します。
router bgp <AS番号>
neighbor <クライアントのアドレス>
address-family ipv4 unicast
route-reflector-clientクラスタIDを明示する場合はbgp cluster-idを使います。既定ではBGP Router IDがクラスタIDになるため、RRが1台であれば省略できます。冗長構成で複数のRRを同一クラスタとして扱いたい場合に設定します。
router bgp <AS番号>
bgp cluster-id <クラスタID>実機での検証
IOS XR(XRd)のルータ5台で、ルートリフレクタの効果を確認します。AS 65001内にR1・R2・R3の3台を置き、R2をルートリフレクタ、R1とR3をそのクライアントにします。R1 - R3間にはiBGPピアを張りません。
| ルータ | AS | 役割 | 広告するネットワーク |
|---|---|---|---|
| R1 | 65001 | RRクライアント | 192.168.1.0/24 |
| R2 | 65001 | ルートリフレクタ | 192.168.2.0/24 |
| R3 | 65001 | RRクライアント(AS 65002とeBGP) | 192.168.3.0/24 |
| R4 | 65002 | - | 192.168.4.0/24 |
| R5 | 65003 | - | 192.168.5.0/24 |
AS 65001内はOSPFエリア0(R1 - R2、R2 - R3はポイントツーポイント)で、各ルータのLoopback0を使ってiBGPピアを張っています。R3のGigabitEthernet0/0/0/1(10.3.4.0/24)はOSPFのpassiveインタフェースとして広告しており、R1が反射された経路のNEXT_HOPに到達できるようにしています。
ルートリフレクタ設定前:R1に届かない経路がある
まずR2にroute-reflector-clientを設定していない状態を見ます。R1のBGPテーブルには2経路しかありません。
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/24・192.168.5.0/24は届いていません。
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
%% Network not in table一方でR2自身は、R1からもR3からも経路を受け取っており、5経路すべてを持っています。
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と明示されます。
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に指定します。
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 neighborにLast reset ... due to RR client configuration changedと記録されます)。ルートリフレクタ設定後:R1が全経路を学習する
R1のBGPテーブルが5経路になりました。
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反射された経路にはOriginatorとCluster listが付いています。from 10.0.0.2(R2から受け取った)に対して、括弧内のRouter IDは10.0.0.3(R3)である点に注目してください。
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.2R3側も同様に、R1が広告した192.168.1.0/24をOriginator: 10.0.0.1付きで学習しています。
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.2R2側では、クライアントから受け取った経路に(Received from a RR-client)が付きます。
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が使われています。
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 changedRR設定前はPrefix advertised 1(R2自身の192.168.2.0/24のみ)でしたが、設定後はPrefix advertised 5になっています。
R1からR5のLoopback1へも到達できます。
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>で省略しています。
反射された192.168.3.0/24にはCLUSTER_LISTとORIGINATOR_IDが付いています。
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.3Flags: 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つの属性が付きません。反射した経路にだけ付与されることが分かります。
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 4456 | BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP) | ルートリフレクタとORIGINATOR_ID / CLUSTER_LIST属性を定義。 |
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | BGP-4の基本仕様。iBGPスプリットホライズンを規定。 |
| IANA | Border Gateway Protocol (BGP) Parameters | パス属性のType codeなど、BGPで使われる番号の割り当て一覧。 |