温馨提示×

如何排查linux dhcp

小樊
40
2026-09-12 15:46:45
栏目: 智能运维

在 Linux 下排查 DHCP 问题,可以按「网络接口 → DHCP 客户端 → 服务端 → 报文层面」逐层排查。下面是一套常用且实用的排错思路。


一、确认网卡和连接状态

1. 查看网卡是否 UP

ip link
ip addr

常见异常:

  • 网卡是 DOWN
  • 没有拿到 IP(只有 127.0.0.1fe80::

启用网卡:

ip link set eth0 up

2. 检查是否收到链路(Link)

ethtool eth0

关注:

  • Link detected: yes

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

1. 不同发行版使用的 DHCP 客户端

系统 客户端
CentOS 7 dhclient
CentOS 8 / Rocky / Alma NetworkManager
Ubuntu systemd-networkd / NetworkManager
嵌入式 udhcpc

2. 手动请求 DHCP(最常用)

dhclient -v eth0

或释放后再请求:

dhclient -r eth0
dhclient -v eth0

看到:

  • DHCPDISCOVER
  • DHCPOFFER
  • DHCPREQUEST
  • DHCPACK

说明 DHCP 正常。


3. 查看 DHCP 分配结果

ip addr show eth0
cat /var/lib/dhcp/dhclient.leases

三、检查网络管理服务状态

1. NetworkManager

systemctl status NetworkManager
nmcli device status
nmcli connection show

重新激活:

nmcli connection down eth0
nmcli connection up eth0

2. systemd-networkd

systemctl status systemd-networkd
networkctl status eth0

配置示例(/etc/systemd/network/eth0.network):

[Match]
Name=eth0

[Network]
DHCP=yes

四、确认 DHCP 服务端是否正常

如果是你自己的 DHCP 服务器

1. 服务是否运行

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

2. 配置是否正确

cat /etc/dhcp/dhcpd.conf

常见问题:

  • subnet 写错
  • 地址池耗尽
  • 网卡未声明

3. 服务端日志

journalctl -u dhcpd -f
# 或
tail -f /var/log/messages

五、抓包排查(最强手段)

1. 抓 DHCP 报文

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

正常流程应看到:

  • DHCP Discover
  • DHCP Offer
  • DHCP Request
  • DHCP Ack

如果:

  • 只有 Discover → 服务端无响应
  • 无 Discover → 客户端未发出

六、常见故障速查表

现象 可能原因
一直卡在 obtaining IP 服务端无响应 / 防火墙
能拿到 IP 但马上掉 地址冲突 / 租约异常
虚拟机无 DHCP 虚拟交换机未开 DHCP
容器无 IP 网络驱动问题
只拿到 IPv6 DHCPv4 被禁用

七、防火墙和 SELinux 注意

防火墙

iptables -L -n
firewall-cmd --list-all

DHCP 需要:

  • UDP 67(服务端)
  • UDP 68(客户端)

八、快速排查顺序(推荐)

  1. ip addr
  2. dhclient -v eth0
  3. tcpdump port 67 or 68
  4. 看服务端日志
  5. 检查防火墙

如果你愿意,可以告诉我:

  • 发行版(CentOS / Ubuntu / 嵌入式)
  • 物理机 / 虚拟机 / 容器
  • 具体报错或现象

我可以给你针对性的命令

0