2011/04/11

arpingのススメ

>>hiroshiの母でございます。
このたびは、hiroshiがブログの更新を怠ってしまい、皆様には大変ご迷惑を おかけしております。
深くお詫び申し上げます。
~中略~
どうぞ皆様、hiroshiを暖かく迎えてやってくださいまし。
本当は良い子なんです。

というわけでご無沙汰しておりますhiroshiです。技術ネタは大変ご無沙汰な感じになっておりまして、これはよくないな、ということでtommyのネタ在庫から多忙な本人に代わり、まーひーな僕がちょいと拝借して代筆させていただきます。

さて、今回は最上層でリクエストを受け付けているリバースプロキシ用途のサーバを移動させたいケースなどにおけるTIPSです。

DNSだけ切り替えてもクライアントからリバースプロキシまでの経路のN/W機器のキャッシュはガガッと切り替わってくれないので、元サーバにはリクエストが来続けます。ならば、いっそIPアドレスを移動先のサーバに移動してしまいたくなります。

ReverseProxyA(xxx.xxx.xxx.xxx)→ReverseProxyB

そのときに、上流のルータの ARP キャッシュが残ってると、パケットの飛び先が rev-proxyA の MAC アドレスのままになってしまってしばらく通信ができなくなってしまうことが予想されます(数分〜数時間)。

一方、VRRP で IP を切り替えるとそんなことは起こらないので、VRRP がやってることを手でやれば即時に切り替わるはずです。

ということでちょいと調べてみたら、「Gratuitous ARP」という ARP パケットを投げてやるというのが解でした。


ぐぐると send_arp というコマンドを使った例がいろいろ出てきますが、標準コマンドではないのでインストールが必要です。でも最初から入っている /sbin/arping コマンドでも出来るらしいです。こっちの方がいいですね(こんなコマンドあったのか……)。

IP アドレスを移動した先のマシンでこれを実行すればいいわけですね。

# /sbin/arping -q -A -I eth0 -c 1 (IPアドレス)

ARP ならパケットフィルタで ping を落としてても使えるし、 IP 重複のチェックとかにもping よりこっちの方が有用な気がします。


では!