Linux 下 DHCP 获取地址“慢”是一个很常见的问题,通常不是 DHCP 服务器本身慢,而是客户端或服务端某些环节在等待/重试。下面按最常见原因 → 排查方法 → 解决思路来说明。
很多发行版(CentOS 8+/RHEL 9/Ubuntu 18.04+)使用:
它们会等网卡 link up / carrier 检测完成后才发 DHCP。
表现:
ip link 看到 state DOWN → UP 有延迟✅ 解决:
# 查看网卡状态
ip link
# 如果是虚拟机/网卡唤醒慢
ethtool eth0
可尝试:
net.ifnames=0 biosdevname=0
如果你看到:
dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
说明:
✅ 排查:
tcpdump -i eth0 port 67 or port 68
常见原因:
即使你只用 IPv4,Linux 往往还会:
表现:
dhclient 已拿到 IP,但网络“仍不可用”nmcli 显示 connecting (checking IP)✅ 解决(禁用 IPv6):
# 临时
sysctl -w net.ipv6.conf.all.disable_ipv6=1
# 永久(grub)
ipv6.disable=1
或 NetworkManager:
[ipv6]
method=disabled
dhclient 每次拿到地址会执行:
/etc/dhcp/dhclient.d/*
/etc/dhcp/dhclient-exit-hooks
如果其中有:
就会卡住。
✅ 排查:
ps aux | grep dhclient
strace -f dhclient -d eth0
比如:
结果:
✅ 检查:
ip route
ip addr
time dhclient -v eth0
tcpdump -i eth0 -n port 67 or port 68
看:
| 场景 | 现象 | 解决 |
|---|---|---|
| 虚拟机开机慢 | link up 慢 | 网卡唤醒 |
| 云服务器 | 等 metadata | 检查 cloud-init |
| 路由器后 | 广播不通 | 中继/DHCP helper |
| 桌面 Linux | NetworkManager 卡 | 禁用 IPv6 |
| 工控/嵌入式 | busybox udhcpc 慢 | 改脚本 |
你可以告诉我:
tcpdump 输出我可以直接帮你定位到哪一行在卡。