はじめに
Cisco 機器でゲートウェイを冗長化する場合、最初の選択肢になるのが HSRP(Hot Standby Router Protocol)です。2 台以上のルーターやレイヤー 3 スイッチで仮想 IP アドレスと仮想 MAC アドレスを共有し、ホスト側の設定を変えずに障害時の切り替えを実現します。
設定自体は standby コマンド 1 行から始められますが、既定値のまま構築すると想定と異なる動作になる箇所があります。とくに切り戻しの扱いとバージョンの選択は、構築後に気づくと影響範囲が大きくなる部分です。
- HSRP の用語と、Active が選出されるまでの状態遷移
- HSRPv1 と HSRPv2 の違い、およびバージョン変更時に発生する事象
standbyコマンドによる設定手順と各パラメータの既定値- priority と preempt の設計方針、切り戻し時の通信断を抑える方法
- トラッキングによる上位回線の監視と、
show standbyの読み方
結論から述べます。HSRP では preempt が既定で無効です。priority を高く設定した機器が復旧しても、そのままでは Active に戻りません。また 既定のバージョンは v1 で、稼働中に v2 へ変更すると仮想 MAC アドレスが変わるため各グループが再初期化されます。この 2 点を設計の初期段階で決めておくと、後からの手戻りを避けられます。
本記事の設定例は、次の構成を前提にしています。
| 項目 | 値 |
|---|---|
| セグメント | 192.168.100.0/24 |
| 仮想 IP アドレス | 192.168.100.254 |
| R1(Active 想定)の実 IP アドレス | 192.168.100.251 |
| R2(Standby 想定)の実 IP アドレス | 192.168.100.252 |
| HSRP グループ番号 | 1 |
| バージョン | 2(v1 との差分は本文で明示) |

HSRP とは(用語と VRRP との位置づけ)
HSRP は、複数のルーターが協調して 1 台の仮想ルーターを構成し、ホストからは単一のゲートウェイに見せるプロトコルです。実際にパケットを転送するのは常に 1 台で、残りは待機します。
HSRP が担う役割
RFC 2281 では、HSRP の目的が明確に示されています。ホストが単一のルーターを使っているように見せかけ、実際に使っている最初のホップのルーターが停止しても接続性を維持することです。動的なルーター探索の仕組みを置き換えるものではなく、動的探索に対応しないホストに対してフェイルオーバーを提供する位置づけと説明されています。
通信の仕組みは次のとおりです。
参考: RFC 2281 Cisco Hot Standby Router Protocol (HSRP)
“The standby protocol runs on top of UDP, and uses port number 1985”
(スタンバイプロトコルは UDP 上で動作し、ポート番号 1985 を使用します)
https://www.rfc-editor.org/rfc/rfc2281.html
パケットはマルチキャストアドレス 224.0.0.2 宛に TTL 1 で送信されます。送信元には仮想 IP アドレスではなく各ルーターの実 IP アドレスが使われます。HSRP ルーターどうしが相手を識別するためです。
TTL の扱いは VRRP と対照的です。VRRP が TTL 255 を要求し、255 以外を破棄することで経路越えを防ぐのに対し、HSRP は TTL 1 で送出することで同じ目的を達成しています。方式は異なりますが、いずれも同一セグメント内での動作を前提とする点は共通です。
押さえておきたい用語
| 用語 | 意味 |
|---|---|
| Active ルーター | 仮想ルーターとして実際にパケットを転送しているルーター |
| Standby ルーター | Active が停止した際に引き継ぐ、第 1 の予備ルーター |
| スタンバイグループ | 1 つの仮想ルーターを共同で構成する HSRP ルーターの集合 |
| 仮想 IP アドレス | ホストがデフォルトゲートウェイとして設定するアドレス |
| 仮想 MAC アドレス | グループ番号から一意に決まる MAC アドレス |
| Hello Time | Hello メッセージを送信する間隔 |
| Hold Time | Hello を受信しなくなってから、送信元が停止したと判断するまでの時間 |
VRRP の Master / Backup に対して、HSRP では Active / Standby と呼びます。3 台以上で構成した場合の扱いにも違いがあります。HSRP で Standby と呼ばれるのは第 1 の予備 1 台のみで、3 台目以降は Listen 状態で待機します。
メッセージの種類と 6 つの状態
VRRP のメッセージが Advertisement の 1 種類だけであるのに対し、HSRP には 3 種類のメッセージがあります。
| メッセージ | 用途 |
|---|---|
| Hello | 自身が稼働中であり、Active または Standby になり得ることを通知する |
| Coup | Active になることを希望する際に送信する |
| Resign | Active の役割を降りる際に送信する |
Coup と Resign の存在が、HSRP の切り替わりを理解するうえでの要点になります。優先度の高いルーターが Active を奪う動作は Coup として明示的に通知され、Active が役割を降りる場合は Resign が送出されます。タイマー満了を待つ以外の経路で状態が変わるため、切り替わりの速度がケースによって変わります。
各ルーターが持つ状態は次の 6 つです。
| 状態 | 内容 |
|---|---|
| Initial | 開始状態。HSRP が動作していない。設定変更時やインターフェースの起動時に入る |
| Learn | 仮想 IP アドレスをまだ把握しておらず、Active からの Hello も受信していない |
| Listen | 仮想 IP アドレスは把握しているが、Active でも Standby でもない |
| Speak | 定期的に Hello を送信し、Active と Standby の選出に参加している |
| Standby | 次に Active になる候補 |
| Active | 実際にパケットを転送している |
show standby で表示されるのはこのうちの 1 つです。設定直後に Listen 状態から進まない場合は、仮想 IP アドレスの不一致や認証の不整合が疑われます。Speak 状態に入れるのは仮想 IP アドレスを把握しているルーターに限られるためです。
なお、Hello タイマーにはジッターを与えることが規定されています。複数のルーターが同時に Hello を送出して輻輳するのを避けるための仕組みです。
Cisco 独自プロトコルという位置づけ
HSRP は Cisco 独自プロトコルです。RFC 2281 として文書化されていますが、カテゴリーは Informational(情報提供)であり、インターネット標準を規定するものではないと明記されています。RFC 化された時点で、同じ課題に取り組む標準化トラックのプロトコル(のちの VRRP)を策定するワーキンググループが並行して活動していたことも記載されています。
この位置づけから、実務上は次の判断になります。
- Cisco 機器どうしの構成
-
HSRP が第一候補になります。SSO との連携など、Cisco 実装ならではの機能を利用できます
- 他社機器が混在する構成
-
HSRP は選択できません。標準規格である VRRP を使用します
HSRP と VRRP のどちらを選ぶかという判断は、機器構成だけでなく可用性要件やバージョン制約も関係します。選定の観点は関連記事『HSRP と VRRP の違い|FHRP の選定基準と判断の順序』で整理しています。
HSRPv1 と HSRPv2 の違い
HSRP には v1 と v2 があり、Cisco IOS の既定は v1 です。両者は相互接続できないため、構築時にどちらを使うかを決めておく必要があります。
グループ番号とマルチキャストアドレス
主な差分を整理します。
| 項目 | HSRPv1 | HSRPv2 |
|---|---|---|
| グループ番号の範囲 | 0〜255 | 0〜4095 |
| マルチキャストアドレス(IPv4) | 224.0.0.2 | 224.0.0.102 |
| マルチキャストアドレス(IPv6) | — | FF02::66 |
| 仮想 MAC アドレス(IPv4) | 0000.0C07.ACxy | 0000.0C9F.F000〜0000.0C9F.FFFF |
| 仮想 MAC アドレス(IPv6) | — | 0005.73A0.0000〜0005.73A0.0FFF |
| パケット形式 | 固定長 | TLV(Type-Length-Value)形式 |
| ミリ秒タイマーの通知 | 通知・学習しない | 通知・学習する |
| MD5 認証 | 非対応 | 対応 |
参考: Cisco Network Services Configuration Guide / HSRP Version 2
“HSRP version 2 permits an expanded group number range, 0 to 4095”
(HSRP バージョン 2 では、グループ番号の範囲が 0〜4095 に拡張されています)
https://www.cisco.com/c/en/us/td/docs/routers/ios/config/17-x/ntw-servs/m_fhp-hsrp-v2.html
グループ番号が拡張された理由は、公式ドキュメントで明確に説明されています。サブインターフェース上でグループ番号を VLAN 番号と一致させられるようにするためです。1 つのインターフェースで 4096 グループを構成できるという意味ではない点も、あわせて注記されています。
VLAN 番号とグループ番号を揃える運用は、設計書と実機設定の照合が容易になるため、多数の VLAN を扱う環境では実用的な効果があります。
マルチキャストアドレスの変更にも理由があります。224.0.0.102 を使用することで、CGMP の leave 処理を HSRP と同時に有効化できるようになりました。v1 の 224.0.0.2 は全ルーター宛の予約アドレスであり、CGMP との併用に制約がありました。
ミリ秒単位のタイマー値を通知・学習する点も v2 の改善です。公式ドキュメントでは、この変更によってすべてのケースで HSRP グループの安定性が確保されると説明されています。
仮想 MAC アドレスの体系
仮想 MAC アドレスは、グループ番号から一意に決まります。
| バージョン | フォーマット | グループ 1 の場合 |
|---|---|---|
| HSRPv1 | 0000.0C07.ACxy(xy はグループ番号の 16 進数) | 0000.0C07.AC01 |
| HSRPv2 | 0000.0C9F.Fxxx(xxx はグループ番号の 16 進数) | 0000.0C9F.F001 |
グループ番号を 16 進数に変換するだけで期待値が求められるため、show standby の出力やパケットキャプチャの結果を計算で検証できます。VLAN 100 に合わせてグループ番号を 100 とした場合、v2 の仮想 MAC アドレスは 0000.0C9F.F064 になります。
VRRP の仮想 MAC(0000.5E00.01xx)とは先頭のベンダー部分から異なるため、キャプチャした MAC アドレスを見ればどちらのプロトコルが動作しているかを判別できます。
なお、Advanced Peer-to-Peer Networking のように MAC アドレスに依存する実装では、自動生成された仮想 MAC アドレスが問題になる場合があります。この場合の対処と、焼き付け MAC アドレスを使う standby use-bia の扱いは、別記事で詳しく扱う予定です。
バージョン変更時に発生する再初期化
構築済みの環境を扱ううえで、もっとも注意したい仕様です。HSRP のバージョンを変更すると仮想 MAC アドレスが変わるため、各グループが再初期化されます。
つまり、稼働中の環境で standby version 2 を投入すると、その時点で通信断が発生します。設定コマンドとしては 1 行ですが、影響は次のように広がります。
- グループが再初期化され、Active / Standby の選出がやり直しになります
- 仮想 MAC アドレスが変わるため、配下ホストの ARP テーブルとスイッチの MAC アドレステーブルの更新が必要になります
- 対向機器のバージョンを変更するまでの間、両機器が Active になる可能性があります
v1 と v2 は相互接続できません。v2 のパケットを v1 の機器が受信した場合、type フィールドが version フィールドとして解釈され、その後は無視されます。バージョン変更は両機器で実施する必要があり、作業中は片側だけが正常に動作する期間が生じます。
新規構築であれば、最初から v2 を選択しておくことをおすすめします。既存環境の移行では、メンテナンス時間帯を確保したうえで両機器を連続して変更する手順が現実的です。
基本設定の手順
HSRP の設定はインターフェースコンフィグモードで行います。最小構成から段階的にパラメータを追加していく形で整理します。
最小構成の設定
動作させるだけであれば、仮想 IP アドレスを指定する 1 行で足ります。
! R1(Active 想定)
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
standby 1 ip 192.168.100.254
!
! R2(Standby 想定)
interface GigabitEthernet0/1
ip address 192.168.100.252 255.255.255.0
standby 1 ip 192.168.100.254standby 1 ip 192.168.100.254 の 1 がグループ番号、続くアドレスが仮想 IP アドレスです。この状態で両機とも priority は既定の 100 となり、実 IP アドレスが大きい R2 が Active になります。R1 を Active にしたい場合は priority の設定が必要です。
なお、VRRP のように仮想 IP アドレスを実インターフェースアドレスと同じ値にする「IP アドレス所有者」という概念は HSRP にはありません。仮想 IP アドレスは常に独立したアドレスとして設定します。
バージョンと priority の設定
実運用の構成に必要なパラメータを追加します。
! R1(Active 想定)
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
standby version 2
standby 1 ip 192.168.100.254
standby 1 priority 110
standby 1 preempt
!
! R2(Standby 想定)
interface GigabitEthernet0/1
ip address 192.168.100.252 255.255.255.0
standby version 2
standby 1 ip 192.168.100.254
standby 1 priority 100
standby 1 preemptstandby version はインターフェース単位の設定で、グループ番号を指定しません。同一インターフェース上の全グループに適用されます。バージョンを変更すると各グループが再初期化されるため、グループを作成する前に投入しておく順序が安全です。
タイマーと認証の設定
切り替わり時間を短縮したい場合や、セキュリティ要件がある場合に追加します。
interface GigabitEthernet0/1
standby 1 timers msec 300 msec 900
standby 1 authentication md5 key-string <キー文字列>standby timers は Hello 時間と Hold 時間を順に指定します。ミリ秒単位で指定する場合は msec を付けます。Hold 時間は Hello 時間の 3 倍以上を目安にすると、パケットロスによる誤検知を抑えられます。
ミリ秒タイマーを使う場合は v2 を選択することをおすすめします。v1 ではミリ秒単位のタイマー値が通知・学習されないためです。v2 ではこの値が Hello に含まれるため、対向機器と値が揃っていることを確認できます。
MD5 認証も v2 でのみ利用できます。v1 のプレーンテキスト認証は設定ミスの検出が主目的で、セキュリティ対策としての効果は限定的です。
主なパラメータの既定値
構築前に把握しておきたい既定値を整理します。
| パラメータ | 既定値 | 設定コマンド |
|---|---|---|
| バージョン | 1 | standby version {1 | 2} |
| priority | 100 | standby <group> priority <値> |
| preempt | 無効 | standby <group> preempt |
| Hello 時間 | 3 秒 | standby <group> timers |
| Hold 時間 | 10 秒 | standby <group> timers |
| preempt delay の各オプション | 0 秒 | standby <group> preempt delay |
| グループ初期化の最小遅延 | 1 秒 | standby delay minimum |
| リロード後の初期化遅延 | 5 秒 | standby delay reload |
注意したいのが、既定値のうち 3 つが VRRP と逆または異なる点です。preempt の既定は VRRP が有効に対して HSRP は無効、Hello 間隔は VRRP が 1 秒に対して HSRP は 3 秒、切り替わりまでの待機時間も VRRP が約 3.6 秒に対して HSRP は 10 秒になります。VRRP 側の仕様は関連記事『VRRP とは|Master 選出と priority 設計の落とし穴』で整理しています。
両プロトコルを扱う環境では、「FHRP の既定はこう」という思い込みが設計ミスにつながります。既定値は必ずプロトコルごとに確認することをおすすめします。
priority と preempt の設計
HSRP の設計で判断が必要になるのは、この 2 つのパラメータです。とくに preempt は既定が無効であるため、設定しないという選択も明示的な設計判断になります。
Active が決まる条件
Active の選出は次の順序で決まります。
- priority が高いルーターが Active になります(既定値は 100)
- priority が同値の場合、実 IP アドレスが大きいルーターが Active になります
ここで押さえておきたいのが、priority が高いだけでは Active になれないという点です。既に Active が存在する状態で priority の高いルーターが起動しても、preempt が有効でなければ Listen または Standby にとどまります。
先ほどの最小構成の例で、後から R1 に standby 1 priority 110 だけを投入しても、R2 が Active のままになるのはこのためです。
preempt が既定で無効であることの影響
preempt は、priority の高いルーターが現在の Active を置き換える動作を有効にする設定です。HSRP では既定で無効であり、明示的に standby <group> preempt を投入する必要があります。
この既定値には利点と欠点があります。
| preempt の状態 | 動作 | 向いている要件 |
|---|---|---|
| 無効(既定) | 障害後に切り替わったら、そのまま新 Active が継続する | 切り替わりの回数を最小化したい |
| 有効 | 復旧した高優先度機が Active に戻る | Active 機を固定し、構成を設計どおりに保ちたい |
無効のままにすると、フラッピングによる通信断の繰り返しを避けられます。一方で、どちらが Active かが障害の履歴に依存するため、運用が長期化すると設計書と実態が乖離します。トラフィックの偏りや帯域設計の前提が崩れる可能性もあります。
設計方針としては、Active 機を固定する要件があるなら preempt を有効にし、切り戻しの通信断を preempt delay で緩和する組み合わせを推奨します。preempt を無効にする場合は、どちらが Active でも問題ない構成であることを設計時に確認しておく必要があります。

復旧直後の切り戻しを避ける preempt delay
preempt を有効にした場合、注意したい事象があります。再起動した機器は、ルーティングテーブルが完成する前に Active に戻ってしまうという問題です。
Cisco の公式リファレンスでも、この点が明確に説明されています。機器が起動した直後は完全なルーティングテーブルを持っておらず、preempt が設定されていると Active になるにもかかわらず適切なルーティングサービスを提供できません。実際に preempt が発生するまでの遅延を設定することで、この問題を解決できるとされています。
参考: Cisco IOS First Hop Redundancy Protocols Command Reference
“Solve this problem by configuring a delay before the preempting device actually preempts the currently active device”
(現在の Active を実際に置き換えるまでの遅延を設定することで、この問題を解決できます)
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/command/fhp-cr-book/fhp-s2.html
standby preempt delay には 3 つのオプションがあり、いずれも既定値は 0 秒です。
| オプション | 動作 |
|---|---|
minimum <秒> | 機器の再起動時点から、Active を引き継ぐまでの最小遅延時間を指定する |
reload <秒> | 機器のリロード後にのみ preempt を許可する遅延を指定する。起動時の安定化が目的 |
sync <秒> | IP 冗長化クライアントによる preempt の抑止を許容する最大秒数を指定する |
設定例です。
! R1(Active 想定): 復旧後 120 秒待ってから Active に戻る
interface GigabitEthernet0/1
standby 1 preempt delay minimum 120遅延時間は、その機器で動作しているルーティングプロトコルの収束時間を基準に決めます。BGP のフルルートを受信する構成では数分単位が必要になる場合もあり、既定の 0 秒では確実に不足します。
なお、reload オプションの遅延はリロード後の最初のインターフェースアップイベントにのみ適用されます。この初期遅延の後は既定の動作に戻る点も、公式リファレンスに明記されています。
混同しやすい 2 つの delay コマンド
名前が似ていて動作が異なるコマンドがあります。
| コマンド | 対象 | 動作 |
|---|---|---|
standby <group> preempt delay | グループ単位 | preempt の実行を遅延させる |
standby delay minimum <秒> reload <秒> | インターフェース単位 | HSRP グループの初期化そのものを遅延させる |
後者は preempt が設定されていない場合にも効果があります。公式ドキュメントでは、preempt を設定していなくても、リロードして復帰した旧 Active が Active の役割を再開してしまうケースがあると説明されています。この場合に standby delay minimum reload でグループの初期化を遅らせることで、パケットが流れるようになるまでの時間を確保できます。
このコマンドは、ミリ秒単位のタイマーを設定している場合、およびスイッチの VLAN インターフェースに HSRP を設定している場合に推奨されています。多くの構成では既定値で十分とされていますが、該当する環境では明示的な設定を検討する価値があります。
priority 値の設計指針
トラッキングとの併用を前提にすると、priority 値の決め方には注意点があります。
- priority 差はトラッキングの減算値より大きくとる。差が減算値と同じだと、障害検知後も両機が同値となり切り替わりません
- 既定値の 100 は Standby 側に割り当てる。Active 側だけを 110 や 120 に変更すると、設定変更が 1 台で済みます
- 3 台以上の構成では値を分散させる。近接した値にすると、複数台の障害時に選出が意図どおりに進まない場合があります
減算値との関係については、次のセクションのトラッキング設定で具体的に扱います。
トラッキングによる上位回線の監視
HSRP が標準で監視するのは、HSRP を設定したインターフェース自身の状態だけです。上位回線が切れても、LAN 側のインターフェースがアップしている限り Active は Active のままになります。この課題に対応する仕組みがトラッキングです。
2 つのトラッキング方式
Cisco IOS には 2 つの書き方があります。
| 方式 | 構文 | 監視できる対象 |
|---|---|---|
| インターフェーストラッキング | standby <group> track <インターフェース> [decrement <値>] | 指定インターフェースの回線プロトコル状態 |
| オブジェクトトラッキング | track <番号> ... + standby <group> track <番号> decrement <値> | 経路の到達性、IP ルーティングの可否、IP SLA の結果など |
インターフェーストラッキングは記述が短く済みますが、監視できるのは回線プロトコルのダウンのみです。上流機器が生きたまま経路を失うケースには対応できません。
オブジェクトトラッキングは track オブジェクトを定義してから HSRP に紐づける形式で、監視対象を柔軟に選べます。新規構築ではこちらを推奨します。
インターフェーストラッキングの設定例
WAN 側インターフェース(GigabitEthernet0/0)の障害を検知して切り替える構成です。
! R1(Active 想定)
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
standby version 2
standby 1 ip 192.168.100.254
standby 1 priority 110
standby 1 preempt
standby 1 track GigabitEthernet0/0 decrement 20decrement 20 を明示している点が要点です。次のセクションで理由を説明します。
オブジェクトトラッキングの設定例
デフォルトルートの到達性を監視する構成です。
! 監視オブジェクトの定義
track 100 ip route 0.0.0.0 0.0.0.0 reachability
!
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
standby version 2
standby 1 ip 192.168.100.254
standby 1 priority 110
standby 1 preempt
standby 1 track 100 decrement 20インターフェースの IP ルーティング能力を監視する書き方もあります。
track 100 interface GigabitEthernet0/0 ip routingこの場合、インターフェースがアップしているだけでなく、IP アドレスが設定されており IP ルーティングが有効であることまで確認されます。回線プロトコルのみを見る方式より、検知できる障害の範囲が広くなります。
減算値と priority 差の設計
トラッキング設計でもっとも見落とされやすい部分です。
減算値を明示しない場合、公式ドキュメントでは次のように動作すると説明されています。減算値を明示的に設定した場合はその値だけ減少し、明示しない場合はダウンしたインターフェースごとに 10 ずつ減少します。いずれの場合も、複数のオブジェクトがダウンすると減算は累積します。
ここで問題になるのが、priority 差を 10 に設定した一般的な構成です。
| 状態 | R1 の priority | R2 の priority | Active |
|---|---|---|---|
| 正常時 | 110 | 100 | R1 |
| R1 の上位回線ダウン(減算値 10) | 100 | 100 | R1 のまま |
| R1 の上位回線ダウン(減算値 20) | 90 | 100 | R2 に切り替わり |
priority 差と減算値が同じだと、両機が同値になるだけで切り替わりません。HSRP は priority が同値の場合に実 IP アドレスの大きいほうを選びますが、既に Active である機器はそのまま Active を維持します。
設計の指針は次のとおりです。
- 減算値は priority 差より大きくする。差が 10 なら減算値は 20 以上にします
- 複数のオブジェクトを監視する場合は累積を考慮する。すべてダウンしたときの合計減算値が priority を下回ると、priority が極端に低い値になります
- 対向機側にも同じ設計を入れる。R2 側の上位回線が落ちている状態で Active に昇格する事故を防げます
なお、監視対象が復旧すると同じ値だけ priority が加算されて元に戻ります。切り戻しを発生させるには、対向機側で preempt が有効になっている必要があります。
VRRP では同じ課題に対して vrdst や shutdown trigger といった別方式が用意されており、メーカーごとに実装が分かれます。方式の違いは関連記事『VRRP とは|Master 選出と priority 設計の落とし穴』で整理しています。

priority を下げずにグループを停止する方法
減算方式では、priority の計算を設計する手間がかかります。これを避ける選択肢として、shutdown オプションがあります。
interface GigabitEthernet0/1
standby 1 track 100 shutdown監視オブジェクトがダウンした際、priority を減算するのではなく HSRP グループ自体を Init 状態にする動作です。priority の大小関係を計算する必要がなくなるため、複数グループを運用する環境では設定がシンプルになります。
ただし、グループが Init 状態になると Hello の送信も停止するため、対向機は Hold 時間の満了を待って Active に昇格します。減算方式より切り替わりが遅くなる点は考慮が必要です。
動作確認と切り分け
設定後の確認は show standby が基点になります。出力の各行に設計値が反映されているかを順に確認します。
show standby の読み方
Active 機の出力例です。
R1# show standby
GigabitEthernet0/1 - Group 1 (version 2)
State is Active
2 state changes, last state change 00:05:12
Virtual IP address is 192.168.100.254
Active virtual MAC address is 0000.0c9f.f001 (MAC In Use)
Local virtual MAC address is 0000.0c9f.f001 (v2 default)
Hello time 3 sec, hold time 10 sec
Next hello sent in 1.024 secs
Preemption enabled
Active router is local
Standby router is 192.168.100.252, priority 100 (expires in 8.512 sec)
Priority 110 (configured 110)
IP redundancy name is "hsrp-Gi0/1-1" (default)確認したい箇所を整理します。
| 行 | 確認内容 |
|---|---|
Group 1 (version 2) | グループ番号とバージョンが対向機と一致しているか |
State is Active | 期待どおりの状態か。Listen が続く場合は設定不一致を疑う |
Virtual IP address | 両機で同一の値になっているか |
Active virtual MAC address | MAC In Use の表示があるか。グループ番号から計算した値と一致するか |
Hello time / hold time | 設計値どおりか。対向機と揃っているか |
Preemption enabled | 有効化の意図があるか。既定は無効のため表示されない |
Standby router is | 対向機が認識されているか。unknown の場合は Hello が届いていない |
Priority 110 (configured 110) | 括弧内が設定値、手前が現在値。値が異なる場合はトラッキングが作動している |
もっとも重要なのが Priority 行の読み方です。括弧内の configured が設定値、その手前が現在の実効値です。トラッキングが作動していると、この 2 つの値に差が生じます。
トラッキングを設定している場合、出力の末尾に監視状態が追加されます。
Priority 90 (configured 110)
Track object 100 state Down decrement 20この例では、設定値 110 から 20 が減算されて 90 になっています。設計どおりの減算が起きているかを、この 2 行で確認できます。
複数台の構成では show standby brief が便利です。1 行 1 グループで表示され、preempt が設定されているグループには P が表示されます。
状態が Active にならない場合の確認順序
意図した状態にならない場合、次の順序で切り分けると原因に到達しやすくなります。
仮想 IP アドレスを把握しているものの、Active でも Standby でもない状態です。3 台以上で構成している場合は正常な動作ですが、2 台構成であれば設定を確認します。
- 対向機の priority が自機より高くないか
- グループ番号が両機で一致しているか
Hello が相互に届いていない状態です。次を確認します。
- バージョンが両機で一致しているか(v1 と v2 は相互接続できません)
- 認証設定が一致しているか
- VLAN やアクセスポートの設定に不整合がないか
- マルチキャストアドレス(v1 は 224.0.0.2、v2 は 224.0.0.102)が中間機器で遮断されていないか
Standby router is unknown と表示される場合自機は Active になっているが、対向機を認識できていない状態です。上記 2 と同じ原因が考えられます。片側のみ設定が完了している段階でも表示されるため、両機の設定完了後に再確認します。
preempt が有効になっているかを確認します。既定は無効のため、standby <group> preempt を投入していなければ切り替わりません。
デバッグ出力による確認
状態遷移の詳細を確認する場合は、デバッグを有効にします。
! 状態遷移とパケット送受信の確認
debug standby terse
! 確認後は必ず無効化する
undebug alldebug standby terse は状態変更とエラーのみを表示するため、本番機での一時的な確認にも比較的影響が小さい選択肢です。詳細なパケット単位の情報が必要な場合は debug standby packets を使いますが、Hello が 3 秒間隔で継続的に出力されるため、コンソール出力の負荷に注意が必要です。
ログに Coup メッセージが記録されている場合、対向機が priority の高さを理由に Active を奪った動作を示します。Resign メッセージであれば、Active 側が自発的に役割を降りた動作です。どちらのメッセージが出ているかで、切り替わりの原因を絞り込めます。
まとめ
HSRP は Cisco 独自のゲートウェイ冗長化プロトコルで、設定自体は standby コマンド 1 行から始められます。ただし preempt が既定で無効である点や、バージョン変更時にグループが再初期化される点など、既定値のまま構築すると想定と異なる動作になる箇所があります。設計段階でこれらを押さえておくことが、運用開始後の手戻りを防ぐことにつながります。
- HSRP は Cisco 独自プロトコルで、RFC 2281 は Informational 扱い
- preempt は既定で無効のため、切り戻しには明示的な設定が必要
- 既定バージョンは v1 で、変更すると各グループが再初期化される
- v1 と v2 は仮想 MAC もマルチキャストも異なり相互接続できない
- 復旧直後の切り戻しは preempt delay で収束時間を確保する
- トラッキングの減算値は priority 差より大きい値に設定する
show standbyの Priority 行で設定値と実効値の差を確認できる
以上、最後までお読みいただきありがとうございました。
