ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

VMware虚拟机Ubuntu桥接模式连不上网?一文教你排查修复

2026/9/15 11:52:27 拓冰建站 浏览量
VMware虚拟机Ubuntu桥接模式连不上网?一文教你排查修复 先说结论在VMware里跑Ubuntu桥接模式连不上网十有八九不是Ubuntu的锅而是桥接链路根本没通。这个问题我前前后后折腾了不少次从“能ping通宿主机但上不了外网”到“完全拿不到IP”各种情况都碰过。这篇就把我自己踩过的坑、排查顺序和最终能落地的配置方法一次性写清楚尽量让新手照着做也能恢复网络。本文覆盖两块VMware侧的网络链路检查和Ubuntu系统侧的配置修正。适合刚装完Ubuntu发现没网的人、从NAT切桥接后网络失效的人、以及克隆虚拟机后网卡起不来的这批用户。如果你急着解决问题建议从第二部分开始按顺序查别跳着看——很多时候你以为是系统配置问题实际上虚拟网络编辑器早就帮你把路堵死了。1. 先把思路捋清楚桥接、NAT、仅主机到底怎么选1.1 三种网络模式下数据包到底怎么走VMware提供了三种默认网络模式桥接模式Bridge、NAT模式、仅主机模式Host-Only。很多教程会直接让你“选桥接”但没说清楚桥接背后的含义是什么导致出了问题之后完全没头绪。桥接模式的核心逻辑是虚拟机的虚拟网卡直接绑定到宿主机某块物理网卡上由物理网卡无差别转发虚拟机的流量。在这种模式下虚拟机跟宿主机就像是同一台交换机下面的两台独立设备两者处于同一局域网网段虚拟机可以拿到局域网路由器分配的IP局域网里的其他设备也能直接访问虚拟机。它的优点是完全透明缺点是对链路要求高——只要物理网卡、路由器、网段配置有一个不对劲网络就废了。NAT模式则是走VMware自带的一个虚拟路由器VMnet8。宿主机和虚拟机之间会形成一个独立的内网网段通常是192.168.x.0/24虚拟机通过宿主机的IP去访问外部网络外部设备默认访问不到虚拟机。它像是给虚拟机套了一层“出网代理”只要宿主机能上网虚拟机一般就能上网。NAT的优势就是对环境依赖小稳定性很高劣势则是局域网内的其他机器无法直接访问虚拟机某些场景下不太方便。仅主机模式最封闭虚拟机只能跟宿主机通信不能访问外网适合做纯隔离测试。三种模式的对比我整理成了下面这张表模式虚拟机与宿主机关系虚拟机能否访问外网局域网其他设备能否访问虚拟机对宿主机网络依赖桥接同一局域网完全透明可以可以强依赖物理网卡和路由器必须正常NAT独立内网宿主机做转发可以默认不行需要额外设端口转发依赖较弱宿主机能上网就行仅主机只能和宿主机互通不能不能最弱纯内网隔离1.2 为什么NAT最容易通桥接却总出幺蛾子NAT模式之所以“随便装都能通”是因为它根本不要求虚拟机跟宿主机在同一个广播域里。虚拟机的所有出站请求都先打到VMnet8虚拟网关再由宿主机网卡统一发出去这个过程完全避开了局域网内部的IP分配、物理网卡桥接属性、路由器隔离策略等一系列坑。桥接模式则把虚拟机的通信完全暴露在真实局域网环境中只要链路里任何一个环节不配合网络就会断。最常见的三个“不配合”物理网卡没有勾选VMware Bridge Protocol、无线网卡被路由器做了AP隔离、虚拟机获取的IP跟局域网里的其他设备冲突。我见过不少用户在桥接模式下发现没网第一反应就是去Ubuntu里改netplan、重启服务其实这时候虚拟机压根就没拿到IP甚至连网卡都处于未连接状态。问题的根子在外面你却一直在屋里修门锁怎么可能修得好。所以排查思路一定是从物理链路往系统内层推进这也是我下面要详细展开的排查顺序。2. 桥接模式不生效先按这个顺序查VMware侧2.1 虚拟网络编辑器别让VMnet0自动选错网卡点开VMware菜单栏的“编辑 - 虚拟网络编辑器”这里就是VMware虚拟网络的“总配电箱”。桥接模式对应的虚拟交换机叫VMnet0它的默认桥接对象经常是“自动”。自动的意思是由VMware自己挑一块物理网卡去跟VMnet0做绑定。听起来很智能但笔记本用户尤其是同时有有线网卡和无线网卡的往往会翻车——VMnet0自动选中了有线网卡而你的笔记本此刻连的是WiFi虚拟机的网卡跟物理网卡根本不在一根链路上网络自然起不来。正确做法是手动指定桥接目标。在虚拟网络编辑器里选中VMnet0桥接模式选“桥接到”下拉列表里手动选择当前正在使用的物理网卡。如果你的宿主机是无线网络就选带Wireless或WLAN字样的那块如果是有线就选以太网/Ethernet。注意点击右下角的“更改设置”会重新加载一次编辑器并请求管理员权限这一步在Windows上几乎是必须的否则下拉列表和配置项会是灰色不可编辑状态。选完之后再去确认VMware的DHCP服务没把VMnet0接管成自己的内网网段。桥接模式下VMnet0不负责分配IPIP由局域网的DHCP服务器一般是路由器统一分配这一步别搞混了。2.2 笔记本双网卡和无线场景下的桥接姿势笔记本场景下桥接模式还有几个隐性坑要提防。第一个坑是宿主机同时挂着有线网卡和无线网卡而且两块网卡都连着不同的网比如有线接了公司内网无线连着家庭WiFi。这时候如果你手动选了无线网卡但虚拟机里的网卡IP和有线网段混在一起路由就乱了。最干脆的办法是拔掉不用的网卡或者至少确认虚拟机获取到的IP跟所选物理网卡所在的网段一致。第二个坑是无线AP的隔离策略。不少家用路由器默认开启“AP隔离”或“客户端隔离”这个选项的本意是阻止同一WiFi下的设备互访提升安全性。但桥接模式下的虚拟机正好是“依附”在无线网卡上的一个客户端一旦AP隔离开启虚拟机拿不到IP或者能拿到IP但跟宿主机互相ping不通。遇到这种情况到路由器管理后台找到无线设置里类似“启用隔离”的开关关掉之后重启WiFi即可。第三个坑是WiFi的“随机硬件地址”功能。Windows的无线网卡驱动如果开启了随机硬件地址每次连接都可能用不同的MACVMware桥接驱动的绑定关系就会跟着失效现象就是宿主机上网正常虚拟机频繁断网。建议桥接场景下把这个功能关掉让物理MAC保持稳定。2.3 VMware服务与Windows防火墙的隐性影响即使VMnet0配置正确还有一层容易被忽略的过滤网——Windows防火墙和VMware的后台服务。VMware在Windows上依赖几个系统服务VMware Authorization Service、VMware DHCP Service、VMware NAT Service。虽然NAT和DHCP服务在桥接模式里不直接参与数据转发但如果这堆服务没有启动VMware的虚拟网卡驱动会处于半睡半醒的状态虚拟机里的网卡状态就会来回跳。最好在服务管理里把这几个服务全部设为自动启动并确认当前状态是“正在运行”。Windows防火墙的问题更隐蔽尤其是Windows在系统更新之后偶发性地把VMware相关的规则挡住。处理方式有两种一种是在控制面板的防火墙设置里放行VMware相关程序另一种是直接在物理网卡的属性页面确认“VMware Bridge Protocol”这个协议还在勾选状态。具体操作是在Windows右下角网络图标右键进入“网络和Internet设置 - 高级网络设置 - 更多网络适配器选项”找到当前联网的网卡右键属性在里面确认VMware Bridge Protocol的勾选还在。如果没有勾上并重启问题基本就能解决。3. Ubuntu系统侧网络配置从网卡识别到Netplan3.1 第一步先搞清你用的是哪个网卡名如果VMware侧已经排除了问题接下来就要进Ubuntu系统里看网卡状态了。先别急着敲配置文件第一件事是确认网卡名和状态。打开终端执行ip link重点看网卡名和状态标记。VMware虚拟机的网卡名通常是ens33、ens32这类旧一点的系统可能显示eth0。如果网卡名旁边有“state DOWN”或者根本没有显示你的虚拟网卡说明网卡没被正确拉起。先用下面的命令手动拉起sudo ip link set ens33 up如果提示“No such device”那说明网卡被系统改名了或者驱动没加载。可以在虚拟机设置里把网络适配器删掉重新加一块再开机看看。这个操作我在快照回滚后遇到过好多次重加网卡是成本最低的修复方式。接着再用ip addr show ens33这里能看到网卡有没有获取到IP地址。如果没有任何IP而且你确认交换机链路通那就是DHCP问题往第三章的配置方向走。3.2 动态IP和静态IPbridge场景下的Netplan写法搞清楚网卡名之后下一步是配置网络。Ubuntu从17.10开始默认用Netplan管理网络配置配置文件在/etc/netplan/下面通常是01-network-manager-all.yaml或者00-installer-config.yaml。不同版本文件名不一样用ls /etc/netplan/看一下就行。桥接模式下如果希望DHCP自动获取IP配置非常简单把文件改成这样network: version: 2 ethernets: ens33: dhcp4: true注意yaml文件的缩进必须是空格不能用Tab而且属性名和冒号后面必须带一个空格否则Netplan解析会直接报错。这属于那种“看着一模一样但就是不行”的经典坑。保存之后执行两件事sudo netplan generate sudo netplan apply如果网卡名在Netplan里写错了netplan apply会直接提示找不到设备。如果希望使用静态IP例如局域网内固定IP跑服务配置要稍微复杂些network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 192.168.1.1 - 114.114.114.114写静态IP的关键是保证三个值跟局域网环境吻合IP地址必须跟局域网同一个网段且不冲突网关必须跟路由器的LAN口IP一致DNS至少要写一个可用的。这个配置在桥接模式下非常有代表性因为很多环境下DHCP拿不到IP临时指定一个静态IP反而是最快能恢复联通的方案。3.3 DNS问题的坑systemd-resolved和/etc/resolv.conf很多人会忽略DNS问题因为“ping网关通”、“ping IP通”但浏览器就是打不开网页。这类问题十有八九是域名解析挂了。Ubuntu桌面版默认使用systemd-resolved提供DNS服务Netplan里的nameservers配置会被写入systemd-resolved的管理范围。你可以先用resolvectl status查看当前DNS是否生效。如果发现DNS是空的或者解析出来的是127.0.0.53这个本地回环地址很可能是Netplan配置没有被正确应用到resolved服务上。这时候可以手动把resolv.conf切到外部DNS测试一下sudo rm /etc/resolv.conf sudo bash -c echo nameserver 114.114.114.114 /etc/resolv.conf改完再试nslookup或dig。如果域名能解析了说明Netplan和systemd-resolved的联动出了岔子建议重新执行netplan apply让配置刷新或者检查Netplan文件里的DNS写法是不是漏了等号之类的细节。3.4 网卡显示未托管NetworkManager和systemd-networkd别打架还有一个特别容易碰到的现象Ubuntu桌面版里网卡显示“未托管unmanaged”或者网络设置面板里根本看不到你的有线网卡。这通常是因为系统里同时存在两个网络管理模块——NetworkManager和systemd-networkd两个都在抢占同一个网卡最后谁也没管成。判断方法很简单执行nmcli device status如果看到ens33的状态是“unmanaged”说明NetworkManager明确表示“这块网卡不归我管”。这种情况下去到/etc/netplan下面的配置文件看看renderer字段写的是什么。桌面版默认应该是network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: true如果配置文件里的renderer不是NetworkManager或者缺了这段Netplan apply的时候会调起systemd-networkd去管网卡跟NetworkManager产生冲突。把renderer改成NetworkManager保存后执行netplan apply再执行sudo systemctl restart NetworkManager网卡就能回到托管状态。4. 桥接不通、NAT正常的排查实战记录4.1 能ping通网关但上不了外网这个现象我在Ubuntu 22.04上遇到过当时桥接模式已经拿到了IP能ping通路由器但一直访问不了外网。排查下来发现是默认路由丢了。用下面的命令检查路由表ip route正常情况下会有一条到默认网关的默认路由记录类似default via 192.168.1.1 dev ens33。如果这条记录缺失数据包根本没有出口上不了外网就很正常了。临时补上一条默认路由sudo ip route add default via 192.168.1.1 dev ens33能恢复网络就说明问题在静态IP配置里少了routes段落。回到Netplan配置文件把routes和via的部分补全再apply一次。4.2 克隆或快照后网络失效的MAC地址问题VMware的克隆功能很方便但也埋了一个雷——克隆出来的虚拟机可能跟原机使用同一个网卡MAC地址。同一局域网里出现两个相同MAC路由器会只认其中一个另一个直接失去网络。现象就是克隆出来的Ubuntu怎么弄都没网ping网关都通不了。解决方式很简单在VMware的“编辑虚拟机设置”里选中网络适配器展开高级选项把MAC地址重新生成一下然后进Ubuntu重新配置一遍网卡。另外要注意Ubuntu里的Netplan配置是按网卡名匹配的。如果你克隆的虚拟机里网卡名变了比如ens33变成了ens34Netplan还傻傻地对着ens33写配置那等于没配置。用ip link确认新网卡名然后把Netplan配置文件里的网卡名同步改掉。4.3 宿主机系统更新后虚拟机连不上网的奇葩案例这个案例特别有代表性。有个朋友的笔记本在Windows更新之后虚拟机突然连不上网了。我远程看了半天VMware配置没变Ubuntu侧配置也没变就是没网。最后打开物理网卡的属性页一看VMware Bridge Protocol的勾选框居然在更新过程中被取消了。这应该算是Windows更新驱动时把第三方协议的绑定信息重置了属于比较隐蔽的问题。所以遇到“之前还好好的突然没网”的情况优先去物理网卡属性页看VMware Bridge Protocol还在不在成本最低收益最高。同理也检查一下宿主机的防火墙是不是在更新后被重新启用了。4.4 路由器AP隔离和IP冲突的回退方案AP隔离这个坑前面提过这里再补充一个检测方法如果你的宿主机是有线连路由器虚拟机桥接的是无线网卡那AP隔离基本无解——你只能把虚拟机也切成有线桥接或者改用NAT。IP冲突的情况常见于DHCP地址池小的办公网络或者那种长期开机的局域网。虚拟机每次开机如果都抢到一个跟其他设备冲突的IP表现就是时好时坏。建议在这种环境里直接给虚拟机配置静态IP并且在路由器或者局域网里先确认这个IP没有被占用。检测方法很简单用手机或者宿主机ping一下这个IP如果已经有响应就换一个。5. 如果桥接实在搞不定NAT也有高级玩法5.1 什么时候该果断放弃桥接说了这么多排查方法但最现实的建议是如果你只是做开发、学习、跑服务不在局域网上跟别人共享你的虚拟机那NAT模式的体验远优于桥接。NAT模式最大的好处是跟宿主机的网络环境解耦。不管宿主机是连着WiFi、插着网线、甚至开着热点虚拟机只要能出网就行。对于大多数Ubuntu学习、代码编译、Docker环境搭建的用途NAT完全够用而且几乎不会遇到那些玄学断网问题。真正需要桥接的场景只有一种虚拟机需要作为独立节点被局域网里的其他设备直接访问比如在虚拟机上搭个Web服务然后让手机电脑直连测试或者你在做某个局域网内的组网实验虚拟机需要跟路由器、其他物理设备在同一个广播域。5.2 NAT模式下固定IP和端口转发配置NAT模式默认的网段是192.168.128.0/24不同VMware版本可能不一样在虚拟网络编辑器里可以看到虚拟机的IP由VMware的DHCP服务动态分配。真要在NAT下做固定IP两种方式一种是在Ubuntu里给网卡配静态IP但静态IP必须落在VMnet8的网段里而且不能撞上DHCP池另一种是在虚拟网络编辑器的“NAT设置”里做端口转发。端口转发的操作路径是编辑 - 虚拟网络编辑器 - 选择VMnet8 - NAT设置 - 添加。这里可以把宿主机的某个端口映射到虚拟机的IP和端口上。比如宿主机IP是192.168.1.10虚拟机NAT IP是192.168.128.130配置宿主机8080端口转发到虚拟机80端口局域网里的其他设备就能通过http://192.168.1.10:8080访问到虚拟机上的Web服务。这个方案在实际使用中非常顺手——虚拟机保持NAT的稳定宿主机做一层端口代理外网访问的问题也解决了。6. 最后想说的几句大实话虚拟机网络这个问题折磨人的地方不在于单个知识点有多难而在于链路太长任何一个环节出错都可能导致同样的中断现象。我自己就经历过在Ubuntu里改了十几次Netplan配置最后发现是虚拟机网卡的高级设置里MAC地址被重置的尴尬。所以我对大家的建议是碰到Ubuntu桥接模式连不上网一定先从VMware侧查起确认VMnet0桥接到正确的物理网卡确认物理网卡的VMware Bridge Protocol还在确认路由器没有开AP隔离——这三步基本能解决80%的桥接问题。剩下20%再回到Ubuntu系统侧按网卡名、DHCP、路由、DNS的顺序排查。排查的时候记得用ip link、ip addr、ip route这三个命令打底别一上来就对着配置文件乱改。最后一个小技巧如果虚拟机里网卡状态来回变在VMware的虚拟机设置里把网络适配器的“已连接”勾选重新点一下再点“确定”有时候能直接触发驱动重新初始化比我之前在系统里重启好几个服务都快。