【HSRP】 自動切り戻し(プリエンプト)

HSRP で、アクティブルータに障害が起きたあと復旧したときに、元のアクティブルータへ自動で切り戻すことができます。これは、プリエンプト(preempt)の設定で実現します。

次の記事の基本設定の構成をもとに、プリエンプトの設定と動作を確認します。

>> 参考:【HSRP】基本設定とHelloパケット

この記事でわかること
  1. プリエンプトを設定すると、優先度の高いルータが復旧後にアクティブへ戻ること
  2. 切り戻しのときに送られる Coup メッセージ
  3. preempt delay minimum で、切り戻しを遅らせる設定

自動切り戻し(プリエンプト)とは

プリエンプトは、優先度(Priority)のいちばん高いルータが、ほかのルータがアクティブのときでも、アクティブを取り返せるようにする設定です。英語の preemption には「先取り」などの意味があります。

プリエンプトを設定していないと、優先度の高いルータが復旧しても、すでにアクティブになっているルータがそのままアクティブを続けます。

今回の構成では、R2(優先度 105)がアクティブ、R3(優先度 100)がスタンバイです。PC は仮想 IP アドレス 192.168.23.254 をデフォルトゲートウェイにしています。R2 の障害で R3 がアクティブになっている状態から、R2 を復旧させると、プリエンプトの設定によって R2 が自動的にアクティブに戻ります。

R5 5.5.5.5/32 192.168.25.0/24 192.168.35.0/24 R2 R3 Priority 105 Priority 100 .2 .3 192.168.23.0/24 HSRP グループ 1 仮想 IP .254 PC(.100) デフォルトゲートウェイ 192.168.23.254 Init Active LAN 側を shutdown
図1 R2 の障害で、R3 がアクティブになる
R5 5.5.5.5/32 192.168.25.0/24 192.168.35.0/24 R2 R3 Priority 105 Priority 100 .2 .3 192.168.23.0/24 HSRP グループ 1 仮想 IP .254 PC(.100) デフォルトゲートウェイ 192.168.23.254 Active Standby 自動切り戻し
図2 R2 が復旧すると、R2 がアクティブに戻る

設定

プリエンプトは、アクティブになってほしい、優先度のいちばん高いルータ(R2)に設定します。

R2

R2(config)#interface FastEthernet0/0.23
R2(config-subif)# standby 1 preempt

standby 1 preempt の 1 は HSRP のグループ番号です。

自動切り戻しの動作確認

R2 の LAN 側を止める

まず、R2 の LAN 側のインターフェースをシャットダウンして、R3 をアクティブにします。

R2

R2(config)#interface FastEthernet0/0.23
R2(config-subif)#shutdown 
*Jun  2 12:26:12.335: %HSRP-5-STATECHANGE: FastEthernet0/0.23 Grp 1 state Active -> Init

R3 がアクティブになります。

R3

R3#
*Jun  2 12:26:12.679: %HSRP-5-STATECHANGE: FastEthernet0/0.23 Grp 1 state Standby -> Active


R3#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Fa0/0.23    1    100 P Active  local           unknown         192.168.23.254
列意味
GrpHSRP のグループ番号
Priこのルータの優先度
Pプリエンプトが設定されている
Stateこのルータの状態(Active、Standby など)
Active / Standbyアクティブとスタンバイのルータ。local は自分自身。R2 が止まっているので、スタンバイは unknown
Virtual IP仮想 IP アドレス

R2 の LAN 側を戻す

では、R2 の LAN 側のインターフェースを戻します。すると、R2 がアクティブとして動作します。

R2

R2(config-subif)#interface FastEthernet0/0.23
R2(config-subif)#no shutdown 
*Jun  2 12:28:42.627: %HSRP-5-STATECHANGE: FastEthernet0/0.23 Grp 1 state Listen -> Active


R2#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Fa0/0.23    1    105 P Active  local           192.168.23.3    192.168.23.254

R2 は Listen から Active になり、R3(192.168.23.3)はスタンバイに戻っています。

R2 の LAN 側を戻したときのパケットキャプチャは、次のとおりです。R2 は、自分より優先度の低い R3 からアクティブ状態の Hello を受け取ると、アクティブを自分に譲ってもらうために、Coup メッセージを送ります。

画面イメージについて

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

パケットキャプチャ(Wireshark):R2 の Coup画面イメージ
SourceDestinationProtocolInfo
192.168.23.3224.0.0.2HSRPHello (state Active)
192.168.23.2224.0.0.2HSRPAdvertise (state Active)
192.168.23.2224.0.0.2HSRPCoup (state Listen)
192.168.23.2224.0.0.2HSRPAdvertise (state Active)
192.168.23.2224.0.0.2HSRPHello (state Active)
192.168.23.3224.0.0.2HSRPAdvertise (state Passive)
▸ Ethernet II, Src: 00:00:00_00:22:22 (00:00:00:00:22:22)▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 231▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 224.0.0.2▸ User Datagram Protocol, Src Port: 1985, Dst Port: 1985▾ Cisco Hot Standby Router Protocol    Version: 02    Op Code: Coup (1)3    State: Listen (2)    Hellotime: Default (3)    Holdtime: Default (10)4    Priority: 105    Group: 1    Reserved: 0    Authentication Data: Default (cisco)    Virtual IP Address: 192.168.23.254
図3 R2 が Coup を送る(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Dst: 224.0.0.2HSRP(バージョン1)のメッセージは、同じセグメントのすべてのルータを表す 224.0.0.2 宛てに、UDP 1985 番で送られる
2Op Code: Coup (1)アクティブになりたいときに送る Coup メッセージ(Hello は 0、Resign は 2)
3State: Listen (2)送った時点の R2 の状態は Listen
4Priority: 105R2 の優先度。アクティブの R3(100)より高いので、アクティブを取り返せる

Coup のあとは、R2 が Active の状態で Hello を送っています。一覧の最後の R3 の Advertise も、state が Active から Passive に変わっています。

切り戻しの遅延(preempt delay)

自動切り戻し(プリエンプト)をするときに、実行するまでの時間を、指定した時間だけ遅らせることができます。例えば、アクティブルータが復帰したあと、ルーティングプロトコルの経路の学習などが落ち着くまでしばらく待ってから、切り戻すことができます。復帰した直後に切り戻すと、R2 が上流(R5)への経路をまだ学習していないうちにアクティブになり、通信が途切れることがあるためです。

設定

自動切り戻しを 10 秒遅らせる場合は、次のように設定します。

R2

R2(config)#int fa0/0.23
R2(config-subif)#standby 1 preempt delay minimum 10

delay minimum 10 は、プリエンプトするまでに少なくとも 10 秒待つという意味です。既定は 0 秒で、すぐにプリエンプトします。

動作確認

R2(アクティブだったルータ)が復旧してから約 10 秒後に、R2 はアクティブを自分に譲ってもらうために Coup メッセージを送ります。

パケットキャプチャ(Wireshark):preempt delay のときの Coup画面イメージ
TimeSourceDestinationProtocolLengthInfo
44.057054192.168.23.2224.0.0.2HSRP66Hello (state Standby)
44.254722192.168.23.2224.0.0.2HSRP64Advertise (state Passive)
46.328272192.168.23.3224.0.0.2HSRP66Hello (state Active)
46.820275192.168.23.2224.0.0.2HSRP66Hello (state Standby)
48.858929192.168.23.3224.0.0.2HSRP66Hello (state Active)
49.727764192.168.23.2224.0.0.2HSRP66Hello (state Standby)
51.628540192.168.23.3224.0.0.2HSRP66Hello (state Active)
52.328289192.168.23.2224.0.0.2HSRP66Hello (state Standby)
54.533981192.168.23.3224.0.0.2HSRP66Hello (state Active)
54.535898192.168.23.2224.0.0.2HSRP64Advertise (state Active)
54.536049192.168.23.2224.0.0.2HSRP66Coup (state Standby)
54.536181192.168.23.2224.0.0.2HSRP64Advertise (state Active)
54.544124192.168.23.3224.0.0.2HSRP64Advertise (state Passive)
54.544245192.168.23.3224.0.0.2HSRP66Hello (state Speak)
54.545974192.168.23.2224.0.0.2HSRP66Hello (state Active)
57.217966192.168.23.3224.0.0.2HSRP66Hello (state Speak)
57.420247192.168.23.2224.0.0.2HSRP66Hello (state Active)
図4 復旧から約 10 秒後に Coup を送る(実際の画面ではなく、表示内容のポイントを示したイメージです)

R2 は復旧後(44.05 秒ごろ)、すぐにはアクティブにならず、Standby の状態で Hello を送っています。約 10 秒後の 54.54 秒に Coup を送り、そのあとは R2 が Active、R3 が Speak の状態で Hello を送っています。R3 はこのあとスタンバイに戻ります。

R2 R3 44.06 秒 復旧 Standby Active Hello(Active) Hello(Standby) 約 10 秒 54.54 秒 Coup(R2 がアクティブになりたい) Active Speak Hello(Active)
図5 preempt delay のときの切り戻しの流れ

preempt delay を設定していないときは、R2 は Listen の状態のまますぐに Coup を送っていましたが、今回は Standby になってから、10 秒待って Coup を送っています。

まとめ

項目内容
プリエンプト優先度のいちばん高いルータが、復旧後にアクティブを取り返す。standby 1 preempt
設定する機器アクティブになってほしい、優先度の高いルータ
Coupアクティブになりたいルータが送るメッセージ
切り戻しの遅延standby 1 preempt delay minimum 10。少なくとも 10 秒待ってから切り戻す

コメント