在Windows系统中,如果有IP地址冲突,系统会弹出一个对话框来报警。但是Linux服务器一般工作在文本模式下,而且内核对于这种错误没有记录,所有在/var/log/message里也无从查起。
google了一下,找到个小软件叫IPwatchD,用这个小软件就可以检测到IP地址冲突。
该软件有两种工作模式:主动和被动。区别就在于主动模式类似于360安全卫士的ARP防火墙,可以保护地址不受冲突。被动模式则只记录冲突信息到系统日志中。
我配置服务器使用被动模式,下边是简单过程:
yum install libnet # 这个是必须的,程序采用了libpcap来抓包
wget http://ncu.dl.sourceforge.net/project/ipwatchd/ipwatchd/1.1.1/ipwatchd-1.1.1.tar.bz2
tar xvjf ipwatchd-1.1.1.tar.bz2
cd ipwatchd-1.1.1/src
make daemon
make install
然后修改/usr/local/etc/ipwatchd.conf,配置工作模式和监听的网卡,下边是在eth1上开启被动模式。
#eth0 active
eth1 passive
然后用root帐户执行
/usr/local/sbin/ipwatchd -c /usr/local/etc/ipwatchd.conf
这样ipwatchd就作为守护进程跑在了后台,如果发生了IP地址冲突,则在/var/log/message中会看到类似下边的信息:
Oct 21 17:22:15 test-vm IPwatchD[31094]: IPwatchD started
Oct 21 17:23:12 test-vm IPwatchD[31094]: MAC address 0:12:4b:d3:dd:a6 causes IP conflict with address 212.12.36.12 set on interface eth1 - passive mode - reply not sent
Oct 21 17:23:12 test-vm IPwatchD[31094]: MAC address 0:12:4b:d3:dd:a6 causes IP conflict with address 212.12.36.12 set on interface eth1 - passive mode - reply not sent
Oct 21 17:23:13 test-vm IPwatchD[31094]: MAC address 0:12:4b:d3:dd:a6 causes IP conflict with address 212.12.36.121 set on interface eth1 - passive mode - reply not sent