能直接检测到非法DHCP服务器,需用tcpdump抓包监听DHCP广播流量;正常仅1个DHCPOFFER,若出现多个不同源IP响应(如192.168.1.2、192.168.1.15等),即存在非法DHCP服务。

能直接检测到,但必须用抓包方式主动监听 DHCP 广播流量,不能靠 ping 或服务状态查。
用 tcpdump 捕获 DHCPDISCOVER/DHCPOFFER 报文
伪造 DHCP 服务器最典型的暴露点,是在客户端发 DHCPDISCOVER 后,多个设备同时回应 DHCPOFFER。只要你在内网任意一台 Linux 主机上执行抓包,就能看到异常响应:
- 运行
sudo tcpdump -i eth0 -n port 67 or port 68 -vv(把eth0换成你实际的内网接口) - 触发一次客户端请求:在另一台机器上执行
sudo dhclient -r && sudo dhclient -v - 观察输出中是否出现多个不同源 IP 的
DHCPOFFER—— 正常情况只应有 1 个合法服务器 IP;若看到192.168.1.2、192.168.1.15、10.0.0.200等多个来源,就极大概率存在非法 DHCP
检查本机是否意外响应了 DHCPOFFER
有些被入侵的 Linux 主机可能被植入了轻量级 DHCP 服务(如 dnsmasq 或 udhcpd),伪装成服务器对外响应。这类进程往往不走 systemd,容易被忽略:
- 查监听端口:
sudo ss -tulnp | grep ':67'—— 注意看是否有非isc-dhcp-server的进程(比如dnsmasq或udhcpd)在监听 UDP 67 - 查隐藏进程:
ps aux | grep -E '(dhcp|dns|udhcp)',尤其注意带-C dhcp、--dhcp-range或-K(udhcpd 的 quiet 模式)参数的调用 - 查自启动项:
systemctl list-unit-files --state=enabled | grep -i dhcp和ls /etc/init.d/ | grep -i dhcp,但更关键的是检查/etc/rc.local或用户 crontab 是否有启动脚本
对比租约文件与已知合法服务器配置
如果你已有授权 DHCP 服务器(比如 isc-dhcp-server),它的租约文件 /var/lib/dhcp/dhcpd.leases 是可信基线。而非法服务器不会往这个文件写记录,但你可以反向验证客户端拿到的地址是否“不该出现”:
- 在疑似受害客户端上运行
ip addr show和cat /var/lib/dhcp/dhclient.leases,提取其中的server-address字段 - 比对这个
server-address是否在你运维清单里的合法 DHCP 服务器 IP 列表中 - 如果出现
server-address 192.168.1.99,但你清单里只有192.168.1.1和192.168.1.254,那192.168.1.99就是可疑目标
真正难处理的是那种只在特定 VLAN 或时间段活跃、且关闭了日志的伪造 DHCP 服务——它不会出现在 ss 输出里,也不会写租约,只能靠周期性抓包+人工比对。别依赖单次检测结果,建议写个简短脚本每 5 分钟跑一次 tcpdump 过滤并告警多源 DHCPOFFER。











