HSRP で、アクティブルータに障害が起きたあと復旧したときに、元のアクティブルータへ自動で切り戻すことができます。これは、プリエンプト(preempt)の設定で実現します。
次の記事の基本設定の構成をもとに、プリエンプトの設定と動作を確認します。
>> 参考:【HSRP】基本設定とHelloパケット
- プリエンプトを設定すると、優先度の高いルータが復旧後にアクティブへ戻ること
- 切り戻しのときに送られる Coup メッセージ
preempt delay minimumで、切り戻しを遅らせる設定
自動切り戻し(プリエンプト)とは
プリエンプトは、優先度(Priority)のいちばん高いルータが、ほかのルータがアクティブのときでも、アクティブを取り返せるようにする設定です。英語の preemption には「先取り」などの意味があります。
プリエンプトを設定していないと、優先度の高いルータが復旧しても、すでにアクティブになっているルータがそのままアクティブを続けます。
今回の構成では、R2(優先度 105)がアクティブ、R3(優先度 100)がスタンバイです。PC は仮想 IP アドレス 192.168.23.254 をデフォルトゲートウェイにしています。R2 の障害で R3 がアクティブになっている状態から、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
| 列 | 意味 |
|---|---|
| Grp | HSRP のグループ番号 |
| 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 メッセージを送ります。
この記事のパケットキャプチャの画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| Source | Destination | Protocol | Info |
|---|---|---|---|
| 192.168.23.3 | 224.0.0.2 | HSRP | Hello (state Active) |
| 192.168.23.2 | 224.0.0.2 | HSRP | Advertise (state Active) |
| 192.168.23.2 | 224.0.0.2 | HSRP | Coup (state Listen) |
| 192.168.23.2 | 224.0.0.2 | HSRP | Advertise (state Active) |
| 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 192.168.23.3 | 224.0.0.2 | HSRP | Advertise (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
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Dst: 224.0.0.2 | HSRP(バージョン1)のメッセージは、同じセグメントのすべてのルータを表す 224.0.0.2 宛てに、UDP 1985 番で送られる |
| 2 | Op Code: Coup (1) | アクティブになりたいときに送る Coup メッセージ(Hello は 0、Resign は 2) |
| 3 | State: Listen (2) | 送った時点の R2 の状態は Listen |
| 4 | Priority: 105 | R2 の優先度。アクティブの 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 メッセージを送ります。
| Time | Source | Destination | Protocol | Length | Info |
|---|---|---|---|---|---|
| 44.057054 | 192.168.23.2 | 224.0.0.2 | HSRP | 66 | Hello (state Standby) |
| 44.254722 | 192.168.23.2 | 224.0.0.2 | HSRP | 64 | Advertise (state Passive) |
| 46.328272 | 192.168.23.3 | 224.0.0.2 | HSRP | 66 | Hello (state Active) |
| 46.820275 | 192.168.23.2 | 224.0.0.2 | HSRP | 66 | Hello (state Standby) |
| 48.858929 | 192.168.23.3 | 224.0.0.2 | HSRP | 66 | Hello (state Active) |
| 49.727764 | 192.168.23.2 | 224.0.0.2 | HSRP | 66 | Hello (state Standby) |
| 51.628540 | 192.168.23.3 | 224.0.0.2 | HSRP | 66 | Hello (state Active) |
| 52.328289 | 192.168.23.2 | 224.0.0.2 | HSRP | 66 | Hello (state Standby) |
| 54.533981 | 192.168.23.3 | 224.0.0.2 | HSRP | 66 | Hello (state Active) |
| 54.535898 | 192.168.23.2 | 224.0.0.2 | HSRP | 64 | Advertise (state Active) |
| 54.536049 | 192.168.23.2 | 224.0.0.2 | HSRP | 66 | Coup (state Standby) |
| 54.536181 | 192.168.23.2 | 224.0.0.2 | HSRP | 64 | Advertise (state Active) |
| 54.544124 | 192.168.23.3 | 224.0.0.2 | HSRP | 64 | Advertise (state Passive) |
| 54.544245 | 192.168.23.3 | 224.0.0.2 | HSRP | 66 | Hello (state Speak) |
| 54.545974 | 192.168.23.2 | 224.0.0.2 | HSRP | 66 | Hello (state Active) |
| 57.217966 | 192.168.23.3 | 224.0.0.2 | HSRP | 66 | Hello (state Speak) |
| 57.420247 | 192.168.23.2 | 224.0.0.2 | HSRP | 66 | Hello (state Active) |
R2 は復旧後(44.05 秒ごろ)、すぐにはアクティブにならず、Standby の状態で Hello を送っています。約 10 秒後の 54.54 秒に Coup を送り、そのあとは R2 が Active、R3 が Speak の状態で Hello を送っています。R3 はこのあとスタンバイに戻ります。
preempt delay を設定していないときは、R2 は Listen の状態のまますぐに Coup を送っていましたが、今回は Standby になってから、10 秒待って Coup を送っています。
まとめ
| 項目 | 内容 |
|---|---|
| プリエンプト | 優先度のいちばん高いルータが、復旧後にアクティブを取り返す。standby 1 preempt |
| 設定する機器 | アクティブになってほしい、優先度の高いルータ |
| Coup | アクティブになりたいルータが送るメッセージ |
| 切り戻しの遅延 | standby 1 preempt delay minimum 10。少なくとも 10 秒待ってから切り戻す |
コメント