文 / 中国光大银行信息科技部 刘轶勇 魏耀辉

IP地址冲突是指在局域网中某主机配置了与其他主机相同的IP地址导致原主机无法正常处理业务,这种信息故障事件对于实时交易业务尤其是金融行业业务会带来严重影响,快速检测网络中IP地址冲突并定位至关重要。下文将分析不同IP地址冲突场景,整理传统日志监控方式以及研究两种报文采集定位方法,旨在实现快速检测定位,提高运维效率。

数据报文转发与IP地址冲突过程测试

ARP地址解析是主机发现从网络层IP地址到链路层MAC地址之间映射关系的过程。地址解析协议ARP运行的关键是维护每个主机和路由器上记录了IP地址与MAC地址映射关系的ARP高速缓存表。下图中当主机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的广播帧之后,首先将B的IP与MAC映射关系记录到其ARP高速缓存表中,随后发送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高速缓存表。第二个目的则是确定局域网中是否有主机配置了与自己相同的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(192.168.198.129)的IP地址修改为192.168.198.130,以此模拟Linux A主动制造了与Linux B的IP地址冲突。

图8 A主机主动制造与B主机的IP地址冲突

(3)在局域网中抓包,使用wireshark分析IP地址冲突下各主机的的交互情况。

2.实验分析

(1) Linux A进行地址修改后,A主机立马以A主机MAC为源MAC,FF: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: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主机通讯超时后会重新请求一次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主机会返回1个免费ARP,通讯过程中存在通过ARP请求互相抢IP的现象。

随后,以相同的方式模拟了SUSE系统IP地址被冲突、Windows系统IP地址被冲突、Windows系统主动制造IP地址冲突三组实验,得出实验结论如下。

表1 不同系统在IP地址冲突时的ARP交互情况

IP地址冲突反应机制总结

经过上述测试以及其它技术了解,我们总结了宿主机(凡是配置了ip地址并存活于网络中的产品)对ip地址冲突的反应机制,下表列出部分涉及到的产品。

表2 不同产品在IP地址冲突时日志记录及ARP交互情况

注:表中“是”与“否”只针对对测试过的版本与产品型号有效,不确保对该产品不同系列或不同版本有效

IP地址冲突检测方案

1.方案一:主机日志与网络syslog监控

针对可进行ip地址冲突日志记录的宿主机,可对其产生的对应日志进行监控分析并产生告警;针对可发出ip地址冲突syslog的网络设备,可对syslog进行解析监控与告警。

图12 SUSE系统在IP地址冲突时的日志样例

2.方案二:报文MAC检测

通过流量采集设备采集网络中所有流量,并将ip及对应MAC地址解析出来后,发送至大数据分析平台,将其中网络设备的MAC地址进行过滤后,如果发现1个ip地址对应多个不同MAC地址,则判定可能存在ip地址冲突。

图13 TCP/IP网络模型帧封装示意图

在TCP/IP网络模型中,不同的分层封装了不同的信息。数据链路层主要封装了源MAC及目的MAC地址等信息,网络层主要封装了源IP与目的IP等信息。因此,通过对网络中报文进行解包,可以获取到网络中正在进行通信的所有IP与MAC映射关系,通过计算可以分析出是否存在IP地址冲突(即不同MAC地址映射为相同IP地址)。但是由于企业级网络环境复杂且报文数据量较大,该方法的实现成本较高。

3.方案三:ARP报文检测

通过网络流量采集,对所有ARP流量进行实时推送至大数据分析平台,发现同段时间内,存在宣告同个IP对应多个不同MAC地址,则判定为IP地址冲突。具体实现方法:网络采集设备精准过滤ARP流量并推送出来,推送的报文格式为:发送者MAC(宿主机)、目标MAC全为F(广播)、通告IP、时间戳、交换机名称。大数据平台接受到此数据后,判定同秒(或更短)之内是否存在同个通告IP对应多个不同MAC,因在数据采集与推送时带有交换机名称或id的标识,因此,能迅速定位冲突IP所在的网络位置,便于进行相关处置操作,隔离故障源,恢复业务。

4.三种方案优缺点比较

表3 三种不同方案优缺点比较

以上三种方案各有优缺点,我们建议采用“方案一:主机与Syslog监控”与“方案三:ARP报文检测”的组合方案,期望能实现IP地址冲突的快速发现与故障位置定位。