CentOS DHCP 故障排查步骤
一 快速定位思路
二 客户端排查
ip -br link、ip addr show <iface>(如 ens33)。若状态为 DOWN,执行:ip link set <iface> up。/etc/sysconfig/network-scripts/ifcfg-<iface>(或对应网络管理方式下的等效配置)。BOOTPROTO=dhcp、ONBOOT=yes。修改后重启网络或 NetworkManager:
systemctl restart NetworkManager 或 systemctl restart network。dhclient -r <iface>;dhclient -4 -v <iface>(加 -v 可见 Discover/Offer/Request/ACK 过程)。cat /var/lib/dhcp/dhclient.leases,确认是否有有效租约与服务器 IP。journalctl -xe | grep -i dhcp 或 tail -f /var/log/messages | grep -i dhcp。三 服务器排查
yum install -y dhcp(或 dnf install dhcp)。/etc/dhcp/dhcpd.conf,至少包含子网与地址池,例如:
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; option domain-name-servers 8.8.8.8, 8.8.4.4; }/etc/sysconfig/dhcpd,设置 INTERFACES="eth0"(示例),保存后重启服务。systemctl start dhcpd、systemctl enable dhcpd。systemctl status dhcpd(失败时用 journalctl -xe 看语法/权限/接口绑定错误)。ss -lunpt | grep :67 或 netstat -anpu | grep :67。tail -f /var/log/messages | grep -i dhcpd。cat /var/lib/dhcp/dhcpd.leases,核对是否分配出地址、租约时间是否合理。firewall-cmd --permanent --add-service=dhcp && firewall-cmd --reload(或临时关闭防火墙验证)。四 常见现象与处理对照表
| 现象 | 快速检查 | 处理建议 |
|---|---|---|
| 客户端一直卡在 DHCPDISCOVER | dhclient -4 -v <iface> 无 Offer;ip link 是否 DOWN;虚拟机网络模式 |
确认接口 UP;改为 NAT/桥接 并重启;检查上游是否有 DHCP 服务器 |
| 获取到 IP 过一段时间又丢失 | ip addr 周期性掉 IP;journalctl 无持续错误 |
排查是否有其他 DHCP 服务器冲突;检查租约时间与地址池;核对 NetworkManager/网络脚本反复覆盖 |
| 服务器启动失败 | systemctl status dhcpd 报错;journalctl -xe |
检查 /etc/dhcp/dhcpd.conf 语法与作用域网段;核对 /etc/sysconfig/dhcpd 的监听接口 |
| 端口 67 未监听 | `ss -lunpt | grep :67` 无输出 |
| 虚拟机拿不到 IPv4 | 仅 IPv6 链路本地;ifcfg-<iface> 配置 |
确认 BOOTPROTO=dhcp、ONBOOT=yes;接口拉起;网络模式与连线正确 |
| 地址冲突或租约异常 | cat /var/lib/dhcp/dhcpd.leases 重复 IP;客户端频繁换 IP |
核对 range 与网关/DNS;清理异常租约;必要时为关键主机配置 host 静态映射 |
五 高效命令清单
ip -br link、ip addr show <iface>、ip routedhclient -r <iface>、dhclient -4 -v <iface>cat /var/lib/dhcp/dhclient.leasesjournalctl -xe | grep -i dhcpsystemctl status dhcpd、journalctl -xe -u dhcpdss -lunpt | grep :67 或 netstat -anpu | grep :67cat /var/lib/dhcp/dhcpd.leasesfirewall-cmd --list-services | grep dhcp 或 firewall-cmd --permanent --add-service=dhcp && firewall-cmd --reloadtcpdump -i <iface> -nn port 67 or port 68 -vv(看到 Discover/Offer/Request/ACK 即可确认握手是否完成)