BGP

【図解】iBGPとeBGPの違い,スプリットホライズンとフルメッシュ,NEXT_HOP属性とnexthop-selfの関係

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 では以下のような違いがあります。

比較対象iBGPeBGP
AS_PATH属性変化なし自分のAS番号を
先頭に付与
NEXT_HOP属性変化なし相手のIPアドレス
に変更して広報
LOCAL_PREF属性広報可能広報不可
IPヘッダTTL2551
ルーティングAD値20020

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 コンフェデレーション』が登場しました。

各々については以下をご参照下さい。

【図解/BGP】ルートリフレクタと冗長クラスタ ~ cluster-id,originator-id,route-reflector-client設定 ~
iBGP ネイバーの問題とフルメッシュの問題 iBGP ネイバー (同一 AS...
【図解/BGP】Confederationの仕組みと設定 ~サブAS,ルートリフレクタとの比較~
BGP Confederation (コンフェデレーション) とは 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#

コメント

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