温馨提示×

linux dhcp如何排错

小樊
38
2026-10-03 18:50:00
栏目: 智能运维

在 Linux 下排查 DHCP 问题,通常可以按从下到上的思路进行:物理/链路 → 网络配置 → DHCP 客户端/服务端 → 防火墙/日志。下面是一套比较系统的排错方法。


一、确认基本网络环境

1. 检查网卡是否 up

ip link
ip addr

确认网卡状态是 UP,并且有 MAC 地址。

2. 检查是否连接到正确的网络

ethtool eth0

或

ip route

确认默认网关、子网是否正常。


二、确认 DHCP 客户端是否正常工作

1. 手动释放并重新获取 IP

# DHCP 客户端为 dhclient
dhclient -r eth0
dhclient eth0

# 或 systemd 环境
systemctl restart networking
# 或
systemctl restart NetworkManager

2. 使用 dhcp 调试模式

dhclient -v eth0

观察是否有:

  • DHCPDISCOVER
  • DHCPOFFER
  • DHCPREQUEST
  • DHCPACK

如果卡在 DHCPDISCOVER,说明:

  • 网络中无 DHCP 服务器
  • 广播被阻断
  • 网卡/交换机问题

三、抓包分析(非常关键)

1. 抓 DHCP 报文

tcpdump -i eth0 port 67 or port 68 -nn -e

正常流程应看到:

DHCP Discover
DHCP Offer
DHCP Request
DHCP ACK

2. 常见异常

  • 只有 Discover,没有 Offer → 服务端问题
  • 有 Offer 但无 ACK → 地址冲突或池满
  • 有 ACK 但未生效 → 客户端配置问题

四、检查 DHCP 服务端(如果是你管理的)

1. 服务是否运行

systemctl status isc-dhcp-server
# 或 dnsmasq
systemctl status dnsmasq

2. 配置文件是否正确

常见文件:

  • /etc/dhcp/dhcpd.conf
  • /etc/dnsmasq.conf

检查:

  • subnet 网段是否匹配
  • range 地址池是否足够
  • 是否绑定了正确网卡

3. 查看服务端日志

journalctl -u isc-dhcp-server -f
# 或
tail -f /var/log/syslog

五、防火墙 / SELinux 问题

1. 防火墙是否放行 DHCP

DHCP 使用:

  • UDP 67(服务端)
  • UDP 68(客户端)
iptables -L -n
# 或
ufw status

放行示例:

iptables -A INPUT -p udp --dport 67 -j ACCEPT

2. SELinux(RHEL/CentOS)

getenforce

如为 Enforcing,可临时测试:

setenforce 0

六、常见典型问题汇总

现象 可能原因
一直获取不到 IP 无 DHCP 服务器 / 交换机隔离
获取到的 IP 不对 多 DHCP 服务器冲突
IP 频繁变化 租约太短 / 地址池冲突
能获取 IP 但上不了网 网关/DNS 配置错误
虚拟机无法 DHCP 宿主机桥接/ NAT 配置问题

七、快速排错 checklist

ip addr
ip route
ping 网关
dhclient -v eth0
tcpdump -i eth0 udp port 67
systemctl status dhcpd
journalctl -u dhcpd

如果你能告诉我:

  • 是 客户端还是服务端 排错
  • 发行版(Ubuntu / CentOS / Rocky 等)
  • 物理机 / 虚拟机 / 容器
  • 具体报错或日志

我可以给你更精确的排错步骤。

0 踩