温馨提示×

Linux DHCP为何不分配IP

小樊
69
2026-07-23 07:34:35
栏目: 智能运维

Linux 上 DHCP 不分配 IP 的原因很多,通常可以从 客户端、服务端、网络环境 三个层面来排查。下面按最常见 → 较少见的顺序给你一个系统性的排查思路。


一、先确认是「客户端问题」还是「服务端问题」

客户端现象

  • dhclient 卡住
  • ip addr 没有拿到 IP
  • 日志里只有 DHCPDISCOVER 没有 DHCPACK

服务端现象

  • dhcpd 没启动
  • 日志里没有收到请求
  • 地址池已耗尽

二、客户端(Linux)常见原因

1️⃣ 网卡未 UP

ip link

如果看到 state DOWN

ip link set eth0 up

2️⃣ 没有运行 DHCP 客户端

常见客户端:

  • dhclient
  • NetworkManager
  • systemd-networkd

检查:

ps aux | grep dhclient

手动请求:

dhclient eth0

3️⃣ 防火墙拦截 DHCP(非常常见)

DHCP 使用:

  • UDP 67(server)
  • UDP 68(client)

检查:

iptables -L -n

临时关闭测试:

systemctl stop firewalld
# 或
iptables -F

4️⃣ NetworkManager 与 dhclient 冲突

systemctl status NetworkManager

如果同时用:

  • /etc/network/interfaces
  • NetworkManager

容易冲突。

✅ 建议:

  • 服务器:用 network-scriptssystemd-networkd
  • 桌面:用 NetworkManager

5️⃣ 网卡配置错误

cat /etc/sysconfig/network-scripts/ifcfg-eth0

关键项:

BOOTPROTO=dhcp
ONBOOT=yes

三、DHCP 服务端(Linux)常见原因

1️⃣ DHCP 服务未运行

systemctl status dhcpd

启动:

systemctl start dhcpd

2️⃣ 配置文件错误(最常见)

配置文件:

/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

3️⃣ 地址池耗尽

cat /var/lib/dhcpd/dhcpd.leases

如果全是 binding state active → 池满了

✅ 解决:

  • 扩大 range
  • 缩短 default-lease-time

4️⃣ DHCP 监听接口错误

ps aux | grep dhcpd

确认监听接口:

dhcpd -f -d eth0

或配置:

/etc/sysconfig/dhcpd
DHCPDARGS="eth0"

四、网络层面的原因(非常容易忽略)

1️⃣ VLAN / 网桥问题

  • 客户端和服务端不在同一广播域
  • 交换机未放行 DHCP

✅ 测试:

tcpdump -i eth0 port 67 or port 68

如果 只有 DISCOVER 没有 OFFER → 网络问题


2️⃣ 虚拟机网络模式错误

模式 结果
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/广播域

如果你愿意,可以把:

  • Linux 发行版
  • 物理机 / 虚拟机
  • dhclient 或 dhcpd 日志

贴出来,我可以直接帮你精确定位是哪一条原因

0