dhcp池ip资源被耗尽,终端无法获取ip地址

接用户反馈,某地联通公司总部ac+ap组网,400多人单位,出现中午吃饭时间手机突然获得不了ip地址现象,让尽快排查解决。

终端曾经能获取到ip地址,后来获取不到ip地址,一种情况是覆盖差,信号弱,手机关联消息到不了ap,导致手机获得不了ip地址。

另一种情况是dhcp池资源被耗尽,dhcp服务器没有ip资源,导致获取地址失败。

问了一下现场组网,瑞思23个poe交换机,下挂ap,核心交换机是华为交换机,ac旁挂在环境里。每个poe交换机都有自己的vlan,共分为8个vlanid,2012-2019。一共2000多个个地址池ip资源。

现场查核心交换机:

空闲的不多了

发现conflict ip冲突的打印为0,证明环境里没有arp代答的现象,一般获取地址后,有arp probe的过程,有arp代答会应答这个消息,让终端判断此ip已经有人使用,给dhcp服务器回decline冲突消息,让重新分配一个新ip,服务器把这个ip状态置为conflict,一个租期后释放出来。

按说环境里再有一种情况,环境存在dhcp饥饿攻击,有设备不停的伪造mac地址,发出dhcp discover消息,导致dhcp池资源被耗尽。

让检查交换机上端口是否存在一个端口有多个mac地址的现象,有的话查找一下,看是否存在这样的设备?

反馈查找出这样的结果:

居然有2390个,根据这个地方上班的400多人判断,不可能有这么多mac地址出现!!

反馈有一个交换机端口发现有70个mac地址,觉得有点问题,正常的ap下不会出现这么多终端?

反馈查询发现,一个端口下有一个mac,在不同vlanid里申请了两个ip地址

一个在2012vlan里,一个在2013vlan里

感觉像三层漫游未开,导致设备从一个ap进入另一个同样ssid的ap下,这两个ap不在同一vlan下,导致再次发起dhcp的流程???

因为一个vlanid,对应一个vlan子网,一个子网对应一个dhcp池,而三层漫游开启的话,终端漫游会使用上一个ap下的vlanid进行dhcp消息发出。

因为普通的ap连接ssid过程,association消息发到ac,ac会给ap下发station configuration request消息,add station里携带终端mac地址和业务vlanid,让终端在这个vlanid里发出dhcp消息。

让现场检查是否三层漫游未打开或者哪里配置不合适?

反馈配置没问题,反复测试,发现确系三层漫游未生效造成,看到有个一个mac在5个vlan里申请了地址!!!

确定系ac的问题,下发给ap vlanid没有保存上一个ap里vlanid号,在公司研发模拟,发现系打开快速漫游开关,程序里有问题,导致终端离开ap后,删除了三层漫游表项,导致终端在另一个ap下重新关联,ac下发给ap的vlanid变成该ap下正常vlanid,导致同一mac出现在不同vlanid里,申请不同子网的ip地址。

修正程序还得一段时间,现场先关闭了快速漫游开关,观察一天发现

总结:

  1. dhcp失败地址会变成本地链路 169.254.xxx.xxx,若发现是这个地址,就证明dhcp失败了,一般是信号太弱,ap没有收到消息,到服务器间节点vlan没有透传,dhcp资源耗尽等原因(一种是conflict太多导致,一种是dhcp的恶意申请导致)。
  2. ac的作用是接受终端的802.11消息,通过capwap的data通道,通过控制信道在终端关联请求时,下发add station里包含终端使用的vlanid等参数。终端第一次在该vlan下申请ip,就会发discover消息,若上次dhcp获得的地址租期未过,且vlanid不变,就会用request消息续租原来的ip地址。
  3. 三层漫游时当终端移动的不同子网的ap下,ac会根据漫游表项,下发上个ap中vlanid给终端,这样终端使用原来的vlanid做业务,ip在租期不过的情况下,还继续使用。

更多推荐