温馨提示×

CentOS DHCP故障怎么排查

小樊
32
2025-12-25 05:58:23
栏目: 智能运维

CentOS DHCP故障排查清单

一 快速定位思路

  • 明确角色:是 DHCP 客户端(拿不到地址)还是 DHCP 服务器(租约发不出去)。
  • 客户端优先做三步:看链路是否 UP、网卡是否配置为 DHCP、手动触发一次 DHCP 握手 并观察结果。
  • 服务器侧核对:配置文件语法、监听端口 UDP 67、防火墙放行、地址池是否耗尽、租约文件与日志是否正常。

二 客户端排查步骤

  • 查看链路与地址
    • 执行:ip -br linkip -br addrip route,确认接口为 UP 且已有 IPv4 地址;若只有 127.0.0.1 或仅有 IPv6 链路本地,说明未拿到地址。
  • 确认网卡使用 DHCP
    • 查看配置文件(CentOS 7 常见):cat /etc/sysconfig/network-scripts/ifcfg-<ifname>,确保有 BOOTPROTO=dhcpONBOOT=yes;修改后执行 systemctl restart NetworkManager(或 systemctl restart network)。
  • 激活接口并手动获取地址
    • 执行:ip link set <ifname> up
    • 释放并重取:dhclient -r <ifname> && dhclient -4 <ifname>(或 dhclient -v <ifname> 观察握手过程)
    • 若长时间卡在 DHCPDISCOVER 无回应,通常是网络模式/防火墙/无可用 DHCP 服务器导致。
  • 虚拟机场景专项
    • 确认虚拟网卡已“连接”,网络模式选择 NAT/桥接;改模式后建议重启虚拟机再测。
  • 防火墙与安全组
    • 临时关闭 firewalld 验证是否为策略阻断:systemctl stop firewalld(验证后记得恢复并配置放行规则)。

三 服务器端排查步骤

  • 安装与配置
    • 安装:yum install -y dhcp
    • 主配置:/etc/dhcp/dhcpd.conf,至少包含 subnet 声明、rangeoption routersoption domain-name-servers 等;可用 dhcpd -t 检查语法。
  • 指定监听接口
    • 编辑:/etc/sysconfig/dhcpd,设置 INTERFACES="eth0"(替换为实际接口)。
  • 启动与开机自启
    • 执行:systemctl start dhcpdsystemctl enable dhcpd
  • 端口与防火墙
    • 监听检查:ss -tulpen | grep :67ss -lun4 | grep 67,应看到 UDP 67 监听
    • 放行规则:firewall-cmd --permanent --add-service=dhcp && firewall-cmd --reload
  • 日志与租约
    • 实时日志:journalctl -u dhcpd -ftail -f /var/log/messages | grep dhcpd
    • 租约文件:/var/lib/dhcpd/dhcpd.leases,核对是否分配成功与租约时间
  • 常见报错速查
    • “No subnet declaration for eth0”:dhcpd.conf 缺少该接口所在子网的 subnet 声明
    • “No free leases”:地址池耗尽,扩大 range 或清理过期租约
    • “DHCPNAK …”:客户端请求的 IP 冲突/租约异常,检查是否有静态同 IP 或冲突

四 抓包与网络连通性验证

  • 在客户端抓 DHCP 握手
    • 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 并发出 OFFER
  • 服务器连通性测试
    • dhcping -c 4 <服务器IP>,验证 DHCP 服务可达与响应性。

五 常见现象与处理对照表

现象 快速检查 处理要点
客户端只有 lo 或只有 IPv6 链路本地 ip -br addrip link 接口未 UPBOOTPROTOdhcpip 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/桥接,重启虚拟机再测

0