HSRP 実践編:(7) HSRP のタイマーを変更する

これまで、Hello Time やHold Time はデフォルト値のままでした。

a
デフォルト値はそれぞれ3 秒と10 秒なので、アクティブ・ルーターが切り替わるまでに最低10 秒の通信断が発生します。

今回は、通信断をもっと短くするためにHello Time とHold Time を小さくしてみます。

※ 『HSRPを究める:実践編 (6) HSRP のインターフェイス・トラッキングを設定する』でshutdown したRouter-A のインターフェイスs2/0 を元に戻しておいてください。


Hello Time を1秒に、Hold Time を5秒に設定します。

Router-A#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router-A(config)#interface ethernet 0/0
Router-A(config-if)#standby 10 timers 1 5
Router-A(config-if)#^Z
Router-A#

show standby で確認します。

Router-A#show standby
Ethernet0/0 - Group 10
State is Active
12 state changes, last state change 00:02:10
Virtual IP address is 192.168.1.1
Active virtual MAC address is 0000.0c07.ac0a
Local virtual MAC address is 0000.0c07.ac0a (v1 default)
Hello time 1 sec, hold time 5 sec
Next hello sent in 0.204 secs
Preemption enabled
Active router is local
Standby router is 192.168.1.103, priority 100 (expires in 4.948 sec)
Priority 105 (configured 105)
Track interface Serial2/0 state Up decrement 10
IP redundancy name is "hsrp-Et0/0-10" (default)
Router-A#

Router-B とRouter-C も見てみましょう。

Router-B#show standby
Ethernet0/0 - Group 10
State is Listen
21 state changes, last state change 00:00:58
Virtual IP address is 192.168.1.1
Active virtual MAC address is 0000.0c07.ac0a
Local virtual MAC address is 0000.0c07.ac0a (v1 default)
Hello time 1 sec, hold time 5 sec
Preemption enabled
Active router is 192.168.1.101, priority 105 (expires in 4.092 sec)
Standby router is 192.168.1.103, priority 100 (expires in 4.312 sec)
Priority 100 (default 100)
Track interface Serial2/0 state Up decrement 10
IP redundancy name is "hsrp-Et0/0-10" (default)
Router-B#

Router-C#show standby
Ethernet0/0 - Group 10
Local state is Standby, priority 100, may preempt
Hellotime 1 sec, holdtime 5 sec
Next hello sent in 0.456
Virtual IP address is 192.168.1.1 configured
Active router is 192.168.1.101, priority 105 expires in 4.380
Standby router is local
33 state changes, last state change 00:00:51
Priority tracking 1 interface, 1 up:
Interface Decrement State
Serial2/0 10 Up
Router-C#

Router-B とC のHold Time とHello Time も、1秒と5秒に変わりました。Router-A から受信したHello メッセージから学習したためです。

今、ネットワークは下図のようになっています。

hsrp-b7-1.png
Router-A のインターフェイスe0/0 をshutdown します。

Router-A#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router-A(config)#interface ethernet 0/0
Router-A(config-if)#shutdown
Router-A(config-if)#
Feb 7 00:40:53.391: %HSRP-6-STATECHANGE: Ethernet0/0 Grp 10 state Active -> Init
Router-A(config-if)#
Feb 7 00:40:53.403: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.102 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached
Feb 7 00:40:53.403: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.103 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached
Router-A(config-if)#
Feb 7 00:40:55.403: %LINK-5-CHANGED: Interface Ethernet0/0, changed state to administratively down
Feb 7 00:40:56.411: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down
Router-A(config-if)#

Router-C のコンソールを見ます。

Router-C#
Feb 7 00:40:57.820: %STANDBY-6-STATECHANGE: Ethernet0/0 Group 10 state Standby -> Active
Feb 7 00:41:30.960: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.101 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Dead timer expired
Router-C#

Router-A のステートがInit になった00:40:53 から、約5秒後の00:40:57 にはRouter-C がアクティブ・ルーターとなりました。

Ping の不通も、Hello Time とHold Time を変更するまえより短時間で済んでいるのが分かります。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!...!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

これまでは、アクティブ・ルーターからのHello メッセージが届かなくなって10秒待って、Router-C はアクティブ・ルーターとなっていました。

Hold Time を短くすることで、アクティブ・ルーター(Router-A)の異変を察知するのに要する時間を短縮できました。

hsrp-b7-2.png

Hello Time を1 秒、Hold Time を5 秒にするということは、Hello メッセージを5 回紛失したらアクティブ・ルーターの切り替わりが発生することを意味します。Hello メッセージを毎秒送信するのは帯域の浪費であり、現実的ではありません。

デフォルト値の場合、Hello メッセージの紛失は3 回まで許されることになります(Hello Time = 3 、Hold Time = 10)。
デフォルト値のように、Hold Time は、Hello Time の約3倍に設定するのが一般的です。


学習したタイマー値の取り扱いについて

デフォルト値よりも小さく設定したHello Time やHold Time が他のルーターに学習されると、学習したルーターでは、設定をデフォルトに戻しても反映されません(running-config には反映されますが、学習した値のまま動作します)。

学習された値が使われ続けるのは、より小さい値を他のルーターから学習した場合です。

※ 他から学習したルータも、より値を小さくする設定変更は有効になります。

小さい値に設定を変更したルーター自身は、設定を削除することでデフォルト値に戻ります。学習した小さい値は戻せなくても、自分で変更した値は戻せます。

より小さく変更はできるので、一旦値をより小さくした上で、設定を削除すればデフォルトに戻せます。

この制限は、より小さい値を他のルータから学習した場合です。
学習した値がデフォルトより大きい場合は、より大きくも、より小さくも変更できます。
IOS バージョンが12.4 の場合、学習した値の変更はデフォルト値以外なら大小どちらでも可能です。
standby 10 timers 3 10 は無効だが、standby 10 timers 5 15 は有効になる)

これら一連の、学習した値を変更する際の挙動は、意図して実装したものではなく、実装の甘さが露呈したもののように見えます。将来のバージョンでは変更されるかもしれません。