プロキシARPってどういうときに使うの? IPv4とIPv6での違いは?

「プロキシARPの設定はオンオフどっちがいいの?」
「IPv4のときとIPv6のときで違いはある?」
「ARP要求に相手の機器が応答してくれないけど、どうしたらいい?」
という疑問をお持ちの方に向けた記事です。

ARPとは?

まずは前提としてARPについておさらいします。

Tips
ARPとは:
ARP(Address Resolution Protocol)
アドレス解決プロトコル。アープと呼ばれ、与えられたインターネット層アドレス(基本的にはIPv4アドレス)に対応するリンク層アドレス(MACアドレス)を見つけるために使われる通信プロトコルのことです。

ARPは具体的にどのようなときに使われている?

たとえば、自分のPCと同じローカルネットワークに接続されている機器に対してpingを送る場合を見ていきましょう。

コマンドプロンプトを開いて、

ping 192.168.10.1

というコマンドを実行した場合、実際の挙動としては、コマンドで指定したネットワークアドレス「192.168.10.1」へと即座に直接IPパケットが送信されるわけではありません

実際の挙動としては、
1. コマンドで指定したネットワークアドレス「192.168.10.1」の機器が持っているMACアドレスを
調べる
2. 調べて取得したMACアドレスを宛先としたイーサネットフレームにIPパケットを格納して送信

という順番になります。
つまり、宛先の機器が持つIPアドレスに対応した物理アドレスを調べる処理、「アドレス解決」が必ず必要となります。

このアドレス解決処理のために使用されるプロトコルがARPです。

ARPの挙動の具体例を紹介

上記の例のように、コマンドプロンプトで ping 192.168.10.1 というコマンドを実行した場合は、自分のPCからは、ローカルネットワーク全体へと
「IPアドレスが「192.168.10.1」の機器はいらっしゃいますかー? いらっしゃったらMACアドレスをこちらへ教えてください」と呼びかけています。ネットワーク用語でいうところの、ブロードキャスト(同じメッセージを複数の受信者に対して同時に転送すること)ってやつですね。

このブロードキャスト時に送信されるパケットこそが、「ARP要求パケット」です。
このARP要求を受信した機器は、パケット内に書かれているIPアドレスと自身のIPアドレスを照合します。照合の結果、IPアドレスが一致した場合は、ARP要求してきた機器に対して、
「あっ、それは私です。MACアドレスは〇〇:〇〇:〇〇:〇〇:〇〇:〇〇ですよ」という内容のメッセージを返信します。この返信で送られるパケットを「ARP応答パケット」と呼びます。

ちなみに、ARP要求を受信してパケット内に書かれているIPアドレスと自身のIPアドレスを照合した結果、IPアドレスが一致しなかった場合は、ARP応答パケットは返信されません。ただただシカトするだけです。この挙動は冷たいように感じるかもしれませんが、ネットワークのトラフィックを無駄に使用しないためには効率的だと言えるでしょう。

Tips
イーサネットフレームとは:
イーサネットフレーム(Ethernet frame)はデータリンク層のプロトコルデータユニット。イーサネットフレームは基礎となるイーサネット物理層(Ethernet physical layer)の転送機構を利用して転送がおこなわれる。
イーサネットフレームはペイロード(正味の中身)として、イーサネット上のパケットにより転送される。
イーサネットフレームの種類としては、
・Ethernet II(ペイロード開始の2バイト「Any」)
・Novell raw IEEE 802.3(ペイロード開始の2バイト「0xFFFF」)
・IEEE 802.2 SNAP(ペイロード開始の2バイト「0xAAAA」)
・IEEE 802.2 LLC(ペイロード開始の2バイト「Other」)
がある。
これらの異なるフレーム種類は、それぞれ異なるフォーマットやMTU値を持つが、同一物理媒体上に共存が可能。ペイロード開始の2バイトなどで区別することができる。

IPv6アドレスの場合には、ICMPv6のNDPによってARPの機能が実現されます。
また、ICMPv6の枠組みは、ARPとしての挙動(アドレス解決)だけでなく、アドレス重複の検出にも利用されている。

ご存知のとおり、プロキシは代理という意味ですので、
プロキシARPは「アドレス解決プロトコルに対しての代理応答」と思っていただければ差し支えありません。

Tips
ICMPv6とは:
ICMPv6(Internet Control Message Protocol for IPv6)
IPv6 の枠組みを利用したインターネット制御メッセージプロトコル。
パケットフォーマットじたいはICMPと同じ構造。
RFC4443で定義されている。
NDPとは:
NDP(Neighbor Discovery Protocol)は、自分側の機器のMACアドレスなどと、ルータから取得した情報を組み合わせることにより、IPv6ネットワークアドレスを自動的に設定するプロトコル。日本語では近隣探索プロトコルと呼ばれる。(近隣発見プロトコルと訳されることもある)
RFC2461で定義されている。

 

リクエスト先の機器がARP要求に応答してくれない場合は?

TCP/IPによるネット通信をおこなう場合には、
・IPアドレス(Internet Protocol Address)
・MACアドレス(Media Access Control address 物理アドレスとも呼ばれる。機器のインターフェイスに設定されている)
これら2つの情報が必要です。

接続先のIPアドレスへとアクセスしたときにARP要求をおこなうことで、接続先機器のMACアドレスの情報を得ます。

しかし、接続先機器に対してARPリクエストを送った場合でも、相手の機器の仕様によってはARP応答が返されてこない場合があります

ARPリクエストに対する応答がない場合の対処法をみていきましょう。

対処法その1:自身の機器にARPエントリを静的に登録しておく

相手機器のIPアドレスとMACアドレスの情報をARPエントリに静的(スタティック)に登録しておきます。

※注意点
ARPエントリを静的に登録した場合の注意点:
相手機器の故障などで製品交換がされた場合、MACアドレスが変わってしまう(同一機種だとしてもMACアドレスは変わる)ため、再設定が必要となります。

 

対処法その2:自身の機器に「/32」のホストルートを設定する

ARP応答をしてくれない機器のインターフェイスをネクストホップ(次に転送すべき隣接機器のIPアドレス)にしてホストルートを設定します。

ホストルートとは:
サブネットマスク「/32」 のルート情報です。(IPv4の場合)
32個のビットがすべて立っているため、サブネットマスクは「255.255.255.255」となります。

対処法その3:相手の機器でプロキシARPを有効化する

ARP応答をしない仕様の機器の例としては、ジュニパーネットワークス社の「Juniper SRXシリーズ」などがあります。(同シリーズの場合は、自分のインターフェイスのIPアドレスからのARPであれば応答します)

このようなケースでは、相手の機器での設定でプロキシARPを有効化することにより、代理応答させる形となります。

あわせて読みたい記事