标题:
VirtualBox + CentOS:启用 DHCP 获取 IPv4 地址
日期:
2025-07-18
一、问题现象
最小化安装的 CentOS 7 虚拟机里敲:
ip addr
输出只有 lo
的 127.0.0.1
以及 enp0s3
的 IPv6 链路本地地址,没有 IPv4,于是就有了本文。
二、先别急着 dhclient
,三步排除“配置错误”
经验:90 % 的“没 IP”都不是 DHCP 服务器的问题,而是下面三件事之一。
✅ Step 1:虚拟机网卡真的“插上线”了吗?
VirtualBox / VMware / Hyper-V 通用 checklist:
- 右侧小电视图标 → “连接”必须打勾
- 网络模式:
- 想直接上网 → 选 NAT
- 想跟宿主机同网段 → 选 桥接
- 改完必须 重启虚拟机 才能生效
✅ Step 2:CentOS 配置里把 DHCP 关掉了?
打开网卡配置文件:
sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
确保下面两行存在且没有被注释:
BOOTPROTO=dhcp
ONBOOT=yes
如果刚刚改过,保存后:
sudo systemctl restart network
✅ Step 3:接口本身是不是 DOWN?
ip link
如果看到 state DOWN
,手动拉起:
sudo ip link set enp0s3 up
此时再 ip addr
,大概率已经有 inet …/24
了;如果仍旧没有,再继续往下看。
三、确认 DHCP 服务器是否真的给了地址
到这里,99 % 的“低级错误”已经排除,我们才需要“抓包”一样地去跟 DHCP 握手。
手动触发一次 DHCP 过程
sudo dhclient -v enp0s3
观察输出:
- 看到
DHCPACK from 192.168.x.1
就 OK - 若长时间卡在
DHCPDISCOVER
无回应,说明:
可能原因 | 排查方法 |
---|---|
虚拟机网络模式选成“仅主机” | 回到 Step 1 改桥接/NAT |
宿主机防火墙/公司网络屏蔽 DHCP | 换网络或手动设静态 IP |
DHCP 地址池耗尽 | 让网管查服务器 |
四、一条命令自检脚本
把下面脚本保存成 netcheck.sh
,一键输出所有关键信息:
#!/usr/bin/env bash
set -e
echo "=== Link status ==="
ip -br link
echo -e "\n=== Address status ==="
ip -br addr
echo -e "\n=== Route status ==="
ip route || true
echo -e "\n=== DHCP retry ==="
sudo dhclient -v $(ip -o link | awk -F': ' '$2!="lo"{print $2}' | head -n1)
五、总结金句
“ip addr 没 IP地址”问题 ,
先看 虚拟机网卡插没插线,再看 配置文件写没写对,
最后才让 DHCP 跑起来。
六、参考资料
- Red Hat 官方文档:Configuring IP Networking
- man page:
man ip
,man dhclient
如果这篇文章帮到了你,欢迎点赞、转发、留言讨论!