Cisco IOS HSRP 冗長化 仮想IP フェイルオーバー

デフォルトゲートウェイが1台だけの構成では、そのルータが障害でダウンした瞬間にネットワーク全体の通信が止まってしまいます。この問題を解決するのがHSRP(Hot Standby Router Protocol)です。

HSRPはCisco独自プロトコルで、2台以上のL3機器で仮想IPアドレスを共有することでデフォルトゲートウェイの冗長化を実現します。本記事では、HSRPの仕組み・設定例・フェイルオーバー検証・インターフェーストラッキング・HSRPv1とv2の違いまで体系的に解説します。

👷 現場での体験談

以前、L3スイッチを1台構成で運用している現場で、そのスイッチのソフトウェア更新作業のためにリブートした際、フロア全体が数分間インターネットに接続できなくなる事態になりました。

その後の設計見直しでHSRPを導入し、同じリブート作業をした際は切り替え時間が数秒でStandby機器がActiveに昇格し、業務への影響はほぼゼロでした。HSRPを設定しているかどうかで、メンテナンス作業の敷居が大きく変わることを実感しました。

HSRPの仕組み

HSRPでは、グループ内の複数のL3機器が1つの仮想IPアドレスを共有します。クライアントはその仮想IPをデフォルトゲートウェイとして設定するため、Active機器が切り替わっても設定変更は不要です。

🟢
Active(アクティブ)
現在のデフォルトGWとして動作。クライアントのトラフィックを実際に転送する
🟡
Standby(スタンバイ)
Helloパケットを監視。Activeが無応答になると自動でActiveに昇格する
🌐
仮想IP・仮想MAC
クライアントはこの仮想IPをGWに設定。障害時もクライアント設定変更不要

仮想MACアドレスについて

HSRPでは仮想IPだけでなく、仮想MACアドレスも使用します。クライアントのARPテーブルには仮想MACが登録されるため、Active機器が切り替わった際もクライアントがARP更新なしに通信を継続できます。

バージョン仮想MACアドレス形式マルチキャストアドレスグループ番号範囲
HSRPv10000.0C07.ACxx(xxがグループ番号)224.0.0.20〜255
HSRPv20000.0C9F.Fxxx(xxxがグループ番号)224.0.0.1020〜4095
ℹ HSRPはCisco独自プロトコル。マルチベンダー環境ではVRRPを使う HSRPはCisco独自プロトコルのため、対向機器がCisco以外の場合は使用できません。マルチベンダー環境では、業界標準のVRRP(Virtual Router Redundancy Protocol / RFC 5798)を検討してください。VRRPの設定はHSRPとよく似ており、standbyの代わりにvrrpコマンドを使います。
図1:HSRPのフェイルオーバーが起きる主な原因(現場経験ベース)

基本設定例

VLAN 10において2台のL3スイッチ(SW1・SW2)でHSRPグループ1を構成します。仮想IPは192.168.10.1、SW1をActiveに設定します。

機器実IP(SVI)仮想IPPriority役割
SW1192.168.10.2192.168.10.1110Active
SW2192.168.10.3192.168.10.1100Standby

SW1(Active側)の設定

SW1# configure terminal
SW1(config)# interface Vlan10
SW1(config-if)# ip address 192.168.10.2 255.255.255.0
SW1(config-if)# standby 1 ip 192.168.10.1      ← 仮想IP(クライアントのGWに設定)
SW1(config-if)# standby 1 priority 110          ← デフォルト100より高い → Active
SW1(config-if)# standby 1 preempt               ← 復旧後にActiveへ自動で戻る
SW1(config-if)# no shutdown

SW2(Standby側)の設定

SW2# configure terminal
SW2(config)# interface Vlan10
SW2(config-if)# ip address 192.168.10.3 255.255.255.0
SW2(config-if)# standby 1 ip 192.168.10.1      ← 仮想IPは同じ
SW2(config-if)# standby 1 priority 100          ← デフォルト値(Activeに勝てない)
SW2(config-if)# standby 1 preempt               ← 将来的にpriorityを上げた場合に備えて設定
SW2(config-if)# no shutdown
ℹ preemptとpriorityの関係 preemptはpriority が高い機器が復旧した際に自動でActiveに昇格するための設定です。preemptを設定していないと、Activeが復旧してもStandbyのままになります。本番環境では必ずActive側にpreemptを設定し、意図したとおりの役割に戻ることを確認してください。

状態確認コマンド

SW1# show standby brief
(SW1の正常時出力)
                     P indicates configured to preempt.
                     |
Interface   Grp Pri P State    Active          Standby         Virtual IP
Vl10        1   110 P Active   local           192.168.10.3    192.168.10.1
                    ↑          ↑               ↑
                 preempt設定   自分がActive    相手のIPが表示

(SW1がダウンしてSW2がActiveに昇格した後のSW2の出力)
Interface   Grp Pri P State    Active          Standby         Virtual IP
Vl10        1   100 P Active   local           unknown         192.168.10.1
                               ↑
                           Standbyがなくなった状態
確認コマンド確認できること
show standby briefActive/Standbyの状態・仮想IP・相手のIP一覧
show standby Vlan10特定インターフェースの詳細状態(タイマー・仮想MAC等)
show standby Vlan10 detailHello/Deadタイマーの値・preempt設定・トラッキング状態
debug standby eventsフェイルオーバー発生時のイベントをリアルタイムで確認(テスト時のみ)

インターフェーストラッキング(standby track)

HSRPの基本設定だけでは、Active機器のアップリンク(上位ルータ等への接続)が断絶しても切り替えが発生しない場合があります。この問題を解決するのがインターフェーストラッキングです。

指定したインターフェースがダウンした場合に自動でpriorityを下げ、Standby機器が自動でActiveに昇格する仕組みです。

図2:インターフェーストラッキングの動作
通常時
SW1:priority 110 → Active
GigEth0/1(上位): UP
クライアント → 仮想IP → SW1 → インターネット
SW1のGigEth0/1がダウン時
SW1:priority 110 – 20 = 90 → Standbyに降格
SW2:priority 100 → Activeに昇格
クライアント → 仮想IP → SW2 → インターネット
! SW1の追加設定:アップリンクポートをトラッキング
SW1(config)# interface Vlan10
SW1(config-if)# standby 1 track GigabitEthernet0/1 20
!                                 ↑                 ↑
!                          監視するIF     ダウン時にpriorityを下げる値
!
! GigEth0/1がダウン → priority 110 - 20 = 90 < SW2の100 → SW2がActiveに昇格
⚠ トラッキングのデクリメント値はpreemptの差より大きくする SW1の priority 110、SW2の priority 100 の場合、トラッキングで下げる値は11以上必要です(110 - 11 = 99 < 100)。10以下だと下げてもSW1の方がpriorityが高いままになり、フェイルオーバーが発生しません。上記の例では安全マージンを取って20を設定しています。

フェイルオーバー検証手順

本番導入前にフェイルオーバーが正常に動作するかを検証します。

1
通常時の状態確認:両機器でshow standby briefを実行し、SW1がActive・SW2がStandbyであることを確認する
2
フェイルオーバー試験:SW1のVlan10インターフェースをshutdownし、仮想IPへのpingを打ちながら切り替わりを確認する
3
SW2のActiveへの昇格確認:show standby briefでSW2がActiveになったことを確認する
4
復旧確認:SW1をno shutdownで復旧させ、preemptによってSW1が再びActiveに戻ることを確認する

タイマーのカスタマイズ

HSRPのデフォルトタイマーはHello間隔3秒・Dead(Hold)タイム10秒です。切り替えを速くしたい場合は短縮できます。

! タイマーをHello 1秒・Hold 3秒に短縮(両端で合わせること)
SW1(config-if)# standby 1 timers 1 3

! ミリ秒単位の設定(さらに高速な切り替えが必要な場合)
SW1(config-if)# standby 1 timers msec 200 msec 700

! 現在のタイマー設定を確認
SW1# show standby Vlan10 detail | include timers
🚨 タイマーは両端で同じ値に揃える タイマーはActive・Standby両方で同じ値に設定します。値が異なると意図しない切り替えが発生する可能性があります。また、タイマーを短くしすぎると一時的なネットワーク揺れでも切り替えが発生するため、環境に応じた値を選択してください。

HSRPv1とv2の違いと設定

HSRPにはバージョン1と2があります。両端で必ず同じバージョンに統一してください。異なるバージョンでは通信できません。

! HSRPv2を使用する場合(グループ番号が0〜4095に拡張)
SW1(config-if)# standby version 2
SW1(config-if)# standby 1 ip 192.168.10.1
SW1(config-if)# standby 1 priority 110
SW1(config-if)# standby 1 preempt

運用上の注意点

注意点内容
仮想IPをクライアントのGWに設定クライアントのデフォルトゲートウェイは仮想IP(192.168.10.1)に設定する。実IP(.2/.3)を直接設定すると冗長化の意味がなくなる
HSRPバージョンを統一v1とv2では仮想MAC・マルチキャストアドレスが異なる。両端で必ず同じバージョンに揃える
アップリンクもトラッキングするActive機器のアップリンクが断絶してもHSRP自体は切り替わらない。standby trackでアップリンクも監視する
タイマーは両端で統一Hello/Holdタイマーが不一致だと意図しない切り替えが発生する
定期的なフェイルオーバー試験設定後は少なくとも年1回はフェイルオーバー試験を実施し、切り替えが正常に動作することを確認する

まとめ

HSRPを活用すれば、L3スイッチやルータ間でのゲートウェイ冗長化が容易に実現できます。

  • 仮想IPをクライアントのGWに設定することで、障害時もクライアント設定変更不要
  • standby priorityでActive/Standbyの役割を決め、preemptで復旧後に元の役割に自動で戻る
  • standby trackでアップリンクを監視し、上位リンク断でも自動でフェイルオーバーさせる
  • HSRPバージョン・タイマーは両端で必ず統一する
  • マルチベンダー環境では業界標準のVRRPを検討する
  • 設定後はshow standby briefで状態確認し、定期的にフェイルオーバー試験を実施する

優先度・preempt・トラッキングを適切に設定し、定期的なフェイルオーバー試験を行うことで高い可用性を維持できます。