VMware 桥接模式无法联网:从 DHCPDISCOVER 到静态 IP 的完整排障实战

前言

在使用 VMware Workstation 搭建 Ubuntu / ROS 开发环境时,虚拟机网络通常会选择 NAT桥接(Bridged) 模式。

NAT 模式配置简单,但虚拟机与宿主机不在同一局域网网段。对于 ROS 多机通信、树莓派、机器人、嵌入式设备联调等场景,桥接模式往往更加方便,因为虚拟机会像一台真实设备一样直接接入物理局域网。

本文记录一次实际遇到的问题:

VMware 虚拟机使用 NAT 模式可以正常联网,但切换到桥接模式后无法获取 IP 地址,dhclient 不断发送 DHCPDISCOVER,却始终收不到 DHCPOFFER

最终通过抓包、静态 IP、ARP、路由和 DNS 测试定位到:VMware 桥接链路实际上是通的,真正异常的是 DHCP 自动地址分配。

最终采用固定静态 IP 的方式解决问题,并实现虚拟机桥接联网。


一、实验环境

Windows 宿主机

系统:

text 复制代码
Windows 11

无线网卡:

text 复制代码
Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter

Windows WLAN 地址:

text 复制代码
IPv4:192.168.0.101
掩码:255.255.255.0
网关:192.168.0.1

VMware

使用 VMware Workstation,虚拟机网络配置为:

text 复制代码
VMnet0
网络类型:桥接模式
桥接至:Killer(R) Wi-Fi 6 AX1650i

Ubuntu 虚拟机

虚拟网卡:

text 复制代码
ens33

MAC 地址:

text 复制代码
00:0c:29:35:55:3b

Ubuntu 使用 Netplan + NetworkManager 管理网络。

Netplan 配置文件:

bash 复制代码
/etc/netplan/01-network-manager-all.yaml

二、最初的问题

虚拟机切换到桥接模式以后:

bash 复制代码
ping baidu.com

出现:

text 复制代码
ping: baidu.com: Temporary failure in name resolution

最开始使用:

bash 复制代码
ifconfig

甚至只能看到:

text 复制代码
docker0
lo

于是首先检查网卡:

bash 复制代码
ip -br link

结果:

text 复制代码
lo       UNKNOWN
ens33    DOWN
docker0  DOWN

说明 VMware 虚拟网卡其实已经被 Ubuntu 正确识别,只是接口处于 DOWN 状态。

手动启动:

bash 复制代码
sudo ip link set ens33 up

再次查看:

bash 复制代码
ip -br link

变成:

text 复制代码
ens33 UP

说明:

VMware 虚拟网卡、Ubuntu 驱动以及虚拟链路本身都没有问题。


三、DHCP 无法获取 IP

接下来尝试:

bash 复制代码
sudo dhclient -v ens33

结果不断出现:

text 复制代码
DHCPDISCOVER on ens33 to 255.255.255.255 port 67 interval 3
DHCPDISCOVER on ens33 to 255.255.255.255 port 67 interval 4
DHCPDISCOVER on ens33 to 255.255.255.255 port 67 interval 7

但是始终没有:

text 复制代码
DHCPOFFER
DHCPREQUEST
DHCPACK

正常的 DHCP 流程应该是:

text 复制代码
客户端                          DHCP服务器
   |                                |
   |-------- DHCPDISCOVER --------->|
   |                                |
   |<--------- DHCPOFFER -----------|
   |                                |
   |--------- DHCPREQUEST --------->|
   |                                |
   |<---------- DHCPACK ------------|

而当前实际情况是:

text 复制代码
Ubuntu
   |
   | DHCPDISCOVER
   ↓
???

完全收不到 Offer。


四、先用 NAT 排除 Ubuntu 自身问题

这是整个排障过程中非常重要的一步。

将 VMware 网络适配器临时切换为:

text 复制代码
NAT 模式

然后执行:

bash 复制代码
sudo dhclient -r ens33
sudo ip link set ens33 up
sudo dhclient -v ens33

这一次马上成功:

text 复制代码
DHCPDISCOVER ...
DHCPOFFER of 192.168.233.128 from 192.168.233.254
DHCPREQUEST ...
DHCPACK ...
bound to 192.168.233.128

查看 IP:

bash 复制代码
ip -4 addr show ens33

得到:

text 复制代码
inet 192.168.233.128/24

查看路由:

bash 复制代码
ip route

存在:

text 复制代码
default via 192.168.233.2 dev ens33

测试公网:

bash 复制代码
ping -c 4 8.8.8.8

成功。

测试 DNS:

bash 复制代码
ping -c 4 baidu.com

同样成功。

因此可以确定:

text 复制代码
Ubuntu 网络栈       正常
ens33              正常
DHCP 客户端         正常
DNS                 正常
VMware 虚拟网卡     正常
NAT                 正常

故障只存在于:

text 复制代码
VMware 桥接模式

五、检查 VMware Bridge Protocol

在 Windows 中打开:

text 复制代码
控制面板
→ 网络和 Internet
→ 网络连接
→ WLAN
→ 属性

检查:

text 复制代码
VMware Bridge Protocol

确保已经勾选。

也可以使用 PowerShell:

powershell 复制代码
Get-NetAdapterBinding -Name 'WLAN' -ComponentID vmware_bridge | Format-List

正常应该看到:

text 复制代码
DisplayName : VMware Bridge Protocol
ComponentID : vmware_bridge
Enabled     : True

本机检查结果正是:

text 复制代码
Enabled : True

因此桥接协议确实绑定在 Killer Wi-Fi 网卡上。


六、检查 VMware Bridge 驱动

进一步在 Windows CMD 中执行:

cmd 复制代码
sc query vmnetbridge

结果:

text 复制代码
SERVICE_NAME: vmnetbridge
TYPE  : 1 KERNEL_DRIVER
STATE : 4 RUNNING

继续检查驱动:

cmd 复制代码
driverquery | findstr /i vmnet

得到:

text 复制代码
VMnetBridge
VMnetUserif
VMnetAdapter

检查网络组件:

cmd 复制代码
netcfg -s n | findstr /i vmware

得到:

text 复制代码
vmware_bridge    VMware Bridge Protocol

因此可以进一步排除:

VMware Bridge 驱动缺失或者未加载。


七、排除第三方网络过滤驱动干扰

Windows 上可能安装很多虚拟网络软件,例如:

text 复制代码
Mihomo / Clash
Npcap
VirtualBox
MuMu 模拟器
Hyper-V
iNode

查看 WLAN 上绑定的组件:

powershell 复制代码
Get-NetAdapterBinding -Name 'WLAN' |
Format-Table DisplayName,ComponentID,Enabled -AutoSize

其中发现:

text 复制代码
VMware Bridge Protocol                  True
Npcap Packet Driver                     False
VirtualBox NDIS6 Bridged Driver         False
MuMuVMM NDIS6 Bridged Driver            False
Rawether NDIS 6.X SPR Protocol Driver   True

为了排除干扰,将 Rawether 临时关闭:

powershell 复制代码
Disable-NetAdapterBinding -Name "WLAN" -ComponentID PCA_PCASP60

再次查看:

text 复制代码
Rawether NDIS 6.X SPR Protocol Driver   False
VMware Bridge Protocol                  True

同时关闭 Mihomo TUN。

不过重新测试:

bash 复制代码
sudo dhclient -v ens33

依然只有:

text 复制代码
DHCPDISCOVER
DHCPDISCOVER

说明 DHCP 问题仍然存在。


八、关键测试:不用 DHCP,手动设置静态 IP

这一步最终确定了故障性质。

Windows WLAN 当前信息:

text 复制代码
Windows:
192.168.0.101/24

网关:
192.168.0.1

因此选择一个暂时没有占用的地址:

text 复制代码
192.168.0.250

先在 Windows 中检查:

powershell 复制代码
ping 192.168.0.250
arp -a | findstr 192.168.0.250

确认没有设备占用。

然后 Ubuntu 中执行:

bash 复制代码
sudo dhclient -r ens33
sudo ip link set ens33 up

sudo ip addr flush dev ens33
sudo ip addr add 192.168.0.250/24 dev ens33

sudo ip route replace default via 192.168.0.1 dev ens33

查看:

bash 复制代码
ip -4 addr show ens33

结果:

text 复制代码
inet 192.168.0.250/24

查看路由:

bash 复制代码
ip route

结果:

text 复制代码
default via 192.168.0.1 dev ens33
192.168.0.0/24 dev ens33

九、静态 IP 下测试桥接

首先测试路由器:

bash 复制代码
ping -c 4 192.168.0.1

结果:

text 复制代码
4 packets transmitted
4 received
0% packet loss

成功。

再测试公网:

bash 复制代码
ping -c 4 8.8.8.8

结果同样:

text 复制代码
0% packet loss

继续查看 ARP:

bash 复制代码
ip neigh show dev ens33

得到:

text 复制代码
192.168.0.1 lladdr cc:08:fb:56:7b:85 REACHABLE
192.168.0.101 lladdr 00:a5:54:af:e6:af REACHABLE

这个结果非常关键。

它证明:

text 复制代码
Ubuntu VM
   ↓
VMware VMnet0
   ↓
Killer Wi-Fi
   ↓
TP-Link 路由器

整个二层网络实际上已经正常工作。

因此最终定位:

不是 VMware 桥接完全失效,而是桥接模式下 DHCP 自动获取地址失败。


十、解决 DNS 问题

设置静态 IP 后:

bash 复制代码
ping -c 4 8.8.8.8

成功,但是:

bash 复制代码
ping baidu.com

提示:

text 复制代码
Temporary failure in name resolution

查看:

bash 复制代码
cat /etc/resolv.conf

只有:

text 复制代码
nameserver 127.0.0.53

这里的 127.0.0.53 是 Ubuntu systemd-resolved 的本地 DNS Stub,并不是问题本身。

真正的问题是:

手动配置 IP 后,没有 DHCP 帮 ens33 下发上游 DNS。

因此执行:

bash 复制代码
sudo resolvectl dns ens33 223.5.5.5 8.8.8.8
sudo resolvectl domain ens33 '~.'
sudo resolvectl default-route ens33 yes

检查:

bash 复制代码
resolvectl status ens33

得到:

text 复制代码
Current Scopes: DNS
Protocols: +DefaultRoute
DNS Servers: 223.5.5.5 8.8.8.8
DNS Domain: ~.

刷新 DNS:

bash 复制代码
sudo resolvectl flush-caches

测试解析:

bash 复制代码
resolvectl query baidu.com

成功返回:

text 复制代码
111.63.65.247
111.63.65.103
110.242.74.102
124.237.177.164

再测试:

bash 复制代码
ping -c 4 baidu.com

结果:

text 复制代码
4 packets transmitted
4 received
0% packet loss

至此:

text 复制代码
桥接       正常
IP         正常
网关       正常
公网       正常
DNS        正常

十一、将静态 IP 永久写入 Netplan

前面的:

bash 复制代码
ip addr add
ip route replace
resolvectl dns

都属于临时配置,重启以后会丢失。

Ubuntu 当前 Netplan 文件:

bash 复制代码
ls /etc/netplan/

结果:

text 复制代码
01-network-manager-all.yaml

先备份:

bash 复制代码
sudo cp /etc/netplan/01-network-manager-all.yaml \
/etc/netplan/01-network-manager-all.yaml.bak

编辑:

bash 复制代码
sudo nano /etc/netplan/01-network-manager-all.yaml

配置为:

yaml 复制代码
network:
  version: 2
  renderer: NetworkManager

  ethernets:
    ens33:
      dhcp4: false

      addresses:
        - 192.168.0.250/24

      routes:
        - to: default
          via: 192.168.0.1

      nameservers:
        addresses:
          - 223.5.5.5
          - 8.8.8.8

注意:

YAML 文件必须使用空格缩进,不要使用 Tab。


十二、修复 Netplan 权限警告

执行:

bash 复制代码
sudo netplan try

出现:

text 复制代码
Permissions for /etc/netplan/01-network-manager-all.yaml are too open.

虽然配置可以正常工作,但 Netplan 认为权限过宽。

执行:

bash 复制代码
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml

查看:

bash 复制代码
ls -l /etc/netplan/01-network-manager-all.yaml

正常应该类似:

text 复制代码
-rw------- 1 root root ... 01-network-manager-all.yaml

然后:

bash 复制代码
sudo netplan try

确认没有问题后:

bash 复制代码
sudo netplan apply

十三、最终验证

重启虚拟机:

bash 复制代码
sudo reboot

重启之后:

bash 复制代码
ip -4 addr show ens33

结果:

text 复制代码
inet 192.168.0.250/24

查看路由:

bash 复制代码
ip route

结果:

text 复制代码
default via 192.168.0.1 dev ens33 proto static metric 100
192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.250

测试:

bash 复制代码
ping -c 4 baidu.com

结果:

text 复制代码
4 packets transmitted
4 received
0% packet loss

至此问题完全解决。


十四、最终网络结构

解决以后,网络结构如下:

text 复制代码
                   TP-Link 路由器
                    192.168.0.1
                         │
                         │ Wi-Fi
                         │
              Killer Wi-Fi AX1650i
                         │
              ┌──────────┴──────────┐
              │                     │
        Windows 11             VMware Bridge
      192.168.0.101                VMnet0
                                    │
                                    │
                              Ubuntu ens33
                              192.168.0.250

此时 Windows、Ubuntu 虚拟机,以及同一路由器下的其他设备,都处于:

text 复制代码
192.168.0.0/24

同一局域网中。

这非常适合:

text 复制代码
ROS / ROS2 多机通信
PuppyPi
树莓派
机器人控制器
嵌入式 Linux 开发板
网络摄像头
雷达

等需要局域网设备互访的开发场景。


十五、这次问题的核心判断逻辑

整个排障过程中,最重要的不是不断修改 VMware 设置,而是逐层定位。

可以总结成:

text 复制代码
ens33 是否存在?
      │
      ├── 不存在 → VMware 虚拟网卡 / 驱动
      │
      └── 存在
           ↓
        ens33 UP?
           │
           ↓
      DHCP 能获得 IP?
       │         │
      YES       NO
       │         ↓
       │    NAT 是否正常?
       │      │
       │      ├── NO → Ubuntu / VMware 基础网络
       │      │
       │      └── YES
       │           ↓
       │      桥接 DHCP 问题
       │           ↓
       │      手动配置静态 IP
       │           ↓
       │      ping 网关是否成功?
       │        │          │
       │       NO         YES
       │        │          │
       │   二层桥接故障    桥接实际正常
       │                   ↓
       │               仅 DHCP 异常
       │                   ↓
       │              配置静态 IP
       │                   ↓
       │              配置 DNS
       │                   ↓
       └──────────────→ 网络恢复

十六、几个容易误判的地方

1. Temporary failure in name resolution 不代表一定是 DNS 的根本问题

最开始看到:

text 复制代码
Temporary failure in name resolution

很容易直接修改 /etc/resolv.conf

但如果虚拟机连 IP 地址都没有,那么修改 DNS 没有意义。

正确顺序应该是:

text 复制代码
网卡
↓
IP
↓
路由
↓
公网 IP
↓
DNS

例如:

bash 复制代码
ping 8.8.8.8

都不通时,优先检查 IP/路由,而不是 DNS。


2. DHCPDISCOVER 能发出去,不代表桥接一定坏了

本次最开始:

text 复制代码
DHCPDISCOVER
DHCPDISCOVER
DHCPDISCOVER

没有 Offer。

很容易认为:

VMware Bridge 完全没有工作。

但后来静态 IP 测试发现:

bash 复制代码
ping 192.168.0.1

正常。

bash 复制代码
ping 8.8.8.8

也正常。

说明二层桥接实际上已经工作,只是 DHCP 自动分配异常。


3. NAT 正常是一个非常重要的排除依据

如果 NAT:

text 复制代码
DHCPOFFER
DHCPACK
Internet OK
DNS OK

那么一般可以快速排除:

text 复制代码
Ubuntu 驱动
ens33
dhclient
Linux TCP/IP
VMware 虚拟网卡

排查重点应该转移到桥接层。


4. 修改路由和 DHCP 一定要使用 sudo

例如:

bash 复制代码
dhclient -v ens33

可能报:

text 复制代码
Permission denied
Operation not permitted

正确写法:

bash 复制代码
sudo dhclient -v ens33

同样:

bash 复制代码
ip route replace default via 192.168.0.1 dev ens33

也需要:

bash 复制代码
sudo ip route replace default via 192.168.0.1 dev ens33

十七、最终使用的配置

VMware:

text 复制代码
VMnet0
桥接模式
桥接到:
Killer(R) Wi-Fi 6 AX1650i

Ubuntu:

text 复制代码
接口:ens33

IP:
192.168.0.250/24

Gateway:
192.168.0.1

DNS:
223.5.5.5
8.8.8.8

Netplan:

yaml 复制代码
network:
  version: 2
  renderer: NetworkManager

  ethernets:
    ens33:
      dhcp4: false
      addresses:
        - 192.168.0.250/24
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        addresses:
          - 223.5.5.5
          - 8.8.8.8

十八、总结

这次 VMware 桥接无法联网的问题,最终并不是:

text 复制代码
Ubuntu 网卡驱动问题
VMware Bridge Protocol 缺失
VMnet0 配置错误
DNS 本身损坏

真正的现象是:

text 复制代码
NAT DHCP                     正常
桥接 DHCP                    异常
桥接 DHCPDISCOVER            可以发出
桥接 DHCPOFFER               收不到

但是:

桥接静态 IP                  正常
ARP                           正常
默认网关                      正常
Internet                      正常
DNS 手动配置后                正常

因此最终解决方案是:

保留 VMware VMnet0 桥接模式,为 Ubuntu ens33 配置同一物理局域网中的永久静态 IP,同时设置默认网关和 DNS。

最终网络:

text 复制代码
Windows:192.168.0.101

Ubuntu:
192.168.0.250

Router:
192.168.0.1

虚拟机不仅能够正常访问 Internet,还真正进入了物理局域网。

对于 ROS、机器人、树莓派以及嵌入式开发而言,这种固定桥接 IP 的配置实际上比 DHCP 更实用,因为设备地址固定以后,多机通信、SSH、ROS 节点配置以及调试都会更加方便。

一句话排障经验

VMware 桥接模式下 DHCP 一直只有 DHCPDISCOVER 时,不要马上认定桥接彻底坏了。先给虚拟机手动配置一个与宿主机同网段的静态 IP,然后 ping 物理网关。如果网关和公网都能通,说明桥接链路本身是正常的,问题只是 DHCP。

相关推荐
Shadow(⊙o⊙)1 小时前
Linux网络部分——TCP服务端、客户端架构分析多进程、多线程、线程池
c++·tcp/ip·架构
微硬创新16 小时前
老旧产线改造:耐达讯自动化16路4‑20mA转PROFINET的工程实践
人工智能·网络协议·自动化·信息与通信
Bruce_Liuxiaowei18 小时前
基于微步在线威胁情报的公网 IP 攻击迹象监测:threatbook_query 脚本全解析与 BruceSec 平台整合实践
数据库·tcp/ip·安全·网络安全·智能体
80s77719 小时前
独享住宅IP、长效代理ip是什么?有哪些作用?
网络·网络协议·tcp/ip
IPdodo_19 小时前
静态 IP、住宅 IP 和固定出口有什么区别?开发场景选型指南
服务器·网络·网络协议·tcp/ip·代理ip
_ZHOURUI_H_19 小时前
Unity TCP底层极限拆解:粘包、半包、CRC、序列号、双缓冲到底怎么一起工作的?
网络·网络协议·tcp/ip·游戏·unity·游戏引擎·游戏开发
静止了 所有的花开1 天前
Ubuntu 26.04 静态 IP 配置不生效解决方法
linux·ubuntu·静态ip
微硬创新1 天前
大点数模拟量采集落地:耐达讯自动化32路0-20mA适配PROFINET总线实践解析
运维·人工智能·网络协议·自动化·信息与通信
2601_953988071 天前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·后端·物联网·tcp/ip·数学建模·前端框架