实战案例:有意思,用户网络下全部苹果设备接入都拿不到IP!而笔记本、安卓没事
本期分享的案例是网络的相关问题。
1. 问题背景用户公司某研发中心网络突然有一天反馈一个奇妙的问题:采购的全套某J网络设备,网络下全部苹果设备通过无线接入网络后都拿不到IP,苹果手机、Macbook等通通不行!而笔记本、安卓却没事。
拓扑结构:
看起来是个很有意思的问题,我们一起来看看原因吧。
2. 基础排查(1) 首先要检查的自然是AP在线情况了,这点用户明确现场AP均在线;
(2) 确认AP、AC工作正常,便怀疑和SSID、信道有关?但是修改后依旧没用;
(3) 然后怀疑可能是无线问题,于是将苹果电脑有线插到交换机上,发现问题依旧,所以基本排除了无线网络故障;
(4) 检查DHCP服务器,发现在系统日志中发现DHCP服务器不断的再给苹果终端分配IP地址:
目前来看,是DHCP服务器分出去了,但是苹果终端一直没有拿到?没辙,接下来抓个包看看DHCP交互,确认到底是DHCP服务器有问题还是苹果设备有问题。
3. 排查分析第一步:找一台苹果电脑安装Wireshark抓包
复现问题后,过滤DHCP报文,查看交互情况如下:
可以看到,DHCP四次交互完后,过了几秒后,苹果设备就发了DHCP Decline,取消以获得的IP地址,然后再重新获取。乍一看怎么是苹果设备的问题?但请等等,终端为什么会发这个报文?如下:
DHCP Decline:是终端向 DHCP 服务器发送的一种报文,用于拒绝接受已分配的IP地址,并告知服务器该地址不可用。它属于 DHCP 协议中的异常处理机制,确保网络中 IP 地址的唯一性。也就是说,苹果设备拿到IP后做检测,发现IP冲突了!那么是怎么检测IP冲突的呢?当然是通过ARP了,所以我们结合DHCP Decline前后一起看下ARP报文第二步:确认AC能投ping通AP,并且是否开了认证
分析苹果设备DHCP交互前后的ARP报文:
从上述报文可用看到如下情况:
苹果设备成功DHCP四次交互从服务器那里拿到IP地址192.168.10.146然后全网广播通告免费ARP:我是192.168.10.146但突然收到一个设备发来的ARP:我才是192.168.10.146!苹果设备发现IP被占用,故发DHCP Decline释放当前IP重新IP那么这个后四位为84:86的设备真的占用该IP了么?进一步看。
第三步:分析异常终端的ARP行为
直接过滤ARP,发现这个84:86的设备只要收到别人发的免费ARP,它都要告诉该设备你的IP我已经用了:
所以造成苹果设备无法拿到IP的罪魁祸首便是这台84:86的设备!查了下Mac地址,不知道是什么,但后来用户发现,是一台虚拟机:
(1) 问题总结:
苹果电脑DHCP拿到IP后会向网络中发免费ARP告知自己的IP,恰巧被84:86这台异常虚拟机听到了,并单播告知它该IP已被占用,因此苹果释放当前IP后重新DHCP,如此循环反复。
而安卓、笔记本没有问题的原因是:他们DHCP后不会发免费DHCP,所以不会被侦听到告知IP被占用。
(2) 解决方案:
将该虚拟机设备进行了调整后正常,苹果设备接入网络后均能成功拿到地址: