在 Linux 上“调试 DHCP”通常分为几种场景:客户端拿不到 IP、DHCP 服务器不分配地址、中继(relay)有问题。下面按常见使用场景给你一个系统性的排查和调试方法。
isc-dhcp-server / dnsmasq / kea)# DHCP 客户端为 dhclient
sudo dhclient -r eth0
sudo dhclient -v eth0
-v 会显示详细交互过程。
sudo dhcpcd -d eth0
journalctl -u NetworkManager
journalctl -u dhclient
dmesg | grep eth0
sudo tcpdump -i eth0 port 67 or port 68 -e -n
正常流程应看到:
DHCP DiscoverDHCP OfferDHCP RequestDHCP ACK如果只看到 Discover 没有 Offer → 服务端或网络问题。
systemctl status isc-dhcp-server
# 或
systemctl status dnsmasq
/usr/sbin/dhcpd -f -d -cf /etc/dhcp/dhcpd.conf eth0
-f 前台运行-d 调试日志dhcpd -t -cf /etc/dhcp/dhcpd.conf
journalctl -u isc-dhcp-server
/var/log/syslog | grep dhcpd
常见错误:
ss -lunp | grep 67
dhcrelay -d -i eth0 192.168.1.1
抓包:
tcpdump -i eth0 port 67 or port 68
确认:
| 现象 | 可能原因 |
|---|---|
| 只有 Discover | 服务端没收到 / 防火墙 |
| 有 Offer 无 ACK | 地址冲突 / 配置错误 |
| 客户端超时 | VLAN / 防火墙 / 中继 |
| 拿到错误网段 IP | 多 DHCP / 中继配置错 |
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 68 -j ACCEPT
如果你能告诉我:
我可以直接给你更精确的命令和排错步骤。