人間なので、時折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が返ってこないことがあった。
その場合は、次の方法で調べるといいだろう。
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検証)。