概要
BGP設定がうまくいかないときの検証です。
前回の最小設定編では、BGPを最小の設定コマンドで接続しました。
今回の崩し編では、さらにコマンドを削除していきdebugやshowコマンドを確認します。
設定コマンドと用途
コマンド | 用途 |
---|---|
router bgp | ルータプロセスと、ルータが属するAS番号を定義する |
remote-as | BGPネイバを形成する |
ebgp-multihop | 直接接続されていない2つのネットワークを接続する |
update-source | BGP接続の送信元を指定する |
next-hop-self | ネクストホップを自身のアドレスに設定する |
おもな確認コマンドと用途
コマンド | 用途 |
---|---|
#show ip bgp all summary | BGP接続の確認 State/PfxRcd が数字であればOK |
#show tcp | TCP接続の確認 Connection state is ESTABであればOK |
#show ip bgp | BGPテーブルの確認 |
#show ip route A.B.C.D | A.B.C.D宛てルートの確認 |
#debug ip bgp all | BGP接続のデバッグ |
#debug ip tcp transactions | TCP接続のデバッグ |
構成
各区間の設定
補足
・IBGP区間はIF単位でospfを設定しています
・IBGP区間はフルメッシュでBGP接続しています
・各ルータのL0,L1アドレスはBGPのnetworkコマンドでアドバタイズしています
作戦
以下の順番で崩していきます。
①R2のR1向けnext-hop-selfを削除
②R3のR5向けebgp-multihopを削除
③R1とR3のupdate-sourceを削除
④R4のremote-asを間違える
⑤R4のremote-asを削除
⑥R4のrouter bgpを削除
(①はジェンガの上の方、④⑤⑥は下の方です)
各項番、崩した後は設定を戻します。
では、崩していきます。
①R2のR1向けnext-hop-selfを削除
next-hop-selfはBGP接続後のネットワークアドバタイズに関わるコマンドなので、BGPは接続されたままpingが失敗する想定です。
R1向けを削除します。
R2(config-router)#no neighbor 1.1.1.1 next-hop-self
外部AS40のネットワーク4.4.4.4/21と40.0.0.0/24のネクストホップを確認します。
削除前のR2のL0アドレス2.2.2から、削除後はR4のGi0/2のアドレス24.0.0.4に変更されています。
R1はネクストホップ24.0.0.4のルート情報を持たないため、4.4.4.4にpingが届かなくなります。
②R3のR5向けebgp-multihopを削除
ebgp-multi-hopはLoopbackでEBGPを接続するときに、TTLを増やしてパケットを廃棄しないようにするコマンドです。TCP接続できなくなるため、BGPも確立できなくなる想定です。
R3の設定を削除します。
R3(config-router)#no neighbor 50.0.0.1 ebgp-multihop 2
BGPがIdleになっています。
TCP状態を確認すると、R3のTTLが1に変更されています。
少しするとshow tcpが表示されなくなりました。
debug ip bgp allを確認します。
R3は50.0.0.1へのルートがなくなっています。
R5はIdleとActiveを繰り返しているようです。
R3の設定を削除したままR5も削除すると、両方"no route to peer"になりました。
③R1とR3のupdate-sourceを削除
送信元の指定がneighborコマンドの指定とミスマッチになるので、BGPは切断される想定です。
R1(config-router)#no neighbor 3.3.3.3 update-source l0
R3(config-router)#no neighbor 1.1.1.1 update-source l0
BGPの接続が切断されました。show tcpは表示されません。
debug ip bgp allを確認すると、IdleとActiveを繰り返していることがわかります。
local addressが物理IFのアドレスになっています。
debug ip tcp transactionsを確認します。
RST to 物理IF from Loopbackとなっています。
show tcpのLocal host=debugのfrom(送信元)、Foreign host=to(宛先)に対応しているみたいです。
削除後は物理IFが宛先になってしまっています。
R1を例に考えると
・update-source L0を指定した場合
R1が送信元として1.1.1.1を通知する(update-source L0)ので、R3は宛先が1.1.1.1と認識する
・指定しない場合
R1が送信元としてデフォルトの物理IFアドレスを通知するので、R3は宛先が13.0.0.1(R1 Gi0/1)と認識する
ということかなと思います。
(片方削除でBGPがdownしなかったのですが、このへんが関係している???)
④R4のremote-asを間違える
マネしないでください
大量にメッセージが出力されて収拾つかなくなった場合、ネイバからshutdownすることで止まります。
R2#conf t
R2(config)#router bgp 10
R2(config-router)#neighbor 24.0.0.4 shut
R2(config-router)#
では、間違ったAS番号に変更してみます。
R4のremote-asを10→100に変更します。
R4(config)#router bgp 40
R4(config-router)#neighbor 24.0.0.2 remote-as 100
R4(config-router)#
削除後、ASが間違っているというNotificationメッセージが出力されました。
debug ip bgp allを確認します。
大量に出力されて見づらいので、エクセルにコピペして"from"でフィルタしました。
R2はOpenConfirmまで遷移してIdleに戻っています。
R4はremote host(R2)に拒否されています。
その後、OPENメッセージが表示されています。
ACTIVE=TCPが接続できていないはずなのにBGPのOPENメッセージ?と思いますが、読み解けなくてわかりません..
debug ip tcp translationsの出力です。"state"でフィルタしています。
一応Establishedになっていますが、debug出力は止まらなかったです。
debugは見づらいだけでよくわからなかったです。
削除後のメッセージpeer in wrong ASがわかりやすいヒントでした。
⑤R4のremote-asを削除
R4(config-router)#no neighbor 24.0.0.2 remote-as 10
削除後、peerの設定がなくなったというNotificationメッセージが表示されました。
R2のBGPがIdleになっています。
R4はsh ip bgp all sumもsh tcpも表示されません。
R2はIdleとActiveを繰り返しています。remote host(R4)に拒否されているようです。
R4は出力されません。
⑥R4のrouter bgpを削除
R4(config-router)#no router bgp 40
R2側でR4がBGPセッションを終了したメッセージが表示されました。
R4のdebug ip bgp allは出力されませんでした。
remot-as削除と同様、TCPは接続しようとしているみたいです。
R2側のneighborを削除することでTCPのdebugは止まりました。
まとめ
①R2のR1向けnext-hop-selfを削除
・BGPは切断されない
・BGPテーブルに宛先は残るがneighborのネクストホップが書き換わる
②R3のR5向けebgp-multihopを削除
・BGPは切断される
・設定削除した側のdebug ip bgp allで切断の原因がno route to peerとわかる
③R1とR3のupdate-sourceを削除
・BGPは切断される
・お互いのdebugを見比べると、送信元と宛先のミスマッチで切断されたと推測できる
④R4のremote-asを間違える
・すぐにBGPが切断されてNotificationメッセージが出力される
・Notificatioinメッセージにpeer in wrong ASの表示
・debug ip bgp allのConnection refusedから、remote hostが接続を拒否しているとわかる
⑤R4のremote-asを削除
・すぐにBGPが切断されてNotificationメッセージが出力される
・NotificationメッセージにPeer De-configuredの表示
・debug ip bgp allのConnection refusedから、remote hostが接続を拒否しているとわかる
⑥R4のrouter bgpを削除
・すぐにBGPが切断されて、相手側でセッション終了のメッセージが表示される
・設定していたBGPコマンドがすべて消去される
学んだこと
・BGP接続が確立できないときはTCPの送信元と宛先を確認する
・Notificationメッセージが表示されないときは、debugコマンドで確認(②③)
・メッセージが表示されたときは、メッセージから原因がわかる(④⑤⑥)
debugコマンドをちゃんと見ることがあまりなかったので勉強になりました!
参考
【Cisco】
Border Gateway Protocol(BGP)ケーススタディの確認
https://www.cisco.com/c/ja_jp/support/docs/ip/border-gateway-protocol-bgp/26634-bgp-toc.html
BGP ネイバーがアイドル状態、接続状態、アクティブ状態間でトグルする理由
https://www.cisco.com/c/ja_jp/support/docs/ip/border-gateway-protocol-bgp/13752-24.html
Cisco IOS IP Routing: BGP Command Reference
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html
【ネットワークエンジニアとして】
BGP - Neighbor
https://www.infraexpert.com/study/bgpz02.html
BGP - loopback I/F IBGP / EBGP
https://www.infraexpert.com/study/bgpz08.html
【RFC】
TCP Connection State Diagram Figure 6.
https://datatracker.ietf.org/doc/html/rfc793
【書籍】
『Routing TCP/IP, Volume II: CCIE Professional Development, 2nd Edition』
https://www.ciscopress.com/store/routing-tcp-ip-volume-ii-ccie-professional-development-9781587054709
【その他】
https://www.universal-music.co.jp/yaida-hitomi/products/toct-22226/
お読みいただいた方、ありがとうございます。