温馨提示×

为什么 Linux 无法获取 DHCP

小樊
49
2026-08-31 19:59:00
栏目: 智能运维

Linux 无法获取 DHCP(即无法通过 DHCP 拿到 IP 地址)是一个很常见的问题,原因可能涉及网络配置、驱动、服务、物理连接或上游设备。下面按常见原因逐一说明,并给出排查思路。


一、物理 / 网络层面原因

1. 网线或 Wi‑Fi 未连接

  • 有线:网线松动、坏了、交换机端口禁用
  • 无线:未连接到 Wi‑Fi 或信号太弱

检查:

ip link

看网卡状态是否是 UP,有没有 NO-CARRIER


2. 网卡未启用

网卡被 down 掉也会导致 DHCP 失败。

ip link set eth0 up

二、DHCP 客户端或服务问题

3. 没有 DHCP 客户端

Linux 常见 DHCP 客户端:

  • dhclient
  • dhcpcd
  • systemd-networkd
  • NetworkManager

如果没有安装或没运行:

which dhclient

4. DHCP 服务未运行

如果使用 NetworkManager:

systemctl status NetworkManager

如果使用 systemd-networkd:

systemctl status systemd-networkd

三、配置错误

5. 网卡被配置成静态 IP

如果 /etc/network/interfaces 或 NetworkManager 配置成静态 IP,就不会请求 DHCP。

示例(静态):

iface eth0 inet static

应改为:

iface eth0 inet dhcp

6. /etc/resolv.conf 或路由冲突

有时 DHCP 拿到了地址,但:

  • 默认路由错误
  • DNS 配置失败

检查:

ip addr
ip route

四、驱动 / 内核问题

7. 网卡驱动未加载

lspci -k | grep -A3 Ethernet
lsmod | grep driver_name

没有驱动 → 无法发包 → DHCP 失败


8. 虚拟机特殊情况

  • 桥接模式没开
  • NAT 网络未启动
  • VMware / VirtualBox 服务未运行

五、上游 DHCP 服务器问题

9. 路由器 / DHCP 服务器无响应

  • 路由器 DHCP 关闭
  • 地址池耗尽
  • 防火墙拦了 DHCP(UDP 67/68)

抓包验证:

tcpdump -i eth0 port 67 or port 68

如果没有 DHCP Discover 发出 → 本地问题
如果只有 Discover 没有 Offer → 路由器问题


六、常见快速排查命令汇总

# 查看网卡
ip addr
ip link

# 手动请求 DHCP
dhclient -v eth0

# 看日志
journalctl -u NetworkManager
dmesg | grep eth0

七、典型错误示例

  • No DHCPOFFERS received
  • DHCPDISCOVER on eth0 to 255.255.255.255 port 67
  • carrier lost

如果你愿意,可以告诉我:

  • 你是 物理机 / 虚拟机 / 云服务器
  • 发行版(Ubuntu / CentOS / Arch 等)
  • 网卡名(eth0 / ens33)
  • 报错信息

我可以直接帮你定位具体原因并给修复命令。

0