LoginSignup
0
0

BGPでジェンガしてみる3(崩し編)

Last updated at Posted at 2023-09-18

概要

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接続のデバッグ

構成

image.png

各区間の設定
image.png
補足
・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

BGP接続は切断されていません。
image.png

外部AS40のネットワーク4.4.4.4/21と40.0.0.0/24のネクストホップを確認します。
削除前のR2のL0アドレス2.2.2から、削除後はR4のGi0/2のアドレス24.0.0.4に変更されています。
image.png

R1はネクストホップ24.0.0.4のルート情報を持たないため、4.4.4.4にpingが届かなくなります。
image.png

R5→R4向けのpingはR1で止まってしまいます。
image.png

②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に変更されています。
image.png
少しするとshow tcpが表示されなくなりました。
image.png

debug ip bgp allを確認します。
R3は50.0.0.1へのルートがなくなっています。
R5はIdleとActiveを繰り返しているようです。
image.png

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は表示されません。
image.png

debug ip bgp allを確認すると、IdleとActiveを繰り返していることがわかります。
local addressが物理IFのアドレスになっています。
image.png

debug ip tcp transactionsを確認します。
RST to 物理IF from Loopbackとなっています。
image.png

show tcpのLocal host=debugのfrom(送信元)、Foreign host=to(宛先)に対応しているみたいです。
削除後は物理IFが宛先になってしまっています。
image.png

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メッセージが出力されました。
image.png

debug ip bgp allを確認します。
大量に出力されて見づらいので、エクセルにコピペして"from"でフィルタしました。
R2はOpenConfirmまで遷移してIdleに戻っています。
image.png
R4はremote host(R2)に拒否されています。
その後、OPENメッセージが表示されています。
image.png
ACTIVE=TCPが接続できていないはずなのにBGPのOPENメッセージ?と思いますが、読み解けなくてわかりません..

debug ip tcp translationsの出力です。"state"でフィルタしています。
一応Establishedになっていますが、debug出力は止まらなかったです。
image.png

debugは見づらいだけでよくわからなかったです。
削除後のメッセージpeer in wrong ASがわかりやすいヒントでした。

⑤R4のremote-asを削除

R4(config-router)#no neighbor 24.0.0.2 remote-as 10

削除後、peerの設定がなくなったというNotificationメッセージが表示されました。
image.png

R2のBGPがIdleになっています。
R4はsh ip bgp all sumsh tcpも表示されません。
image.png

R2はIdleとActiveを繰り返しています。remote host(R4)に拒否されているようです。
R4は出力されません。
image.png

TCPはお互い接続しようとしているみたいです。
image.png

⑥R4のrouter bgpを削除

R4(config-router)#no router bgp 40

R2側でR4がBGPセッションを終了したメッセージが表示されました。
image.png

R4はBGPの設定が入っていないという表示になっています。
image.png

BGPの設定コマンドがすべて消去されています。
image.png

R4のdebug ip bgp allは出力されませんでした。
image.png
remot-as削除と同様、TCPは接続しようとしているみたいです。
image.png
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/

お読みいただいた方、ありがとうございます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0