HSRP(Hot Standby Router Protocol)は、Cisco 独自のゲートウェイ冗長化プロトコルです。2台のルータで1つの仮想ゲートウェイアドレスを共有し、端末にはその仮想アドレスをデフォルトゲートウェイとして設定します。片方のルータが故障しても、もう片方が仮想アドレスを引き継ぐので、端末の設定を変えずに通信を続けられます。
この記事では、HSRP の基本設定を行い、端末からの疎通と ARP、show standby の表示、ルータ間でやり取りされる Hello パケットを確認します。
- R2・R3 に HSRP を設定し、仮想ゲートウェイを作る
- 端末から疎通を確認し、ARP で仮想 MAC アドレスを見る
show standbyで Active/Standby の状態を確認する- ルータ間の Hello パケットの中身を確認する
HSRP の仕組み
HSRP では、2台以上のルータで「仮想ルータ」を作ります。仮想ルータは、仮想 IP アドレスと仮想 MAC アドレスを持ち、実際にはその時点の Active ルータが仮想ルータとしてパケットを転送します。Standby ルータは Hello パケットで Active ルータを見守り、Active ルータの Hello が届かなくなると代わりに Active になります。
| 用語 | 意味 |
|---|---|
| Active ルータ | 仮想ルータとして、端末からのパケットを実際に転送するルータ。グループ内で1台 |
| Standby ルータ | Active ルータが故障したときに代わりに Active になるルータ。グループ内で1台 |
| 仮想 IP アドレス | 端末のデフォルトゲートウェイに設定するアドレス。今回は 192.168.23.254 |
| 仮想 MAC アドレス | 仮想 IP アドレスに対応する MAC アドレス。グループ番号から決まる(HSRPv1 は 0000.0c07.acXX、XX はグループ番号の16進数) |
| プライオリティ | Active になる優先度。大きいほうが優先。既定値は 100 |
| プリエンプト | 優先度の高いルータが、後から Active を奪い返す機能。既定では無効 |
| Hello/Hold タイム | Hello を送る間隔(既定 3 秒)と、Hello が届かないときに相手を故障とみなすまでの時間(既定 10 秒) |
検証構成
セグメント 192.168.23.0/24 の端末から、R5 のループバック 5.5.5.5 へ通信できるようにします。端末のデフォルトゲートウェイは 192.168.23.254 です。R2 と R3 で仮想ゲートウェイアドレス 192.168.23.254 の HSRP を設定し、R2 を Active、R3 を Standby として動作させます。
R2・R3・R5 の間は、あらかじめ EIGRP でルーティングできる状態にしてあります。R2・R3 の LAN 側は、サブインターフェイス FastEthernet0/0.23(VLAN 23)です。
HSRP の設定と確認
R2・R3 に HSRP を設定する
HSRP の基本設定は次のとおりです。LAN 側のインターフェイスで、standby コマンドにグループ番号を付けて設定します。
R2
R2(config)#int fastEthernet 0/0.23 R2(config-subif)#standby 1 ip 192.168.23.254 R2(config-subif)#standby 1 priority 105
R3
R3(config)#int fastEthernet 0/0.23
R3(config-subif)#standby 1 ip 192.168.23.254
| コマンド | 意味 |
|---|---|
| standby 1 ip 192.168.23.254 | グループ 1 の仮想 IP アドレスを 192.168.23.254 にする。グループ番号はルータ間でそろえる必要がある |
| standby 1 priority 105 | グループ 1 での優先度を 105 にする。大きいほうが Active になりやすい。R3 は設定していないので既定値の 100 |
今回の設定ではプリエンプトを有効にしていないため、優先度が高い R2 でも「後から」Active を奪い返すことはありません。たとえば R2 が再起動している間に R3 が Active になると、R2 が復旧しても R3 が Active のままです(R2 は Standby になります)。後述の show standby にも Preemption disabled と表示されています。
R2 を常に Active にしたい場合は、R2 に standby 1 preempt を追加します。
端末から疎通と ARP を確認する
端末から R5(5.5.5.5)へ ping を実行します。
端末
$ ping 5.5.5.5 84 bytes from 5.5.5.5 icmp_seq=1 ttl=254 time=19.347 ms 84 bytes from 5.5.5.5 icmp_seq=2 ttl=254 time=12.447 ms 84 bytes from 5.5.5.5 icmp_seq=3 ttl=254 time=12.124 ms 84 bytes from 5.5.5.5 icmp_seq=4 ttl=254 time=15.587 ms 84 bytes from 5.5.5.5 icmp_seq=5 ttl=254 time=12.781 ms
応答が返ってきました。応答の ttl=254 は、R5 が送った TTL 255 のパケットが、ルータを1台(Active の R2)通って届いたことを示しています。
次に、端末の ARP テーブルを確認します。
端末
$ arp
00:00:0c:07:ac:01 192.168.23.254 expires in 114 seconds
デフォルトゲートウェイ 192.168.23.254 の MAC アドレスは 00:00:0c:07:ac:01 です。これは R2 や R3 の実際の MAC アドレスではなく、R2 と R3 が共有する HSRP の仮想 MAC アドレスです。HSRPv1 の仮想 MAC アドレスは 0000.0c07.acXX の形で、末尾の XX にグループ番号(今回は 1)が16進数で入ります。
Active が R2 から R3 に切り替わっても、仮想 MAC アドレスは変わりません。そのため端末は ARP テーブルを更新しなくても、同じ宛先 MAC アドレスでそのまま通信を続けられます。HSRP では、新しく Active になったルータが Gratuitous ARP を送り、スイッチの MAC アドレステーブルを新しいポートに向け直します。
ARP リプライのキャプチャ
端末が仮想ゲートウェイアドレスの ARP を要求すると、Active ルータが応答します。ARP リプライをキャプチャすると、次のように表示されます。
この記事のキャプチャ画面は、実際の画面ではなく、検証時の Wireshark の画面から表示内容のポイントを抜き出して描いたイメージです。Wireshark のバージョンによって表記は変わります。
▸ Ethernet II, Src: All-HSRP-routers_01 (00:00:0c:07:ac:01), Dst: Private_66:6…▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 23▾ Address Resolution Protocol (reply) Hardware type: Ethernet (1) Protocol type: IPv4 (0x0800) Hardware size: 6 Protocol size: 41 Opcode: reply (2)2 Sender MAC address: All-HSRP-routers_01 (00:00:0c:07:ac:01) Sender IP address: 192.168.23.254 Target MAC address: Private_66:68:00 (00:50:79:66:68:00) Target IP address: 192.168.23.100
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Opcode: reply (2) | ARP の応答パケット |
| 2 | Sender MAC address: …(00:00:0c:07:ac:01)Sender IP address: 192.168.23.254 | 192.168.23.254 の MAC アドレスとして、仮想 MAC アドレスを返している。Wireshark は 0000.0c07.acXX を「All-HSRP-routers_XX」と表示する |
show standby で状態を確認する
show standby brief:状態を一覧で見る
Active/Standby の状態や仮想 IP アドレスを、1行で簡単に確認できます。
R2
R2#show standby brief
P indicates configured to preempt.
|
Interface Grp Pri P State Active Standby Virtual IP
Fa0/0.23 1 105 Active local 192.168.23.3 192.168.23.254
R3
R3#show standby brief
P indicates configured to preempt.
|
Interface Grp Pri P State Active Standby Virtual IP
Fa0/0.23 1 100 Standby 192.168.23.2 local 192.168.23.254
| 表示 | 意味 |
|---|---|
| Grp | HSRP のグループ番号(1) |
| Pri | このルータの優先度。R2 は 105、R3 は既定値の 100 |
| P | プリエンプトが有効なら「P」が付く。今回はどちらも空欄(無効) |
| State | このルータの状態。R2 が Active、R3 が Standby |
| Active | Active ルータのアドレス。自分が Active なら local |
| Standby | Standby ルータのアドレス。自分が Standby なら local |
| Virtual IP | 仮想 IP アドレス(192.168.23.254) |
show standby:詳しい状態を見る
R2
R2#show standby FastEthernet0/0.23 - Group 1 State is Active 2 state changes, last state change 00:27:48 Virtual IP address is 192.168.23.254 Active virtual MAC address is 0000.0c07.ac01 Local virtual MAC address is 0000.0c07.ac01 (v1 default) Hello time 3 sec, hold time 10 sec Next hello sent in 2.608 secs Preemption disabled Active router is local Standby router is 192.168.23.3, priority 100 (expires in 8.960 sec) Priority 105 (configured 105) Group name is "hsrp-Fa0/0.23-1" (default)
R3
R3#show standby
FastEthernet0/0.23 - Group 1
State is Standby
1 state change, last state change 00:27:42
Virtual IP address is 192.168.23.254
Active virtual MAC address is 0000.0c07.ac01
Local virtual MAC address is 0000.0c07.ac01 (v1 default)
Hello time 3 sec, hold time 10 sec
Next hello sent in 0.608 secs
Preemption disabled
Active router is 192.168.23.2, priority 105 (expires in 10.080 sec)
Standby router is local
Priority 100 (default 100)
Group name is "hsrp-Fa0/0.23-1" (default)
| 表示 | 意味 |
|---|---|
| State is Active/Standby | このルータの現在の状態 |
| Virtual IP address is … | 仮想 IP アドレス |
| Active virtual MAC address is … | 現在使われている仮想 MAC アドレス。(v1 default) は HSRPv1 の既定の形式で作られたことを示す |
| Hello time 3 sec, hold time 10 sec | Hello の送信間隔と Hold タイム(どちらも既定値) |
| Preemption disabled | プリエンプトが無効 |
| Standby router is … (expires in …) | 相手のアドレスと優先度。expires は、相手の Hello が届かないまま0になると相手を故障とみなす残り時間(Hold タイム 10 秒から減っていき、Hello を受けるたびに戻る) |
| Priority 105 (configured 105) | 現在の優先度と設定値。R3 は (default 100) で既定値のまま |
| Group name is … | グループ名。指定しなければ自動で付く |
ルータ間の Hello パケットを確認する
HSRP のルータどうしは、Hello パケットを定期的に送り合って Active/Standby の関係を維持します。HSRPv1 の Hello は、既定で 3 秒ごとに、マルチキャストアドレス 224.0.0.2 宛てに UDP ポート 1985 で送られます。Active と Standby の両方が Hello を送ります。
| Time | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 10.120889 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 2.857204 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 5.724507 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 8.446810 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 10.860695 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 13.561715 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 16.040000 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 18.704370 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
| 21.225279 | 192.168.23.2 | 224.0.0.2 | HSRP | Hello (state Active) |
▸ Frame 99: 66 bytes on wire (528 bits), 66 bytes captured (528 bits)▸ Ethernet II, Src: All-HSRP-routers_01 (00:00:0c:07:ac:01), Dst: IPv4…▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 232▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 224.0.0.2▸ User Datagram Protocol, Src Port: 1985, Dst Port: 1985▾ Cisco Hot Standby Router Protocol3 Version: 04 Op Code: Hello (0) State: Active (16)5 Hellotime: Default (3) Holdtime: Default (10)6 Priority: 105 Group: 1 Reserved: 07 Authentication Data: Default (cisco)8 Virtual IP Address: 192.168.23.254
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Time 列 | R2 からの Hello がおよそ 3 秒ごと(実際には 3 秒より少し短い間隔)で届いている |
| 2 | Dst: 224.0.0.2/Port: 1985 | 宛先はマルチキャスト 224.0.0.2(同じセグメントの全ルータ)、UDP ポート 1985。Active の R2 は送信元 MAC に仮想 MAC アドレスを使っている |
| 3 | Version: 0 | HSRP バージョン 1(パケット上の値は 0)。HSRPv2 では 224.0.0.102 宛てになり、パケット形式も変わる |
| 4 | Op Code: Hello (0)/State: Active (16) | メッセージの種類(Hello)と、送信元ルータの状態(Active) |
| 5 | Hellotime/Holdtime | Hello タイム 3 秒、Hold タイム 10 秒(既定値) |
| 6 | Priority: 105/Group: 1 | 送信元ルータの優先度と、HSRP のグループ番号 |
| 7 | Authentication Data: Default (cisco) | 認証文字列。既定値の「cisco」が平文で入っている |
| 8 | Virtual IP Address: 192.168.23.254 | 仮想 IP アドレス |
HSRP の認証は、既定では「cisco」という文字列が平文で Hello に入っているだけで、キャプチャすれば誰でも読めます。同じセグメントに不正なルータを置かれて Active を奪われるのを防ぐには、standby 1 authentication md5 key-string … などで MD5 認証を設定します。
HSRP の状態
Hello の State には、送信元ルータの状態が入ります。HSRP のルータは、起動後に次の状態を順に進みます。
| 状態 | 値 | 内容 |
|---|---|---|
| Initial | 0 | HSRP が動き始める前の状態 |
| Learn | 1 | 仮想 IP アドレスをまだ知らず、Active ルータからの Hello を待っている |
| Listen | 2 | 仮想 IP アドレスは知っているが、Active でも Standby でもない(3台以上のときの残りのルータ) |
| Speak | 4 | Hello を送り、Active/Standby の選出に参加している |
| Standby | 8 | 次の Active 候補 |
| Active | 16 | 仮想ルータとしてパケットを転送している |
Active ルータが故障したときの動き
この記事では切り替えの試験はしていませんが、HSRP の基本的な動きは次のとおりです。
- Active の R2 が故障すると、R2 からの Hello が届かなくなります。
- R3 は Hold タイム(10 秒)の間 Hello を受け取れないと、R2 が故障したと判断して Active になります。
- 新しく Active になった R3 は、仮想 MAC アドレスで Gratuitous ARP を送ります。スイッチの MAC アドレステーブルが R3 側に切り替わり、端末のパケットは R3 に届くようになります。
- 端末から見たデフォルトゲートウェイの IP アドレスと MAC アドレスは変わらないので、端末側の操作は不要です。
Hold タイムを待つ分、切り替えには最大で 10 秒ほどかかります。短くしたい場合は standby 1 timers で Hello/Hold タイムを調整します。また、ルータ自体は動いていても上位側の回線が切れた場合に切り替えたいときは、standby 1 track でインターフェイスやオブジェクトを監視し、障害時に優先度を下げる設定を組み合わせます(このときは、もう片方のルータにプリエンプトが必要です)。
うまく動かないときの切り分け
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| 両方が Active になる | お互いの Hello が届いていない(VLAN 不一致、ACL でのブロック、リンク障害) | 同じ VLAN か、224.0.0.2/UDP 1985 が通るか、show standby の Standby router 欄 |
| 相手を認識しない | グループ番号、HSRP のバージョン、認証の設定が一致していない | 両方の standby 設定を見比べる |
| R2 が復旧しても戻らない | プリエンプトが無効 | show standby brief の P 列、standby 1 preempt |
| 端末が通信できない | 端末のデフォルトゲートウェイが仮想 IP ではなく実 IP になっている | 端末の設定と ARP テーブル(仮想 MAC になっているか) |
まとめ
HSRP の基本設定と、仮想 MAC アドレス・Hello パケットの中身を確認しました。設定と確認のポイントをまとめます。
| 項目 | 今回の内容 |
|---|---|
| 設定 | R2・R3 に standby 1 ip 192.168.23.254、R2 に standby 1 priority 105 |
| 役割 | R2 が Active(優先度 105)、R3 が Standby(優先度 100) |
| 仮想 MAC | 0000.0c07.ac01(HSRPv1、グループ 1)。端末の ARP テーブルにもこの MAC が登録される |
| Hello | 224.0.0.2/UDP 1985 宛てに 3 秒ごと。Hold タイムは 10 秒 |
| 確認コマンド | show standby brief(一覧)、show standby(詳細) |
| 実運用で追加したい設定 | プリエンプト(standby 1 preempt)、MD5 認証、必要に応じてトラッキング |
コメント