Linux虚拟机联网失败问题解决方法
321.1.4Linux虚拟机联网失败问题解决方法
一、Linux虚拟机联网失败问题解决方法
本节没有编写或展示 C 源码,因此标题下不添加代码块。视频处理的是 VMware 中 Ubuntu 20.04 桌面版没有网络图标、无法联网的问题,依次演示了还原 VMware 虚拟网络、删除并重新添加虚拟网卡,以及重置 Ubuntu 的 NetworkManager 状态。
这几步分别位于不同层次,不能都叫“重启网络服务器”:
Windows 的物理网络与上网连接
↓
VMware 的 VMnet 虚拟交换网络
├─ VMnet0:通常用于桥接
├─ VMnet1:通常用于仅主机网络
└─ VMnet8:通常用于 NAT,并配合 VMware NAT/DHCP 服务
↓
虚拟机配置中的虚拟网卡
↓
Ubuntu 网卡驱动与 NetworkManager
↓
IPv4 地址 → 默认路由 → DNS → 浏览器/其他应用
排障应从影响最小的检查开始,一层一层定位。视频中的“还原默认设置”“移除虚拟网卡”和删除状态文件都会改变配置,不应看到网络图标消失就不加判断地全部执行。
1.1 配置虚拟机网络
开始前先确认 Windows 主机本身可以联网,并保存正在进行的工作。若 Windows 也无法访问网络,应先处理物理网卡、路由器、VPN、代理或上游网络,重置 Ubuntu 并不能修复主机断网。
1.1.1 重启虚拟机网络编辑器
原笔记的“重启虚拟机网络编辑器”不够准确。视频实际操作是:
- 在 VMware Workstation 中选择“编辑 → 虚拟网络编辑器”。
- 点击“还原默认设置”。
- 首次点击时,界面明确提示“虚拟机开机后无法还原虚拟网络设置,请先关闭所有虚拟机”。
- 将虚拟机关机后再次打开编辑器并执行还原,等待 VMnet0、VMnet1、VMnet8 重新建立,再点击“确定”。
这里要求的是关闭所有正在运行的虚拟机。挂起会保留虚拟机的运行状态,不应视为可靠替代;应按界面提示执行完整关机。视频还原前后的 NAT 和仅主机子网已经发生变化,说明“还原默认设置”不仅是重启界面,而是重建 VMware 的默认虚拟网络配置。
这项操作可能产生以下影响:
- 重置自定义 VMnet、NAT、DHCP、子网和端口转发设置。
- 改变 NAT/仅主机网段,原来写死的虚拟机地址、开发板地址或脚本配置可能失效。
- 暂时中断其他虚拟机的网络。
因此,应把它作为后段修复手段,而不是第一步。Broadcom 的官方排障顺序也是先检查网络模式、桥接目标、VMware 网络进程、防火墙/VPN 和地址配置,再考虑“Restore defaults”。若使用 NAT,可先在 Windows 的“服务”中检查 VMware NAT Service 与 VMware DHCP Service;若使用桥接,则检查 VMnet0 是否桥接到了当前实际联网的物理网卡。VPN、防火墙、受管交换机和某些 Wi-Fi 接入点也可能阻止桥接通信。
1.1.2 重启虚拟机网络适配器
视频把 Ubuntu 虚拟机关机,进入“编辑虚拟机设置”,移除原网络适配器,再通过“添加 → 网络适配器”添加新网卡,最终选择 NAT 模式。转录中的“NIT”是 NAT 的识别错误。
删除网卡前,应先做更简单的检查:
- 打开“虚拟机设置 → 网络适配器”。
- 虚拟机运行时确认“已连接”;同时勾选“启动时连接”。视频中新添加的网卡也勾选了“启动时连接”。
- 只需要访问互联网时可先选 NAT;后续要让实体开发板从局域网直接访问 Ubuntu 时,再按实际拓扑选择桥接。
- 若选择桥接,不要只依赖“自动”;主机同时存在有线、Wi-Fi、VPN 和虚拟网卡时,应确认 VMnet0 绑定的是当前有效的物理适配器。
只有网卡设备缺失、损坏,或上述检查无效时,才考虑移除并重新添加。重新添加网卡可能生成新的虚拟 MAC 地址,也可能使 Ubuntu 中的接口名或连接配置发生变化,从而影响 DHCP 保留、静态 IP、已有 NetworkManager 配置和依赖固定网卡名的脚本。操作前应记录原网络模式、MAC 地址及自定义设置。
NAT 与桥接的选择不能只看“能否打开网页”:
| 模式 | 访问互联网 | 局域网设备主动访问虚拟机 | 本课程中的用途 |
|---|---|---|---|
| NAT | 通过 Windows 主机共享,通常最容易成功 | 默认不能像独立局域网主机那样直接访问,必要时需端口转发 | 本视频用于先恢复 Ubuntu 上网 |
| 桥接 | 依赖真实局域网为虚拟机分配地址 | 通常可直接访问,但受接入点、交换机和防火墙限制 | 后续 Ubuntu 与开发板处于同一局域网时更方便 |
| 仅主机 | 默认不能直接上外网 | 只有 Windows 主机和同一仅主机网段中的虚拟机可达 | 隔离实验,不适合作为本节互联网测试模式 |
1.1.3 重启虚拟机网络服务器
视频中的“网络服务器”实际是 Ubuntu 客户机里的 NetworkManager 守护进程/系统服务。它负责发现网卡、激活连接、获取地址并协调路由和 DNS;它不是 VMware NAT 服务,也不是提供网页的服务器。
视频逐字执行了以下三条命令:
sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start
三条命令的真实作用是:
sudo service network-manager stop:停止 NetworkManager;网络会暂时断开。service是兼容式服务管理入口。sudo rm /var/lib/NetworkManager/NetworkManager.state:删除 NetworkManager 的持久状态文件。该文件会保存全局联网开关以及 Wi-Fi/WWAN 等状态;它不是普通“启动文件”,也不是所有连接配置的总和。sudo service network-manager start:重新启动 NetworkManager,它会重新创建或加载必要状态,并尝试激活可用连接。
删除系统文件并不是常规重启的必要步骤。更安全的顺序是先检查、再执行无损恢复:
# 查看 NetworkManager 的总体状态。
nmcli general status
# 查看 NetworkManager 识别到的网卡、类型和连接状态。
nmcli device status
# 查看 Linux 内核识别到的接口以及接口是否启用。
ip -br link
# 查看 IPv4 地址;没有 inet 地址通常表示尚未成功取得或配置 IPv4。
ip -4 address
# 查看默认路由和网关。
ip route
# 查看当前 DNS 配置。
resolvectl status
若 NetworkManager 被全局关闭,可先尝试:
# 打开 NetworkManager 的全局联网开关。
sudo nmcli networking on
若网卡和配置存在,但服务状态异常,可直接重启服务:
# Ubuntu 20.04 使用 systemd;这是比“停止—删除文件—启动”更温和的重启方法。
sudo systemctl restart NetworkManager
# 检查重启后的状态和近期错误。
systemctl --no-pager --full status NetworkManager
journalctl -u NetworkManager -b --no-pager -n 100
若需要重新激活某个连接,先用 nmcli connection show 取得真实连接名,再执行:
# 列出连接配置;名称可能是“Wired connection 1”,不能凭空照抄。
nmcli connection show
# 用实际连接名替换下面的占位文字。
sudo nmcli connection down "<实际连接名>"
sudo nmcli connection up "<实际连接名>"
只有已经确认 /var/lib/NetworkManager/NetworkManager.state 中的持久状态异常,并理解删除后影响时,才考虑视频中的删除操作。不要把网上复制来的 sudo rm 命令直接粘贴执行;先逐字符核对绝对路径,错误的高权限删除命令可能破坏系统。
视频还展示了两个终端细节:
- GNOME Terminal 中通常用
Ctrl+Shift+V粘贴,而不是Ctrl+V。 sudo会以提升后的权限执行命令,并要求验证当前用户密码。输入密码时终端默认不显示字符或星号,这是正常的,并非键盘无响应。
1.1.4 按故障层次定位
不要只看桌面右上角是否出现网络图标。图标消失可能是网络未连接,也可能只是 GNOME Shell、指示器或 NetworkManager 状态显示异常。应根据命令结果定位:
| 现象 | 最可能的故障层 | 优先检查 |
|---|---|---|
| Windows 主机也不能联网 | 物理网络或上游网络 | Windows 网卡、路由器、VPN、代理、DNS |
ip -br link 中没有以太网接口 | VMware 虚拟硬件或客户机驱动 | 虚拟网卡是否存在、是否连接、是否启动时连接 |
有接口但为 DOWN/disconnected | 链路或 NetworkManager 连接 | VMware“已连接”、nmcli device status、连接配置 |
接口为 UP 但没有 IPv4 地址 | DHCP 或静态地址配置 | NAT/桥接 DHCP、nmcli connection show、虚拟网段 |
有 IPv4 但没有 default via ... | 默认路由缺失 | ip route、连接中的网关设置 |
| 能 ping 公网 IP,不能解析域名 | DNS | resolvectl status、getent hosts ubuntu.com |
| 域名和 ping 正常,浏览器仍失败 | 应用层、代理、TLS、时间或防火墙 | 浏览器代理、系统时间、HTTPS 错误、主机安全软件 |
| NAT 能上网,但开发板不能主动访问虚拟机 | 网络模式与拓扑不匹配 | 改用合适的桥接网络,或明确配置转发/路由 |
建议每完成一步就重新测试,在哪一步恢复就停止,不要继续执行后面的重置操作。这样既能确定真正原因,也能避免一次改变多个条件后无法复盘。
二、百度网址拼写演示
原笔记中的“网址拼写”“出现‘拼’字”来自语音识别错误。视频执行的是 ping,不是“拼写”:
ping www.baidu.com
终端先显示 PING www.a.shifen.com (157.148.69.80),随后连续收到 64 bytes from ... 响应。这至少说明测试当时:
- DNS 已把
www.baidu.com解析为 IP 地址;显示a.shifen.com是该站点解析/别名结果的一部分,不是拼写成功提示。 - Ubuntu 能向目标发送 ICMP Echo Request,并收到 Echo Reply。
- 网络图标重新出现,同时实际网络通信也恢复了。
更适合学习和排障的写法是限定次数:
# 发送 4 组 ICMP 测试后自动退出,并输出丢包率和往返时间摘要。
ping -c 4 www.baidu.com
视频最后按的是 Ctrl+Z,终端因此显示 ^Z 和 [1]+ Stopped ping www.baidu.com。Ctrl+Z 只是暂停进程并把它留在 shell 的作业表中,不是正常结束。应按 Ctrl+C 向前台 ping 发送中断信号,或者一开始使用 -c 4。若已经误按 Ctrl+Z,可用 jobs 查看,再用 kill %1 结束编号为 1 的暂停作业。
ping 也不是互联网正常的唯一证据:目标或中间防火墙可能禁止 ICMP,因此 ping 不通不一定代表网页必然打不开;反过来,ping 通只证明 DNS/ICMP 路径可用,不能证明 HTTP、HTTPS、代理和所有目标站点都正常。
三、浏览器网页访问演示
视频随后打开 Firefox,访问 https://www.baidu.com,再从搜索结果进入一个汽车相关页面。网页能够完整加载,说明当时不只有网络图标恢复,DNS、到站点的 TCP 连接、HTTPS 和浏览器访问链路也能够工作。
实际验收建议分层进行:
# 1. 查看地址与默认路由。
ip -4 address
ip route
# 2. 测试默认网关;把占位内容换成 ip route 中 default via 后的地址。
ping -c 4 <默认网关地址>
# 3. 测试公网 IP 路径;有些网络会屏蔽 ICMP,失败时仍需结合 HTTPS 判断。
ping -c 4 1.1.1.1
# 4. 单独验证域名解析。
getent hosts ubuntu.com
# 5. 最后用浏览器访问可信 HTTPS 网站,验证实际应用链路。
对于本课程,能打开网页只是第一阶段。后续还应确认 Ubuntu 与 i.MX6ULL 开发板能互相访问,并记录两端 IPv4 地址和子网掩码;NAT 下“Ubuntu 能上网”不等于“开发板能直接访问 Ubuntu”,需要根据开发板接线和局域网拓扑决定是否改用桥接。
四、本节关键纠正与推荐顺序
| 原笔记或视频说法 | 精校后的结论 |
|---|---|
| “重启虚拟机网络编辑器” | 视频实际是“还原默认设置”,会重建 VMnet 配置,不是简单重启 |
| “关机或挂起后即可还原” | 画面明确要求关闭所有虚拟机;应完整关机,不把挂起当作可靠替代 |
| “桥接或 NAT 都可以” | 两者都能提供特定条件下的网络,但可达范围不同;课程后续连接开发板时必须按拓扑选择 |
| “删除、重新添加网卡等于重启适配器” | 这是重新创建虚拟硬件,可能改变 MAC、接口名和连接配置;先检查连接复选框和模式 |
| “重启虚拟机网络服务器” | 课程三条命令操作的是 Ubuntu 的 NetworkManager 服务,不是 VMware NAT/DHCP 服务 |
| “删除启动相关文件” | NetworkManager.state 是持久状态文件;删除它不是常规重启所必需 |
| “看到‘拼’字就成功” | 实际是 PING 及 ICMP 回复;还要区分地址、路由、DNS 和应用层 |
用 Ctrl+Z 结束 ping | Ctrl+Z 会暂停并留下 stopped job;应使用 Ctrl+C 或 ping -c 4 |
推荐的实际排障顺序是:
- 确认 Windows 主机能联网。
- 检查 VMware 虚拟网卡存在,并勾选“已连接/启动时连接”。
- 根据需求确认 NAT 或桥接模式;桥接时确认实际物理网卡。
- 在 Ubuntu 中检查
nmcli device status、IP 地址、默认路由和 DNS。 - 必要时重新激活连接或重启 NetworkManager。
- 检查 Windows 侧 VMware NAT/DHCP 服务、VPN 和防火墙干扰。
- 前面均无效时,关闭所有虚拟机并还原 VMware 默认网络。
- 最后才考虑删除并重建虚拟网卡、删除 NetworkManager 状态文件或重装 VMware 网络组件。
核对依据
- 本地
videos/321.1.4Linux虚拟机联网失败问题解决方法.mp4:逐帧核对无网络现象、虚拟网络编辑器提示、还原前后 VMnet 子网、删除并新增 NAT 网卡、三条 NetworkManager 命令、ping www.baidu.com输出、Ctrl+Z暂停结果和 Firefox 网页验证;视频时长约 6 分 27 秒。 - 本地
transcripts/321.1.4Linux虚拟机联网失败问题解决方法.txt与.srt:核对教师讲述,并结合画面纠正“网络编制/运行器”“网络适配”“NIT”“服务器”“拼”等识别错误。 - Broadcom:排查虚拟机网络连接失败:核对网络模式、桥接目标、VMware 网络进程、防火墙/VPN、DHCP 与“还原默认设置”的官方排障顺序。
- Broadcom:使用 VMware Workstation 虚拟网络编辑器:核对 VMnet0/VMnet1/VMnet8 的常见用途、NAT/DHCP 和端口转发配置含义。
- NetworkManager 官方手册及
nmcli官方手册:核对 NetworkManager 的职责、NetworkManager.state路径,以及设备、连接、地址、路由和 DNS 的诊断方法。 - Ubuntu 官方网络配置文档:核对
ip address、ip route、默认网关、DNS 与resolvectl的含义。 - Ubuntu 20.04
ping手册:核对 ICMP Echo、-c次数限制和测试顺序。 - GNU Bash 作业控制说明:核对
Ctrl+Z是暂停前台作业,而不是结束进程。