CentOS DHCP故障排查清单
一 快速定位思路
二 客户端排查步骤
ip -br link、ip -br addr、ip route,确认接口为 UP 且已有 IPv4 地址;若只有 127.0.0.1 或仅有 IPv6 链路本地,说明未拿到地址。cat /etc/sysconfig/network-scripts/ifcfg-<ifname>,确保有 BOOTPROTO=dhcp、ONBOOT=yes;修改后执行 systemctl restart NetworkManager(或 systemctl restart network)。ip link set <ifname> updhclient -r <ifname> && dhclient -4 <ifname>(或 dhclient -v <ifname> 观察握手过程)firewalld 验证是否为策略阻断:systemctl stop firewalld(验证后记得恢复并配置放行规则)。三 服务器端排查步骤
yum install -y dhcp/etc/dhcp/dhcpd.conf,至少包含 subnet 声明、range、option routers、option domain-name-servers 等;可用 dhcpd -t 检查语法。/etc/sysconfig/dhcpd,设置 INTERFACES="eth0"(替换为实际接口)。systemctl start dhcpd、systemctl enable dhcpdss -tulpen | grep :67 或 ss -lun4 | grep 67,应看到 UDP 67 监听firewall-cmd --permanent --add-service=dhcp && firewall-cmd --reloadjournalctl -u dhcpd -f 或 tail -f /var/log/messages | grep dhcpd/var/lib/dhcpd/dhcpd.leases,核对是否分配成功与租约时间dhcpd.conf 缺少该接口所在子网的 subnet 声明range 或清理过期租约四 抓包与网络连通性验证
tcpdump -i <ifname> -nn -vv port 67 or port 68,正常应见到 DHCPDISCOVER → DHCPOFFER → DHCPREQUEST → DHCPACK 四步;若只有 DISCOVER 无 OFFER,通常是服务器未响应、网络隔离或防火墙阻断。tcpdump -i <ifname> -nn -vv udp port 67,确认收到客户端 DISCOVER 并发出 OFFERdhcping -c 4 <服务器IP>,验证 DHCP 服务可达与响应性。五 常见现象与处理对照表
| 现象 | 快速检查 | 处理要点 |
|---|---|---|
| 客户端只有 lo 或只有 IPv6 链路本地 | ip -br addr、ip link |
接口未 UP 或 BOOTPROTO 非 dhcp;ip link set up;修正 ifcfg 并 systemctl restart NetworkManager |
手动 dhclient 长时间无响应 |
tcpdump 是否见 DHCPOFFER |
网络模式错误(仅主机/隔离)、防火墙阻断、无可用 DHCP;改为 NAT/桥接、放行 UDP 67/68、确认上游有 DHCP |
| 拿到地址后过一段时间丢失 | journalctl -u dhcpd、/var/lib/dhcpd/dhcpd.leases |
租约过短/被他处 DHCP 抢占;延长租约、排查网络中其他 DHCP 服务器、核对网关与路由 |
| 服务器启动失败或报错 | dhcpd -t、`ss -lun4 |
grep 67` |
| “No free leases” | cat /var/lib/dhcpd/dhcpd.leases |
地址池耗尽;扩大 range、清理冲突/过期租约、检查是否有静态占用 |
| 虚拟机拿不到地址 | 虚拟网卡“连接”状态、网络模式 | 勾选“连接”,改为 NAT/桥接,重启虚拟机再测 |