Linux DHCP 故障排除全流程
一 快速判断与定位
sudo systemctl status isc-dhcp-server(或 dhcpd)。sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf。sudo journalctl -xeu isc-dhcp-server,或 grep dhcpd /var/log/syslog /var/log/messages。sudo dhclient -r <iface> && sudo dhclient <iface>(或使用 dhcpcd)。cat /var/lib/dhcp/dhclient.leases,ip addr show <iface>,systemctl status NetworkManager。二 服务器侧排查与修复
sudo apt-get update && sudo apt-get install isc-dhcp-server。sudo systemctl start isc-dhcp-server、sudo systemctl enable isc-dhcp-server。sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf。INTERFACESv4="eth0 ens33"(示例)。sudo ss -ulnp | grep -E ':(67|68)',释放冲突进程或更换服务端口(不建议生产环境)。sudo ufw allow 67/udp,sudo ufw allow 68/udpsudo firewall-cmd --add-service=dhcp --permanent && sudo firewall-cmd --reloadsudo journalctl -fu isc-dhcp-server三 客户端侧排查与修复
ip link set <iface> up。/etc/network/interfaces 中 auto <iface>,iface <iface> inet dhcp/etc/netplan/*.yaml 中 dhcp4: true,然后 sudo netplan applynmcli con mod <id> ipv4.method auto;nmcli con up <id>sudo dhclient -v <iface>(观察 Discover/Offer/Request/ACK)。cat /var/lib/dhcp/dhclient.leases;查看地址:ip -4 addr show <iface>。sudo tcpdump -ni <iface> port 67 or port 68 -vv,客户端侧对应接口抓包,核对是否收发 DHCP 报文。四 常见错误对照表
| 症状 | 高频原因 | 快速验证 | 修复建议 |
|---|---|---|---|
| 服务起不来 | /etc/dhcp/dhcpd.conf 语法错误 | sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf |
按报错修正子网、池、网关、DNS 等声明 |
| 启动但无分配 | 未监听正确接口 | cat /etc/default/isc-dhcp-server;`ss -ulnp |
grep :67` |
| 客户端一直获取不到地址 | 防火墙阻断 UDP 67/68 | sudo ufw status/firewall-cmd --list-all |
放行 67/68,或临时停用防火墙验证 |
| 启动阶段卡住 | 物理链路/客户端配置异常 | ip link、journalctl -u NetworkManager |
检查网线/交换机端口与客户端 ifupdown/Netplan 配置 |
| 跨网段无法获取地址 | 缺少 DHCP 中继 | 抓包无服务器响应 | 在网关/三层设备配置 DHCP Relay 指向服务器 |
五 最小可用配置示例
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;
}
INTERFACESv4="eth0"
network:
version: 2
ethernets:
eth0:
dhcp4: true
应用:sudo netplan apply。