➊ はじめに
「VRRP / HSRP」の技術について触れることがあったので、概要レベルだけでなく仕組みも知りたいと思い調べてみました。せっかくなので、調査内容を共有します😊
➋ 具体的に何をするか
本記事でのターゲットは、「VRRP / HSRP」の概要、および、仕組みを理解できるようになることです。まずは、基本の用語から整理していきましょう📝
■ VRRP / HSRP とは
❇️ 概要
「VRRP / HSRP」とは、ネットワークの可用性を高めるために、複数のルーターをグループ化し、仮想的な1つのルーターとして動作させる技術のことです。これにより、ルーターに障害が発生した場合でも、別のルーターが自動的にその役割を引き継ぎ、サービスを継続することが可能となります。
略称 | 正式名称 | 直訳 |
---|---|---|
VRRP | Virtual Router Redundancy Protocol | 仮想ルーター冗長化プロトコル |
HSRP | Hot Standby Router Protocol | ホットスタンバイ・ルーター・プロトコル |
❇️ VRRP/HSRPはなぜ必要?
社内のインターネット接続ルーターが故障すると全員の通信が止まってしまいます。これを防ぐためにルーターを冗長化しておけば、1台のルーターに障害が発生しても、他のルーターがサービスをカバーすることができます。
❇️ VRRPとHSRPの違い
VRRPとHSRPについて、細かい違いはあれど、大きな違いはマルチベンダーなのか、Ciscoなのかの違いです。HSRPはCisco専用です。
項目 | VRRP | HSRP |
---|---|---|
規格 | RFC 5798(2010年標準化) | Cisco独自規格 |
ベンダー依存性 | マルチベンダー対応(標準準拠) | Cisco製品のみ(他社は対応不可) |
グループ番号 | 1〜255 | 0〜255 |
仮想MACアドレス形式 | 00:00:5E:00:01:XX |
00:00:0C:07:AC:XX |
優先度デフォルト値 | 100 | 100 |
稼働状態 | Master(稼働側) / Backup(待機側) | Active(稼働側) / Standby(待機側) |
切替判定 | Helloパケットの有無 | Helloパケットの有無 |
Hello送信間隔(デフォルト) | 1秒 | 3秒 |
Helloパケットが途絶してから切替判定までの待ち時間 (デフォルト) | Master_Down_Interval 3.61秒 | Hold Timer 10秒 |
Preempt(復帰時のMaster奪取) | デフォルトで有効 | デフォルトで無効 |
バージョン | v2(IPv4専用)、v3(IPv4/IPv6両対応) | v1(IPv4)、v2(IPv4/IPv6) |
- 稼働状態ですが、VRRPでは「Master / Backup」、HSRPでは「Active / Standby」と呼びます。
- Helloパケットが途絶してから切替判定までの待ち時間ですが、VRRPでは「Master_Down_Interval」、HSRPでは「Hold Timer」と呼びます。
➌ 基本構成
以下、主にVRRPで解説していきます👽️
(1)単一構成
クライアントPCネットワークとサーバネットワークの2つがあり、それぞれ外部のネットワークとRouter1とRouter3で接続している単一構成があったとします。この場合、Router1やRouter3のどちらか一方でも故障するとクライアントPCネットワークとサーバネットワークはそれぞれ通信ができなくなってしまいます。
(2)冗長化構成
そこでVRRP/HSRPという冗長化技術の登場です。この技術は、複数のルータで同じ仮想ゲートウェイ(VIP:Virtual IPアドレス)を共有し、1台が故障しても自動的に別のルータへ切り替える仕組みです。VRRPではMaster/Backup構成を取り、Masterが通信を行います。Masterに障害が発生した場合、BackupがMasterに昇格し、新しいMasterが通信を担います。
こちらがRouter2、Router4を追加して、VRRP/HSRPを用いて冗長化した構成図になります。
この場合、Router1とRouter2、Router3とRouter4を冗長ペアとして、それぞれ仮想IPアドレス(VIP:Virtual IPアドレス)を割り振ります。クライアントPCには、デフォルトGWとして仮想IPアドレスを設定します。こうすることで、クライアントPCからはRouter1、Router2どちらがMasterかを意識することなく、通信を行うことができます。
➍ 障害発生時の動作
-
Master不在による昇格
Router1が故障すると、待機していたRouter2が自動的にMasterへ切り替わり、通信を引き継ぎます。 -
通信疎通NGによる昇格
Router3が上位ネットワークであるRouter1と通信ができないと判断すると、待機していたRouter4が自動的にMasterへ切り替わり、通信を引き継ぎます。
➎ 障害検知の仕組み
障害発生時にBackupからMasterへ昇格することが分かりました。ここでは検知の仕組みを解説します。
(1)Master不在検知
Router2がRouter1の障害をどうやって検知したのか、その仕組みについて簡単に解説します。
MasterからBackupへ定期的にHelloパケットを送信(送信間隔はVRRPではデフォルト1秒)しています。Backupでは、Master_Down_Interval(Helloパケットが途絶してから切替判定までの待ち時間。VRRPではデフォルト3.61秒)の間にHelloパケットを受信できない場合、「Master不在」と判断し、自分がMasterへ昇格します。
(2)通信疎通NG検知
Router3がRouter1の障害をどうやって検知したのか、その仕組みについて簡単に解説します。
Router3側が、上位ネットワークであるRouter1の障害を検知する方法として、VRRP/HSRPで利用できるトラッキング機能は大きく分けて3種類あります。
種類 | 方法 | 検知対象 | 長所 | 短所 |
---|---|---|---|---|
インターフェース状態監視 | 上位インターフェースのLine Protocol(Up/Down)を監視 | ケーブル抜け、スイッチ電源断など物理障害 | 即時検知(ほぼ0秒) | 物理的にUpでも、上位機器や経路が死んでいる場合は検知不可 |
経路存在監視(Track Route) | ルーティングテーブルに特定の経路が存在するか確認 | OSPF/BGPなどの経路喪失 | 経路消失時に素早く切替可能 | ルーティングプロトコルの収束時間に依存 |
到達性監視(Track IP Reachability) | ICMP Echo(Ping)で指定ノードに到達できるか確認 | 経路があっても通信できない障害(上位ルータ故障、回線不良など) | 実通信の可否を直接検証可能 | 監視対象がPing応答しない場合は利用不可、誤検知リスクあり |
いずれかに問題があった場合、Router3は「上位ネットワーク障害あり」と判断し、自身のVRRP/HSRP優先度を下げます。Backup側は、Masterから受信するHelloパケット内の優先度情報を比較し、自分の方が高ければMasterに昇格します。
「インターフェース状態監視」、「経路存在監視」、「到達性監視」の総称をトラッキング機能と呼びます。VRRP・HSRPともに、このトラッキング機能はデフォルトでは無効です。設定しない限り、障害検知はHelloパケットの有無だけで行われます。
➏ Master切替制御の仕組み
いきなりですが「L2 Switch」登場✌️!
上記構成図には無いL2 Switchをいきなり出して申し訳ないのですが、実情としてクライアントPCとルーターの間にL2 Switchが入るような構成になっています。(さっきまでは省略していたのだよ😎…)
クライアントPCは、デフォルトゲートウェイとして設定された仮想IPアドレス宛にパケットを送信します。このパケットはARP解決によって、仮想IPアドレスに対応する仮想MACアドレス宛のフレームとして送信されます。VRRP/HSRPでは、この仮想MACアドレスの「持ち主」を切り替えることで、Masterの役割交代を実現しています。
(1)平常時(RT1がMaster)
- Router1が、仮想MAC(00:00:5E:00:01:01)を自インターフェースに設定
- Router1が、仮想MAC(00:00:5E:00:01:01)を使ってフレーム送信
- L2 Switchは「このMACはポート16の先にある」とMACアドレステーブルに登録
- クライアントからの通信は、Router1の接続先ポート16(
GigabitEthernet 1/0/16
)に転送される
SW1# show mac address-table dynamic
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
10 0000.5e00.0101 DYNAMIC Gi1/0/16 ← RT1 (Master)
10 0000.aaaa.bbbb DYNAMIC Gi1/0/5 ← クライアントPC1
10 0000.cccc.dddd DYNAMIC Gi1/0/6 ← クライアントPC2
(2)RT1障害発生時(RT1故障、RT2がMaster昇格)
- Router2が、仮想MAC(00:00:5E:00:01:01)を自インターフェースに設定
- Router2が、仮想MAC(00:00:5E:00:01:01)を使ってフレーム送信開始
- L2 Switchは「同じMACがポート13から来た」と検知し、MACアドレステーブルを更新
- 以後、クライアントからの通信は、Router2の接続先ポート13(
GigabitEthernet 1/0/13
)に転送される
SW1# show mac address-table dynamic
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
10 0000.5e00.0101 DYNAMIC Gi1/0/13 ← RT2 (新Master)
10 0000.aaaa.bbbb DYNAMIC Gi1/0/5 ← クライアントPC1
10 0000.cccc.dddd DYNAMIC Gi1/0/6 ← クライアントPC2
※ポイントは、L2 SwitchのMACアドレステーブルが、同じMACが別ポートから現れた瞬間に更新されるという仕組みです。これにより、ルーティングの再計算を待たずに即時切替が可能になります。
❇️ Master昇格時のフロー詳細
フェーズ | 動作 | 宛先(送信先MAC/IP) | 目的 | 備考 |
---|---|---|---|---|
1.仮想MAC割当 | Router2が仮想MAC(例:00:00:5E:00:01:01)を自インターフェースに設定 | ―(設定動作のため宛先なし) | 「仮想IP=このMAC」の関連付けを持つデバイスとして動作開始 | これを行わないと仮想IP宛の通信を受けられず冗長化が成立しない |
2.VRRP/HSRPHello送信 | 新しいMasterとしてHelloパケットを送信開始 | VRRP:224.0.0.18(MAC:01:00:5E:00:00:12) HSRP:224.0.0.2(MAC:01:00:5E:00:00:02) |
他のBackupルーターに「自分がMasterになった」ことを通知 | プロトコル規格上の動作で、昇格直後から送信開始するのが一般的 |
3.GratuitousARP送信 | 自分の仮想IP/MAC情報をブロードキャスト送信 | MAC:ff:ff:ff:ff:ff:ff IP:仮想IP(例:192.168.1.254) |
クライアントやL2スイッチのARPキャッシュ・MACテーブルを即更新 | RFC上は必須ではないが、多くの実装で昇格時に送信し通信断を防ぐ |
4.通常データフレーム送信 | 実際のユーザーデータ通信を仮想MACを送信元として流す | 宛先MAC:通信先デバイスのMAC | L2スイッチのMACアドレステーブル更新・維持 | 昇格後すぐに実際のユーザートラフィックを転送開始する |
※BackupルーターがMasterに昇格すると、ただちにネットワーク内の機器へ「自分が仮想IP/MACの持ち主になった」ことを知らせるための一連の処理を行います。この流れは、冗長化を途切れなく機能させる上で非常に重要です。
※GratuitousARP(読み方:グラチュータスアープ):ARPキャッシュの期限切れ以外のタイミングで、自発的にARPを送る機能です。GARPとも呼ばれます。
➐ その他
あと気がついた機能とか、メモ書き程度に記載しておきます。
(1)Masterの障害復帰時の動作
プリエンプト(Preempt)とは、直訳すると優先奪取のことで、VRRPやHSRPの冗長化構成で、復帰したルータが優先度(Priority)で勝っている場合に、自動的に稼働役(Master/Active)の座を奪い返す動作です。VRRPとHSRPではデフォルト設定が異なり、それぞれメリット・デメリットがあります。
❇️ プリエンプトON
- VRRP:プリエンプト デフォルトON
- 優先度が高ければ、復帰Masterが再びMaster化
- 仮想MACを再取得、ARP応答を自分に戻す
常に高性能ルータを使用したい場合に有効
❇️ プリエンプトOFF
- HSRP:プリエンプト デフォルトOFF
- 現在のMasterを維持し、復帰Masterは待機へ
- 再切替による瞬断を防ぐ
瞬断を嫌う安定志向の場合に有効
(2)高速障害検知プロトコル:BFD
BFD(Bidirectional Forwarding Detection)とは、リンクや経路の疎通を高速かつ軽量に監視するプロトコルです。VRRPやHSRPにおけるHelloパケットの代替ではなく共存可能で、併用により障害検知時間をミリ秒単位まで短縮できます。
- 役割:BFDで障害検知 → VRRP/HSRPが即時切替
- メリット:Helloの待機時間(数秒)を短縮し、瞬断を最小化
- 条件:両機器がBFD対応であること
➑ まとめ
- VRRP / HSRP はルーターを冗長化し、可用性を高める技術
- VRRP:標準化(RFC 5798)され、マルチベンダー環境に有利
- HSRP:Cisco独自規格で、Cisco機能との親和性が高い
-
障害検知方法:
- Helloパケットによる検知(デフォルト)
- トラッキング機能による補強(インターフェース/経路/到達性監視)
- BFDによる高速障害検知(Helloパケットと併用可)
- 切替方式:仮想MACアドレスの「持ち主」を切替えるだけなので、クライアント側設定変更は不要(ルーターの設定のみで完結)
-
復帰後の動作:プリエンプト(主役奪取)設定により挙動が変わる
- ON:優先度が高ければ復帰ルータが主役に戻る
- OFF:現在の主役を維持して安定性を優先
➒ 終わりに
自分の勉強、備忘録にもなるかなと思い記事を作りましたが、なかなか、カユイところに手が届いたような記事になったと思いますが、いかがでしょうか?
もしこの記事が参考になった、ちょっとでも良かった、面白かったと感じた方は、よろしければ「いいね❤」をよろしくお願いします🤗
お疲れさまでした😊