0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CMLを使ってHSRPの理解を深める

0
Last updated at Posted at 2025-09-19

HSRPとは

HSRPはFHRP(デフォルトゲートウェイの冗長化)の1つで、Cisco独自のプロトコルです。
複数台のルータを仮想的に1つのルータに見せることで、デフォルトゲートウェイの冗長化を実現しています。

HSRPの用語

ここではHSRPを設定する際に理解しておくべき用語を紹介します。

1.スタンバイグループ

HSRPでは複数のルータをスタンバイグループという共通のグループに割り当てることで、グループに属しているルータ同士で連携することができます。
スタンバイグループは番号で認識させます。HSRPのバージョンによりこのスタンバイグループの範囲は異なり、バージョン1は0~255バージョン2は0~4095までの範囲で設定します。

2.仮想IPアドレス

スタンバイグループ内ではルータ同士で共通する仮想IPアドレスを使用することで、複数のルータを1つのルータに見せかけています。
この仮想IPアドレスがクライアントから見た時のデフォルトゲートウェイとなります。
個々のルータに設定されているIPアドレスをクライアントのデフォルトゲートウェイに設定してしまうと、障害が起こった時にデフォルトゲートウェイを切り替えることが出来ず、冗長化の役目を果たせなくなってしまいます。
そのため、スタンバイグループに属するルータのインターフェイスに設定されているIPアドレスではなく、スタンバイグループ共通で使用するIPアドレスを仮想IPアドレスとして設定します。

3.仮想MACアドレス

仮想IPアドレスの他に仮想MACアドレスも用意されており、クライアントは仮想MACアドレスを宛先MACアドレスとして使用します。
仮想MACアドレスもHSRPバージョンによって異なり、バージョン1は0000.0C07.ACxx、バージョン2は0000.0C9F.Fxxxとなります。
x にはスタンバイグループを16進数に変換した値が入ります。
例:スタンバイグループ番号が10の場合、パージョン1は0000.0C07.AC0A、バージョン2は0000.0C9F.F00Aとなります。

4.アクティブルータ

HSRPで複数のルータをスタンバイグループとして束ねましたが、クライアントからの通信を転送処理するのは1台のみで、この転送処理を行うルータをアクティブルータといいます。
HSRPプライオリティ値を基に、値の最も大きいルータがアクティブルータとして選出されます。
HSRPプライオリティ値は0~255の範囲で設定し、デフォルト値は100です。
もしプライオリティ値に差がない場合はHSRPが動作しているインターフェイスのIPアドレスの最も大きいルータがアクティブルータに選出されます。

5.スタンバイルータ

スタンバイルータはアクティブルータのバックアップとなるルータです。
アクティブルータに障害が発生した際にバックアップルータがその役割を引き継いで通信処理を継続します。
HSRPプライオリティ値が2番目に大きいルータがスタンバイルータに選出されます。

6.Helloパケット

スタンバイグループ内のルータはHelloパケットをマルチキャストアドレス224.0.0.2に送信します。
Helloパケットを利用してルータ間でHSRP情報を交換します。Helloパケットの送信間隔はデフォルトで3秒です。
アクティブルータとスタンバイルータの2台だけがHelloパケットを送信し、スタンバイルータはアクティブルータからHelloパケットを10秒受け取らなかったら、アクティブルータがダウンしたと判断して自身がアクティブルータとなります。

7.プリエンプト

HSRPでは一度アクティブルータに選出されると、ダウンしない限りアクティブルータであり続けます。
もし常にアクティブルータとしておきたいルータがある場合にこれでは不都合が生じてしまいますが、この状況を回避するためにプリエンプトという機能を有効にすることで、プライオリティ値の大きいルータが常にアクティブルータに選出されます。

8.インターフェイストラッキング

HSRPを有効にしているインターフェイスに障害が発生したときはHelloパケットの送信で生存確認を行えますが、HSRPを有効にしていないインターフェイス(例えばインターネットと接続しているアップリンク)で障害が発生した時に認知できません。
そのためアクティブルータのアップリンクで障害が発生していても通信はアクティブルータを経由して来てしまい、結果、通信できない状態となってしまいます。
それを回避するためにインターフェイストラッキングという機能があります。
インターフェイストラッキングはHSRPを有効にしているインターフェイス以外を監視し、そのインターフェイスのup/downによってアクティブ/スタンバイを切り替えます。
インターフェイストラッキングで監視しているインターフェイスがdownするとプライオリティ値を指定した値だけ小さくすることができる減少値を設定しておき、スタンバイルータよりプライオリティ値が小さくなることで切り替わりを発生させることができます。

9.オブジェクトトラッキング

オブジェクトトラッキングではインターフェイス以外も監視対象にすることができます。
インターフェイスのラインプロトコル状態やIPルーティング可能かといったことを監視対象に指定できます。
監視対象が異なるだけで仕組みはインターフェイストラッキングと同じです。
監視対象がdownしたらあらかじめ指定していた減少値分プライオリティ値が小さくなり、アクティブ/スタンバイが切り替わります。

10.認証機能

認証機能を利用することで、同じスタンバイグループであっても認証に失敗するとHSRPメッセージを無視します。
想定外のルータがスタンバイグループに接続しても、アクティブルータの役割を入れ替えられないようにする際などに利用します。
認証機能にはプレーンテキスト認証(パスワードを暗号化しない)とMD5認証(パスワードを暗号化する)があります。

HSRPの設定

HSRPの有効化

HSRPを有効にするには以下コマンドを実行します。

HSRPの有効化
(config-if)#standby [スタンバイグループ番号] ip [仮想IPアドレス]

スタンバイグループ番号は、HSRPバージョン1では0~255、バージョン2では0~4095をしています。
仮想IPアドレスはクライアントから見た時のデフォルトゲートウェイとなります。
仮想IPアドレスは省略することもできますが、その場合スタンバイグループ内の他のルータから送信されてきたHelloパケットから仮想IPアドレスを学習しますので、1台には必ず仮想IPアドレスを設定しておく必要があります。

HSRPプライオリティ値の設定

HSRPプライオリティ値を設定するには以下のコマンドを実行します。

HSRPプライオリティ値の設定
(config-if)#standby [スタンバイグループ番号] priority [プライオリティ値]

HSRPプライオリティ値は0~255の範囲で設定し、デフォルト値は100です。

プリエンプトの設定

プライオリティ値の大きいルータが常にアクティブルータとするためのプリエンプトの設定は以下のコマンドを実行します。

プリエンプトの設定
(config-if)#standby [スタンバイグループ番号] preempt [delay [minimum|reload] [秒数]]

delayオプションにはアクティブルータになるまでの時間を指定した秒数遅らせることができます。
reloadはルータが再起動後にアクティブルータになるまで時間を指定した秒数遅らせることができます。

インターフェイストラッキングの設定

HSRPを有効にしているインターフェイスを監視し、状態によってHSRPのプライオリティ値を減少させてい場合はインターフェイストラッキングを有効にします。

インターフェイストラッキングの設定
(config-if)#standby [スタンバイグループ番号] track [インターフェース] [減少値]

指定したインターフェースがdownすると指定した減少値の分だけプライオリティ値が減少しupすると元の値に戻ります。
減少値は省略できますが、デフォルト値は10です。

オブジェクトトラッキングの設定

HSRPを有効にしているインターフェイス以外を監視の対象にしたい場合は、オブジェクトトラッキングを利用します。
まずはインターフェース状態を監視対象としたい場合は以下のコマンド実行します。

オブジェクトトラッキングの設定➀
(config)#track [オブジェクト番号] interface [インターフェース] [line-protocol|ip routing]

line-protcolはL2の回線状態を監視しますので、通信モードやカプセル化形式の設定ミスなどにより line protcol is down となった場合にACT/STBの切り替わりが発生します。
ip routing はラインプロトコルの状態、IPアドレスの設定有無、インターフェースのルーティングが有効化を監視します。どれか1つでも満たしていないとdownと見なされてしまうので注意が必要です。

ルーティングテーブルの経路情報を監視対象にすることもできます。
その場合は以下のコマンドを実行します。

オブジェクトトラッキングの設定➁
(config)#track [オブジェクト番号] ip route [ネットワーク] [サブネットマスク] [reachability|metric thershold]

reachabilityをの場合、指定した[ネットワーク] [サブネットマスク]がルーティングテーブルに載っていればup、載っていないとdownとなります。
metric thersholdの場合、指定した[ネットワーク] [サブネットマスク]がルーティングテーブルに載っていて、かつ後述する設定したメトリックの閾値より小さければup、大きければdownとなります。

メトリックの閾値を設定するには以下のコマンドを実行します。

オブジェクトトラッキングの設定➂
(config-track)#thershold metric up [メトリック1] down [メトリック2]

メトリック1にはupと見なす閾値を、メトリック2にはdownと見なす閾値を指定します。

ここまでは監視するオブジェクトを設定しましたが、このままではHSRPのトラッキングに設定されていません。
設定したオブジェクトをHSRPで監視させるには以下のコマンドを実行します。

オブジェクトトラッキングの設定➃
(config)#standby [スタンバイグループ番号] track [オブジェクト番号] [decrement [減少値]]

オブジェクト番号は上記で設定したオブジェクトトラッキングの[オブジェクト番号]を指定します。
decrementはプライオリティ値の減少値を設定しますが、省略した場合はデフォルト値の10が適用されます。

認証の設定

認証機能を有効にしたい場合、認証方式によってコマンドが異なります。
プレーンテキストで認証する場合は以下のコマンドを実行します。

プレーンテキスト認証
(config)#standby [スタンバイグループ番号] authentication [text] [文字列]

[text]は省略可能ですが、[文字列]には認証に使用する文字列を指定する必要があります。

MD5認証
(config)#standby [スタンバイグループ番号] authentication md5 [key-string [0|7] [文字列] | key-chain [キーチェーン名]]

key-chainとは認証に使用するキー(パスワード)を管理するためのオブジェクトです。
このキーチェーンを使用する場合はあらかじめキーチェーンを作成しておく必要があります。コマンドは以下です。

キーチェーンの作成
(config)#key chain [キーチェーン名]
(config-keychain)#key [キー番号]
(config-keychain-key)#key-string [認証キー文字列]

HSRPの設定

HSRPの設定を行います。
今回はCML 無料版 (ver2.9) を使って設定をしていきます。
構成図はこちら↓

HSRPの設定_構成図.png

設定は以下の条件で行います。

  • Router1とRouter2のEth0/0でHSRPを有効にし、Router1は 192.168.1.1、Router2は 192.168.1.2 とする
  • 仮想IPアドレスは 192.168.1.254 とする
  • HSRPバージョンは2とする
  • Router1のEth0/1をオブジェクトトラッキング(line-protcol)する
  • プリエンプトを有効にし、30秒遅延させる
  • キーチェーンを使用したMD5認証を行う

コンフィグはこちらです。

Router1
# キーチェーンを使用したMD5認証
Router1(config)#key chain CISCO
Router1(config-keychain)#key 1
Router1(config-keychain-key)#key-strin
Router1(config-keychain-key)#key-string cisco
Router1(config-keychain-key)#exit
Router1(config-keychain)#exit
# オブジェクトトラッキングの指定
Router1(config)#track 1 interface Ethernet0/1 line-protocol
Router1(config-track)#exit
# HSRPの設定
Router1(config)#interface Ethernet0/0
Router1(config-if)#ip address 192.168.1.1 255.255.255.0
Router1(config-if)#no shutdown
Router1(config-if)#standby version 2 #HSRPバージョンの指定
Router1(config-if)#standby 1 ip 192.168.1.254 #仮想IPアドレスの設定
Router1(config-if)#standby 1 preempt delay minimum 30 #プリエンプトの設定
Router1(config-if)#standby 1 priority 110 #プライオリティ値の設定
Router1(config-if)#standby 1 authentication md5 key-chain CISCO #キーチェーンの設定
Router1(config-if)#standby 1 track 1 decrement 20 #オブジェクトトラッキングの設定
Router2
# キーチェーンを使用したMD5認証
Router1(config)#key chain CISCO
Router1(config-keychain)#key 1
Router1(config-keychain-key)#key-strin
Router1(config-keychain-key)#key-string cisco
Router1(config-keychain-key)#exit
Router1(config-keychain)#exit
# HSRPの設定
Router1(config)#interface Ethernet0/0
Router1(config-if)#ip address 192.168.1.2 255.255.255.0
Router1(config-if)#no shutdown
Router1(config-if)#standby version 2 #HSRPバージョンの指定
Router1(config-if)#standby 1 ip 192.168.1.254 #仮想IPアドレスの設定
Router1(config-if)#standby 1 preempt delay minimum 30 #プリエンプトの設定
Router1(config-if)#standby 1 authentication md5 key-chain CISCO #キーチェーンの設定

Router1とRouter2のキーチェーン名はどちらもCISCOにしていますが、スタンバイグループ同士のルータでここを合わせる必要はありません。
合わせる必要があるのはキー番号(key)と文字列(key-string)です。

ちなみにRouter1でインターフェイストラッキングの設定を行おうと思ったのですが私の環境では対象のコマンドがなかったため設定できませんでした。
CMLが無料版だからなのかバージョンによるものなのか、そもそもCMLでは対応していないのかは未確認です。

インターフェイストラッキング設定の有無
Router1(config-if)#standby 1 ?
  authentication  Authentication
  follow          Name of HSRP group to follow
  ip              Enable HSRP IPv4 and set the virtual IP address
  ipv6            Enable HSRP IPv6
  mac-address     Virtual MAC address
  name            Redundancy name string
  preempt         Overthrow lower priority Active routers
  priority        Priority level
  timers          Hello and hold timers
  track           Priority tracking

Router1(config-if)#standby 1 track ?
  <1-32767>  Tracked object number

Router1(config-if)#standby 1 track

HSRPの状態確認

ではHSRPの状態を確認していきます。
まずは簡易表示で確認するコマンドです。

Router1のHSRP状態確認(簡易表示)
Router1#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Et0/0       1    110 P Active  local           192.168.1.2     192.168.1.254
Router1#

Priが110となっており、StateがActiveとなっていることが確認できます。ActiveがlocalとなっていることからもRouter1がアクティブルータに選出されていることが確認できます。
Virtual IPを確認すると仮想IPアドレス 192.168.1.254 で設定されていることが確認できます。

Router2も確認してみましょう。

Router2のHSRP状態確認(簡易表示)
Router2#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Et0/0       1    100   Standby 192.168.1.1     local           192.168.1.254
Router2#

こちらはStateがStandbyとなっているのでRouter2はスタンバイとなっています。
Activeは 192.168.1.1 のルータなのでこれはつまりRouter1がアクティブルータであることを示しています。

次はbriefを付けないで確認してみます。

Router1のHSRP状態確認
Router1#show standby 
Ethernet0/0 - Group 1 (version 2) #HSRPバージョン
  State is Active #ステータス
    8 state changes, last state change 1d06h
  Virtual IP address is 192.168.1.254 #仮想IPアドレス
  Active virtual MAC address is 0000.0c9f.f001 (MAC In Use) #仮想MACアドレス
    Local virtual MAC address is 0000.0c9f.f001 (v2 default)
  Hello time 3 sec, hold time 10 sec #Helloパケットの送信間隔とダウンと見なすまでの時間
    Next hello sent in 0.528 secs
  Authentication MD5, key-chain "CISCO" #認証設定
  Preemption enabled, delay min 30 secs #プリエンプト設定
  Active router is local
  Standby router is 192.168.1.2, priority 100 (expires in 8.480 sec) #スタンバイルータのIPアドレス
  Priority 110 (configured 110) #現在のプライオリティ値(設定値)
    Track object 1 state Up decrement 20 #オブジェクトトラッキング設定
  Group name is "hsrp-Et0/0-1" (default)
  FLAGS: 1/1
Router1#

オブジェクトトラッキングの設定に絞って確認したい場合は以下のコマンドを実行します。

オブジェクトトラッキングの確認
Router1#show track 
Track 1
  Interface Ethernet0/1 line-protocol
  Line protocol is Up
    2 changes, last change 1d06h
  Tracked by:
    HSRP Ethernet0/0 1
Router1#

Ethernet0/1 をラインプロトコルで監視しており、現在はアップしていることが確認できます。
Tracked by:でEthernet0/0に適用しているHSRPスタンバイグループ1に適用されていることも確認できます。

Router2のHSRP状態を確認します。

Router2のHSRP状態確認
Router2#show standby 
Ethernet0/0 - Group 1 (version 2)
  State is Standby
    7 state changes, last state change 00:00:11
  Virtual IP address is 192.168.1.254
  Active virtual MAC address is 0000.0c9f.f001 (MAC Not In Use)
    Local virtual MAC address is 0000.0c9f.f001 (v2 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 0.176 secs
  Authentication MD5, key-chain "CISCO"
  Preemption enabled, delay min 30 secs
  Active router is 192.168.1.1, priority 110 (expires in 9.456 sec) #アクティブルータのIPアドレスとプライオリティ値
    MAC address is aabb.cc00.0500
  Standby router is local
  Priority 100 (default 100)
  Group name is "hsrp-Et0/0-1" (default)
  FLAGS: 0/1
Router2#

オブジェクトトラッキングのダウン検知

Router1で設定しているオブジェクトトラッキングがダウンを検知するとどのような状態になるのかを見てみます。

HSRPの切り替わり
Router1(config)#int eth0/1
Router1(config-if)#shut  
Router1(config-if)#
*Sep 17 12:39:36.858: %TRACK-6-STATE: 1 interface Et0/1 line-protocol Up -> Down
Router1(config-if)#
*Sep 17 12:39:38.847: %LINK-5-CHANGED: Interface Ethernet0/1, changed state to administratively down
*Sep 17 12:39:39.847: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1, changed state to down
Router1(config-if)#end
Router1#
*Sep 17 12:40:10.396: %HSRP-5-STATECHANGE: Ethernet0/0 Grp 1 state Active -> Speak
Router1#
*Sep 17 12:40:22.365: %HSRP-5-STATECHANGE: Ethernet0/0 Grp 1 state Speak -> Standby
Router1#show standby 
Ethernet0/0 - Group 1 (version 2)
  State is Standby
    7 state changes, last state change 00:04:03
  Virtual IP address is 192.168.1.254
  Active virtual MAC address is 0000.0c9f.f001 (MAC Not In Use)
    Local virtual MAC address is 0000.0c9f.f001 (v2 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 0.560 secs
  Authentication MD5, key-chain "CISCO"
  Preemption enabled, delay min 30 secs
  Active router is 192.168.1.2, priority 100 (expires in 10.240 sec)
    MAC address is aabb.cc00.0400
  Standby router is local
  Priority 90 (configured 110)
    Track object 1 state Down decrement 20
  Group name is "hsrp-Et0/0-1" (default)
  FLAGS: 0/1
Router1#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Et0/0       1    90  P Standby 192.168.1.2     local           192.168.1.254
Router1#

ラインプロトコルのダウンを検知(12:39:39)してから30秒後にスタータスがSpeakに変わり(12:40:10)、その後Standbyに選出されたことが確認できます。
show standbyの結果を見てもプライオリティ値が90になっていることが確認でき、アクティブルータが192.168.1.2 つまりRouter2がアクティブルータに選出されています。

パケットを確認してみる

ここまで設定方法や挙動を確認できましたが、実際にHelloパケットにはどのような情報が載っていて、」
パケットはどのように流れているのか気になったので、CMLのパケットキャプチャ機能を使って確認してみます。

アクティブルータが送信するHelloパケットから。
HSRP_Helloパケット(Active).png

SourceのMACアドレスは0000.0C9F.Fxxxをベースとしてスタンバイグループ番号が1なので0000.0C9F.F001となっていて、DestinationはHSRPバージョン2のマルチキャストアドレス 224.0.0.102 に送信しますので、0100.5e00.0066になります。
マルチキャストアドレスをMACアドレスに変換する方法はここでは詳しくは触れませんが、詳細が気になる方はこちらを参考にしてみてください。
https://www.infraexpert.com/study/multicastz04.html

HSRPのステータス情報では以下の情報を確認できます。

  • HSRPバージョン
  • スタンバイグループ番号
  • プライオリティ値
  • 仮想IPアドレス
  • MD5認証番号

HSRP_Helloパケット(Active)➁.png

このパケットをRouter2が受け取り、スタンバイグループ番号/仮想IPアドレス/認証情報を確認して自身宛なのかを判断するという仕組みですね。

終わり

HSRPの設定から状態確認、オブジェクトトラッキングのダウンを検知した時の挙動まで確認して、Helloパケットの中身まで確認してみました。
ここまで改めてやってみて気づけたことは、オブジェクトトラッキングを設定した時はプリエンプトをアクティブルータとスタンバイルータに設定しないとACT/STBが切り替わらないということ。
これまでの私の認識ではプリエンプトはアクティブルータのみに設定すれば良いと思っていましたが、それはHSRPを動作させているインターフェースを監視しているときだけなんですね。

あとは、3台目をスタンバイグループに追加した時はどういう状態になるのかとかHelloパケットってどうなるのとか、MHSRPで構成してみたいとかありますが、それはまたの機会にしようと思います。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?