在 Ubuntu 上出现 DHCP 丢包严重 的原因通常不是 DHCP 协议本身,而是网络环境或系统配置导致 DHCP 请求/响应报文丢失。下面按最常见原因 → 排查方法 → 解决建议来说明。
表现
dhclient 一直超时排查
sudo tcpdump -i eth0 port 67 or port 68
只看到 DISCOVER,没有 OFFER → 网络或 DHCP 服务器问题
Ubuntu 可能同时存在:
dhclientsystemd-networkdNetworkManager后果
检查
ps aux | grep -E 'dhclient|systemd-networkd|NetworkManager'
建议
systemd-networkdNetworkManager某些网卡(尤其是虚拟化、USB 网卡):
gro / lro / tso 后 DHCP 小包异常临时验证
sudo ethtool -K eth0 gro off
sudo ethtool -K eth0 lro off
sudo ethtool -K eth0 tso off
如果 DHCP 正常 → 驱动问题
Ubuntu 默认:
ufw 一般不拦DHCP 必须允许:
UDP 67 (server)
UDP 68 (client)
检查
sudo iptables -L -n -v
sudo nft list ruleset
有时 IPv4 DHCP 正常,但 IPv6 配置异常导致“看起来像丢包”
临时关闭测试
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
# 1. 抓包
sudo tcpdump -i eth0 port 67 or port 68
# 2. 看客户端日志
journalctl -u NetworkManager
journalctl -u systemd-networkd
# 3. 检查重复 dhcp 客户端
ps aux | grep dhcp
# 4. 关闭 offload 测试
ethtool -K eth0 gro off lro off tso off
# 5. 检查防火墙
iptables -L -n -v
# 禁用 NetworkManager(服务器)
sudo systemctl disable --now NetworkManager
# 改用 systemd-networkd
sudo systemctl enable --now systemd-networkd
sudo nano /etc/network/if-up.d/disable-offload
#!/bin/sh
ethtool -K eth0 gro off lro off tso off
chmod +x /etc/network/if-up.d/disable-offload
你可以补充:
20.04 / 22.04 / 24.04)tcpdump 输出片段我可以直接告诉你 是哪一类丢包。