在 Linux 下排查 DHCP 问题,通常可以按从下到上的思路进行:物理/链路 → 网络配置 → DHCP 客户端/服务端 → 防火墙/日志。下面是一套比较系统的排错方法。
ip link
ip addr
确认网卡状态是 UP,并且有 MAC 地址。
ethtool eth0
或
ip route
确认默认网关、子网是否正常。
# DHCP 客户端为 dhclient
dhclient -r eth0
dhclient eth0
# 或 systemd 环境
systemctl restart networking
# 或
systemctl restart NetworkManager
dhclient -v eth0
观察是否有:
如果卡在 DHCPDISCOVER,说明:
tcpdump -i eth0 port 67 or port 68 -nn -e
正常流程应看到:
DHCP Discover
DHCP Offer
DHCP Request
DHCP ACK
systemctl status isc-dhcp-server
# 或 dnsmasq
systemctl status dnsmasq
常见文件:
/etc/dhcp/dhcpd.conf/etc/dnsmasq.conf检查:
journalctl -u isc-dhcp-server -f
# 或
tail -f /var/log/syslog
DHCP 使用:
iptables -L -n
# 或
ufw status
放行示例:
iptables -A INPUT -p udp --dport 67 -j ACCEPT
getenforce
如为 Enforcing,可临时测试:
setenforce 0
| 现象 | 可能原因 |
|---|---|
| 一直获取不到 IP | 无 DHCP 服务器 / 交换机隔离 |
| 获取到的 IP 不对 | 多 DHCP 服务器冲突 |
| IP 频繁变化 | 租约太短 / 地址池冲突 |
| 能获取 IP 但上不了网 | 网关/DNS 配置错误 |
| 虚拟机无法 DHCP | 宿主机桥接/ NAT 配置问题 |
ip addr
ip route
ping 网关
dhclient -v eth0
tcpdump -i eth0 udp port 67
systemctl status dhcpd
journalctl -u dhcpd
如果你能告诉我:
我可以给你更精确的排错步骤。