【HSRP】基本設定とHelloパケット

HSRP(Hot Standby Router Protocol)は、Cisco 独自のゲートウェイ冗長化プロトコルです。2台のルータで1つの仮想ゲートウェイアドレスを共有し、端末にはその仮想アドレスをデフォルトゲートウェイとして設定します。片方のルータが故障しても、もう片方が仮想アドレスを引き継ぐので、端末の設定を変えずに通信を続けられます。

この記事では、HSRP の基本設定を行い、端末からの疎通と ARP、show standby の表示、ルータ間でやり取りされる Hello パケットを確認します。

この記事でわかること
  1. R2・R3 に HSRP を設定し、仮想ゲートウェイを作る
  2. 端末から疎通を確認し、ARP で仮想 MAC アドレスを見る
  3. show standby で Active/Standby の状態を確認する
  4. ルータ間の Hello パケットの中身を確認する

HSRP の仕組み

HSRP では、2台以上のルータで「仮想ルータ」を作ります。仮想ルータは、仮想 IP アドレスと仮想 MAC アドレスを持ち、実際にはその時点の Active ルータが仮想ルータとしてパケットを転送します。Standby ルータは Hello パケットで Active ルータを見守り、Active ルータの Hello が届かなくなると代わりに Active になります。

Hello(3秒ごと) 224.0.0.2 / UDP 1985 R2 Active 優先度 105 R3 Standby 優先度 100 仮想ルータ(Active が担当) 192.168.23.254 / 0000.0c07.ac01 192.168.23.0/24 端末 デフォルトゲートウェイ 192.168.23.254
図1 HSRP の考え方。端末は仮想ルータだけを相手にする
用語意味
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)です。

R5 Lo0 5.5.5.5/32 .5 .5 192.168.25.0/24 192.168.35.0/24 .2 R2 Active R3 Standby HSRP グループ 1 仮想 IP .254 .2 .3 192.168.23.0/24(VLAN 23) .100 端末 デフォルトゲートウェイ 192.168.23.254
図2 検証構成

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進数で入ります。

仮想 MAC アドレスを使う理由

Active が R2 から R3 に切り替わっても、仮想 MAC アドレスは変わりません。そのため端末は ARP テーブルを更新しなくても、同じ宛先 MAC アドレスでそのまま通信を続けられます。HSRP では、新しく Active になったルータが Gratuitous ARP を送り、スイッチの MAC アドレステーブルを新しいポートに向け直します。

ARP リプライのキャプチャ

端末が仮想ゲートウェイアドレスの ARP を要求すると、Active ルータが応答します。ARP リプライをキャプチャすると、次のように表示されます。

画面イメージについて

この記事のキャプチャ画面は、実際の画面ではなく、検証時の Wireshark の画面から表示内容のポイントを抜き出して描いたイメージです。Wireshark のバージョンによって表記は変わります。

パケットキャプチャ(Wireshark):ARP リプライ画面イメージ
▸ 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
図3 仮想ゲートウェイの ARP リプライ(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Opcode: reply (2)ARP の応答パケット
2Sender 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
表示意味
GrpHSRP のグループ番号(1)
Priこのルータの優先度。R2 は 105、R3 は既定値の 100
Pプリエンプトが有効なら「P」が付く。今回はどちらも空欄(無効)
Stateこのルータの状態。R2 が Active、R3 が Standby
ActiveActive ルータのアドレス。自分が Active なら local
StandbyStandby ルータのアドレス。自分が 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 secHello の送信間隔と 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 を送ります。

パケットキャプチャ(Wireshark):HSRP Hello画面イメージ
TimeSourceDestinationProtocolInfo
10.120889192.168.23.2224.0.0.2HSRPHello (state Active)
2.857204192.168.23.2224.0.0.2HSRPHello (state Active)
5.724507192.168.23.2224.0.0.2HSRPHello (state Active)
8.446810192.168.23.2224.0.0.2HSRPHello (state Active)
10.860695192.168.23.2224.0.0.2HSRPHello (state Active)
13.561715192.168.23.2224.0.0.2HSRPHello (state Active)
16.040000192.168.23.2224.0.0.2HSRPHello (state Active)
18.704370192.168.23.2224.0.0.2HSRPHello (state Active)
21.225279192.168.23.2224.0.0.2HSRPHello (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
図4 R2 が送る HSRP Hello(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Time 列R2 からの Hello がおよそ 3 秒ごと(実際には 3 秒より少し短い間隔)で届いている
2Dst: 224.0.0.2/Port: 1985宛先はマルチキャスト 224.0.0.2(同じセグメントの全ルータ)、UDP ポート 1985。Active の R2 は送信元 MAC に仮想 MAC アドレスを使っている
3Version: 0HSRP バージョン 1(パケット上の値は 0)。HSRPv2 では 224.0.0.102 宛てになり、パケット形式も変わる
4Op Code: Hello (0)/State: Active (16)メッセージの種類(Hello)と、送信元ルータの状態(Active)
5Hellotime/HoldtimeHello タイム 3 秒、Hold タイム 10 秒(既定値)
6Priority: 105/Group: 1送信元ルータの優先度と、HSRP のグループ番号
7Authentication Data: Default (cisco)認証文字列。既定値の「cisco」が平文で入っている
8Virtual IP Address: 192.168.23.254仮想 IP アドレス
補足:認証について

HSRP の認証は、既定では「cisco」という文字列が平文で Hello に入っているだけで、キャプチャすれば誰でも読めます。同じセグメントに不正なルータを置かれて Active を奪われるのを防ぐには、standby 1 authentication md5 key-string … などで MD5 認証を設定します。

HSRP の状態

Hello の State には、送信元ルータの状態が入ります。HSRP のルータは、起動後に次の状態を順に進みます。

状態値内容
Initial0HSRP が動き始める前の状態
Learn1仮想 IP アドレスをまだ知らず、Active ルータからの Hello を待っている
Listen2仮想 IP アドレスは知っているが、Active でも Standby でもない(3台以上のときの残りのルータ)
Speak4Hello を送り、Active/Standby の選出に参加している
Standby8次の Active 候補
Active16仮想ルータとしてパケットを転送している

Active ルータが故障したときの動き

この記事では切り替えの試験はしていませんが、HSRP の基本的な動きは次のとおりです。

  1. Active の R2 が故障すると、R2 からの Hello が届かなくなります。
  2. R3 は Hold タイム(10 秒)の間 Hello を受け取れないと、R2 が故障したと判断して Active になります。
  3. 新しく Active になった R3 は、仮想 MAC アドレスで Gratuitous ARP を送ります。スイッチの MAC アドレステーブルが R3 側に切り替わり、端末のパケットは R3 に届くようになります。
  4. 端末から見たデフォルトゲートウェイの 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)
仮想 MAC0000.0c07.ac01(HSRPv1、グループ 1)。端末の ARP テーブルにもこの MAC が登録される
Hello224.0.0.2/UDP 1985 宛てに 3 秒ごと。Hold タイムは 10 秒
確認コマンドshow standby brief(一覧)、show standby(詳細)
実運用で追加したい設定プリエンプト(standby 1 preempt)、MD5 認証、必要に応じてトラッキング

コメント