一、问题背景与现象描述
1.1 核心现象
在VMware虚拟机中安装的Ubuntu系统,每次重启后网卡ens33自动处于DOWN状态,执行`ip addr`命令仅显示本地回环网卡lo,无法看到ens33的IP信息,网络完全中断。
1.2 临时修复方案
重启后需手动执行以下两条命令恢复网络,仅临时生效,重启后失效:
# 启用ens33网卡
sudo ip link set ens33 up
# 自动获取IP地址
sudo dhclient -v ens33
1.3 排查范围
-
网络管理服务(netplan、systemd-networkd、NetworkManager)配置
-
网卡驱动与虚拟机适配性
-
系统镜像版本与网络管理策略
-
开机自启机制有效性
二、问题排查过程与尝试方案
2.1 首次尝试:netplan官方配置修复
操作步骤
-
编辑netplan核心配置文件:
sudo nano /etc/netplan/01-network-manager-all.yaml -
写入标准化配置(严格控制缩进与空格):
network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: yes optional: true -
应用配置并验证:
# 应用配置
sudo netplan apply
# 重启验证
sudo reboot
排查结果
-
配置文件语法无错误(通过`sudo netplan --debug apply`验证)
-
网络服务`systemd-networkd`与`NetworkManager`均处于`active (running)`状态
-
重启后网卡仍为`state DOWN`,netplan配置未实际生效
2.2 二次尝试:修复网络服务依赖
操作步骤
针对netplan配置失效,尝试修复服务运行环境:
# 解除服务屏蔽并重启
sudo systemctl unmask systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
sudo systemctl restart NetworkManager
# 重新应用netplan配置
sudo netplan apply
排查结果
-
服务日志显示`ens33: Link UP`仅在手动执行命令后触发,开机无自动触发
-
系统日志`journalctl -u systemd-networkd -b`未发现网卡开机启动报错
-
核心矛盾未解决:开机无自动启用网卡的动作
2.3 三次尝试:验证镜像与网卡适配性
操作步骤
-
检查网卡硬件识别与虚拟机适配:
# 查看硬件网卡信息 lspci | grep Ethernet # 检查虚拟机工具状态 systemctl status open-vm-tools -
对比配置与系统策略,确认`ip addr`与`ifconfig`命令差异
排查结果
-
网卡`ens33`被虚拟机正常识别,硬件无异常
-
系统为Ubuntu精简版/服务器版镜像,默认策略为「网卡开机不自动启用」
-
核心原因锁定:系统镜像层面的网络管理策略限制,而非配置错误
三、问题核心原因定位
3.1 根本原因
本次问题的核心是Ubuntu精简版/服务器版镜像的默认网络管理策略,具体表现为:
-
精简镜像为减少资源占用,默认关闭物理网卡开机自动启用机制,仅保留本地回环网卡lo
-
虽配置了netplan与NetworkManager,但精简镜像未加载网卡自动管理的依赖服务,导致netplan配置「形同虚设」
-
手动执行`ip link set ens33 up`与`dhclient ens33`可临时恢复,是因为直接补全了系统缺失的「启用网卡+获取IP」两个核心动作
3.2 关键佐证
-
重启后`ip addr`显示`ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN`,明确网卡未被系统自动启用
-
系统镜像为精简版,未预装`open-vm-tools`等虚拟机网卡增强工具,无法触发自动网卡管理
-
网络服务虽正常运行,但无开机自动启用网卡的执行指令,属于「服务空转」
四、终极解决方案(可复刻版)
4.1 方案核心思路
针对精简版Ubuntu镜像的策略限制,放弃依赖netplan/NetworkManager的自动管理,通过开机自启脚本强制执行「启用网卡+获取IP」动作,实现永久生效。
4.2 完整操作步骤
步骤1:创建开机自启脚本
-
编辑`rc.local`脚本文件:
sudo nano /etc/rc.local -
粘贴以下脚本内容(包含注释与核心命令):
#!/bin/bash # 开机自动启用ens33网卡并获取IP(解决虚拟机重启网卡DOWN问题) # 启用网卡 ip link set ens33 up # 自动获取DHCP IP dhclient ens33 exit 0 -
保存退出:按`Ctrl+O`确认保存,按`Ctrl+X`退出nano编辑器
步骤2:赋予脚本执行权限
sudo chmod +x /etc/rc.local
步骤3:启用并启动开机自启服务
# 启用rc-local服务(开机自动执行)
sudo systemctl enable rc-local
# 立即启动服务测试
sudo systemctl start rc-local
步骤4:验证脚本有效性
-
手动执行脚本测试,无需重启验证:
sudo /etc/rc.local -
检查网卡状态:
ip addr若显示`ens33`包含`inet` IP地址,说明脚本生效
步骤5:最终重启验证
sudo reboot
重启后再次执行`ip addr`,确认`ens33`自动获取IP,网络永久恢复。
4.3 方案优势
-
100%适配精简版Ubuntu镜像,不受netplan/NetworkManager策略限制
-
操作简单,无复杂配置风险,适合所有Ubuntu版本(18.04/20.04/22.04)
-
永久生效,无需每次重启手动干预
五、总结与注意事项
5.1 问题总结
本次虚拟机网卡重启失效问题,非配置错误、非服务故障、非硬件问题,而是Ubuntu精简版镜像的默认网络管理策略导致——系统未预设开机自动启用物理网卡的逻辑。通过rc.local开机自启脚本,直接补全核心动作,彻底解决问题。
5.2 注意事项
-
脚本中网卡名`ens33`需与实际环境一致,若网卡名为`ens32`/`eth0`,需同步替换命令中的网卡名
-
若后续更换虚拟机镜像(如桌面版Ubuntu),可尝试恢复netplan配置,无需再使用rc.local脚本
-
若需关闭开机自启,执行`sudo systemctl disable rc-local`即可
博客发布适配补充
-
问题延伸:若为桌面版Ubuntu,可尝试通过图形化网络管理界面(如Ubuntu系统设置-网络)直接启用网卡,无需脚本
-
推荐标签:#Ubuntu #VMware #网络配置 #netplan #运维技巧 #虚拟机网卡问题
-
截图建议:在排查步骤中添加`ip addr`、`systemctl status`、脚本编辑界面等命令截图,提升博客可读性
问题排查与解决报告&spm=1001.2101.3001.5002&articleId=159759041&d=1&t=3&u=1bc96af57203452a88eaba3a97859d96)
142

被折叠的 条评论
为什么被折叠?



