GARPの機能
GARP (読み方:ジーアープ) または Gratuitous ARP (読み方:グラチュータスアープ) とは、ARP キャッシュの期限切れ以外のタイミングで、自発的に ARP を送る機能です。GARP の送信タイミングは以下の 2 つです。
- IP アドレス付与時に IP アドレス重複が無いかを確認する (RFC 5227)
- IP アドレス変更時や MAC アドレス変更時に、周りの機器の MAC アドレステーブルや ARP テーブルを更新 (アップデート) する
IP アドレス付与時に IP アドレス重複が無いかを確認する
端末に新しく IP を設定し有効化する直前のタイミングで「この IP アドレスを持つ端末の MAC アドレスは何?」と ARP 要求を送出します。以下のような ARP 要求になります。これに誰からか返信があれば、IPが重複しているということになります。
なお、ARP の仕様として、ARP 要求を受信した端末はその ARP 要求の情報を元にARPキャッシュを更新するため、Sender IP Address の Field に重複の確認をしたい IP アドレスを入れて Broadcast してしまうと、周りの端末に使っていいか判明していない IP アドレスを ARP キャッシュに入れてしまう可能性があるため、Sender IP Address の Field は「0.0.0.0」にしなければならない (MUST)と RFC5227 で定められています。
一方、Target Hardware Address は利用されない無視される Field なので、0000:0000:0000 にすべき (Should)、と、MUST よりは弱い表現で定められています。実際、このあたりは OS によって若干実装が異なるようです。
自身の IP アドレスもしくは MAC アドレス変更時に、周りの機器へ MAC アドレステーブルや ARP テーブルの更新を促進する
このケースでは ARP 要求無しに、いきなり ARP 応答を Broadcast します。前者の時と違い、この変更は確定的に正しい情報であるため、ARP 要求でも構いませんし、ARP 応答でも構いません(ARP 応答だけでなく、ARP 要求を受信した機器も ARP テーブルを更新する仕様)。
Linux では IP アドレス変更時には『アドレス重複確認用の GARP』の後に『MAC/ARP テーブルの更新を促進する GARP』が ARP 要求のものと ARP 応答のものの 2 種類が出るようです。
このタイプの GARP は例えば以下のケースで必要になります。
- VRRP や HSRP などの Active 機、Standby 機が切り替わり、仮想 MAC アドレスの接続先ポートが変わったとき (VRRP や HSRP では仮想 IP も仮想 MAC も引き継ぐが、MAC アドレステーブルを更新する必要があるため、GARP を飛ばして更新させる)
- スタックを組んでいる L3 スイッチのうち 1 台が故障し代表 MAC アドレスが変わり、それに付随して VLAN インタフェースに紐づく MAC アドレスが変わったとき
- IP アドレスが変更となったとき
1 は、ARP テーブルの更新ではなく、MAC アドレステーブルの更新のみが目的であることに注意して下さい。
2 は ARP テーブルの更新、および MAC アドレステーブルの更新が目的です。
このように、MAC アドレスの収容ポートが変わったり、自身の保有している IP アドレスに紐づく MAC アドレスが変更した場合は、GARP により、MAC アドレステーブルの更新や ARP キャッシュテーブルの更新を促すべきです。
GARP のコマンド
本来、常に有効化されるべきですが、Cisco では一応、有効無効のコマンドを用意しています。
有効化コマンド
(config)# ip arp gratuitous
無効化コマンド
(config)# no ip arp gratuitous
また Cisco では、スタックのマスターが壊れた際の MAC アドレス変更時には、5 分間数秒置きに GARP を出すような仕様になっています。これはコマンドでの変更は不可です。
コメント