在 CentOS 上 dhclient 获取 IP 失败,可以从网络层 → 系统配置 → 服务/日志 → 硬件/虚拟化逐步排查。下面给你一套实用排查思路(CentOS 6/7/8 通用,部分命令略有差异)。
dhclient -v eth0
或
dhclient -d eth0
观察输出,常见错误:
No DHCPOFFERS receivedbind: Address already in usesend_packet: Network is downip link show eth0
如果不是 UP:
ip link set eth0 up
ethtool eth0
看:
Link detected: yes/etc/sysconfig/network-scripts/ifcfg-eth0确保:
BOOTPROTO=dhcp
ONBOOT=yes
不要同时存在:
IPADDR=...
(静态和 DHCP 冲突)
修改后:
systemctl restart network
# 或
ifdown eth0 && ifup eth0
tcpdump -i eth0 port 67 or port 68
再执行 dhclient,看是否有:
如果只有 Discover 没有 Offer:
systemctl stop firewalld
或 iptables:
iptables -F
setenforce 0
ps aux | grep dhclient
kill -9 <pid>
rm -f /var/lib/dhclient/dhclient*.leases
dhclient eth0
dhclient -r eth0
dhclient eth0
systemctl status NetworkManager
systemctl restart NetworkManager
或
nmcli device reapply eth0
journalctl -u NetworkManager
# 或
cat /var/log/messages | grep dhclient
| 场景 | 可能原因 |
|---|---|
| 虚拟机无 IP | 未开启 DHCP / 网卡未连接 |
| 云服务器 | 控制台未绑定私网 |
| 换网卡后失败 | MAC 冲突 / 租约文件 |
| 重启后失败 | ONBOOT=no |
| 一直超时 | 上层交换机 VLAN / ACL |
如果 DHCP 实在不可用:
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
如果你愿意,可以把下面信息发我,我可以直接帮你定位:
dhclient -v 的完整输出ifcfg-eth0 内容