BGP NEXT_HOPの書き換え
初期状態
トポロジは以下
このとき、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