IP Network: arp
COMMAND
arp - ARPテーブルの表示/設定
DESCRIPTION
arpは、ARP(Address Resolution Protocol)テーブルの表示や設定を行うコマンドです。ARPテーブルとは、イーサネット通信のために用いられるIPアドレスとMACアドレスの対照表です。
arpコマンドを使うことによって、ARPテーブルの設定に問題がないかを確認したり、ARPの登録や削除といった管理を行うことができます。
使用方法
■ ARPテーブルの表示
ARPテーブルの内容を表示するには「-a」オプション(またはオプションなし)を指定します。
$ arp Address HWtype HWaddress Flags Mask Iface router1 ether 1d:b3:7f:20:8a:18 C eth0 192.168.1.3 ether 00:a0:d5:8b:f1:20 CM eth0
ARPテーブルは、基本的にローカルホストが維持しているキャッシュであり、通信を行えば対象ホスト分のエントリーが増え、使用しないエントリーは自動的に削除されます。
基本的には自身のイーサネットでの通信時に使用するエントリーを表示するが、LinuxなどではProxy ARPにも対応しているため、外部のホストへ代理応答するためのエントリーも同時に保持されることがあります。
Address
エントリーのIPアドレス、またはホスト名が表示される。
HWaddress(ハードウェアアドレス)
イーサネットの場合、エントリーのMACアドレス
Flag Mask
エントリー |
意味 |
---|---|
C |
通常のエントリー。このフラグだけの場合、エントリーが一定期間再利用されないとテーブルから自動削除される。 |
M |
永続的エントリー。一定期間再利用されなくても削除されない。 |
P |
Proxy ARP用エントリー。ほかのホストからのARP要求があれば、このエントリー内容を応答する。これ以外のエントリーの情報は、ほかのホストからのARP要求に対して提供されることはない。そのため、Proxy ARP用エントリーは「Publicエントリー」などとも呼ばれる。このエントリーでは、MACアドレスはその応答するインターフェイスのMACアドレスであり、IPアドレスは別のインターフェイスに接続されたネットワークにあるホストのIPアドレスである(つまり、MACアドレスは自身のインターフェイスのものだが、IPアドレスは別のホストのもの) |
Iface(インターフェイス)
ARPテーブルはインターフェイスごとに管理されている。
■ ARPテーブルの追加/削除
ARPテーブルへは、OSによるARPの結果の追加だけでなく、手動でエントリーの追加や即時削除を行うこともできます。
あまり利用する局面はないだろうが、ARP要求/応答がネットワークを圧迫している場合には、通常のキャッシュ・エントリーではなく、永続的なエントリーを追加してARPの回数を減らすことができるかもしれない。
$ arp -s 192.168.1.100 0a:a0:a9:00:12:c1
「-s」オプションで追加されるエントリーは、永続的なエントリーとなります。「temp」オプションを指定することで、通常の キャッシュ・エントリーとして追加することもできます。また、これらの手動で追加したエントリーは、リブート時にはクリアされてしまいます。
指定したファイルから複数のエントリーをまとめて追加する場合、「-f」オプションを用います。ファイル名を省略した場合、「/etc/ethers」ファイルが使用されます。
$ arp -f /usr/local/etc/arp_entry
00:20:d5:2f:78:cf server1 00:70:a8:b8:07:96 192.168.1.101
ARPテーブルからエントリーを削除するには、「-d」オプションを用いて IPアドレスを指定します。
$ arp -d 192.168.1.100
■ Proxy ARPの設定
Proxy ARPは、ほかのホスト宛のARP要求に対して、代理で自身のMACアドレスをARP応答する機能です。別々の物理ネットワークをサブネット分割することなく、仮想的に1つのネットワークに見せかけることができます。
Linuxでは、Proxy ARPに対応しており、複数のインターフェイスを設置したマルチホーム環境などで使用することができが、他の UNIXでは「proxyarpd」デーモンが別途必要になる場合があります。
設定は、ARPテーブルにPublicエントリーを追加するだけです。例えば、元々1つのセグメントだったが、間にマルチホームのLinuxマシンを設置し二つのネットワークを構築したい場合、本来はサブネット分割を行わないといけない。しかし、ホストの設定をすべて一斉に変更するのは時間がかかるので、Proxy ARPを設定することで、一時的に両ネットワークの疎通を行うようにしてみる。
$ arp -i eth0 -s 192.168.2.100 00:a1:88:09:d1:12 pub $ arp -i eth1 -s 192.168.1.100 00:a1:88:09:d1:11 pub
IPルーティングが有効になっていれば、設定後、通常のIP通信が行われます。