🙆‍♀️

BGP NEXT_HOPの書き換え

2024/04/22に公開

初期状態

トポロジは以下


このとき、R11からインターネット(1.1.1.254)への通信はできるか?
pingを打ってみると、通信できないことがわかる。

R11#ping 1.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.254, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

ルーティングテーブルを見てみると、R11からインターネットへの経路がない。

R11#sh ip route
C       203.0.113.12 is directly connected, FastEthernet0/0

R10からインターネットへの経路はある。

R10#sh ip route
     203.0.113.0/30 is subnetted, 2 subnets
C       203.0.113.12 is directly connected, FastEthernet0/1
C       203.0.113.0 is directly connected, FastEthernet0/0
B*   0.0.0.0/0 [20/0] via 203.0.113.1, 10:11:15

つまり、R10ZのインターネットへのルートがR11まで届いていない(?)
R11のBGPテーブルを見てみると、BGPテーブルまでは届いていることがわかる。

R11#sh ip bgp

BGP table version is 2, local router ID is 203.0.113.14
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
* i0.0.0.0          203.0.113.1              0    100      0 64496 i
* i203.0.113.12/30  203.0.113.13             0    100      0 i
*>                  0.0.0.0                  0         32768 i

R11のBGPテーブルを見てみると、0.0.0.0のNext Hopが203.0.113.1になっているが、R11は203.0.113.1へのルートを持たない。よって、ルーティングテーブルに反映されない。
ちなみに、>があるもののみが反映される。この場合、203.0.113.12/30は直接接続によってルーティングテーブルに乗っているため、BGPのルートが反映されているわけではない。

Next Hopへのルートを設定する

R11に、203.1.113.1へのルートを設定してpingを打ってみると、インターネットと通信できた。

R11(config)#ip route 203.0.113.0 255.255.255.252 203.0.113.13

R11#ping 1.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 32/36/40 ms

このときのR11のルーティングテーブルは以下。静的なルートの他に、BGPによって経路が追加されていることがわかる。

R11#sh ip route
     203.0.113.0/30 is subnetted, 2 subnets
C       203.0.113.12 is directly connected, FastEthernet0/0
S       203.0.113.0 [1/0] via 203.0.113.13
B*   0.0.0.0/0 [200/0] via 203.0.113.1, 00:01:05

BGPテーブルを見ても、ルーティングテーブルに載せられている(>)ことがわかる。

R11#sh ip bgp
   Network          Next Hop            Metric LocPrf Weight Path
*>i0.0.0.0          203.0.113.1              0    100      0 64496 i
* i203.0.113.12/30  203.0.113.13             0    100      0 i
*>                  0.0.0.0                  0         32768 i

NEXT_HOPの書き換え

R10で、NEXT_HOPを自身のIPアドレスで書き換えてR11に広告するように設定する。
iBGPでは、デフォルトでNEXT_HOPの書き換えが行われないため、今回のようなケースはこの設定が有効

設定前のR11のBGPテーブルは以下の通り、0.0.0.0のNext Hopが直接到達できないIP(203.0.113.1)。

R11#show ip bgp
   Network          Next Hop            Metric LocPrf Weight Path
* i0.0.0.0          203.0.113.1              0    100      0 64496 i
*> 203.0.113.12/30  0.0.0.0                  0         32768 i
* i                 203.0.113.13             0    100      0 i

R10で、NEXT_HOPを書き換えるように設定する。

R10(config-router)#neighbor 203.0.113.14 next-hop-self

すると、すぐにUPDATEメッセージが送信される。NEXT_HOPは203.0.113.13

R11から、インターネットへpingを打つと、確かに通信できる。

R11#ping 1.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/40/56 ms

ルーティングテーブルが書き換わっている。

R11#sh ip route
     203.0.113.0/30 is subnetted, 1 subnets
C       203.0.113.12 is directly connected, FastEthernet0/0
B*   0.0.0.0/0 [200/0] via 203.0.113.13, 00:02:38

BGPテーブルのNext Hopの値も変わっている。

R11#sh ip bgp
   Network          Next Hop            Metric LocPrf Weight Path
*>i0.0.0.0          203.0.113.13             0    100      0 64496 i
*> 203.0.113.12/30  0.0.0.0                  0         32768 i
* i                 203.0.113.13             0    100      0 i

まとめ

  • iBGPはNEXT_HOPを書き換えないため、ルートの伝搬がうまくいかないことがある。そのときは
    • NEXT_HOPのIPアドレスへのルートを追加する
    • iBGPでNEXT_HOPを書き換えるように設定する
      のいずれかの対処が可能。

以上から、BGPがルーティングテーブルにルートを反映するかの判断にルーティングテーブルが使われるということがわかった。
したがって、今回はNEXT_HOPは静的にルートに追加したが、これはおそらくOSPFなどでもできることが示唆された。

Discussion