BGP

BGP i-BGP/e-BGP の違い

BGPルータは接続によって動作が異なります。同一のASで接続する方式はiBGP、異なるASで接続する方式はeBGPになります。

eBGP/iBGPの違い

iBGPの特徴

  • スプリットホライズンによるループフリー
  • 直接接続していないルータ同士の接続が可能 (TTL 225)

スプリットホライズンによるループフリー

AS内の経路のループを防止するために、iBGPで受信した経路はiBGP経路に送信しないスプリットホライズンの仕様となっています。そのためAS内のBGPルータに経路を伝搬させるにはiBGPをフルメッシュで接続する必要があります。
※iBGP内ではフルメッシュ構成ではない接続方式としてiBGP経路を反射(リフレクター)されるルートリフレクターの方式があります。

フルメッシュの設定ではないため、スプリットホライズンによるAS内で経路が到達できない状態

上記構成では R11とR13間にiBGPの設定がないため、AS10内のiBGPがフルメッシュが未完成の状態です。この構成ではAS20の20.0.0.0/8の経路がR11,R12までは経路が到達していますが、R13には経路を受信していません。
※eBGPからiBGP(R20-->R11-->R12)へは経路を広報します。ポイントはiBGPからiBGP(R11-->R12 STOP R13)の経路広報をしません

  • 直接接続していないルータ同士の接続が可能
  • iBGPの接続は直接接続した隣接ルータ以外にも接続が可能です。iBGPのパケットのttlは255となっているため、ルータを超えて(hop)接続することが可能です。上記構成図においてもR11とR13を直接接続するインターフェイスはありませんが、iBGPはR11-R13間でiBGPの接続が可能です。

    iBGP間の接続にはloopback間で接続することが一般的です。物理IFでiBGPを設定すると設定したインターフェイスがDownするとiBGPが切断されてしまいます。loopbackを利用することで、IFがDownしても迂回ルートが存在すればiBGPの接続を維持することが可能です。

    上記例ではR11のloopbackとR13のloopback間で通信ができる状態(他プロトコルで経路を広報)にする必要があります。上記例ではAS10内の各ルータはOSPFで接続されて、loopback間で通信可能の状態にしています。

    R11〜R13間にiBGPを接続することで、R13にもAS20からの経路 20.0.0.0/8 を受信することができました。R12,R13ともに経路が受信元(from)は R11(10.0.0.11)となります。

    上記構成図のR11-R12のリンクでのR11-R13間のBGPのパケットキャプチャファイル

    R11からの送信pktのttlが255 R13からの受信pktのttlが254となっています。(R13はR12を1hopしてttlが1減算されたpktを受信した結果です)

    上記構成図のCisco IOS-XEでのConfig例

    eBGPの特徴

    • AS-PATH を利用したループフリー
    • 直接接続している隣接ルータ間しか接続ができない (TTL 1)

    AS-PATHを利用したループフリー

    eBGPでの経路はeBGPで受信した経路は他のeBGPに送信します。iBGPから受信した経路もeBGPに送信します。
    eBGPで経路を送信する際に自身のAS番号をAS-Pathアトリビュートに追加します。経路を受信する際は自身のASが含む経路は廃棄する。廃棄することで経路のループを防ぐことができます。


    上記構成図でそれぞれのルータをeBGPで接続しています。今回はループフリー機能を確認するために、R10にR30向けのeBGPのneighborのout向けにroute-mapにてAS Pathを3つ追加(prepend)を実施しています。※AS-Pathの追加はroute-mapで手動で追加することが可能です。

    R10が10.0.0.0/8の経路を生成(NextHop 0.0.0.0)しています。

    R20 では 10.0.0.0/8 がAS10がAS_Pathに追加されて AS Path が 10 となります

    R40 では 10.0.0.0/8 は AS10 ->AS20 経由でR20から(NextHop 20.20.40.20)の経路を受信しているため R20でAS20が追加されたことで AS Path 20 10 となります。

    R30は 10.0.0.0/8 の経路を R10から(NextHop 10.10.30.10)とR40から(NextHop 30.30.40.40) それぞれ経路を受け取っています。
    R10側は route-map で AS-Path を prepend することで AS-Path が 10 10 10 10 となっています。
    R40側は AS10 -> A20 -> AS40 を経由しているため、AS-Pathが 40 20 10 となっています。
    BGPのベストパスセレクションからBestPath( > )は AS-PATH長が短いR40側(Next 30.30.40.40)を選択しています。

    R30からR10に向かって送信(advertised-routes)している経路はBestパスとして選択された R40から受信した経路(NextHop 30.30.40.40)をR10に広報しています。

    R10でのR30から受信(route)した経路を確認すると送信側ではR40からの経路を送信していましたが受信側では経路が廃棄されています。これはAS-PATHに自身のAS番号(10)が含まれているため受信時に経路を廃棄したためです。

  • 直接接続している隣接ルータ間しか接続ができない (TTL 1)
  • eBGPで設定したBGPのパケットは TTL を 1として送信します。

    R10 eBGPの TCP SYNC パケット ttl 1

    eBGPのパケットはttlが1のためiBGPで紹介したようなルータをhopする設定してもルートをhopしたタイミングでttlが1から0に減算されパケットを廃棄(TTL expired)します。したがってeBGPは直接接続したIF間で設定する必要があります。
    ※ebgp-multihopでttlをデフォルトの1から変更することでiBGPにようにルータをhopして設定することは可能です。

    上記パケットキャプチャーファイルにはR10-R30間のeBGPが接続時のBGPのパケットになります。ttlが1になっていることを確認できます。
    また、R30から10.0.0.0/8をAS_PathにAS10を含んでupdate(送信)していることが確認できます。上記でも説明しましたが送信側は相手のASを気にせず送信して,受信側(R10)でAS_PATHに10が存在するため廃棄していることがわかります。

    上記構成図のCisco IOS-XEでのConfig例

    BGP記事一覧

    BGP RFC/関連サイト

    その他ネットワーク

    -BGP