はじめに
Cisco 機器でゲートウェイを冗長化する場合、標準的な選択肢は HSRP です。それでも VRRP を設定する場面があります。代表的なのは、FortiGate や他社ルーターと対向する構成です。HSRP は Cisco 独自プロトコルのため、この用途では選べません。
Cisco IOS の VRRP には、注意したい点があります。VRRPv2 と VRRPv3 で設定構文がまったく異なるという点です。ネット上の設定例を参考にする際、どちらのバージョンを対象とした記述かを見分けないと、構文エラーの原因になります。
- Cisco 機器で VRRP を選ぶ場面と、HSRP との関係
- VRRPv2 の設定手順(
vrrp <グループ> ip形式) - VRRPv3 の設定手順(
address-family階層と前提となるバージョン指定) - ミリ秒タイマー設定時に確認コマンドの表示が想定と異なる理由
- オブジェクトトラッキングによる上位回線の監視と
show vrrp detailの読み方
結論から述べます。VRRPv3 を使うには、グローバル設定モードで fhrp version vrrp v3 を投入することが前提です。この 1 行を投入しない状態では VRRPv2 の構文で動作します。さらに、VRRPv3 を使用している間は VRRPv2 が利用できなくなるため、両者は排他的な関係になります。既存環境のバージョンを確認したうえで設計することをおすすめします。
本記事の設定例は、次の構成を前提にしています。
| 項目 | 値 |
|---|---|
| セグメント | 192.168.100.0/24 |
| 仮想 IP アドレス | 192.168.100.254 |
| R1(Master 想定)の実 IP アドレス | 192.168.100.251 |
| R2(Backup 想定)の実 IP アドレス | 192.168.100.252 |
| VRID | 1 |
| 仮想 MAC アドレス | 0000.5E00.0101 |
仮想 MAC アドレスは VRID から一意に決まります。VRID 1 であれば末尾が 01 となり、show vrrp detailの出力と計算値を突き合わせて確認できます。
Cisco における VRRP の位置づけ
Cisco 機器で VRRP を選ぶかどうかは、対向機器の構成で決まります。
VRRP を選ぶ場面
| 構成 | 選択肢 |
|---|---|
| Cisco 機器のみ | HSRP が第一候補 |
| 他社機器が混在 | VRRP のみ |
| 将来的に他社機器を追加する計画 | 要件に応じて判断 |
Cisco 機器どうしであれば HSRP が使えます。VRRP が必要になるのは、FortiGate や NEC IX、YAMAHA RTX といった他社機器と同一セグメントで冗長化を組む場合です。
なお、Cisco 環境で VRRPv3 を選択する際には、SSO への非対応や HSRP との併用制限といった注意点があります。プロトコル選定の判断基準は、関連記事『HSRP と VRRP の違い|FHRP の選定基準と判断の順序』で整理しています。
用語の対応
HSRP を使い慣れていると、用語の違いに戸惑う場面があります。
| 概念 | HSRP | VRRP |
|---|---|---|
| 転送を担当する機器 | Active | Master(新しいドキュメントでは Primary) |
| 待機する機器 | Standby | Backup |
| グループの識別子 | グループ番号 | VRID |
| preempt の既定 | 無効 | 有効 |
preempt の既定値が逆である点が、移行時にもっとも影響します。HSRP では明示的にstandby preemptを投入する必要がありましたが、VRRP では既定で有効です。VRRP 側の仕様は関連記事『VRRP とは|Master 選出と priority 設計の落とし穴』で扱っています。
もう 1 点、Cisco の新しいドキュメントでは Master が Primary、Backup が Secondary という表記に置き換えられている箇所があります。コマンドや出力の文字列は従来のままのため、ドキュメントの記述と実機の表示が一致しない場合があります。
VRRPv2 の設定手順
Cisco IOS の既定バージョンは v2 です。まず、こちらの構文から整理します。
基本設定
インターフェースコンフィグモードで、グループ番号と仮想 IP アドレスを指定します。
! ▼ VRRPv2 の構文
! R1(Master 想定)
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
vrrp 1 ip 192.168.100.254
!
! R2(Backup 想定)
interface GigabitEthernet0/1
ip address 192.168.100.252 255.255.255.0
vrrp 1 ip 192.168.100.254vrrp 1 ip 192.168.100.254の1が VRID、続くアドレスが仮想 IP アドレスです。HSRP のstandby 1 ipとよく似た構造で、移行時の違和感は小さくなっています。
この状態では両機とも priority が既定の 100 になります。仮想 IP アドレスを所有する機器が存在しないため、実 IP アドレスが大きい R2 が Master になります。
priority の設定
意図した機器を Master にするには、priority を設定します。
! ▼ VRRPv2 の構文
! R1(Master 想定)
interface GigabitEthernet0/1
vrrp 1 priority 110参考: Cisco IOS First Hop Redundancy Protocols Command Reference / vrrp priority
“The priority level is set to the default value of 100”
(priority レベルは既定値の 100 に設定されます)
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/command/fhp-cr-book/fhp-v1.html
R2 側は既定値の 100 のままとし、設定を省略します。変更が 1 台で済むため、設定の差分が小さくなります。
priority の値については、255 を設定しない点に注意が必要です。RFC 5798 では 255 が仮想 IP アドレスを所有する機器に予約された値とされており、Cisco IOS でも所有者以外は 1〜254 の範囲で設定します。FortiGate のように所有者でない機器にも 255 を設定できる実装があるため、対向機器と値を揃える際は 1〜254 の範囲で設計することをおすすめします。
preempt の設定
VRRP では preempt が既定で有効です。設定を省略すると、priority の高い機器が復旧した時点で自動的に切り戻ります。
切り戻し時の通信断を抑えたい場合は、遅延を設定できます。
! ▼ VRRPv2 の構文
interface GigabitEthernet0/1
vrrp 1 preempt delay minimum 60再起動直後の機器は、ルーティングテーブルが完成する前に Master へ昇格する可能性があります。遅延時間は、その機器で動作しているルーティングプロトコルの収束時間を基準に決めることをおすすめします。
切り戻し自体を無効にする場合はno vrrp 1 preemptを投入します。ただし、仮想 IP アドレスを所有する機器は preempt の設定にかかわらず常に置き換えを行う規定があるため、所有者を作らない構成が前提になります。
認証の設定
VRRPv2 には認証機能があります。既定はテキスト認証で、MD5 による認証も選択できます。
! ▼ VRRPv2 の構文
interface GigabitEthernet0/1
vrrp 1 authentication md5 key-string <キー文字列>キーチェーンを使う方法もあります。この場合、キー ID を 0 にする必要があります。
! ▼ VRRPv2 の構文
key chain vrrp1
key 0
key-string <キー文字列>
!
interface GigabitEthernet0/1
vrrp 1 authentication md5 key-chain vrrp1認証が使えるのは VRRPv2 のみです。VRRPv3 では RFC 5798 の仕様に従って認証フィールドが廃止されており、Cisco の構成ガイドでも VRRPv3 は認証をサポートしないと明記されています。認証要件がある場合、バージョン選定の判断材料になります。
なお、他社機器と対向する構成では認証方式の互換性に注意が必要です。MD5 認証は Cisco の実装であり、RFC 3768 で規定されているのは単純なテキスト認証です。対向機器が MD5 に対応していない場合、ネゴシエーションが成立しません。
VRRPv2 の設定全体
ここまでをまとめた設定です。
! ▼ VRRPv2 の構文
! R1(Master 想定)
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
vrrp 1 ip 192.168.100.254
vrrp 1 priority 110
vrrp 1 preempt delay minimum 60
!
! R2(Backup 想定)
interface GigabitEthernet0/1
ip address 192.168.100.252 255.255.255.0
vrrp 1 ip 192.168.100.254
vrrp 1 preempt delay minimum 60R2 側は priority を省略し、既定値の 100 で動作させています。両機の差分は実 IP アドレスと priority の 2 点のみです。
VRRPv3 の設定手順
VRRPv3 では、コマンドの階層構造が v2 から大きく変わります。IPv6 への対応にあたり、アドレスファミリーという概念が導入されたためです。
前提となるバージョン指定
まず、グローバル設定モードでバージョンを指定します。
! ▼ VRRPv3 の構文
Router(config)# fhrp version vrrp v3この 1 行を投入しない状態では、VRRPv3 の構文自体が入力できません。インターフェース配下でvrrp 1 address-family ipv4を試みても、コマンドが認識されない状態になります。
参考: First Hop Redundancy Protocols Configuration Guide / VRRPv3 Protocol Support
“the fhrp version vrrp v3 command must be used in global configuration mode”
(グローバル設定モードで fhrp version vrrp v3 コマンドを使用する必要があります)
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/configuration/xe-3s/asr903/fhp-xe-3s-asr903-book/fhp-xe-3s-asr903-book_chapter_01.pdf
同じドキュメントには、もう 1 つ重要な記述があります。VRRPv3 を使用している間は、VRRPv2 が利用できなくなります。両者は排他的な関係であり、同一機器上で混在させることはできません。
既存環境で VRRPv2 が稼働している機器にfhrp version vrrp v3を投入すると、既存の VRRPv2 設定が動作しなくなる可能性があります。稼働中の機器で実行する場合は、影響範囲を確認したうえでメンテナンス時間帯に実施することをおすすめします。
address-family 階層の構造
VRRPv3 では、インターフェース配下でさらに 1 階層下がる構造になります。
! ▼ VRRPv3 の構文
! R1(Master 想定)
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
vrrp 1 address-family ipv4
address 192.168.100.254 primary
priority 110
exit-vrrpv2 との対応関係を整理します。
| 設定項目 | VRRPv2 | VRRPv3 |
|---|---|---|
| グループへの入り方 | 行ごとに vrrp 1 ... | vrrp 1 address-family ipv4 で階層へ |
| 仮想 IP アドレス | vrrp 1 ip 192.168.100.254 | address 192.168.100.254 primary |
| priority | vrrp 1 priority 110 | priority 110 |
| preempt 無効化 | no vrrp 1 preempt | no preempt |
| 階層からの脱出 | 不要 | exit-vrrp |
v2 が 1 行完結型、v3 がブロック型という違いです。v3 では設定項目ごとにvrrp 1を繰り返す必要がなく、記述量は減ります。
addressコマンドのprimaryキーワードは、そのアドレスをプライマリの仮想 IP アドレスとして指定するものです。複数の仮想 IP アドレスを設定する場合、2 つ目以降はsecondaryを指定します。

IPv6 での設定
VRRPv3 の主な導入理由が IPv6 対応です。アドレスファミリーを切り替えるだけで設定できます。
! ▼ VRRPv3 の構文(IPv6)
interface GigabitEthernet0/1
vrrp 1 address-family ipv6
address FE80::1 primary
address 2001:DB8::254
priority 110
exit-vrrpIPv6 では、プライマリの仮想アドレスにリンクローカルアドレスを指定します。グローバルアドレスは追加のアドレスとして設定する構造です。
IPv4 と IPv6 で同じ VRID を使うこともできますが、その場合も別々の仮想ルーターとして扱われます。仮想 MAC アドレスも IPv4 が0000.5E00.01xx、IPv6 が0000.5E00.02xxと異なります。
なお、IPv4 と IPv6 の両方を VRRPv3 で設定すると、同一機器で HSRP を併用できなくなるという制限があります。Cisco の構成ガイドでは、VRRPv3 設定時に VRRP と HSRP を合わせて 2 種類までとされているためです。段階的な移行を計画している環境では、この制限を前提に検討する必要があります。
初期化遅延の設定
起動直後の不安定な状態を避けるため、FHRP クライアントの初期化を遅延させる設定があります。
! ▼ VRRPv3 の構文
Router(config)# fhrp version vrrp v3
Router(config)# interface GigabitEthernet0/1
Router(config-if)# fhrp delay minimum 5HSRP のstandby delay minimumに相当する機能ですが、コマンド体系が FHRP 共通に整理されています。VRRP と HSRP の双方に適用される形です。
ミリ秒タイマーを設定している環境や、スイッチの VLAN インターフェースに設定する構成では、この遅延の設定を検討する価値があります。
VRRPv3 の設定全体
ここまでをまとめた設定です。
! ▼ VRRPv3 の構文
! グローバル設定(両機に必要)
fhrp version vrrp v3
!
! R1(Master 想定)
interface GigabitEthernet0/1
ip address 192.168.100.251 255.255.255.0
fhrp delay minimum 5
vrrp 1 address-family ipv4
address 192.168.100.254 primary
priority 110
exit-vrrp
!
! R2(Backup 想定)
interface GigabitEthernet0/1
ip address 192.168.100.252 255.255.255.0
fhrp delay minimum 5
vrrp 1 address-family ipv4
address 192.168.100.254 primary
exit-vrrpR2 側は priority を省略し、既定値の 100 で動作させています。
なお、VRRPv3 でサポートされるグループの最大数は 255 で、これは IPv4 と IPv6 の両方を含む数と記載されています。多数のグループを構成する環境では、この上限を確認しておくことをおすすめします。
ミリ秒タイマーと表示の注意点
Cisco 機器では、Advertisement 間隔をミリ秒単位で設定できます。VRRPv2 からの変更点として公式ドキュメントに記載されている機能です。
設定方法
! ▼ VRRPv3 の構文
interface GigabitEthernet0/1
vrrp 1 address-family ipv4
timers advertise 300
exit-vrrp既定値は 1000 ミリ秒(1 秒)です。値を小さくすると、Backup が障害を検知するまでの時間が短縮されます。
両機での手動設定が前提
ここに注意点があります。ミリ秒のタイマー値は、Master と Backup の双方で手動設定する必要があります。
VRRPv2 ではタイマー値が Advertisement で通知されず、Backup 側が学習できませんでした。VRRPv3 では通知されるようになりましたが、Cisco の実装ではミリ秒値について両機での明示的な設定が求められます。片側だけに設定すると、意図した間隔で動作しません。
確認コマンドの表示が 1 秒になる
もう 1 つ、切り分けで混乱しやすい仕様があります。Backup 側のshow vrrp出力に表示される Master の Advertisement 値は、常に 1 秒になります。
参考: IP Addressing Services Configuration Guide / VRRPv3 Protocol Support
“the packets on the backup devices do not accept millisecond values”
(Backup 側の機器のパケットはミリ秒値を受け付けません)
https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9500/software/release/17-8/configuration_guide/ip/b_178_ip_9500_cg/vrrpv3_protocol___support.html
理由は、Backup 側のパケット処理がミリ秒値を受け付けないためです。実際にはミリ秒間隔で動作していても、表示上は 1 秒と出ます。
| 確認する機器 | 表示される値 |
|---|---|
| Master 側 | 設定したミリ秒値 |
| Backup 側(Master の値として) | 常に 1 秒 |
この仕様を知らないと、「Backup 側でタイマー設定が反映されていない」と判断して設定を見直す流れになります。Master 側の出力で設定値を確認し、Backup 側の表示は参考値として扱うのが実務的な対応です。
実際の切り替え時間は、Master を停止させた際の通信断時間を実測して確認することをおすすめします。
サブセカンド設定時の考慮事項
ミリ秒タイマーを採用する場合、次の点を検討します。
- 対向機器の対応状況
-
他社機器がサブセカンド設定に対応しているかを確認します。FortiGate では FortiOS 7.6.0 以降で対応しています
- 誤検知のリスク
-
間隔を短くするほど、パケットロスによる誤検知でフラッピングが起きやすくなります
- CPU 負荷
-
グループ数が多い環境では、Advertisement の送出頻度が機器の負荷に影響します
まずは既定の 1 秒で構築し、切り替え時間の要件を満たせない場合に短縮を検討するという順序を推奨します。
上位回線の監視(トラッキング)
VRRP が標準で判定するのは、Advertisement を受信できるかどうかだけです。上位回線が切れても、VRRP を設定したインターフェースがアップしている限り Master は Master のままになります。この課題に対応するのがオブジェクトトラッキングです。
VRRPv2 での設定
track オブジェクトを定義し、VRRP に紐づけます。
! 監視オブジェクトの定義
track 100 interface GigabitEthernet0/0 line-protocol
!
! ▼ VRRPv2 の構文
interface GigabitEthernet0/1
vrrp 1 ip 192.168.100.254
vrrp 1 priority 110
vrrp 1 track 100 decrement 20経路の到達性を監視する場合は、オブジェクトの定義を変えます。
track 100 ip route 0.0.0.0 0.0.0.0 reachability参考: Network Services Configuration Guide / Configuring VRRP
“If the specified object goes down, the VRRP priority is reduced”
(指定したオブジェクトがダウンすると、VRRP の priority が減少します)
https://www.cisco.com/c/en/us/td/docs/routers/ios/config/17-x/ntw-servs/b-network-services/m_fhp-vrrp-0.html
インターフェースの回線プロトコルだけを見る方式では、上流機器が生きたまま経路を失うケースに対応できません。新規構築では経路の到達性を監視する方式を推奨します。
VRRPv3 での設定
VRRPv3 では、address-family 階層の中に記述します。
! ▼ VRRPv3 の構文
interface GigabitEthernet0/1
vrrp 1 address-family ipv4
address 192.168.100.254 primary
priority 110
track 100 decrement 20
exit-vrrptrack オブジェクトの定義部分は v2 と共通です。紐づけ方だけが階層構造に合わせて変わります。
減算値と priority 差の設計
トラッキング設計でもっとも見落とされやすい部分です。
減算値は priority 差より大きく設定する必要があります。R1 が 110、R2 が 100 という構成で減算値を 10 にすると、障害検知後の R1 の priority は 100 となり、R2 と同値になります。VRRP は Backup の priority が Master を上回った場合に昇格するため、同値では切り替わりません。
| 状態 | R1 の priority | R2 の priority | Master |
|---|---|---|---|
| 正常時 | 110 | 100 | R1 |
| 上位回線ダウン(減算値 10) | 100 | 100 | R1 のまま |
| 上位回線ダウン(減算値 20) | 90 | 100 | R2 に切り替わり |
この論点は HSRP でも共通です。設計の考え方は関連記事『HSRP の設定手順|priority と preempt の設計ポイント』でも扱っています。
なお、Backup 側の機器にも同じトラッキングを設定しておくことをおすすめします。R2 側の上位回線が落ちている状態で Master へ昇格する事故を防げます。
切り戻しについては、VRRP では preempt が既定で有効のため、監視対象が復旧して priority が元に戻れば自動的に切り戻ります。HSRP のように preempt の明示的な設定は不要です。
動作確認と切り分け
設定後の確認はshow vrrp detailが基点になります。カウンター情報が充実しており、マルチベンダー対向の切り分けで有用です。
show vrrp detail の読み方
Master 機の出力例です。
R1# show vrrp detail
GigabitEthernet0/1 - Group 1 - Address-Family IPv4
State is MASTER
State duration 1 mins 23.203 secs
Virtual IP address is 192.168.100.254
Virtual MAC address is 0000.5E00.0101
Advertisement interval is 1000 msec
Preemption enabled
Priority is 110
Master Router is 192.168.100.251 (local), priority is 110
Master Advertisement interval is 1000 msec (expires in 598 msec)
Master Down interval is unknown
VRRPv3 Advertisements: sent 1985 (errors 0) - rcvd 70
VRRPv2 Advertisements: sent 0 (errors 0) - rcvd 0
Group Discarded Packets: 3
VRRPv2 incompatibility: 0
IP Address Owner conflicts: 0
Invalid address count: 0確認したい箇所を整理します。
| 行 | 確認内容 |
|---|---|
Group 1 - Address-Family IPv4 | VRID とアドレスファミリー |
State is MASTER | 期待どおりの状態か |
Virtual MAC address | VRID から計算した値と一致するか |
Advertisement interval | 設計値どおりか |
Preemption enabled | 既定は有効。無効化した場合は表示が変わる |
Priority is 110 | トラッキング作動時は減算後の値になる |
Master Router is | 自機なら (local) が付く |
Virtual MAC addressは計算で検証できます。VRID 1 であれば0000.5E00.0101になり、設定した VRID と実際に使われている値が一致しているかを確認できます。
カウンターによる切り分け
出力の末尾にある破棄パケットのカウンターが、実務で有用な部分です。マルチベンダー対向で問題が起きた際、原因の絞り込みに直結します。
| カウンター | 増加する原因 |
|---|---|
VRRPv2 incompatibility | 対向機器が VRRPv2 で送信している |
IP Address Owner conflicts | 同一セグメントに IP アドレス所有者が複数存在する |
Invalid address count | 仮想 IP アドレスが両機で一致していない |
VRRPv2 incompatibilityが増加している場合、対向機器のバージョンが揃っていません。Cisco 側でfhrp version vrrp v3を投入した状態で、対向機器が VRRPv2 のままというケースが典型です。FortiGate であればset version 2の設定を確認します。
IP Address Owner conflictsが増加している場合、仮想 IP アドレスを実インターフェースアドレスとして持つ機器が複数存在するか、priority 255 の機器が重複しています。FortiGate は所有者でなくても priority 255 を設定できるため、対向構成では確認しておきたい項目です。
Invalid address countが増加している場合、両機で設定した仮想 IP アドレスが異なります。設定の投入ミスが原因として多く見られます。
送受信のカウンターも切り分けに使えます。sentだけが増えてrcvdが 0 のままであれば、対向からの Advertisement が届いていません。中間スイッチでのマルチキャスト遮断や、VLAN の不整合を疑う流れになります。
状態が期待どおりにならない場合
確認の順序を整理します。
Advertisement が相互に届いていない状態です。
- バージョンが両機で一致しているか(
VRRPv2 incompatibilityカウンターを確認) - 認証設定が一致しているか(VRRPv2 の場合)
- マルチキャストアドレス 224.0.0.18 が中間機器で遮断されていないか
- VLAN やポート設定に不整合がないか
- priority の設定値を確認します。両機とも既定の 100 であれば、実 IP アドレスが大きいほうが Master になります
Priority isの値が設定値と異なる場合、トラッキングが作動しています
fhrp version vrrp v3が投入されているかを確認します。既定のままでは VRRPv2 の構文で動作します。
パケットレベルの確認
Advertisement が物理的に届いているかは、キャプチャで確認します。VRRP は IP プロトコル番号 112 を使用し、宛先はマルチキャストアドレス 224.0.0.18 です。
中間スイッチで IGMP snooping が動作している環境では、VRRP のマルチキャストが意図せず遮断されることがあります。ネゴシエーションが成立しない場合の切り分けポイントとして、プロトコル番号 112 のパケットが双方向に届いているかを確認します。
FortiGate と対向する構成では、FortiGate 側でもdiagnose sniffer packetによるキャプチャが可能です。両側からキャプチャを取得すると、どちら側で失われているかを切り分けられます。FortiGate 側の設定と確認手順は関連記事『FortiGate VRRP の設定手順』にまとめています。
まとめ
Cisco IOS の VRRP は、VRRPv2 と VRRPv3 で設定構文がまったく異なります。v3 を使うにはグローバル設定でのバージョン指定が前提となり、投入すると v2 が利用できなくなる排他的な関係にあります。マルチベンダー構成では対向機器とバージョンを揃えることが前提になるため、設計の初期段階でどちらを使うかを決めておくことをおすすめします。
- VRRPv3 の利用には
fhrp version vrrp v3の投入が前提 - VRRPv3 を使用している間は VRRPv2 が利用できない
- v2 は 1 行完結型、v3 は address-family のブロック型
- priority 255 は所有者に予約された値で、Cisco では 1〜254 を使用
- 認証が使えるのは VRRPv2 のみで、v3 は仕様上非対応
- ミリ秒タイマー設定時、Backup 側の表示は常に 1 秒になる
show vrrp detailの破棄カウンターが対向構成の切り分けに有用
以上、最後までお読みいただきありがとうございました。
