Debian DHCP如何排查故障
小樊
33
2025-12-28 13:39:08
Debian DHCP故障排查清单
一 快速定位流程
- 确认服务状态与自启:执行 sudo systemctl status isc-dhcp-server;若未运行,启动并设置开机自启:sudo systemctl start isc-dhcp-server 与 sudo systemctl enable isc-dhcp-server。
- 校验配置语法:sudo dhcpd -t(必要时 sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf)。
- 核对接口绑定:查看 /etc/default/isc-dhcp-server 中的 INTERFACESv4/INTERFACESv6,确保与 ip addr 中的接口名一致(如 eth0)。
- 查看服务日志:sudo journalctl -u isc-dhcp-server -e 或 tail -f /var/log/syslog | grep dhcpd。
- 检查监听端口:ss -ulnp | grep ‘:67’(服务器应监听 UDP 67;客户端使用 UDP 68)。
- 校验防火墙:sudo ufw allow 67/udp 与 68/udp,或 iptables -L -n | grep -E ‘67|68’。
- 客户端验证:Linux/macOS 执行 ip address show;Windows 执行 ipconfig;必要时 sudo dhclient -r 后 sudo dhclient 重新获取。
- 查看租约与活跃分配:cat /var/lib/dhcp/dhcpd.leases 或使用 sudo dhcp-lease-list。
二 常见故障与修复要点
- 服务起不来:优先看日志与语法。常见为 /etc/dhcp/dhcpd.conf 语法错误(缺少分号、括号不匹配)、接口未绑定、或端口被占用(UDP 67/68)。修复后执行 sudo systemctl restart isc-dhcp-server。
- 客户端拿不到地址:检查服务器是否运行、地址池是否耗尽(日志出现 “no free leases”)、子网/掩码/网关/DNS 配置是否与客户端网段匹配、以及客户端是否设置为自动获取。
- 跨网段拿不到地址:确认是否配置 DHCP 中继,中继到服务器的路由是否可达,且服务器上存在对应子网的 subnet 声明与地址池。
- IP 冲突:DHCP 地址池与静态 IP 重叠或租约异常。对比 range 与静态设备 IP,修正重叠;必要时清理异常租约(/var/lib/dhcp/dhcpd.leases)后重启服务。
- 二层安全策略拦截:交换机启用 DHCP Snooping 但未将上联/合法 DHCP 服务器端口设为信任端口,会导致客户端无法获取地址,需在对应端口配置信任并将服务器所在端口加入信任域。
三 监听端口与连通性验证
- 服务器监听:ss -ulnp | grep ‘:67’ 应看到 0.0.0.0:67(UDP)。若未监听,回到“服务状态/配置/接口绑定”复查。
- 客户端连通性:在服务器上抓包 sudo tcpdump -i port 67 or port 68 -vv,正常应见到 DHCP Discover/Offer/Request/ACK 交互;若只有 Discover 无 Offer,多为服务器未运行、配置不匹配、或防火墙/ACL 拦截。
- 网络发现:在本地网段用 nmap -sU -p 67,68 检查是否有 DHCP 服务响应(如看到 67/udp open|open|filtered bootps)。
四 日志与租约信息解读
- 关键日志路径与命令:/var/log/syslog 或 /var/log/messages;sudo journalctl -u isc-dhcp-server -f 实时跟踪。常见关键词:
- “no free leases” → 地址池耗尽;
- “failed to bind to socket” → 端口被占用或权限/接口问题;
- “DHCPDISCOVER from … no free leases” → 地址池或子网不匹配。
- 租约文件:/var/lib/dhcp/dhcpd.leases 记录已分配租约;配合 sudo dhcp-lease-list 可快速核对 IP–MAC–主机名 对应关系。
五 配置与网络优化建议
- 配置语法与结构:在 /etc/dhcp/dhcpd.conf 中为实际提供服务的网段添加 subnet 声明,示例:
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;
}
修改后执行 sudo dhcpd -t 校验,再重启服务。
- 接口绑定:在 /etc/default/isc-dhcp-server 明确 INTERFACESv4(如 “eth0”),避免服务绑定到错误接口。
- 防火墙放行:sudo ufw allow 67/udp 与 68/udp,或等效的 iptables/firewalld 规则。
- 地址规划:将服务器、打印机等静态 IP从 DHCP range 中排除,避免冲突。
- 持续监控:结合 systemctl/journactl、dhcp-lease-list 与 tcpdump 建立例行巡检与异常抓包流程。