BGPメッセージをキャプチャして解析してみた

BGP (Border Gateway Protocol) は、インターネットの経路制御を担う重要なプロトコルです。今回の記事では、R1~R2間で動作している内部BGP (iBGP) セッションの通信をキャプチャし、そのメッセージ内容を確認していきます。BGPメッセージの種類や動作の詳細を把握することで、ネットワークエンジニアとしての知識を深めることができます。

スポンサーリンク

TCPセッションの確立

まず、BGPセッションの前提となるのはTCPの確立です。BGPはTCPポート179を使用して通信を行い、ルータ間でのTCPセッションが確立されると、BGPの各種メッセージが送信されます。内部BGP (iBGP) の場合、TTLの値が255に設定されていることが確認できます。これは、iBGPが複数ホップ先でもセッションを確立できるという特性によるものです。

TCPヘッダの詳細としては、

  • TTL (Time to Live): iBGPの場合は255、eBGP (外部BGP) ではデフォルトで1に設定されています。
  • DSCP (Differentiated Services Code Point): CS6にマーキングされています。これにより、BGPのルーティング通信が他のデータより優先される設定になっています。
スポンサーリンク

OPENメッセージ

TCPセッションが確立された後、最初に送信されるBGPメッセージはOPENメッセージです。このメッセージで、お互いのBGPセッションに関する情報が交換されます。

  • バージョン: 現在のBGPのバージョンは4です。
  • AS番号: それぞれのルータが所属するAS番号が通知されます。AS番号の不一致があると、BGPセッションは確立されません。
  • ホールドタイマ: メッセージの未受信状態を検出し、セッションを終了するまでの時間。Ciscoルータではデフォルト値は180秒ですが、対向ルータと比較して小さい方が採用されます。
  • ルータID: BGPルータを一意に識別するためのID。自身を一意に特定するIDで、bgp router-idコマンドで設定するか、インタフェースに設定されたIPアドレスの最高の値(物理アドレスよりループバックアドレスが優先)が選定されます。対向のルータIDと重複すると、ネイバーは確立できません。
スポンサーリンク

UPDATEメッセージ

BGPの主要なメッセージの一つがUPDATEメッセージです。このメッセージにより、BGPルートの追加や削除が行われます。

UPDATEメッセージには、Network Layer Reachability Information (NLRI) が含まれており、どの経路情報が利用可能かが通知されます。例えば、以下の設定によってR2のループバックアドレスがR1に広告される状況を考えます。

R2(config)#router bgp 12
R2(config-router)#network 2.2.2.2 mask 255.255.255.255

このUPDATEメッセージでは、2.2.2.2/32の経路がR2からR1に通知されています。

ルートの削除(withdraw)が発生した場合、同様にUPDATEメッセージで通知され、ルータは該当ルートをBGPテーブルから削除します。

R2(config)#router bgp 12
R2(config-router)#no network 2.2.2.2 mask 255.255.255.255

スポンサーリンク

KEEPALIVEメッセージ

KEEPALIVEメッセージは、BGPセッションを維持するために定期的に送信されます。Ciscoではデフォルトで60秒間隔で送信され、これによりホールドタイムが切れる前に対向ルータに応答があるか確認します。

  • KEEPALIVE間隔: ホールドタイムの1/3が採用されることが多く、デフォルトでは60秒。
  • 必要性: KEEPALIVEが届かない場合、BGPセッションが終了しネットワークの冗長性に影響を与える可能性があるため、定期的な送信が不可欠です。
スポンサーリンク

NOTIFICATIONメッセージ

BGPのエラーが発生した際には、NOTIFICATIONメッセージが送信されます。このメッセージにはエラーの種類と詳細が含まれており、BGPセッションが強制的に終了します。

AS番号の不一致

AS番号の不一致によりセッションが確立できない場合、NOTIFICATIONメッセージに「peer in wrong AS」というエラーが通知されます。これは、対向ルータ間で設定されたAS番号が一致しない場合に発生します。

R1(config)#router bgp 12
R1(config-router)#neighbor 192.168.12.2 remote-as 12
R2(config)#router bgp 12
R2(config-router)#neighbor 192.168.12.1 remote-as 1212

コンソール上に以下のログが出力されます

R2:
*May  5 03:03:37.430: %BGP-3-NOTIFICATION: sent to neighbor 192.168.12.1 passive 2/2 (peer in wrong AS) 2 bytes 000C
R1
*May  5 03:03:37.430: %BGP-3-NOTIFICATION: received from neighbor 192.168.12.2 active 2/2 (peer in wrong AS) 2 bytes 000C

受け入れられないホールドタイム

ホールドタイムが20秒を下回ると、ピアフラッピングのリスクが高まるため警告が出ます。設定が反映されても、短すぎるホールドタイムにより、BGPセッションが頻繁に切断される可能性があります。

 R1とR2間のネイバーが張れた状態で、R2のホールドタイムを変更します。

 BGPプロセス全体のタイマーを変更するには、

R2(config-router)#timers bgp  Keepalive  Holdtime 

 ネイバーごとにタイマーを変更するには、

R2(config-router)#neighbor 192.168.12.1 timers Keepalive  Holdtime 

 R2のキープアライブを5秒に、ホールドタイム15秒に設定します。

R2(config-router)#timers bgp 5 15
% Warning: A hold time of less than 20 seconds increases
  the chances of peer flapping

 20 秒を下回るホールドタイムによりピアのフラッピング機会が増加する旨の警告メッセージが出力される場合があります。ただし、設定自体は反映されます。

では、BGPセッションをクリアして、新しいホールドタイムが反映されるか確認します。

R2#clear ip bgp *
*May  5 03:26:54.973: %BGP-5-ADJCHANGE: neighbor 192.168.12.1 Down User reset
*May  5 03:26:54.973: %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.1 IPv4 Unicast topology base removed from session  User reset
*May  5 03:26:55.126: %BGP-5-ADJCHANGE: neighbor 192.168.12.1 Up 
R2#show ip bgp neighbors 
BGP neighbor is 192.168.12.1,  remote AS 12, internal link
  BGP version 4, remote router ID 1.1.1.1
  BGP state = Established, up for 00:00:09
  Last read 00:00:00, last write 00:00:03, hold time is 15, keepalive interval is 5 seconds
R1#show ip bgp neighbors 
BGP neighbor is 192.168.12.2,  remote AS 12, internal link
  BGP version 4, remote router ID 2.2.2.2
  BGP state = Established, up for 00:06:36
  Last read 00:00:01, last write 00:00:03, hold time is 15, keepalive interval is 5 seconds

 R1のホールドタイムはデフォルトの180秒ですが、値が小さいR2の15秒が採用されています。

 対向のルータが予期せず小さいホールドタイムを設定した場合に備えて、ホールドタイムの最小値をtimers bgpコマンドのオプションで設定できます。

R1で、ホールドタイムの最小値を30秒に設定します。

R1(config-router)#timers bgp 60 180 ?
  <0-65535>  Minimum hold time from neighbor
  

R1(config-router)#timers bgp 60 180 30

 R1のBGPセッションをクリアし、BGPセッションを張り直します。 R2のホールドタイムはR1で設定した最小値を下回る15秒のため、エラーとなり、BGPセッションが張れません。

R1#clear ip bgp *
R1#
*May  5 06:14:48.479: %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down User reset
*May  5 06:14:48.480: %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.2 IPv4 Unicast topology base removed from session  User reset
*May  5 06:14:49.025: %BGP-3-NOTIFICATION: sent to neighbor 192.168.12.2 active 2/6 (unacceptable hold time) 0 bytes 

WireSharkのキャプチャでも、R1からR2に「Unacceptable Hold Time」のエラー通知が確認できます。

スポンサーリンク

まとめ

BGPセッションのキャプチャを通じて、各メッセージの動作やエラーを理解することは、ネットワークトラブルシューティングに役立ちます。実際の運用環境で遭遇する問題に備え、BGPメッセージの意味とキャプチャ解析を確認しましょう。

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

コメント