- 1 arpingコマンドとは?
- 2 検証環境
- 3 オプション一覧
- 4 書式
- 5 送信インタフェースを指定する方法(-I)
- 6 ARPパケットの送信回数を指定する方法(-c)
- 7 重複検出(-D)
- 8 隣接ホストのARPテーブルを更新する方法(-U)
- 9 隣接ホストのARPテーブルを更新する方法(-A)
- Z 参考情報
2 検証環境
3 オプション一覧
オプションは以下のとおりです。
[root@client ~]# arping -h Usage: arping [-fqbDUAV] [-c count] [-w timeout] [-I device] [-s source] destination -f : quit on first reply -q : be quiet -b : keep broadcasting, don't go unicast -D : duplicate address detection mode -U : Unsolicited ARP mode, update your neighbours -A : ARP answer mode, update your neighbours -V : print version and exit -c count : how many packets to send -w timeout : how long to wait for a reply -I device : which ethernet device to use -s source : source ip address destination : ask for what ip address
-D,-U,-AのOpcode、用途を以下に示します。()内はOpcodeの値です。
オプション | Opcode | 用途 | 備考 |
---|---|---|---|
-D | ARP要求(1) | IPアドレスの重複検出をおこなう | 送信者IPアドレスが0.0.0.0のARP probeパケットを送信する |
-U | ARP要求(1) | 他ホストのARPテーブル更新をおこなう | |
-A | ARP応答(2) | 他ホストのARPテーブル更新をおこなう。冗長構成のシステムでmaster/backupサーバの切替時に使う |
4 書式
arpingコマンドの書式は以下になります。
arping [オプション] 問い合わせ対象のIPアドレス
5 送信インタフェースを指定する方法(-I)
-Iは、ARPパケットの送信インタフェースを指定するオプションです。
クライアントのeth0からARPパケットをサーバに送信してみます。そして、サーバのeth0のIPアドレス(192.168.122.216)に対するMACアドレスを確認してみます。192.168.122.216に対するMACアドレスは、52:54:00:6F:B0:CAであることがわかります。
[root@client ~]# arping -I eth0 192.168.122.216 ARPING 192.168.122.216 from 192.168.122.181 eth0 Unicast reply from 192.168.122.216 [52:54:00:6F:B0:CA] 1.905ms Unicast reply from 192.168.122.216 [52:54:00:6F:B0:CA] 1.494ms Unicast reply from 192.168.122.216 [52:54:00:6F:B0:CA] 1.365ms ^CSent 3 probes (1 broadcast(s)) Received 3 response(s)
6 ARPパケットの送信回数を指定する方法(-c)
-cは、ARPパケットの送信回数を指定するオプションです。ここでは、ARPパケットを1つ送信してみます。
[root@client ~]# arping -c 1 -I eth0 192.168.122.216 ARPING 192.168.122.216 from 192.168.122.181 eth0 Unicast reply from 192.168.122.216 [52:54:00:6F:B0:CA] 1.595ms Sent 1 probes (1 broadcast(s)) Received 1 response(s)
arpingコマンドを実行すると、クライアントからサーバにARP requestパケットが送信されます。そして、その応答として、サーバからクライアントにARP replyパケットが送信されます。このときのWiresharkの実行結果を以下に示します。
・ARP requestパケット送信時
・ARP replyパケット送信時
7 重複検出(-D)
7.1 同じIPアドレスを持ったホストが同一LAN上に存在する場合
192.168.122.216が同一LAN上に存在するかどうかを確認します。応答があることから(★印)、同一LAN上に192.168.122.216が存在することがわかります。
[root@client ~]# arping -D -c 1 -I eth0 192.168.122.216 ARPING 192.168.122.216 from 0.0.0.0 eth0 Unicast reply from 192.168.122.216 [52:54:00:6F:B0:CA] 1.310ms Sent 1 probes (1 broadcast(s)) Received 1 response(s) ★
7.2 同じIPアドレスを持ったホストが同一LAN上に存在しない場合
192.168.122.100が同一LAN上に存在するかどうかを確認します。応答がないことから(★印)、同一LAN上に192.168.122.100が存在しないことがわかります。
[root@client ~]# arping -D -c 1 -I eth0 192.168.122.100 ARPING 192.168.122.100 from 0.0.0.0 eth0 Sent 1 probes (1 broadcast(s)) Received 0 response(s) ★
8 隣接ホストのARPテーブルを更新する方法(-U)
-Uは、Opcodeにrequest(1)を設定して、GARP(Gratuitous ARP)パケットを送信するオプションです。
8.1 ARPテーブル更新のタイミング
通常は以下のように、ARP requestに対してARP replyを受信することでARPテーブルを更新します。
client server | IP=x.x.x.x | | MAC=yy:yy:yy:yy:yy:yy | | | ARPテーブル | | +-----------------------------+ | | | IP | MAC | | | +---------+-------------------+ | | | | | | | +-----------------------------+ |<------------- ARP request -----------------| |-------------- ARP reply ------------------>| ARPテーブル更新 | | | | ARPテーブル | | +-----------------------------+ | | | IP | MAC | | | +---------+-------------------+ | | | x.x.x.x | yy:yy:yy:yy:yy:yy | | | +-----------------------------+ | |
arpingコマンドを使うと、以下のようにしてARPテーブルを更新することができます。
client server | IP=x.x.x.x | | MAC=yy:yy:yy:yy:yy:yy | ARPテーブル | | +-----------------------------+ | | | IP | MAC | | | +---------+-------------------+ | | | | | | | +-----------------------------+ | | arping -U x.x.x.x |---------- GARP -------->| ARPテーブル更新 | (ARP request) | | | ARPテーブル | | +-----------------------------+ | | | IP | MAC | | | +---------+-------------------+ | | | x.x.x.x | yy:yy:yy:yy:yy:yy | | | +-----------------------------+ | |
8.2 ARPテーブル更新のための設定
GARPパケット受信時にARPテーブルを更新するためには、arp_acceptを1にする必要があります。arp_acceptについて、ip-sysctl.txtより抜粋したものを以下に示します。
arp_accept - BOOLEAN Define behavior for gratuitous ARP frames who's IP is not already present in the ARP table: 0 - don't create new entries in the ARP table 1 - create new entries in the ARP table Both replies and requests type gratuitous arp will trigger the ARP table to be updated, if this setting is on. If the ARP table already contains the IP address of the gratuitous arp frame, the arp table will be updated regardless if this setting is on or off.
デフォルトは、以下のように0です。
[root@server ~]# sysctl -n net.ipv4.conf.eth0.arp_accept 0
8.3 動作確認
arp_acceptに1を設定します。
[root@server ~]# sysctl -w net.ipv4.conf.eth0.arp_accept=1 net.ipv4.conf.eth0.arp_accept = 1
ARPテーブルを確認します。
[root@server ~]# ip n 192.168.122.1 dev eth0 lladdr 52:54:00:80:1d:d6 REACHABLE
arpingコマンドを実行します。
[root@client ~]# arping -U -c 1 -I eth0 192.168.122.181 ARPING 192.168.122.181 from 192.168.122.181 eth0 Sent 1 probes (1 broadcast(s)) Received 0 response(s)
ARPテーブルを確認します。クライアントのARPエントリ(IPアドレスとMACアドレスの組)が追加されたことがわかります。
[root@server ~]# ip n 192.168.122.1 dev eth0 lladdr 52:54:00:80:1d:d6 REACHABLE 192.168.122.181 dev eth0 lladdr 52:54:00:d0:e3:a7 STALE
arpingコマンド実行時のWiresharkの実行結果を以下に示します。
9 隣接ホストのARPテーブルを更新する方法(-A)
-Aは、Opcodeにreply(2)を設定して、GARPパケットを送信するオプションです。
9.1 ARPテーブル更新のタイミング
arpingコマンドを実行すると、以下のように能動的にARPテーブルを更新することができます。
client server | IP=x.x.x.x | | MAC=yy:yy:yy:yy:yy:yy | ARPテーブル | | +-----------------------------+ | | | IP | MAC | | | +---------+-------------------+ | | | | | | | +-----------------------------+ | | arping -A x.x.x.x |------------ GARP --------->| ARPテーブル更新 | (ARP reply) | | | ARPテーブル | | +-----------------------------+ | | | IP | MAC | | | +---------+-------------------+ | | | x.x.x.x | yy:yy:yy:yy:yy:yy | | | +-----------------------------+ | |
9.2 動作確認
arp_acceptに1を設定します。
[root@server ~]# sysctl -w net.ipv4.conf.eth0.arp_accept=1 net.ipv4.conf.eth0.arp_accept = 1
ARPテーブルを確認します。
[root@server ~]# ip n show 192.168.122.1 dev eth0 lladdr 52:54:00:80:1d:d6 REACHABLE
arpingコマンドを実行します。
[root@client ~]# arping -A -c 1 -I eth0 192.168.122.181
ARPテーブルを確認します。クライアントのARPエントリ(IPアドレスとMACアドレスの組)が追加されたことがわかります。
[root@server ~]# ip n show 192.168.122.1 dev eth0 lladdr 52:54:00:80:1d:d6 REACHABLE 192.168.122.181 dev eth0 lladdr 52:54:00:d0:e3:a7 STALE
arpingコマンド実行時のWiresharkの実行結果を以下に示します。
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ
Gratuitous ARP – Definition and Use Cases – Practical Networking .net