Linuxでネットワーク内に重複、衝突しているIPアドレス(競合IPアドレス)を調べる方法
Pocket

人間なので、時折IPアドレスの設定時に誤って重複したアドレスを振ってしまう、設定してしまうこともある(DHCPサーバの範囲内のアドレスで固定IP設定しちゃったりとか)。
そんな時すぐに気づければいいのだが、結構気づかずにそのままにしてしまって対象のホストのネットワークが不安定になった段階でようやく気付くこともあるだろう。

そんなときは、以下のいずれかの方法で重複したIPアドレスを調べて修復してやるといいだろう。

1.arpingで調べる

重複しているであろうIPアドレスに当たりがついている状態であれば、apringコマンドで確認ができる。
そのIPアドレスが重複している場合、返ってくるMACアドレスが交互に出てくるので、そこで判断する。

sudo arping -I eth0 -c 2 重複しているであろうIPアドレス
blacknon@BS-PUB-UBUNTU-01:~$ sudo arping -I eth0 -c 2 192.168.0.121
ARPING 192.168.0.121
60 bytes from 36:33:62:65:63:36 (192.168.0.121): index=0 time=10.202 msec
60 bytes from 66:66:63:65:34:36 (192.168.0.121): index=1 time=10.742 msec
60 bytes from 36:33:62:65:63:36 (192.168.0.121): index=2 time=3.603 msec
60 bytes from 66:66:63:65:34:36 (192.168.0.121): index=3 time=4.433 msec

--- 192.168.0.121 statistics ---
2 packets transmitted, 4 packets received,   0% unanswered (2 extra)
rtt min/avg/max/std-dev = 3.603/7.245/10.742/3.246 ms

ただ、前にWindowsと混合してて、かつWindowsファイアウォールが動いてるとpingが返ってこないことがあった。
その場合は、次の方法で調べるといいだろう。

Sponsored Links

2.arp-scanで調べる

前にこちらでも触れていた、指定したインターフェイスの所属するネットワークからすべてのIPアドレスを抽出するarp-scanコマンドを利用することで、重複しているIPアドレスを調べることができる。
以下のコマンドを実行することで、重複しているIPアドレスとMACアドレスのみを抽出する。

sudo arp-scan -I eth0 -l | awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {print $2,$1}' | uniq -D -f 1
blacknon@BS-PUB-UBUNTU-01:~$ sudo arp-scan -I eth0 -l | awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {print $2,$1}' | uniq -D -f 1
36:33:62:65:63:36 192.168.0.121
66:66:63:65:34:36 192.168.0.121

 

とりあえず、この2通りの方法を把握していれば対応はできるだろう。
なお、一応LinuxにもIPwatchDというIPアドレスの衝突を検知するデーモンが作られているようなのだけど、どうもクライアント用みたいでログに出せなかった(Ubuntu Server 16.04検証)。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。