一、问题现象与问题产生原因
1. 问题现象
在 VMware 中安装Ubuntu虚拟机,网络模式选择 NAT,系统启动后发现无法联网,具体表现为:
-
无法访问外网
-
ip addr 中只有 lo 或者 ens33 没有 IPv4 地址
-
网卡驱动已加载,但始终无法获取 IP
-
使用 nmcli 指令查看网络状态
nmcli device status
显示:
ens33 ethernet 未托管 lo loopback 未托管
即使手动执行:
sudo ip link set ens33 up
或重新配置 netplan、NetworkManager,问题依旧存在。
2. 问题产生的原因(核心)
该问题并不是网卡、驱动或 NAT 配置错误,而是 NetworkManager 在虚拟机环境中进入了“设备未托管状态”。
(1)什么是“未托管”?
“未托管”表示:NetworkManager 不再管理该网络接口
也就是说:
-
不会为接口申请 DHCP
-
不会分配 IP
-
不会配置路由和 DNS
即使 NetworkManager 服务在运行,接口也不会被真正启用。
(2)为什么会出现这种情况?
在 VMware + Ubuntu(尤其是 Server / Minimal 镜像) 中,以下因素叠加,容易导致该问题:
-
虚拟网卡属于模拟设备(如 e1000)
-
netplan、NetworkManager、ifupdown 混合存在
-
系统无桌面环境,NetworkManager 无法完整工作
-
NetworkManager 判断接口“不适合托管”,从而放弃管理
一旦 NetworkManager 进入设备级全未托管状态,继续修改配置文件或使用 nmcli 通常无法恢复。
二、解决方法(推荐方案)
思路说明
对于 虚拟机 / 服务器 / 无 GUI 环境,NetworkManager 并非最佳选择。
此类环境中,systemd-networkd 更简单、更稳定、更适合,因此采用 切换网络管理方式 的方案解决问题。
1. 停用 NetworkManager
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
2. 启用 systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
确认服务状态(活跃状态才行):
systemctl status systemd-networkd

3. 配置 ens33 使用 DHCP
创建配置文件:
sudo nano /etc/systemd/network/20-ens33.network
写入内容:
[Match] Name=ens33
[Network] DHCP=yes
4. 重启网络并拉起接口
sudo systemctl restart systemd-networkd
sudo ip link set ens33 up
5. 验证结果
ip addr show ens33
若看到类似内容:
inet 192.168.xxx.xxx/24
说明 DHCP 获取成功。
测试网络连通性:
ping -c 3 8.8.8.8 ping -c 3 www.baidu.com
三、总结
-
本问题并非 NAT、驱动或网卡故障
-
本质原因是 NetworkManager 在虚拟机环境中未接管网络设备
-
在服务器或虚拟机环境中,systemd-networkd 是更稳定可靠的选择
-
当出现 未托管 且无法恢复时,切换网络管理方式是最有效的解决方案
网硕互联帮助中心






评论前必须登录!
注册