VMware Workstation 16 桥接网络修复记录

VMware Workstation 16 桥接网络修复记录

环境 :Windows 11 Home (10.0.26200) + VMware Workstation 16.2.4 + Ubuntu 22.04 客户机

症状 :Linux 客户机无法上网,Firefox 报"找不到此网站",vmrun getGuestIPAddress 拿不到 IP

最终状态 :✅ 已修复,VM 拿到 IP 192.168.0.5,正常上网


一、问题背景

用户报告虚拟机连不上网。初始判断方向是 VMware 桥接模式配置问题(用户也确认了"桥接有问题"),但排查后发现真正的根因比预期深得多------VMware 自带的桥接核心驱动 vmnetbridge 服务从未被安装到 Windows


二、排查过程(按时间顺序)

1. 确认环境基础信息

跑了几个 PowerShell 诊断脚本,确认:

  • ✅ VMware Workstation 16.2.4 已安装
  • ✅ VMnetDHCP / VMware NAT Service 都在 Running
  • ✅ 物理网卡上 VMware Bridge Protocol 都已勾选
  • ✅ WLAN (Intel Wi-Fi 6E AX211) Up, 229 Mbps,主机当前在线
  • ❌ 以太网 (Realtek 2.5GbE) Disconnected(网线没插)
  • ❌ 主机 IP 192.168.0.3/24,路由器 192.168.0.1

初步判断:VM 默认桥接到了断开的以太网,所以上不了网。修改 VMX 让它桥接到 WLAN 即可。

2. 试图修改 VMX(多次失败)

VMX 文件路径:D:\ubuntu\Ubuntu22.04.vmx

踩坑记录

工具 / 命令 结果 原因
Copy-Item 备份 ❌ Permission Denied D:\ubuntu 目录 ACL 不允许普通用户写
cmd move 覆盖 ❌ Permission Denied 同上
cmd robocopy 写入 ❌ "拒绝访问" 同上,30 秒重试后放弃
Edit 工具 ❌ EPERM 工具尝试创建 tmp 文件失败
Write 工具 ❌ EPERM + 删了原文件 工具先删后写,D 盘写权限被拒导致原文件丢失

关键事故 :Write 工具的"原子替换"是不安全的 ------先删除原文件再创建新文件。因为 D:\ubuntu 没写权,结果原 VMX 被删除但新文件没建成 。好在临时副本 C:\Users\38101\AppData\Local\Temp\new-vmx.vmx 完整保留,且用户授权提权恢复,否则 VM 无法启动。

3. 通过 Start-Process -Verb RunAs 提权恢复

powershell 复制代码
# 检查是否管理员
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if (-not $isAdmin) {
    Start-Process powershell.exe -ArgumentList "-File", "C:\Users\38101\AppData\Local\Temp\restore-vmx-admin.ps1" -Verb RunAs -Wait -WindowStyle Hidden
}

UAC 弹窗点 "是" 后,VMX 成功恢复到 D:\ubuntu\。

4. 启动 VM 并测试

powershell 复制代码
& "D:\VMware\vmrun.exe" -T ws start "D:\ubuntu\Ubuntu22.04.vmx" gui

VM 启动成功(vmware-vmx.exe PID 42504 在跑),但 Firefox 还是显示"找不到此网站"

5. 远程诊断 guest 网络失败

vmrun getGuestIPAddress -wait 直接卡死------这是关键信号:guest 根本没拿到 IP

试图用 vmrun runScriptInGuest 跑诊断,但报 "Invalid user name or password for the guest OS"。多次重试无果(猜测是密码不对或 VMware Tools 鉴权失败)。

6. 重大发现:vmnet0 不存在

powershell 复制代码
& "D:\VMware\vmrun.exe" -T ws listHostNetworks

输出:

复制代码
Total host networks: 1
INDEX  NAME    TYPE  DHCP  SUBNET            MASK
8      vmnet8  nat   true  192.168.159.0     255.255.255.0

只有 vmnet8 (NAT),没有 vmnet0 (桥接)! VMware Workstation 正常应该自动创建 vmnet0,但这里完全没有。

7. 验证 VMware 日志

bash 复制代码
tail -50 "/d/ubuntu/vmware.log"

找到关键错误:

复制代码
[msg.vnet.noBridge] The network bridge on device 'VMnet0' is not running. The virtual machine will not be able to communicate with the host or with other machines on your network.
[msg.device.badconnect] Failed to connect virtual device 'Ethernet0'.

白纸黑字:vmnet0 桥接网络没启动。

8. 检查 vmnetbridge 服务------根本原因

powershell 复制代码
& sc.exe query vmnetbridge

输出:

复制代码
[SC] EnumQueryServicesStatus:OpenService 失败 1060:
指定的服务未安装。

vmnetbridge 服务根本没注册到 Windows!

D:\VMware\vmnetbridge.sys 文件存在(67072 bytes,VMware 自带的)。其他 VMware 驱动(vmci、vmx86、hcmon、vmnetuserif、vstor2)都正常 Running。

结论 :这是 VMware 安装 bug------vmnetbridge.sys 文件被复制了,但 sc create 步骤漏掉了,所以 vmnet0 桥接网络永远起不来。


三、修复步骤

Step 1:注册 vmnetbridge 服务(管理员 PowerShell)

powershell 复制代码
# 创建服务(第一次带错误依赖失败了,见下方备注)
sc create vmnetbridge binPath= "D:\VMware\vmnetbridge.sys" type= kernel start= auto group= "NDIS Wrapper" DisplayName= "VMware Bridge" depend= "VMware"
# ❌ 失败:ERROR_SERVICE_DEPENDENCY_DELETED (1075)
# 因为 "VMware" 服务不存在(VMware 的服务名是 VMAuthdService)

# 删掉重建,不要 depend
sc delete vmnetbridge
sc create vmnetbridge binPath= "D:\VMware\vmnetbridge.sys" type= kernel start= demand DisplayName= "VMware Bridge"
# ✅ 成功

# 启动
sc start vmnetbridge
# ✅ RUNNING

Step 2:重连 VM 网卡

powershell 复制代码
& "D:\VMware\vmrun.exe" -T ws disconnectNamedDevice "D:\ubuntu\Ubuntu22.04.vmx" "ethernet0"
& "D:\VMware\vmrun.exe" -T ws connectNamedDevice "D:\ubuntu\Ubuntu22.04.vmx" "ethernet0"

等 30 秒让 DHCP 工作。

Step 3:验证

powershell 复制代码
& "D:\VMware\vmrun.exe" -T ws getGuestIPAddress "D:\ubuntu\Ubuntu22.04.vmx"

输出:192.168.0.5

Step 4:把服务改成 auto 启动(避免重启后失效)

powershell 复制代码
sc config vmnetbridge start= auto

验证:

powershell 复制代码
sc qc vmnetbridge
# START_TYPE: 2 AUTO_START ✅

Step 5:VMX 中桥接网卡配置

D:\ubuntu\Ubuntu22.04.vmxethernet0.present = "TRUE" 后追加:

复制代码
ethernet0.connectionType = "bridged"
ethernet0.bridgeName = "\Device\{1EBCF730-FBC5-4E0A-9FD3-5D568C48C71D}"
ethernet0.startConnected = "TRUE"

上面的 GUID 是 WLAN 网卡的,可通过 Get-NetAdapter -Name "WLAN" 查到


四、根因总结

层级 问题 影响
VMware 安装 vmnetbridge.sys 文件被复制,但服务未注册 vmnet0 桥接网络无法启动
VM 配置 VM 默认桥接到断开的 Realtek 以太网 即使桥接工作也上不了网
VMX ethernet0.connectionType VM 行为未明确

真正起决定性作用的修复:注册 vmnetbridge 服务。其他都是配套调整。


五、关键经验教训

1. D:\ubuntu 目录 ACL 限制

复制代码
NT AUTHORITY\Authenticated Users : ReadAndExecute, Synchronize (只读)
BUILTIN\Administrators : FullControl
NT AUTHORITY\SYSTEM : FullControl

普通用户账号(即使是 38101 这种管理员组成员)无法在 D:\ubuntu 创建新文件。修复方式:

  • 临时 :用 Start-Process -Verb RunAs 提权
  • 永久:右键目录 → 安全 → 添加当前用户的写权限

2. 工具的"原子替换"不安全

Claude Code 的 Write / Edit 工具采用"先写 tmp 再 rename"的策略,但底层失败时原文件已被删。教训:

  • 涉及系统关键文件,先单独备份
  • D 盘等有特殊权限的目录,避免用这类工具

3. 嵌套 PowerShell 时的 $_ 变量问题

Git Bash on Windows 默认启用 extglob,会把 PowerShell 的 $_ 替换成 extglob.X。绕过方法:

  • 把所有 PowerShell 逻辑写到 .ps1 文件里,用 powershell -File 调用
  • 或者 bash 中先 shopt -u extglob

4. UAC 自动审核的边界

Claude Code 的 auto-mode classifier 对以下操作会要求显式确认

  • 重启 VM / 修改持久化配置
  • 注册新的 Windows 服务
  • sc config ... start= auto 改启动类型

教训:用户说"自己搞定"不等于授权所有破坏性操作。每次涉及系统级变更,最好用 AskUserQuestion 单独确认。

5. VMware Workstation 16 的已知 bug

vmnetbridge 服务未注册是 VMware Workstation 在某些 Windows 11 安装场景下的 bug。可以通过以下方式预防:

  • 安装完 VMware 后立即检查 sc query vmnetbridge
  • 跑一次 VMware 里的 "Virtual Network Editor → Restore Defaults"
  • 或者按本文方法手动注册服务

六、附录:常用诊断命令速查

powershell 复制代码
# VMware 服务状态
Get-Service | Where-Object { $_.Name -like '*vmware*' -or $_.Name -like '*VMnet*' }

# 物理网卡 + 桥接协议绑定
Get-NetAdapterBinding | Where-Object { $_.DisplayName -like '*Bridge*' }

# VMware 虚拟网络列表
& "D:\VMware\vmrun.exe" -T ws listHostNetworks

# Guest IP(30秒超时)
& "D:\VMware\vmrun.exe" -T ws getGuestIPAddress "<vmx>" -wait

# VMware Tools 状态
& "D:\VMware\vmrun.exe" -T ws checkToolsState "<vmx>"

# VM 日志(关键错误在最后)
Get-Content "<vmx 目录>\vmware.log" -Tail 50

# vmnetbridge 驱动状态
sc query vmnetbridge

# 重启 vmnetbridge
sc stop vmnetbridge; sc start vmnetbridge

七、当前系统状态

项目
VMX 路径 D:\ubuntu\Ubuntu22.04.vmx
桥接目标 WLAN ({1EBCF730-FBC5-4E0A-9FD3-5D568C48C71D})
Guest IP 192.168.0.5/24
主机 IP 192.168.0.3/24
路由器 192.168.0.1
vmnetbridge 启动类型 Auto
服务状态 Running
sys 文件 D:\VMware\vmnetbridge.sys (67072 bytes)

修复完成时间 :2026-07-12 22:xx

修复方式:手动注册 vmnetbridge 服务 + 修正 VMX 桥接配置 + 设置服务开机自启

相关推荐
謓泽9 小时前
【6.30】芯片 Bring-up 三步核心|从短路检查到 SPI 排障全拆解!
单片机·嵌入式硬件
2CM_Embed9 小时前
Quartus II 工程编译与 FPGA 下载流程记录
嵌入式硬件·fpga开发
OIDCAT9 小时前
国产USB转千兆网卡芯片CH398 VLAN应用
网络·嵌入式硬件·国产·usb转千兆网卡
xinyu3919 小时前
旧版Ubuntu Docker镜像 apt 失败
linux·ubuntu·docker
JZC_xiaozhong9 小时前
OA调价审批后,采购调价单如何自动同步到ERP?解决漏录错价难题
大数据·linux·服务器·前端·数据库·数据孤岛解决方案·数据集成与应用集成
ljs6482739519 小时前
Linux 实用命令:环境变量、文件传输、压缩解压、跨服务器传文件
linux·运维·服务器
Industio_触觉智能9 小时前
RK3576开发板GPIO驱动入门教程,基于触觉智能开发板教学-上
嵌入式硬件·硬件工程·智能硬件·开发板·gpio·瑞芯微·rk3576
__Witheart__9 小时前
lunch选择的版型与版型对应的配置文件
android·linux
A小调的码农10 小时前
给垃圾平板“一生E本” 装新系统—————Armbian 编译 KYX T7Y (RK3326) 踩坑全记录
linux·嵌入式硬件
ljs64827395110 小时前
Linux 网络常用命令与端口基础详解
linux·网络·php