BGPルートが通らない?Next-Hop-Selfで解決するiBGPの落とし穴【Cisco実機検証】

iBGPのルート広告では「Next Hopが書き換わらない」という特性があるため、場合によっては経路がブラックホール化するリスクがあります。本記事では、Ciscoルータを用いた具体的な構成例を通して、Next-Hop-Selfの必要性とその動作をわかりやすく解説します。

スポンサーリンク

Next Hopに到達できない問題とは?

iBGPの基本的な動作として、他のiBGPピアにルートを広告してもNext Hopアドレスは変更されないという仕様があります。
そのため、あるiBGPルータが受け取った経路のNext Hopに対してルーティングが存在しない場合、その経路は「使えない(inaccessible)」と判断され、選ばれなくなります

スポンサーリンク

構成と問題の再現

以下のようなネットワーク構成を想定します。

R1は、自身のループバックアドレス1.1.1.1/32をBGPで広告しています。

R1(config)#router bgp 1
R1(config-router)#neighbor 192.168.12.2 remote-as 23
R1(config-router)#network 1.1.1.1 mask 255.255.255.255

R2とR3は同一AS内のiBGPピアです:

R2(config)#router bgp 23
R2(config-router)#neighbor 192.168.12.1 remote-as 1 
R2(config-router)#neighbor 192.168.23.3 remote-as 23
R3(config)#router bgp 23
R3(config-router)#neighbor 192.168.23.2 remote-as 23

この状態で、R2とR3のBGPテーブルを確認します。

R2#sh ip bgp 
BGP table version is 2, local router ID is 2.2.2.2
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.1/32       192.168.12.1             0             0 1 I

R2では、R1から受け取ったルート(1.1.1.1/32)を正しく認識し、ベストパスとして選択しています。

R3のBGPテーブルを確認します。

R3#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
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
 *  i 1.1.1.1/32       192.168.12.1             0    100      0 1 i

ここで問題発生。Next Hopが192.168.12.1のままになっており、R3からは1.1.1.1/32をベストパスとして認識されていません。

BGPルートの詳細を確認すると…

R3#sh ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 2
Paths: (1 available, no best path)
  Not advertised to any peer
  Refresh Epoch 1
  1
    192.168.12.1 (inaccessible) from 192.168.23.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, internal

Next Hopが「inaccessible(到達不能)」となっており、この経路はベストパスとして選ばれないのです。これは、R3のルーティングテーブルに192.168.12.1宛のルートがないためです。

スポンサーリンク

Next-Hop-Selfの設定方法

この問題を解決する最もシンプルな方法が、next-hop-selfオプションの使用です。

R2(config)#router bgp 23
R2(config-router)#neighbor 192.168.23.3 next-hop-self

これにより、R2がR3にルートを広告する際、Next Hopを自分自身(192.168.23.2)に書き換えて送信します。

再度R3で確認すると…

R3#sh ip bgp
BGP table version is 5, local router ID is 3.3.3.3
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
 *>i 1.1.1.1/32       192.168.23.2             0    100      0 1 i

Next HopがR2のアドレスに変わり、R3からも直接到達できるネットワークになったことで、ベストパスとして選ばれるようになりました。

スポンサーリンク

route-mapでネクストホップを任意に変更する

さらに柔軟な制御を行いたい場合、route-mapを使用してNext Hopを任意のIPアドレスに設定することも可能です。

R2(config)#route-map SET_NEXTHOP_TO_R3 permit 10
R2(config-route-map)#set ip next-hop 192.168.23.2
R2(config)#router bgp 23
R2(config-router)#neighbor 192.168.23.3 route-map SET_NEXTHOP_TO_R3 out

R3のBGPテーブルを確認すると、ネクストホップを192.168.23.2に変更されています。この設定でもR3は1.1.1.1/32を正しく学習し、ベストパスとして扱うようになります。

R3#sh ip bgp 
BGP table version is 2, local router ID is 3.3.3.3
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
 *>i 1.1.1.1/32       192.168.23.2             0    100      0 1 i
スポンサーリンク

まとめ

iBGP環境では、Next Hopの可達性を確保することが非常に重要です。

設定方法特徴用途
next-hop-self自身のアドレスに自動書き換え通常のiBGP設定で推奨
route-map任意のアドレスに手動で書き換え高度な経路制御やポリシー適用

その他 BGP関連記事は   >>  ルーティングプロトコル(BGP)まとめ << より参照できます。

コメント