Linux 下 DHCP 获取 IP 慢,通常不是“DHCP 本身慢”,而是协商过程被卡在某个环节。下面按最常见原因 → 排查思路给你梳理。
Linux 默认会做:
如果网络环境复杂(VLAN、AP、虚拟机),这一步可能卡 5~30 秒。
✅ 现象:
dhclient 或 NetworkManager 启动后等很久probing、DAD✅ 解决:
# 禁用 DAD
sysctl -w net.ipv4.conf.all.accept_dad=0
sysctl -w net.ipv4.conf.default.accept_dad=0
或 DHCP 客户端配置里加:
send dhcp-client-identifier "xxxx";
NM 默认策略是:
网络设备 up ≠ 网络 ready
它会:
✅ 常见于:
✅ 排查:
systemctl status NetworkManager
journalctl -u NetworkManager
✅ 加速:
[main]
no-auto-default=*
或:
nmcli connection modify eth0 ipv4.dhcp-timeout 10
特别是:
✅ 测试:
tcpdump -i eth0 port 67 or port 68
看:
系统里同时有:
dhclientsystemd-networkdNetworkManager✅ 表现:
✅ 建议只留一个:
systemctl disable systemd-networkd
很多 Linux 会先:
✅ 关闭 IPv6 测试:
sysctl -w net.ipv6.conf.all.disable_ipv6=1
# 看 DHCP 过程
journalctl -u NetworkManager -f
# 抓包
tcpdump -i eth0 udp port 67 or port 68
# 手动测试
dhclient -v eth0
| 现象 | 原因 |
|---|---|
| 开机等 10~30s | DAD / NM 等待 |
| 每几分钟断一次 | DHCP 租期短 |
| 虚拟机特别慢 | MAC 冲突 / 中继 |
| Wi-Fi 慢 | 信号 / AP DHCP |
你可以贴一下:
journalctl 或 tcpdump 日志我可以直接帮你定位到具体哪一步慢。