BGPセッションを切らずに経路を更新する!ルートリフレッシュ機能【Cisco環境】

音声で聞く

読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。

BGP は、経路に変化があったときに、その差分だけを UPDATE メッセージで送ります。そのため、経路フィルタや属性の変更といったルーティングポリシーを変えても、すでにやり取りした経路には自動では反映されません。Cisco ルータでは clear ip bgp コマンドで BGP をリセットし、すべての経路にポリシーを適用し直します。

この記事では、BGP セッションを切らずに経路だけを送り直す「ルートリフレッシュ機能」の動きをパケットキャプチャで確認します。あわせて、ルートリフレッシュが使えない相手に使う「ソフト再構成(soft-reconfiguration inbound)」も設定します。

この記事でわかること
  1. ルートリフレッシュ機能に対応しているかを確かめる
  2. clear ip bgp * in で、相手に経路を送り直してもらう
  3. clear ip bgp * out で、相手に経路を送り直す
  4. soft-reconfiguration inbound で、受信した経路を保存しておく

検証構成

R2(AS 2)と R3(AS 3)を 192.168.23.0/24 で接続し、eBGP のピアを張っています。R2 は Loopback0 の 2.2.2.2/32 を、R3 は 3.3.3.3/32 を BGP で広報しています。

AS 2 AS 3 Lo0 2.2.2.2/32 Lo0 3.3.3.3/32 R2 R3 .2 .3 192.168.23.0/24 eBGP(TCP 179)
図1 検証構成

ハードリセットとソフトリセット

ポリシーを適用し直すいちばん簡単な方法は、ピアとの BGP セッション(TCP セッション)を張り直すことです。これをハードリセットと呼び、clear ip bgp * で実行します。* は、すべてのネイバーが対象という意味です。

特定のネイバーとのセッションだけを張り直すときは、clear ip bgp 192.168.23.3 のように、* の代わりにネイバーのアドレスを指定します。

注意

ハードリセットでは、セッションを張り直すあいだ、そのネイバーから学習した経路がいったん消えるため、通信が止まります。ラボでは問題ありませんが、運用中のネットワークでは通常は許容されません。

セッションを切らずにポリシーを適用し直す方法をソフトリセットと呼びます。ソフトリセットには、相手に経路を送り直してもらう「ルートリフレッシュ」と、受信した経路を自分で保存しておく「ソフト再構成」の2つの仕組みがあります。

ルートリフレッシュ機能

ルートリフレッシュは、TCP セッションを確立したまま、経路情報だけを送り直してもらう機能です(RFC 2918)。使うには、ピアの両方がこの機能に対応している必要があります。

対応しているかを確かめる

BGP ピアとの TCP セッションが確立すると、お互いに OPEN メッセージを送り、BGP のバージョンや AS 番号などを通知します。OPEN メッセージの詳細は、次の記事を参考にしてください。

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

OPEN メッセージの Optional Parameters には、対応している機能(Capability)が入っています。ルートリフレッシュに対応しているルータは、ここに Route refresh capability を入れて相手に知らせます。

画面イメージについて

この記事のキャプチャの画面は、実際の画面ではなく、検証時に Wireshark で取得したキャプチャから見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

パケットキャプチャ(Wireshark)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 192.168.23.3▸ Transmission Control Protocol, Src Port: 179, Dst Port: 58152, Seq: 1, Ack: 58, Len: 57▾ Border Gateway Protocol - OPEN Message    Marker: ffffffffffffffffffffffffffffffff    Length: 57    Type: OPEN Message (1)    Version: 4    My AS: 2    Hold Time: 180    BGP Identifier: 2.2.2.2    Optional Parameters Length: 28  ▾ Optional Parameters    ▸ Optional Parameter: Capability    ▸ Optional Parameter: Capability1    ▾ Optional Parameter: Capability        Parameter Type: Capability (2)        Parameter Length: 22      ▾ Capability: Route refresh capability          Type: Route refresh capability (2)          Length: 0    ▸ Optional Parameter: Capability    ▸ Optional Parameter: Capability
図2 R2 が送った OPEN メッセージ(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Parameter Type: Capability (2)このオプションパラメータが、対応機能を知らせる Capability であることを示します。
2Type: Route refresh capability (2)ルートリフレッシュに対応していることを示します。Capability コードは 2 で、値は持たないので長さは 0 です。

お互いにルートリフレッシュを通知し合っていれば、show ip bgp neighbors の Neighbor capabilities に次のように表示されます。

R3

R3# show ip bgp neighbors  | section neighbor
BGP neighbor is 192.168.23.2,  remote AS 2, external link
  BGP version 4, remote router ID 2.2.2.2
  BGP state = Established, up for 00:18:49
  Last read 00:00:45, last write 00:00:36, hold time is 180, keepalive interval is 60 seconds
  Neighbor sessions:
    1 active, is not multisession capable (disabled)
  Neighbor capabilities:
    Route refresh: advertised and received(new)
    Four-octets ASN Capability: advertised and received
    Address family IPv4 Unicast: advertised and received
    Enhanced Refresh Capability: advertised and received
    Multisession Capability:
    Stateful switchover support enabled: NO for session 1
表示意味
Route refresh:
advertised and received
自分も通知し(advertised)、相手からも受け取った(received)状態です。この状態ならルートリフレッシュを使えます。
Enhanced Refresh Capability:
advertised and received
拡張ルートリフレッシュ(RFC 7313)にも、お互いに対応しています。経路を送り直す前後に、開始(BoRR)と終了(EoRR)の合図を送るようになります。
Four-octets ASN Capability4 バイト AS 番号への対応です。ルートリフレッシュとは別の機能です。

clear ip bgp * in

R2 で clear ip bgp * in を実行すると、R2 は R3 にルートリフレッシュの要求(ROUTE-REFRESH メッセージ)を送ります。要求を受けた R3 は R2 に送っている経路を送り直し、R2 は受け取った経路にインバウンドポリシーを適用し直します。R2 のインバウンドポリシーを変えたときに使うコマンドです。

R2(AS 2) R3(AS 3) clear ip bgp * in ROUTE-REFRESH(Subtype 0:通常の要求) ROUTE-REFRESH(Subtype 1:BoRR) UPDATE(3.3.3.3/32) ROUTE-REFRESH(Subtype 2:EoRR) R3 が経路を 送り直す
図3 clear ip bgp * in のメッセージの流れ

R2

R2# clear ip bgp * in

最初に、R2 から R3 へルートリフレッシュの要求が送られます。

パケットキャプチャ(Wireshark)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 192.168.23.3▸ Transmission Control Protocol, Src Port: 179, Dst Port: 58152, Seq: 1, Ack: 1, Len: 23▾ Border Gateway Protocol - ROUTE-REFRESH Message    Marker: ffffffffffffffffffffffffffffffff    Length: 231    Type: ROUTE-REFRESH Message (5)    Address family identifier (AFI): IPv4 (1)2    Subtype: Normal route refresh request [RFC2918] with/without ORF [RFC5291] (0)    Subsequent address family identifier (SAFI): Unicast (1)
図4 R2 から R3 へのルートリフレッシュの要求(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Type: ROUTE-REFRESH Message (5)BGP メッセージのタイプ 5 で、ルートリフレッシュのメッセージです。AFI と SAFI で、どのアドレスファミリー(ここでは IPv4 ユニキャスト)を送り直すかを指定します。
2Subtype: Normal route refresh request ... (0)Subtype 0 は、通常のルートリフレッシュの要求です。

次に、R3 は R2 にルートリフレッシュの開始(Subtype 1:BoRR)を送ります。

パケットキャプチャ(Wireshark)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.23.3, Dst: 192.168.23.2▸ Transmission Control Protocol, Src Port: 58152, Dst Port: 179, Seq: 1, Ack: 24, Len: 23▾ Border Gateway Protocol - ROUTE-REFRESH Message    Marker: ffffffffffffffffffffffffffffffff    Length: 23    Type: ROUTE-REFRESH Message (5)    Address family identifier (AFI): IPv4 (1)1    Subtype: Demarcation of the beginning of a route refresh (1)    Subsequent address family identifier (SAFI): Unicast (1)
図5 R3 から R2 へのルートリフレッシュの開始(BoRR)(実際の画面ではなく、表示内容のポイントを示したイメージです)

続けて、UPDATE メッセージで BGP ルート(3.3.3.3/32)と属性を送り、最後にルートリフレッシュの終了(Subtype 2:EoRR)を送ります。

パケットキャプチャ(Wireshark)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.23.3, Dst: 192.168.23.2▸ Transmission Control Protocol, Src Port: 58152, Dst Port: 179, Seq: 24, Ack: 24, Len: 78▾ Border Gateway Protocol - UPDATE Message    Marker: ffffffffffffffffffffffffffffffff    Length: 551    Type: UPDATE Message (2)    Withdrawn Routes Length: 0    Total Path Attribute Length: 27  ▾ Path attributes    ▸ Path Attribute - ORIGIN: IGP    ▸ Path Attribute - AS_PATH: 3    ▸ Path Attribute - NEXT_HOP: 192.168.23.3    ▸ Path Attribute - MULTI_EXIT_DISC: 02  ▾ Network Layer Reachability Information (NLRI)    ▸ 3.3.3.3/32▾ Border Gateway Protocol - ROUTE-REFRESH Message    Marker: ffffffffffffffffffffffffffffffff    Length: 23    Type: ROUTE-REFRESH Message (5)    Address family identifier (AFI): IPv4 (1)3    Subtype: Demarcation of the ending of a route refresh (2)    Subsequent address family identifier (SAFI): Unicast (1)
図6 R3 から R2 への UPDATE とルートリフレッシュの終了(EoRR)(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Type: UPDATE Message (2)経路を運ぶ UPDATE メッセージです。ORIGIN、AS_PATH、NEXT_HOP、MULTI_EXIT_DISC の属性が付いています。
2NLRI: 3.3.3.3/32送り直された経路です。R3 の Loopback0 の経路が、もう一度届いています。
3Subtype: ... ending ... (2)ルートリフレッシュの終了(EoRR)です。同じパケットの中で、UPDATE の後ろに続いています。
補足

BoRR と EoRR は、拡張ルートリフレッシュ(RFC 7313)で決められたメッセージで、ROUTE-REFRESH メッセージの Subtype で区別します。受信側は BoRR を受け取ると、その相手から学習していた経路に古い印(stale)を付けます。EoRR を受け取った時点で古い印が残っている経路、つまり送り直されなかった経路を削除します。

clear ip bgp * out

R2 で clear ip bgp * out を実行すると、R2 はルートリフレッシュの要求を送らずに、自分の経路を R3 に送り直します。R2 のアウトバウンドポリシーを変えたときに使うコマンドです。

R2(AS 2) R3(AS 3) clear ip bgp * out ROUTE-REFRESH(Subtype 1:BoRR) UPDATE(2.2.2.2/32) ROUTE-REFRESH(Subtype 2:EoRR) R2 が経路を 送り直す
図7 clear ip bgp * out のメッセージの流れ

R2

R2# clear ip bgp * out

R2 は、まず R3 にルートリフレッシュの開始(Subtype 1:BoRR)を送ります。

パケットキャプチャ(Wireshark)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 192.168.23.3▸ Transmission Control Protocol, Src Port: 179, Dst Port: 58152, Seq: 1, Ack: 1, Len: 23▾ Border Gateway Protocol - ROUTE-REFRESH Message    Marker: ffffffffffffffffffffffffffffffff    Length: 23    Type: ROUTE-REFRESH Message (5)    Address family identifier (AFI): IPv4 (1)1    Subtype: Demarcation of the beginning of a route refresh (1)    Subsequent address family identifier (SAFI): Unicast (1)
図8 R2 から R3 へのルートリフレッシュの開始(BoRR)(実際の画面ではなく、表示内容のポイントを示したイメージです)

次に、UPDATE メッセージで BGP ルート(2.2.2.2/32)と属性を送り、最後にルートリフレッシュの終了(Subtype 2:EoRR)を送ります。

パケットキャプチャ(Wireshark)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 192.168.23.3▸ Transmission Control Protocol, Src Port: 179, Dst Port: 58152, Seq: 24, Ack: 1, Len: 78▾ Border Gateway Protocol - UPDATE Message    Marker: ffffffffffffffffffffffffffffffff    Length: 551    Type: UPDATE Message (2)    Withdrawn Routes Length: 0    Total Path Attribute Length: 27  ▾ Path attributes    ▸ Path Attribute - ORIGIN: IGP    ▸ Path Attribute - AS_PATH: 2    ▸ Path Attribute - NEXT_HOP: 192.168.23.2    ▸ Path Attribute - MULTI_EXIT_DISC: 02  ▾ Network Layer Reachability Information (NLRI)    ▸ 2.2.2.2/32▾ Border Gateway Protocol - ROUTE-REFRESH Message    Marker: ffffffffffffffffffffffffffffffff    Length: 23    Type: ROUTE-REFRESH Message (5)    Address family identifier (AFI): IPv4 (1)3    Subtype: Demarcation of the ending of a route refresh (2)    Subsequent address family identifier (SAFI): Unicast (1)
図9 R2 から R3 への UPDATE とルートリフレッシュの終了(EoRR)(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Type: UPDATE Message (2)R2 から送られた UPDATE メッセージです。AS_PATH は 2、NEXT_HOP は 192.168.23.2 です。
2NLRI: 2.2.2.2/32送り直された R2 の Loopback0 の経路です。
3Subtype: ... ending ... (2)ルートリフレッシュの終了(EoRR)です。

どちらのコマンドでも、TCP セッションは確立したまま経路が送り直されます。そのため、変更した BGP ポリシー(属性の変更や経路フィルタ)を、通信を止めずに適用できます。

補足

アウトバウンドのポリシーを変えたときは、自分で out を実行する代わりに、相手のルータで in を実行しても同じ結果になります。相手からルートリフレッシュの要求が届き、新しいアウトバウンドポリシーを適用した経路が送り直されるためです。

ソフト再構成(soft-reconfiguration inbound)

相手がルートリフレッシュに対応していない場合は、ソフト再構成を使います。ネイバーごとに、受信した経路をインバウンドポリシーを適用する前の形で保存しておき、その保存した経路にポリシーを適用し直す方法です。

R2 UPDATE R3 受信した経路 (ポリシー適用前) インバウンド ポリシー BGP テーブル received-routes で表示 clear ip bgp * soft in で適用し直す
図10 ソフト再構成の仕組み
注意

受信した経路をすべて別に保存するため、その分メモリを使います。経路数やネイバー数が多い場合は特に注意してください。相手がルートリフレッシュに対応しているなら、ソフト再構成は使わずにルートリフレッシュで済ませるのが基本です。

受信した経路を保存する

保存した経路は、show ip bgp neighbors ネイバーのアドレス received-routes で確認できます。ソフト再構成は既定で無効なので、設定する前は保存された経路がなく、次のように表示されます。

R2

R2# show ip bgp neighbors 192.168.23.3 received-routes 
% Inbound soft reconfiguration not enabled on 192.168.23.3

ソフト再構成を有効にするには、ネイバーに soft-reconfiguration inbound を設定します。

R2

R2(config)# router bgp 2
R2(config-router)# neighbor 192.168.23.3 soft-reconfiguration inbound

BGP セッションをクリアして R3 から BGP ルートを受信し直すと、受信した経路が保存されます。

R2

R2# show ip bgp neighbors 192.168.23.3 received-routes 
BGP table version is 5, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  3.3.3.3/32       192.168.23.3             0             0 3 i

Total number of prefixes 1

ポリシーを変えたあと、保存した経路に新しいポリシーを適用してルーティングテーブルに反映するには、clear ip bgp * soft in を実行します。

R2

R2# clear ip bgp * soft in
補足

soft-reconfiguration inbound を設定したネイバーに対して clear ip bgp * soft in を実行すると、相手に経路を送り直してもらうのではなく、保存しておいた経路を使ってポリシーを適用し直します。

うまくいかないとき

状態よくある原因確認すること
ポリシーを変えたのに経路が変わらないソフトリセットをしていない、または方向が違うインバウンドを変えたら in、アウトバウンドを変えたら out(または相手側で in)を実行したか
Route refresh が advertised and received になっていない相手がルートリフレッシュに対応していないshow ip bgp neighbors の Neighbor capabilities。対応していなければソフト再構成を使う
received-routes で Inbound soft reconfiguration not enabled と表示されるソフト再構成を設定していないネイバーに soft-reconfiguration inbound を設定したか

まとめ

コマンドセッション動き
clear ip bgp *張り直すハードリセット。TCP セッションを切り、経路を学習し直す
clear ip bgp * in維持する相手にルートリフレッシュを要求し、経路を送り直してもらう
clear ip bgp * out維持する自分の経路を相手に送り直す
clear ip bgp * soft in維持するソフト再構成で保存した経路に、ポリシーを適用し直す

運用中のネットワークでポリシーを変えたときは、ハードリセットではなく、ルートリフレッシュを使ったソフトリセットで反映するのが基本です。ルートリフレッシュに対応しているかは、show ip bgp neighbors の Neighbor capabilities で確かめられます。

コメント