
刚给一台老笔记本装好VMware Workstation又把最新的Ubuntu镜像拖进去结果打开虚拟机的浏览器网页一直转圈。这不是我第一次遇到这种问题估计也不会是最后一次。把VMware虚拟机无法上网的各种情况理了一遍之后我发现这种故障背后其实有规律可循网络模式选没选对、宿主机这边的服务有没有启动、虚拟网卡配置是不是被改乱、虚拟机系统内部的IP和路由有没有拿到这几层逐个排查下来绝大多数问题都能定位到具体原因。这篇文章就是把我的排查思路完整地分享出来。不光是告诉你在哪里点按钮更会把每种网络模式的原理、每一条排查命令的用途、哪些坑是常见但文档里不会写的都交代清楚。无论你用的是VMware Workstation Pro还是Player无论虚拟机里装的是Windows还是Linux这套排查方法基本都能直接套用。1. VMware的三种网络模式先弄明白你的虚拟机走的是哪条路很多人一遇到“虚拟机无法上网”就直接去改虚拟网络编辑器改来改去反而更乱。我一直建议先搞清楚虚拟机当前用的是哪种网络模式因为不同的模式对应不同的故障特征排查方向也完全不同。1.1 桥接模式Bridged虚拟机跟宿主机平起平坐桥接模式相当于在你的物理网络上虚拟出一台独立的“新电脑”虚拟机的网卡直接连接到宿主机所在的局域网。在这个模式下路由器看到虚拟机就像看到一台普通的物理设备虚拟机需要自己从路由器获取IP地址。它的显著特征是虚拟机IP和宿主机IP在同一个网段且能直接访问局域网内的其他设备其他设备也能主动访问虚拟机。排错时核心要确认三件事虚拟机的IP是否和宿主机在同一网段VMnet0是否桥接到了正在使用的物理网卡物理路由器是否限制了接入设备的数量或MAC地址。桥接模式最容易出问题的地方反而是物理环境比如公司网络存在端口绑定或上网认证那虚拟机无论如何都上不了网因为它没有通过认证。1.2 NAT模式默认宿主机充当中转站NAT模式是VMware安装后默认的模式也是普通用户最省心的选择。虚拟机通过虚拟网卡VMnet8接入VMware虚拟交换机由宿主机上的VMware NAT Service负责把虚拟机的流量“翻译”成宿主机的流量发出去再把响应送回来。NAT的典型特征是虚拟机IP通常位于192.168.x.0/24这样的私有网段这个网段由VMware的DHCP服务自动分配虚拟机对外访问没有问题但局域网内的其他物理设备不能直接访问虚拟机。如果你只是想让虚拟机上网、装软件、跑服务不要求局域网其他机器连进来NAT模式是最稳的选择。1.3 仅主机模式Host-only一个与外界隔离的内部网络仅主机模式使用的VMnet1网卡构建了一个只有宿主机和虚拟机参与的私有网络虚拟机之间能互通宿主机也能访问虚拟机但虚拟机无法直接访问外部网络。这个模式一般用于测试环境、实验网络隔离的场景。需要特别注意仅主机模式下虚拟机默认没有通往互联网的“网关”即使配了IP也很难上网。如果你在这个模式下仍然想让虚拟机访问外网需要自己在宿主机上做Internet连接共享或者架设代理这一步很多人不知道导致卡很久。理解这三种模式的本质区别是排查一切虚拟机网络问题的地基。地基不对后面的操作都是白费力气。2. NAT模式下虚拟机无法上网90%的故障都能按这个顺序排查NAT模式遭遇无法上网是大家遇到最多的场景。我用的排查顺序是固定的先看宿主机服务再看VMware虚拟网络配置最后看虚拟机内部网络状态。这个顺序能最快地把问题范围缩小。2.1 第一梯队三个关键Windows服务和VMnet8网卡状态VMware的网络功能并不是全靠虚拟机内部实现的宿主机上有一组Windows服务在背后支撑。按WinR输入services.msc打开服务管理器必须检查以下三项是否处于“正在运行”状态并且启动类型为“自动”服务名称作用异常表现VMware NAT Service提供NAT地址转换让虚拟机借宿主机上网虚拟机拿不到IP或能拿到但无法出网VMware DHCP Service为虚拟机自动分配IP地址虚拟机内网卡无IP显示未识别的网络VMware Authorization Service提供虚拟网络管理的权限支撑打开虚拟网络编辑器时报错或无法修改其中NAT Service是最容易被安全软件或系统优化工具禁用的。如果发现服务没运行右键“启动”即可。如果服务正常运行仍然无法上网右键选择“重启”再试一次。注意不要只看服务当前状态启动类型如果被改成了“手动”甚至“禁用”重启电脑后问题依然会出现必须把启动类型也改回“自动”。之后检查宿主机“网络连接”面板里的VMnet8网卡在控制面板网络和共享中心里找到“更改适配器设置”。VMnet8必须处于启用状态且未被标记为“已断开连接”。VMnet8的IPv4地址通常是一个169.254开头的自动地址或者由VMware自身分配的地址这个地址不需要手工修改保持默认即可。如果你在这里看到VMnet8的图标上有黄色感叹号说明虚拟网卡驱动或服务状态异常优先处理这一层再继续。2.2 第二梯队虚拟网络编辑器里被改掉的配置服务没有问题的话打开VMware的“编辑”菜单进入“虚拟网络编辑器”。这里需要确认的是VMnet8对应的VMnet信息NAT模式是否被勾选子网IP是否合理DHCP设置是否正常。很多教程会引导用户修改子网IP来避免冲突但改坏了的情况也比比皆是。虚拟网络编辑器里最容易踩的坑是NAT模式的网关。NAT模式下VMnet8子网的网关一般是该子网的第二个IP地址比如子网是192.168.88.0网关就是192.168.88.2。这个网段由VMware的DHCP服务自动分配虚拟机内部会从DHCP拿到IP、网关、DNS信息。如果你在虚拟机里手动配置了静态IP但网关填的不是这个VMnet8网关那流量根本没有出口。另一个常见问题是子网IP段与宿主机所在的局域网网段发生冲突。比如宿主机本身处于192.168.1.0/24网段而VMnet8的子网也设置成192.168.1.0/24这时路由就会混乱虚拟机无法上网。解决办法是把VMnet8的子网改成一个不冲突的网段例如192.168.88.0/24然后重启虚拟机和NAT服务。在修改前建议记录下原来的配置避免想恢复时忘记原本的参数。2.3 第三梯队虚拟机内部的IP、DNS、网卡驱动与防火墙VMware网络和宿主机层排查完毕后把注意力转移到虚拟机内部。无论虚拟机装的是Windows还是Linux第一步都是确认网卡是否拿到了IP地址。Windows虚拟机里执行ipconfig命令Linux虚拟机里执行ip addrip addr或ifconfig命令观察网卡对应的IPv4地址。如果地址是169.254.x.xWindows或者完全为空Linux说明DHCP没有从VMware DHCP Service那里拿到地址回到第二梯队检查。拿到IP但无法上网的情况通常与DNS有关。在虚拟机里ping网关如ping 192.168.88.2如果通说明虚拟机到VMware NAT网关的路由正常再ping 8.8.8.8和ping baidu.com如果前者通而后者不通说明DNS解析出问题。Linux虚拟机里查看/etc/resolv.conf和systemd-resolvedWindows虚拟机里用nslookup测试解析。NAT模式下请把DNS设置为自动获取因为VMware NAT在转发DNS请求时会使用宿主机的DNS配置。防火墙是另一只拦路虎。Windows虚拟机的防火墙默认允许出站访问一般不至于完全断网但某些精简版系统或安全策略严格的镜像会拦截ICMP和DNS。Linux虚拟机里如果使用ufw或firewalld可以执行sudo ufw status或sudo systemctl status firewalld查看状态测试时暂时关闭防火墙确认问题是否由它引起。另外虚拟机系统里如果安装了安全卫士或加速器之类的软件也可能修改系统代理或禁用网卡这类情况在Windows虚拟机里比较常见。2.4 一个容易被忽略的细节VMware Tools没装好也可能捣乱每次给虚拟机安装系统后我第一件事就是安装VMware Tools。很多人觉得VMware Tools只是用来拖拽文件、自适应分辨率的跟网络没什么关系但事实上它包含了虚拟化网卡驱动尤其是安装Linux时使用的VMXNet3网卡需要对应驱动支持。如果VMware Tools缺失或安装失败虚拟机显示“以太网已连接但无Internet访问”或者根本识别不到网卡。在Windows虚拟机中VMware Tools安装比较简单双击安装程序一路下一步。Linux虚拟机中安装需要执行mount /dev/cdrom /mnt后进入目录运行对应的.pl安装脚本安装完成后重启网络服务或者直接重启虚拟机。安装失败时可以查看安装日志很多情况下是系统缺少编译工具如gcc、make、内核头文件补齐依赖后重装即可。装好VMware Tools后再测试网络能规避掉一大片莫名其妙的问题。3. 桥接模式下无法上网问题多半不在虚拟机而在物理环境NAT模式排查完之后我们再来看桥接模式。桥接模式出问题时故障范围往往比想象中更大因为虚拟机直接暴露到物理局域网物理网络里的防火墙规则、路由策略、设备接入限制都会起作用。3.1 桥接不到物理网卡多网卡设备上常见的“搭错线”宿主机如果有多块网卡比如一块有线网卡加一块无线网卡桥接模式默认是“自动”选择物理网卡这个自动选择经常选错。进入“虚拟网络编辑器”选中VMnet0将桥接到模式从“自动”改成具体的物理网卡也就是宿主机正在连接网络的那张网卡。选错网卡时虚拟机跟物理网络根本不在一条链路上IP都拿不到更谈不上上网。还有一层容易被忽视的细节是“桥接到”的物理网卡上是否勾选了VMware Bridge Protocol协议。在Windows的“网络连接”里右键物理网卡进入属性应能看到“VMware Bridge Protocol”这一项被勾选。如果这项被安全软件或网络管理软件移除桥接模式直接失效。把这勾重新打上之后最好重启一下VMware或者整个系统让协议生效。3.2 物理路由器的MAC限制与IP地址池不足桥接模式下虚拟机要从物理路由器获取IP它跟宿主机一样占一个局域网地址。如果路由器开启了MAC地址过滤或连接数限制新出现的虚拟机MAC地址可能直接被路由器拒绝。这种情况的典型表现是虚拟机永远显示“正在获取IP地址”或拿到169.254地址而宿主机可以正常上网。可以登录路由器后台查看在线设备列表确认虚拟机的MAC是否出现如果被拦截就先添加白名单。更隐蔽的是IP地址池不足。公司网络或者出租屋网络路由器分配的地址池可能只有几十个地址设备一多地址池就满了新设备连不上。验证方法是在宿主机上把有线或无线网卡的IP地址改成静态的另一个空闲地址然后看虚拟机能否获得之前宿主机用过的那个IP。不过这个方法实操起来比较复杂更简单的办法是先用手机热点做桥接测试如果热点下虚拟机可以正常上网那问题基本就在物理路由器端。3.3 无线网卡与访客网络对桥接的“先天不友好”如果你的宿主机用的是无线网卡桥接模式的问题率会明显上升。无线网卡在桥接模式下工作依赖无线AP的转发行为家用路由器对这种“无线桥接”支持还算好但企业级AP或者公共Wi-Fi网络往往启用了客户端隔离隔离开启后同一Wi-Fi下的设备彼此不能通信虚拟机的流量自然也被拦住了。另一个坑是“访客网络”。有些路由器提供独立的Guest Wi-Fi这个网络默认就开启了AP隔离确保访客之间不能互访。如果把宿主机连到访客网络再使用桥接模式虚拟机就算能拿到IP也可能上不了网。碰到这种情况不要死磕直接把网络模式改回NAT问题立刻解决。我个人的原则是无线环境下优先用NAT模式有线环境下才考虑桥接。4. 仅主机模式、虚拟机之间互通以及那些“非典型”故障前面两种模式讲完后我们再来看一些看起来“不应该有问题”的网络场景。这些场景往往在教程里没有专门章节但实际使用中隔三差五就会遇到。4.1 仅主机模式下想上网需要自己搭的“手脚架”仅主机模式的目的本来就是隔离网络但有不少人在这个模式下仍然希望虚拟机能够访问互联网。原理上仅主机模式的VMnet1网段跟物理网络完全隔离虚拟机没有默认网关外部流量进不来内部流量也出不去。想让仅主机模式下的虚拟机上网可以在Windows宿主机上开启Internet连接共享。右键正在上网的物理网卡比如WLAN或以太网进入属性在“共享”选项卡里勾选“允许其他网络用户通过此计算机的Internet连接来连接”并在下拉框里选择VMnet1。开启后VMnet1会自动变成192.168.137.1这个固定地址虚拟机内部把IP设成192.168.137.x网段DNS填192.168.137.1或上游DNS就能通过宿主机共享上网了。注意这种方式与NAT模式不同DHCP服务是由Windows的ICS提供的配置不当时容易出现网段冲突需要耐心测试。4.2 虚拟机之间能互Ping但上不了网和物理机之间的转发关系有时候部署了多台虚拟机虚拟机能互相ping通宿主机也能访问虚拟机但虚拟机就是上不了外网。这种情况多半是因为虚拟机的默认网关指向了不该指向的地方。比如你在VMnet8网段里手动配置了静态IP网关却填成了VMnet1网段的地址虚拟机之间的二层通信不受影响但跨网段访问时数据包不知道往哪里丢。排查方法很直接在虚拟机里看路由表。Linux用ip route show或route -nWindows用route print确认默认路由的网关是否属于当前网卡所在网段。如果网关不对就修改虚拟机网络配置把默认网关改成VMnet8的网关地址子网.2。改完之后再做一次三层连通性测试ping网关、ping宿主机、ping公网IP、ping域名顺序通了才说明链路完全恢复。4.3 重置虚拟网络VMware自带的“恢复出厂设置”当配置被我改乱、网络始终不通、不知道从哪里下手的时候最后的杀手锏是把虚拟网络完全重置。打开“虚拟网络编辑器”点击右下角的“更改设置”获取管理员权限然后点击“还原默认设置”。这个操作会把VMnet0、VMnet1、VMnet8全部重新创建并重启相关的VMware网络服务。还原默认设置之后之前建立的自定义虚拟网络也会被清掉所以操作前先记录好自己需要的自定义网络配置。重置后不要急着打开虚拟机先去服务管理器确认VMware NAT Service和DHCP Service已经正常运行再启动虚拟机验证网络。这个方式能解决掉90%莫名其妙的配置文件损坏问题尤其是VMware Workstation升级或异常关机后造成的虚拟网络组件错乱。另有一个细节如果“还原默认设置”按钮是灰色的说明你没有以管理员权限打开虚拟网络编辑器先关机所有虚拟机再重试。5. 几个我在实际维护中反复踩过的坑前面讲的是标准排查流程接下来聊几个我实际操作中反复遇到、但教程里很少提及的细节。这些坑不算深奥但一旦踩进去排查时间至少浪费半小时。5.1 复制、移动虚拟机后网卡变成“未识别的网络”从一台电脑把虚拟机文件夹复制到另一台电脑打开后发现网络怎么也起不来。这是因为虚拟机在创建时会生成一张虚拟网卡的MAC地址复制后新的VMware会在.vmx配置文件中保留这份地址但新的虚拟网络环境可能不认或者系统内缓存了旧的网络配置。Windows虚拟机里表现为“未识别的网络”Linux虚拟机里表现为启动时网卡没有被正确激活。解决办法之一是在虚拟机设置里把网卡移除再重新添加让VMware重新生成MAC地址和网络配置。更好的办法是编辑.vmx文件找到ethernet0.generatedAddress和ethernet0.addressType这两行把ethernet0.addressType改成generated删掉ethernet0.generatedAddress那行保存后重启虚拟机。这样VMware下次开机会自动生成一个新的MAC地址与虚拟网络适配。注意删改之前一定先把.vmx文件备份一份。5.2 系统更新或安全软件扫描后VMware网络服务“罢工”Windows系统更新或者安装某些“网络优化工具”之后VMware的网络服务有可能被禁用或调整。有一次我处理一台虚拟机无法上网的设备检查后发现VMware NAT Service的启动类型变成了“手动”而且状态为“停止”。类似的某些安全软件会拦截VMware虚拟网卡的驱动加载导致VMnet1和VMnet8在适配器列表里消失。这类问题有一个快速判断方式直接打开“网络连接”窗口如果VMnet1和VMnet8都消失不见了大概率是驱动被禁用或卸载。可以打开设备管理器在“网络适配器”下找到“VMware Virtual Ethernet Adapter for VMnet1”和“VMnet8”如果设备上带有黄标右键启用或更新驱动。如果驱动正常但服务依然不运行就把服务改为自动后重启再不行则使用我前面提到的“还原默认设置”让VMware把网卡驱动和服务全部重建一遍。5.3 Linux虚拟机里的NetworkManager与systemd-networkd“打架”Linux虚拟机有时会出现一个奇怪的情况图形界面显示网络已连接但终端里ping不通外网或者重启网络后又恢复正常。这种问题经常由两个网络管理组件冲突引起。常见的服务器版Ubuntu/Debian/CentOS会同时存在NetworkManager和systemd-networkd有些桌面环境还会装wicd或netplan这些组件同时托管网卡时会相互覆盖配置。排查方法是先执行systemctl status NetworkManager查看NetworkManager是否在运行再执行ip addr查看网卡IP是否被正确配置。如果IP是空白的说明systemd-networkd接管了配置但配置模板缺失。最简单的做法是关闭其中一个保持单一网络管理组件工作。在Ubuntu 18.04之后的版本上尤其容易遇到netplan配置问题编辑/etc/netplan/*.yaml文件后执行sudo netplan apply即可生效。改配置前先备份改完后如果不通就迅速还原避免把系统网络彻底改挂。5.4 排查问题的核心理念连接、地址、路由、DNS、防火墙排错经验再多底层逻辑永远是那五层链路连接、IP地址、路由网关、DNS解析、防火墙策略。无论故障浏览器里表现成什么样我都习惯按这五层顺序一层层验证而不是凭感觉去改配置。ping不通就查地址和链路ping通了却打不开网页就查DNS和代理服务和状态都正常再考虑防火墙和上层应用。这套方法听起来朴素但在VMware虚拟机网络排错中能让人保持思路清晰不被表面现象带偏。我自己处理过的所有虚拟机无法上网问题几乎都能在这五层里找到对应症结。有时候真相很简单就是虚拟机里之前的系统把静态IP写死了但排查思路不清晰时会平白绕很多弯子。最后分享一个个人习惯每次调整完网络配置我都会顺手执行ipconfig /flushdnsWindows或sudo systemd-resolve --flush-cachesLinux把DNS缓存清掉再确认网络恢复。这个细节不起眼但能避免大量“明明改对了却还连不上”的假故障。