中继代理仅转发DHCP请求而不分配地址,若未生效,客户端将获取169.254.x.x地址;需检查其配置、giaddr字段匹配性、中继与服务器间连通性及DHCP Snooping/DAI拦截。
确认中继代理是否真在转发请求
中继代理本身不分配地址,只负责把客户端的广播包(dhcp discover)转成单播发给指定dhcp服务器。如果它没起作用,客户端就收不到响应,最终可能拿到169.254.x.x的apipa地址。
检查方法:
- 在中继代理设备(通常是三层交换机或路由器)上查看DHCP中继配置,确认已启用且指向了正确的DHCP服务器IP(不是域名)
- 用show ip dhcp relay statistics(思科)或display dhcp relay statistics(华为)命令看是否有“Relayed packets”计数增长
- 在DHCP服务器端用netsh trace start scenario=NetConnection抓包,过滤UDP端口67,确认是否收到带giaddr(网关IP地址字段)的报文——没有giaddr说明中继根本没参与
验证giaddr字段是否匹配中继所在子网
DHCP服务器收到带giaddr的请求后,会根据这个字段决定从哪个作用域分配地址。如果giaddr填错、为空或不属于任何已配置的作用域子网,服务器就会忽略该请求。
常见错误包括:
- 中继接口IP配置错误(比如配成192.168.2.1,但实际客户端在192.168.3.0/24网段)
- 中继配置了多个接口,但只对其中一个启用了DHCP中继功能
- 服务器上对应子网的作用域未创建,或已创建但未激活(状态为“已停用”)
解决办法:在DHCP管理控制台里核对每个作用域的“网络ID”和子网掩码,确保与中继上报的giaddr属于同一逻辑子网。
检查中继到服务器之间的连通性与端口占用
中继代理用UDP 67端口监听客户端请求,再用UDP 67(源端口随机)向DHCP服务器发单播报文;服务器回应时目标端口是68,中继再转回客户端。整个链路必须双向可达。
排查步骤:
- 从中继设备ping DHCP服务器IP,确认基础连通性
- 在DHCP服务器上运行netstat -anb | findstr :67,确认只有dhcpserver.exe在监听UDP 67,没有WDS、PXE或其他服务争用
- 若中间有防火墙,需放行UDP 67入站(对服务器)、UDP 68出站(对中继),并允许ICMP用于诊断
排除DAI或DHCP Snooping引发的拦截
当交换机开启了DHCP Snooping + DAI(动态ARP检测),它会记录合法的IP-MAC绑定关系,并拒绝不符合记录的ARP或DHCP流量。如果中继配置变动后未更新snooping绑定表,或存在双中继+故障转移组合,就容易误判为攻击。
典型表现:
- 客户端能发请求,但服务器日志无记录,中继统计却显示已转发
- 交换机日志出现DHCP_SNOOPING_DENY或DAI_DROP条目
- 部分客户端可获取地址,部分不行,且分布无明显规律
临时验证:在交换机上关闭DHCP Snooping(或仅在中继上联口禁用DAI),观察是否恢复。若恢复正常,说明策略规则需要调整,比如添加信任端口、同步DHCP服务器MAC地址,或避免同时部署双中继与DHCP故障转移。

















