Linux 上 DHCP 不分配 IP 的原因很多,通常可以从 客户端、服务端、网络环境 三个层面来排查。下面按最常见 → 较少见的顺序给你一个系统性的排查思路。
dhclient 卡住ip addr 没有拿到 IPDHCPDISCOVER 没有 DHCPACKdhcpd 没启动ip link
如果看到 state DOWN:
ip link set eth0 up
常见客户端:
dhclientNetworkManagersystemd-networkd检查:
ps aux | grep dhclient
手动请求:
dhclient eth0
DHCP 使用:
检查:
iptables -L -n
临时关闭测试:
systemctl stop firewalld
# 或
iptables -F
systemctl status NetworkManager
如果同时用:
/etc/network/interfaces容易冲突。
✅ 建议:
network-scripts 或 systemd-networkdcat /etc/sysconfig/network-scripts/ifcfg-eth0
关键项:
BOOTPROTO=dhcp
ONBOOT=yes
systemctl status dhcpd
启动:
systemctl start dhcpd
配置文件:
/etc/dhcp/dhcpd.conf
常见错误:
;示例:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8;
}
检查语法:
dhcpd -t
cat /var/lib/dhcpd/dhcpd.leases
如果全是 binding state active → 池满了
✅ 解决:
rangedefault-lease-timeps aux | grep dhcpd
确认监听接口:
dhcpd -f -d eth0
或配置:
/etc/sysconfig/dhcpd
DHCPDARGS="eth0"
✅ 测试:
tcpdump -i eth0 port 67 or port 68
如果 只有 DISCOVER 没有 OFFER → 网络问题
| 模式 | 结果 |
|---|---|
| NAT | 自动 DHCP |
| 桥接 | 依赖外部 DHCP |
| 仅主机 | 需自建 DHCP |
ip addr
ip link
dhclient -v eth0
journalctl -u NetworkManager
tcpdump -i eth0 port 67 or port 68
| 现象 | 原因 |
|---|---|
| 一直 DHCPDISCOVER | 没有 OFFER(服务/网络) |
| 有 OFFER 无 ACK | 配置冲突 |
| 立刻失败 | 网卡 DOWN |
| 卡住 | 防火墙 |
| 永远不成功 | VLAN/广播域 |
如果你愿意,可以把:
贴出来,我可以直接帮你精确定位是哪一条原因。