HSRP 基礎編:(9) HSRP ルーターが送信するGratuitous ARP

アクティブ・ルーターは、バーチャルIP アドレス宛と、自身のインターフェイスに設定されたリアルIP アドレス宛、両方のパケットを処理する必要があります。
a
アクティブ・ルーターが送信するパケットは、バーチャルIP、リアルIP アドレス、どちらを送信元とする場合も、バーチャルMAC アドレスを送信元MAC アドレスとして使用します。

そのため、ルーターが新たにアクティブ・ルーターになると、リアルIP アドレスに関連付けられるMAC アドレスは、リアルMAC アドレスからバーチャルMAC アドレスに変わります。

反対に、ルーターがアクティブ・ルーターであることを辞めると、リアルIP アドレスに関連付けられるMAC アドレスをバーチャルMAC アドレスからリアルMAC アドレスに戻さなければなりません。

IP アドレスとMAC アドレスの関連付けが変わった事をサブネット内の機器へ通知するために、ルーターはGratuitous ARP(グラテュイタスARP)と呼ばれる特別なARP リプライ(返信)・パケットを送信します。

※ Gratuitous とは、「不必要な」「無意味な」といった意味の英単語です。


アクティブ・ルーターの切り替わり時に送信されるGratuitous ARP は、Sender IP とTarget IP の両方にルーターのリアルIP アドレスが格納されたARP リプライです。
自分宛の返信というARP 本来の目的からは外れた方法であることから、Gratuitous と呼ばれています。

※ Gratuitous ARP は、VRRP など他のプロトコルでも利用されています。文字通り「意味のない」ARP なので共通の規則があるわけではなく、採用しているプロトコル毎に異なります。


下記の例は、リアルIP が192.168.1.200 のルーターが、アクティブ・ルーターになった時に送信するGratuitous ARP です。
リアルIP アドレスとバーチャルMAC アドレスの組み合わせで、ARP リプライを一回ブロードキャスト送信しています。(Packet#1)
続けて、バーチャルIP アドレスとバーチャルMAC アドレスの組み合わせで、ARP リプライをロードキャスト(Packet#2)とマルチキャスト送信(Packet#3)しています。

*Feb  4 19:32:44.324: IP ARP: sent rep src 192.168.1.200 0000.0c07.ac0a, ← Packet#1
                 dst 192.168.1.200 ffff.ffff.ffff Ethernet0/0
*Feb  4 19:32:44.324: IP ARP: sent rep src 192.168.1.1 0000.0c07.ac0a, ← Packet#2
                 dst 192.168.1.1 ffff.ffff.ffff Ethernet0/0
*Feb  4 19:32:44.324: IP ARP: sent rep src 192.168.1.1 0000.0c07.ac0a, ← Packet#3
                 dst 192.168.1.1 0100.0ccd.cdcd Ethernet0/0

Packet#3で宛先に指定されているマルチキャストのMAC アドレス 01-00-0c-cd-cd-cd は、Cisco 社でダミー・マルチキャストと呼ばれているマルチキャスト・アドレスです。
スパニングツリー・プロトコルのCisco 独自機能であるUplinkFast(アップリンクファースト)でも、アップリンクの切り替わりを同報するためのマルチキャスト・パケットに用いられています。

hsrp-a9-1.png
上図では、Router-A がアクティブ・ルーター、Router-B がスタンバイ・ルーターとなっています。ここで、Router-A のPriority を85に下げます。

hsrp-a9-2.png

プライオリティが低くなったRouter-A がスタンバイ・ルーターに遷移し、Router-B がアクティブ・ルーターとなり、Gratuitous ARP を送信します。
端末のARP キャッシュ上のエントリーは、Router-B のリアルIP アドレス(192.168.1.200) に関連付けるMAC アドレスをバーチャルMAC アドレスへ、Router-A のリアルIP アドレス(192.168.1.100)に関連付けるMAC アドレスをリアルMAC アドレスへ変更します。

バーチャル・ルーター役のルーターの切り替わった時にGratuitous ARP が送信されないと、端末はARP キャッシュ上のリアルIP アドレスに対応するエントリーを適切に書き換えることができません。

hsrp-a9-3.png

上図では、Router-A がスタンバイ・ルーターへ遷移したにもかかわらず、端末からRouter-B のリアルIP アドレス宛パケットの宛先MAC アドレスがバーチャルMAC アドレスとなっているため、Router-A に無視され、破棄されています。



ここでもう一度、Gratuitous ARP のログを見てみましょう。先に提示したログと全く同じものです。

*Feb  4 19:32:44.324: IP ARP: sent rep src 192.168.1.200 0000.0c07.ac0a, ← Packet#1
                 dst 192.168.1.200 ffff.ffff.ffff Ethernet0/0
*Feb  4 19:32:44.324: IP ARP: sent rep src 192.168.1.1 0000.0c07.ac0a, ← Packet#2
                 dst 192.168.1.1 ffff.ffff.ffff Ethernet0/0
*Feb  4 19:32:44.324: IP ARP: sent rep src 192.168.1.1 0000.0c07.ac0a, ← Packet#3
                 dst 192.168.1.1 0100.0ccd.cdcd Ethernet0/0

このログは新しくアクティブ・ルーターとなったルーターが送信したGratuitous ARP です。
Packet#1は、端末に対してRouter-B のリアルIP アドレスと関連付けるMAC アドレスをバーチャルMAC アドレスへ変更するよう促すために送信します。
ここで注目してほしいのはPacket#2 と#3 のIP アドレスとMAC アドレスがバーチャル・ルーターのアドレスである点です。
HSRP の存在理由が「デフォルト・ゲートウェイの切り替わりを端末に意識させない」ことであれば、このようなGratuitous ARP は必要ないはずです。

では、なぜPacket#2 や#3があるのでしょうか?

ネットワークの構成をルーター中心に考えていると、理由はなかなか見えてきません。
HSRP が登場したばかりのころのLAN は、10BASE5や10BASE2 等のシェアード・メディア(バス型ネットワーク)やシェアード・ハブ(リピーター・ハブ)の組み合わせで構成するのが主流でした。つまり、サブネット = コリジョン・ドメインです。送信するパケットは、宛先がどこであろうが、サブネット内のすべての機器が受信できます。

しかし、ルーターと端末の間にLAN スイッチ(=ブリッジ)が存在すると状況は変わります。
ブリッジは、受信したパケット(=フレーム)の宛先MAC アドレスを見て、そのパケットをどのポートへ転送するか(もしくは、転送せずに破棄するか)を決定します。
この機能は、ブリッジが持つフィルタリング・データベース(MAC アドレス・テーブルと呼ぶこともあります)へ、受信したパケットから抽出する送信元MAC アドレスを受信ポートに関連づけて学習させることで実現します。

hsrp-a9-4.png
もしRouter-Bが、アクティブ・ルーターになったにも関わらず、そのことがブリッジに伝わらないと、バーチャルMAC アドレスはRouter-A の接続するポート(上図のPort 1)で学習されたままとなります。バーチャル・ルーター宛のパケット(もしくは、バーチャル・ルーターにルーティングしてほしいパケット)は、フィルタリング・データベースのエントリーがエイジ・アウトするまで正しいルーターに届きません。

hsrp-a9-5.png
Router-B がアクティブ・ルーターとなる時、バーチャルIP アドレスとバーチャルMAC アドレスの関連付けを意味するGratuitous ARP を送信することで、バーチャルMAC アドレスの学習されるポートを変更するよう、ブリッジに促すことができます。

hsrp-a9-6.png