このブログでは、BGPがNEXT_HOPネクストホップ属性値を変更するためのいくつかの方法(next-hop-selfによるネクストホップ属性の変更、route-mapによるBGPルーティングNEXT_HOP属性値の変更など)について詳しく紹介します。
1.ネクストホップ属性はnext-hop-selfで変更可能。
共有メディアのNEXT_HOP
RouterBはルート100.100.100.0/24を10.1.123.2のNEXT_HOPでAに渡します。
ルーターAはルート100.100.100.0/24をCに渡します。
ルータがNEXT_HOPアドレスの値がそのルータのインタフェースIP(更新元)と同じネットワークセグメントに属するBGPルートを受信した場合、そのルートのNEXT_HOPアドレスは変更されずにBGP隣接ルータに引き継がれます。これは実際には最適化の仕組みですが、NBMA環境ではこの仕組みに問題はないのでしょうか?
NMBAネットワーク上のNEXT_HOP
上の図を見ても、真ん中のネットワークがブロードキャスト・マルチプル・アクセス・ネットワークではなく、フレームリレー・ネットワークである場合、Cが受信したルートのNEXT_HOPが10.1.123.2であることに注意してください。
2.ルートマップを使ってBGPルートのNEXT_HOP属性の値を変更します。
R1-R2はループバックベースのiBGP隣接関係を、r2-R3は直接接続ポートベースのeBGP隣接関係を確立します。そして、デフォルトでは、R1はルート11.0/24のネクストホップ属性値がR1の更新元IPである1.1.1.1であることをR2に広告し、R2がeBGPネイバーR3にルートを更新すると、ルートのNHは10.1.23.2となります、
R2に設定を追加
ルートマップ test permit 10
マッチIPアドレス1
セット ip ネクストホップ 10.1.23.99
ルーター bgp 12
ネイバー10.1.23.3 route-map test out
R3に渡すBGPルートのNEXT_HOP属性の値は、R2にアウト方向のルートマップを配置することで変更できますが、もちろん上の例で設定した10.1.23.99に意味はなく、純粋にテストです。
3.BGPネクストホップ変更機能について
BGP NEXT_HOP属性の値に影響を与えるもう1つの機能は、BGPネクストホップ変更機能です。
まず、このコマンドはマルチホップeBGPピアにしか設定できませんので、上図ではR2とR3がマルチホップeBGPピアを形成するためには、ループバックベースのeBGPネイバーを確立する必要があります。
R2がiBGPピアからNEXT_HOP属性値が1.1.1.1のルート11.0/24を受信した後、R2のBGPプロセスでネイバー3.3.3.3のnext-hop-unchangedコンフィグレーションが使用されている場合、R2がeBGPネイバーR3にBGPルートを配信しても、ルートのNEXT_HOP属性値は変更されません。HOP属性の値は変更されません。
さらにテストを行うために、トポロジー環境を変更します:
R1-R2はeBGPネイバーとなり、直接接続ポートに基づいてeBGPネイバーを確立しました。
ループバックに基づいて確立されたマルチホップeBGPネイバーはR2-R3間に残ります。
現在、R1から渡されたルートは、R2のNEXT_HOP属性値が10.1.12.1であるため、デフォルトでは、R2がR3にルートを戻すとき、ルートのNEXT_HOP属性値は、R2の更新されたソースIPである2.2.2.2に変更されます。
このときR2でneighbor 3.3.3.3 next-hop-unchangedを設定し、コマンドが無効であることがわかったとしても、R2からR3へ広告されるルートのNEXT_HOP属性の値は変更され、10.1.12.1は保持されません。
つまり、BGPのneighbor next-hop-unchangedコマンドは、第一にマルチホップのeBGPネイバーにしか設定できず、第二に、ローカルのiBGPルートを自分のeBGPマルチホップネイバーに渡すときにしか有効にならないという結論に達しました。





