iBGPピアとeBGPピアの違い
BGP ピアとは、2 台の BGP ルータ同士が TCP コネクションを確立し、BGP プロトコルで情報交換を行っている状態を指します。
AS 内での BGP ピアを iBGP ピア、AS 間での BGP ピアを eBGP ピアと呼びます。
iBGP と eBGP の判別は BGP コマンドで行います。router bgp [自分のAS番号] コマンドと neighbor X.X.X.X remote-as [相手のAS番号] が一致する場合は iBGP、一致しない場合は eBGP です。
iBGP と eBGP では以下のような違いがあります。
比較対象 | iBGP | eBGP |
---|---|---|
AS_PATH属性 | 変化なし | 自分のAS番号を 先頭に付与 |
NEXT_HOP属性 | 変化なし | 自分のIPアドレス に変更して広報 |
LOCAL_PREF属性 | 広報可能 | 広報不可 |
IPヘッダTTL | 255 | 1 |
ルーティングAD値 | 200 | 20 |
iBGP スプリットホライズンとフルメッシュ
eBGP 間でのルーティングのループ防止としては AS_PATH 属性が使われますが、iBGP 間ではどのように防止するのでしょうか。
その答えが『iBGP スプリットホライズン』です。
iBGP スプリットホライズンでは『iBGP ネイバーからもらったルートは、別の iBGP ネイバーに広報することはできない』というルールのことであり、全ての BGP ルータはこのルールを順守することが求められます。
具体的には以下の構成で、RT1 から RT2 にルート [ 1.1.1.0/24 ] を渡すことはできますが、RT2 は RT3 にこのルートを渡すことはできません。RT3 が 1.1.1.0/24 を学習するには、RT1 と直接 iBGP ネイバーを確立する必要があります。
iBGP スプリットホライズンによるルート学習阻害を確実に回避するためには『AS 内の全ての BGP ルータを直接 iBGP ネイバーとして確立する』という「iBGP のフルメッシュ化」が必要になります。
AS 内の BGP ルータの数が少ないうちはまだ良いですが、iBGP ルータが 10 台になるとネイバーの数は 10C2 = 45 になります。このようにフルメッシュ要件はスケールする際の弊害となります。
そこでフルメッシュ要件を緩和する手法として『ルートリフレクタ』と『BGP コンフェデレーション』が登場しました。
各々については以下をご参照下さい。
NEXT_HOP属性と next-hop-self
NEXT_HOP 属性
NEXT_HOP は BGP テーブルでは属性扱いですが、ルーティングテーブルでいう NextHop と同じ意味です。ただ、少し説明が必要です。
先程の例の図において、RT2 と RT3 は AS 間の eBGP ですので例えば "3.3.3.0/24" という宛先ルートが RT3 から RT2 へ広報するとき、NEXT_HOP 属性は neighbor コマンドで指定されている IP アドレス "10.1.23.3" に変更されて広報されます。
一方、RT1 と RT2 は AS 内の iBGP ですので "3.3.3.0/24" のNEXT_HOP属性は変化せず "10.1.23.3" のままになります。10.1.23.0/24 は RT1 にとっては Connected ネットワークではありませんので RIP/OSPF/EIGRP 等で学習しているか、Static ルートを書いていないとルートが分かりません。
このようなケースでは RT1 上では "3.3.3.0/24" は無効なパスとして BGP テーブル (show ip bgp) 上で valid マークの > が表記されません。当然、ベストパスにもなり得ません。
RT1# show ip bgp BGP table version is 3, local router ID is 1.1.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *>i 2.2.2.0/24 10.1.12.2 0 100 0 i * i 3.3.3.0/24 10.1.23.3 0 100 0 65002 i RT1#
このようなケースでは RT1 に 10.1.23.0/24 のルートを書けば再帰ルーティングにより 3.3.3.0/24 の宛先ルートも有効になりますが、別の方法として nexthop-self コマンドが使えます。
nexthop-self コマンド
RT2 上で nexthop-self コマンドを使うことにより、RT1 へ iBGP で伝えるときであっても eBGP と同じように NEXT_HOP 属性を自身の IP アドレスに変更することができます。
[RT2]
RT2(config)# router bgp 65001 RT2(config-router)# neighbor 10.1.12.1 next-hop-self
[RT1]
RT1# sh ip bgp BGP table version is 3, local router ID is 1.1.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *>i 2.2.2.0/24 10.1.12.2 0 100 0 i * i 3.3.3.0/24 10.1.23.3 0 100 0 65002 i RT1# clear ip bgp * soft RT1# sh ip bgp BGP table version is 4, local router ID is 1.1.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 0.0.0.0 0 32768 i *>i 2.2.2.0/24 10.1.12.2 0 100 0 i *>i 3.3.3.0/24 10.1.12.2 0 100 0 65002 i RT1#
コメント