Debian DHCP客户端故障排除
小樊
32
2025-12-20 18:46:35
Debian DHCP客户端故障排除
一 快速定位流程
- 确认网卡物理与链路状态:查看接口是否UP并获取到169.254.x.x(链路本地)或0.0.0.0这类异常地址,使用命令:ip addr show。
- 手动触发获取地址:对目标接口(如eth0或ens18)执行:sudo dhclient -v <接口名>;若已获取到旧租约导致失败,先释放:sudo dhclient -r <接口名> 再获取。
- 立即检查是否拿到地址与路由:再次执行 ip addr show <接口名>,确认是否出现inet <地址>/<掩码>;查看默认路由:ip route | grep default。
- 验证连通性:先 ping 默认网关(见路由表),再测试外网(如 ping -c 4 8.8.8.8),最后验证 DNS(如 ping -c 4 google.com)。
- 若使用 NetworkManager,优先用 nmcli 排查:查看连接与设备状态(如 nmcli con show、nmcli dev status),必要时 nmcli 重新激活连接,避免与手工 dhclient 冲突。
二 日志与关键信息获取
- 查看客户端日志:实时跟踪 DHCP 交互与错误,使用 sudo journalctl -u isc-dhcp-client -f;或检索系统日志:sudo tail -f /var/log/syslog | grep -i dhclient。
- 从日志识别 DHCP 服务器:搜索关键字 DHCPOFFER/DHCPACK,可直接看到服务器 IP,例如日志行“DHCPOFFER of 192.168.10.9 from 192.168.10.50”表示服务器为192.168.10.50。
- 查看租约文件:确认是否曾成功获取租约及服务器标识,使用 cat /var/lib/dhcp/dhclient.leases。
- 开启调试输出:使用 dhclient -v <接口名> 获取详细过程,便于定位失败阶段(Discover/Offer/Request/ACK)。
三 常见症状与修复要点
- 无任何 DHCPOFFER
- 检查物理链路与交换机端口(指示灯、VLAN、上联),确认网线/网卡正常。
- 确认本机未设置静态IP或错误的静态路由阻断 DHCP。
- 排查二层/三层限制:交换机 DHCP Snooping 未将上联口设为信任端口会丢弃服务器报文;跨网段需DHCP Relay且到服务器路由可达。
- 防火墙放行 UDP 67/68(DHCP 服务器/客户端端口),例如 UFW:sudo ufw allow 67/udp,sudo ufw allow 68/udp。
- 服务器侧确认地址池未耗尽、子网/网关配置正确,并查看服务器日志定位拒绝原因。
- 拿到地址但无法上网
- 核对默认网关:ip route | grep default;若缺失,检查 DHCP 是否下发 routers 选项或手工补充默认路由。
- 分段测试:先 ping 网关,再 ping 外网 IP,最后测试域名解析(DNS)。
- 能解析域名但访问慢或不稳定
- 检查 /etc/resolv.conf 是否由 DHCP 正确写入(如 nameserver 条目);必要时临时写入公共 DNS(如 8.8.8.8)验证。
- 间歇性获取失败或租约异常
- 校准客户端与服务器时间/NTP,时间偏差会导致报文被拒或异常超时。
- 检查地址池是否耗尽或存在冲突IP。
四 配置与工具检查
- 核对客户端配置:/etc/dhcp/dhclient.conf。确保包含关键请求项(如 routers、domain-name-servers、domain-search、interface-mtu 等),必要时为特定接口设置:
- 示例:
- interface “eth0” {
- send host-name “debian-host”;
- request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers;
- }
- 确认正在使用的网络管理方式:若使用 NetworkManager,避免与 /etc/network/interfaces 或手工 dhclient 混用;用 nmcli 统一管理连接。
- 接口命名适配:新系统可能为 enp0s3/enp3s0/ens18 等,命令与配置中请使用实际接口名。
- 版本与兼容性:必要时确认 dhclient 版本(dhclient --version),并在新旧系统间做兼容性与配置一致性验证。
五 一键排查命令清单
- 查看接口与地址:ip addr show
- 释放并重新获取:sudo dhclient -r && sudo dhclient -v
- 查看路由与默认网关:ip route
- 连通性测试:
- 网关:ping -c 4 <网关IP>
- 外网 IP:ping -c 4 8.8.8.8
- DNS:ping -c 4 google.com
- 实时日志:sudo journalctl -u isc-dhcp-client -f 或 tail -f /var/log/syslog | grep -i dhclient
- 服务器与租约:
- 服务器日志:sudo journalctl -u isc-dhcp-server -f
- 客户端租约:cat /var/lib/dhcp/dhclient.leases
- 防火墙放行:sudo ufw allow 67/udp && sudo ufw allow 68/udp
- 识别 DHCP 服务器:grep -IR “DHCPOFFER” /var/log/ 或 dhclient -v 观察输出中的服务器 IP