实战|IP地址冲突检测方法研究与实践
文/中国光大银行信息技术部刘毅勇魏姚辉
IP地址冲突是指一台主机被配置了与局域网内其他主机相同的IP地址,使得原主机无法正常办理业务。这种信息失效事件会对实时交易业务,尤其是金融行业业务造成严重影响。快速检测和定位网络中的IP地址冲突是非常重要的。下面将对不同的IP地址冲突场景进行分析,对传统的日志监控方式进行梳理,研究两种报文收集和定位的方法,旨在实现快速检测和定位,提高运维效率。
数据转发和ip地址冲突过程的测试ARP地址解析是主机发现网络层IP地址和链路层MAC地址的映射关系的过程。ARP运行的关键是维护ARP缓存表,该表记录了每台主机和路由器上ip地址和MAC地址的映射关系。下图中,当主机B需要向主机C发送一个数据包时,B只知道C的IP地址,通过查询主机B的ARP缓存表,找不到该IP对应的MAC地址,所以主机B的数据链路层无法封装MAC帧,将数据包发送给主机C。
图1主机B通过ARP缓存表查找主机C的MAC地址
为了获得主机C的MAC地址以便向主机C发送消息,主机B需要广播ARP请求消息来请求目的IP地址的MAC地址。主机C收到B的广播帧后,首先在其ARP缓存表中记录B的ip和MAC的映射关系,然后发送ARP响应通知自己的MAC地址。
图2主机B广播ARP请求消息
主机B收到C的ARP响应后,将MAC地址记录在自己的ARP缓存表中,然后就可以封装MAC帧,将数据包发送给主机C,其他主机收到后会忽略。
图3主机C发送ARP响应消息
地址解析协议ARP还有一个功能,免费ARP。该函数的主要功能是检测IP地址冲突。免费ARP是一种特殊的ARP请求。当主机启动时,它发送一个免费的ARP请求来请求自己IP地址的MAC地址。
图4免费ARP请求消息
免费ARP请求通常有两个目的。第一个目的是当IP地址更改为对应的MAC地址时,通过ARP请求通知局域网中的其他主机更新ARP缓存表。第二个目的是确定LAN中是否有主机配置了与自己相同的IP地址。对于第二个目的,主机不希望收到对这个请求的响应,因为一旦收到响应,就证明另一台主机也配置了相同的IP地址,网络中存在IP地址冲突。
图5免费ARP响应消息
免费ARP报文可以用来检测是否存在IP地址冲突。为了测试IP地址冲突时不同操作系统的ARP交互,我们设置了以下测试环境,通过更改主机的IP地址配置来模拟IP地址冲突。
图6 ARP交互实验环境示意图
以Linux系统下测试IP地址冲突时ARP交互的实验为例。实验如下。
1.实验过程
(1)使用Linux B(192 . 168 . 198 . 130)ping Linux C(192 . 168 . 198 . 131)和Linux C ping Linux B,模拟主机B和主机C之间的正常网络通信..
图7主机B和主机C相互发送ping数据包以模拟网络通信
(2)将Linux A的IP地址(192.168.198.129)改为192.168.198.130,以模拟Linux A主动制造与Linux B的IP地址冲突。
图8主机A的活动制造和主机b之间的IP地址冲突。
(3)在局域网中捕捉数据包,使用wireshark分析IP地址冲突下主机的交互。
2.实验分析
(Linux a修改地址后,主机a立即发送以主机a的MAC为源MAC,ff: ff: ff: ff: ff为目的MAC的免费ARP广播,通过全网通知主机a其IP地址为192.168.198.130。
(2)主机B收到主机A的免费ARP后,以主机B的MAC为源MAC,FF: FF: FF: FF: FF为目的MAC进行响应,宣布主机B在全网的IP为192.168.198.130。
(3)主机A连续发送4次免费ARP公告,但主机B只会在第一时间响应。
(4)由于主机A多次发送免费ARP,主机C的ARP缓存表中记录的192.168.198.130此时为主机A,主机C与192.168.198.130之间的通信不间断。
图9主机IP地址冲突后的ARP交互
(5)主机B(此时IP地址冲突)与主机C (192.168.198.131)的通信中断,通过数据包可以找到主机B(IP:192 . 168 . 198 . 130);Mac: 00: 0C: 29: FF: 12: 87)访问C主机(IP:192 . 168 . 198 . 131;Mac: 00: 0c: 29: 38: 83: 18),C主机向A主机发回一个数据包(IP:192 . 168 . 198 . 130;MAC:00:0c:29:34:eb:e2).
图10 B主计算机和主计算机C之间的网络通信被中断。
(6)主机B和主机C通信超时后,主机C会再次请求ARP,请求192.168.198.131的MAC地址。当主机C收到这个ARP时,会将ARP缓存表中192.168.198.130对应的MAC地址更新为主机B的MAC地址,然后主机B会恢复与主机C的通信。
图11 B主机恢复与c的通信。
3.实验结论
主动制造IP地址冲突的Linux主机会多次发送免费ARP,冲突的Linux主机会返回一个免费ARP。在通信过程中,存在通过ARP请求从对方手中抢夺IP的现象。
然后,用同样的方法模拟了三组实验:SUSE系统IP地址冲突、Windows系统IP地址冲突和Windows系统主动制造IP地址冲突,实验结论如下。
表1 IP地址冲突时不同系统的ARP交互
ip地址冲突响应机制总结经过以上测试和其他技术上的了解,我们总结了主机(所有配置了ip地址并生活在网络中的产品)对IP地址冲突的响应机制。下表列出了一些涉及的产品。
表2 IP地址冲突中不同产品的日志记录和ARP交互
注:表中“是”和“否”只对测试版本和产品型号有效,不保证对本产品不同系列或版本有效。
IP冲突检测方案1。方案1:主机日志和网络系统日志监控
对于可以记录ip地址冲突日志的主机,可以对主机产生的相应日志进行监控和分析,并产生报警;对于可以发出ip地址冲突的syslog的网络设备,可以对syslog进行分析、监控和告警。
图12 IP地址冲突时SuSE系统的日志示例
2.方案2:消息MAC检测
通过流量采集设备采集网络中的所有流量,分析ip和对应的MAC地址,发送到大数据分析平台。在过滤网络设备的MAC地址后,如果一个ip地址对应多个不同的MAC地址,则确定可能存在ip地址冲突。
图13 TCP/IP网络模型的帧封装图
在TCP/IP网络模型中,不同的层封装了不同的信息。数据链路层主要封装源MAC和目的MAC地址,网络层主要封装源IP和目的IP。因此,通过对网络中的报文进行解包,可以得到网络中所有的IP-MAC映射关系,通过计算可以分析是否存在IP地址冲突(即不同的MAC地址映射到同一个IP地址)。但由于企业网络环境复杂,消息数据量大,这种方式的实现成本较高。
3.方案3: ARP报文检测
通过网络流量采集,将所有ARP流量实时推送到大数据分析平台。如果发现有多个不同的MAC地址声明同一个IP对应同一时间段,则判定为IP地址冲突。具体实现方法:网络采集设备精准过滤ARP流量并推送出去。推送的消息格式为:发送方MAC(主机),所有目标MAC为F(广播),公告IP,时间戳,交换机名称。大数据平台收到这些数据后,会在同一秒(或更短)内判断是否有多个不同的MAC对应同一个广告IP。由于数据采集推送带有交换机名称或id的标识,可以快速定位冲突IP所在的网络位置,便于相关处置操作、隔离故障源、恢复业务。
4.三种方案的优缺点比较
表3三种不同方案的优缺点比较
以上三种方案各有利弊。我们建议“方案一:主机和Syslog监控”和“方案三:ARP报文检测”的组合方案,希望实现IP地址冲突和故障定位的快速发现。