拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VMware虚拟机连不上外网?NAT、DNS、虚拟网络全排查指南

VMware虚拟机连不上外网?NAT、DNS、虚拟网络全排查指南

宿主机上网一切正常,唯独VMware里的那台虚拟机连不上外网——ping网关能通,ping外网IP也能通,但域名怎么都解析不出来;或者更干脆,虚拟机里连个有效的内网IP都没拿到。如果你也遇到过这种“薛定谔的断网”,这篇排查笔记应该能帮你少走几个小时弯路。

我做虚拟化相关的工作差不多十年,Windows宿主机上跑VMware Workstation、Linux环境里搭虚拟化集群都折腾过。虚拟机连不上外网这个问题,在所有虚拟化故障里排得上前三。这篇内容会把VMware连不上外网这件事从现象到根因完整拆一遍,覆盖新装虚拟机一直断网、前一天正常第二天突然断网、换个网络环境就断网三大高频场景。无论你用的是VMware Workstation Player、Workstation Pro还是Fusion,排查思路基本都是同一套。

1. 问题画像:先把“连不上外网”的定义搞清楚

1.1 三种高频故障场景,你对号入座

先说场景一:新装虚拟机,一直就上不了网。镜像装完,在虚拟机里打开网络配置一看,网卡要不没有IP,要不IP是169.254开头的APIPA自动地址。这种情况十有八九是装系统时把网络模式选错了,或者宿主机上的VMware网络服务本身就没起来。无论是装Ubuntu、CentOS还是Windows 10,走NAT模式装好系统却上不了网,基本都逃不出这两类原因。

场景二最气人:昨天虚拟机还能正常上网,也没动过任何配置,今天一开机就断了。这种“睡一觉起来就断网”的案例,多半不是虚拟机内部的问题,而是宿主机层面的变化。Windows系统更新重启后,VMware相关的服务启动类型被改掉了;安全软件静默更新后,把虚拟网卡给拦了;再或者VMware软件本身升级后,虚拟网络配置被重置。这类问题最迷惑人的地方在于,你打开虚拟机设置看网络适配器,一切都正常,但实际网络链路就是不通。

场景三是移动办公族的噩梦:在家里好好的,带着笔记本到公司、酒店、客户现场,虚拟机就上不了外网了。环境切换的坑主要出在桥接模式——宿主机换了Wi-Fi或者有线网络,网段变了,虚拟机里的IP还停留在旧网段;如果用NAT模式,还要看宿主机当前网络本身能否正常访问互联网。我见过不少同事到了新网络环境第一件事就是重装系统,实际上只要切换成NAT模式就能解决问题。

1.2 数据流向和排查顺序

排查之前,先把“虚拟机里的数据是怎么出去的”想明白。用个生活化的比喻:虚拟机相当于租住在你宿主机这台“大楼”里的租客,它想出门,必须先离开自己房间(虚拟机网卡),走到大楼门禁(VMware虚拟网卡),再经过物业通道(VMware NAT/DHCP服务),最后通过小区大门(宿主机物理网卡)上马路(局域网和互联网)。整个链路里的任何一环出问题,租客就出不了门。

所以排查顺序永远是从外到内:先确认宿主机能上网、虚拟网卡状态正常;再看虚拟网络服务和防火墙;最后才钻到虚拟机里查IP和DNS。很多人一上来就在虚拟机里改IP、改DNS,折腾半天没用,因为问题根本不在这一层。这也是我这篇文章反复强调的排查主线:宿主机→服务→虚拟网络→虚拟机内部,所有故障都能沿着这条线定位。

2. 第一板斧:宿主机网络与VMware虚拟网卡

2.1 先确认宿主机自己有没有“断网”

宿主机都上不了网,虚拟机肯定也上不了。这一条看着是废话,但我在排查问题的过程中发现,不少人根本不会先确认宿主机状态。在宿主机上打开命令提示符,执行ipconfig /all,先看清楚两件事:第一,物理网卡有没有拿到有效的IP地址和默认网关;第二,列表里VMnet1和VMnet8这两块虚拟网卡是否正常显示。

VMnet1对应仅主机模式网络,VMnet8对应NAT模式网络。如果ipconfig /all里连VMnet8都不出现,说明VMware的虚拟网卡驱动没加载或虚拟网络服务挂了,虚拟机当然出不去。反过来,如果VMnet8出现但显示的IP地址是169.254.x.x这类地址,也说明VMware的DHCP服务或者网络配置出了问题,需要进一步处理。这里有个经验:只要VMnet8状态不对,别急着在虚拟机里折腾,先把宿主机层面的网卡驱动和服务修好再说。如果网卡驱动在设备管理器里显示异常,或者虚拟网络服务反复启动失败,最后的手段是用VMware官方的卸载清理工具(VMware InstallCleaner)彻底卸载后重新安装,然后再重建默认虚拟网络。

2.2 三种网络模式:桥接、NAT、仅主机怎么选

VMware Workstation提供三种默认网络模式,选错模式是“连不上外网”的头号原因。

桥接模式(Bridged):虚拟机直接借用宿主机的物理网卡接入局域网,相当于在交换机上多插了一台物理机器。虚拟机和宿主机在同一个网段,拥有独立的局域网IP。好处是局域网内的NAS、路由器管理页面、打印服务器都能直接访问虚拟机;坏处是要占用一个局域网IP,而且宿主机一旦换了网络环境,大概率要重新配置。如果你需要虚拟机对外提供服务,比如跑个Web服务器让别人访问,桥接模式是首选。

NAT模式(默认):虚拟机通过VMnet8虚拟网卡与宿主机共享出网通道,宿主机充当虚拟路由器的角色。虚拟机通常分配在192.168.x.0/24的私有网段,默认网关指向VMnet8的网关地址。NAT模式的优势是虚拟机出外网复用宿主机物理网卡的地址,宿主机换了网络环境基本不用动虚拟机,对经常带着笔记本跑的人来说非常友好。不过NAT模式也有一个明显的短板:局域网里其他设备访问不到虚拟机,因为所有出网流量都以宿主机IP呈现。如果你需要局域网设备直接访问虚拟机里的服务,还是要用桥接模式或者配置端口转发。

仅主机模式(Host-only):虚拟机与宿主机形成一个独立私有网络,与物理网络完全隔离。这种模式下虚拟机无法访问外网,只能和宿主机通信以及跨虚拟机互通。如果你设置了仅主机模式却抱怨连不上外网,那不是故障,是配置本身就禁止出网。这个模式适合做网络隔离测试这类不希望流量污染外部环境的实验,但日常开发如果选了它又发现上不了网,记得先去虚拟机设置里把网络适配器切回NAT或桥接。

我把三者的差异整理成一张表:

模式虚拟网卡虚拟机能否上网虚拟机能否被局域网访问典型场景
桥接VMnet0能(需占用局域网IP)能需要局域网共享服务、对外监听端口的场景
NATVMnet8能(共享宿主机出口)默认不能日常开发、需要稳定出网、经常换环境的场景
仅主机VMnet1不能不能隔离测试、纯内部网络实验

提示:如果你用的是VMware Workstation Pro,在“虚拟机设置”的“网络适配器”里,可以随时切换三种模式。切换后不需要重装系统,但要确认虚拟机内网卡的DHCP客户端重新获取到新网段的IP。如果虚拟机一直坚持用旧IP,执行一次ipconfig /renew或者重启虚拟机网络服务即可。Windows下也可以直接把网卡禁用再启用,效果等同;Linux下用sudo systemctl restart NetworkManager或者sudo dhclient -r后再重新sudo dhclient。

3. 第二板斧:Windows服务和防火墙,最隐蔽的拦路虎

3.1 VMware NAT Service和DHCP Service,缺一个都不行

走NAT模式上网,宿主机上必须有两个Windows服务在跑:VMware NAT Service(负责网络地址转换)和VMware DHCP Service(负责给虚拟机分配IP地址)。这两个服务默认是自动启动的,但你可能架不住Windows更新、安全软件优化、或者是某些“系统清理工具”顺手把它们改成了手动。还有一种容易被忽略的情况:电脑用了很长时间没关机,服务进程崩溃了,状态显示“正在运行”但实际已经不响应任何请求。所以我的排查习惯是:只要遇到NAT模式断网,不管服务看起来是否正常,都先重启一遍这两个服务,成本极低,收益却很直接。

检查方法:Win+R打开运行框,输入services.msc回车,在服务列表里找到这两个服务,看状态和启动类型。正常的配置是“正在运行”+“自动”。如果发现服务停了,右键“启动”,双击服务把启动类型设置为“自动”,然后重启一下VMware,再打开虚拟机测试。如果你所在的环境经常被系统优化工具整理服务,建议把这两个服务的启动类型设置完后,再在“恢复”选项卡里把“第一次失败”和“第二次失败”的动作都设为“重新启动服务”,这样服务就算崩溃或被误杀,也会自动拉起来,不用你手动干预。

这里提供更省事的思路:不用手动一个个改,直接用管理员权限执行命令重启服务。打开管理员CMD,依次执行:

net stop "VMware NAT Service" net start "VMware NAT Service" net stop "VMware DHCP Service" net start "VMware DHCP Service"

服务重启完之后,回到虚拟机里,把网卡禁用再启用一次,或者直接重启虚拟机,让DHCP重新下发地址。这个操作虽然简单,却解决了相当大比例的NAT模式断网问题。

3.2 防火墙与安全软件的围剿

网络服务没问题,还有一种极其常见的情况:Windows防火墙的入站规则把VMware的虚拟网卡流量拦了。尤其是NAT模式下,虚拟机流量要经过宿主机转发,一旦宿主机防火墙认为这是“外部访问”,就可能直接丢弃数据包。检查方法也比较直接,在宿主机上打开“Windows安全中心”,进入“防火墙和网络保护”页面,把当前网络(专用/公用)的防火墙暂时关掉,马上测试虚拟机能否上网。如果能上网,那就是防火墙的问题,再把防火墙打开,为VMware NAT Service和vmware.exe添加入站/出站允许规则,而不是永久关闭防火墙。

另外一类拦路虎是安全软件、系统优化工具自带的“网络防护”“黑客入侵拦截”等功能。这类软件偶尔会把VMware的虚拟网卡识别为“异常设备”直接屏蔽,导致虚拟机明明是NAT模式却怎么也出不了网。排查时可以暂时将安全软件的相关防护功能关闭,或者把VMware的安装目录和虚拟网络服务进程添加到白名单。实测下来,这类拦截往往不产生明显的弹窗提示,也不会写入常见的事件日志,所以很容易被忽略。如果你发现安全软件里有网络隔离模式或者智能防护模式,务必把虚拟网络相关进程加进白名单,这一条对Windows 11 + VMware Workstation Pro组合尤其重要。

4. 第三板斧:虚拟网络编辑器与虚拟机内部网络配置

4.1 虚拟网络编辑器:重新规划NAT网段

如果宿主机正常、服务正常、防火墙也没拦,那就要进“虚拟网络编辑器”看看底层的网络配置了。打开VMware Workstation,点击“编辑”→“虚拟网络编辑器”,界面会列出VMnet0、VMnet1、VMnet8等虚拟网络。这里提醒一句,“虚拟网络编辑器”里的内容改动很敏感,改了会直接影响所有使用对应网段的虚拟机,所以每次改动前都要想清楚影响范围。如果你只是想把某一台虚拟机弄上网,优先在该虚拟机的设置里改网络适配器,而不是全局改虚拟网络。

NAT模式的关键配置有三处:NAT网段(子网IP和子网掩码)、NAT网关地址(在“NAT设置”里)、DHCP地址池范围(在“DHCP设置”里)。这三处配置必须保持在同一网段逻辑内,比如子网是192.168.118.0/24,网关就应该是192.168.118.2这一类地址,DHCP池也要落在192.168.118.128到192.168.118.254之间。如果网关和DHCP池不在同一个子网里,虚拟机即使能从DHCP拿到IP,也找不到正确的默认网关,表现出来就是“有IP但上不了外网”。

一个特别容易踩的坑是网段冲突。举例:VMware默认的NAT网段是192.168.x.0/24,如果你宿主机所在局域网的IP段恰好也是192.168.x.0/24,那虚拟机和局域网里的真实设备就会发生路由重叠,导致虚拟机访问外网时数据包走错路由。遇到这种情况,在“虚拟网络编辑器”中把VMnet8的子网改成一段独立的网段,比如192.168.118.0/24,再确认默认网关和DHCP范围都同步改掉,问题就解决了。改完子网后要顺手把DHCP地址池和NAT网关一并调整,否则只改一半又会出现新的断网问题。

还有一招屡试不爽的终极大招:VMware的虚拟网络配置可以被暴力重置。在“虚拟网络编辑器”的“更改设置”按钮(需要管理员权限)弹出的界面右下角,有“恢复默认设置”选项。点击之后,VMware会删除所有自定义的虚拟网络配置并重建一套默认配置。大部分跟虚拟网络配置相关的疑难杂症,用这一招都能治。

4.2 虚拟机内部的IP、网关与DNS

以上宿主机层面都排完了,才轮到虚拟机内部。先在虚拟机里用ipconfig(Windows)或ip addr(Linux)查看网卡是否拿到了合理IP。如果显示169.254.x.x或者完全没有IP,多半是DHCP没获得到。很多情况下,重新触发一次DHCP请求就能解决。这里我也建议装好系统的第一时间就安装VMware Tools,因为Tools自带的虚拟网卡驱动不匹配会导致网卡处于不可用状态。“没有安装VMware Tools怎么安装”是我在社区里见过无数次的问题,装好Tools、重启虚拟机,很多看起来像网络故障的疑难杂症根本不是网络配置的问题。如果在安装VMware Tools时遇到“启动脚本未能在虚拟机中成功运行”之类的报错,通常需要先停掉旧版Tools相关服务、清理干净再重装,否则虚拟网卡驱动可能一直处于异常状态。

Linux系统下,如果之前在别的网络环境配置过静态IP,或者DHCP客户端没正常工作,可以先尝试手动获取IP:

sudo dhclient -v

如果网卡名不确定,先用ip addr确认,再针对具体网卡执行sudo dhclient eth0或sudo dhclient ens33。这两种网卡名其实是不同发行版的命名习惯,老版本可能是eth0,新版本会变成ens33,不必纠结名字,以ip addr的输出为准。

Windows虚拟机则是在“网络适配器”设置里,先禁用网卡再启用,或者执行:

ipconfig /release ipconfig /renew

如果虚拟机没有开启DHCP而是用了静态IP,这一步没有意义,需要手动改成自动获取IP,或者在静态IP里填上与当前VMnet8网段匹配的地址。

如果虚拟机拿到了IP,但域名解析不了(能ping通IP、ping不通域名),那就是DNS的问题。排查方式很简单,执行:

nslookup www.baidu.com

如果返回超时或找不到主机,说明DNS配置有误。检查虚拟机内网卡的DNS服务器设置,改为国内常用的公共DNS,比如223.5.5.5或114.114.114.114,然后重新测试一次,大多数DNS相关问题都是秒解决。

5. 第四板斧:一套完整的排查命令流程

5.1 从宿主机到虚拟机,逐一击破

为了让你排查时心里有底,我把整个流程压缩成一套可以直接照着敲的命令序列。这套流程适用于Windows宿主机+NAT模式虚拟机,其他场景可以参考第2节调整。

第一步,宿主机确认物理网络和虚拟网卡状态:

ipconfig /all

重点看物理网卡是否有默认网关、VMnet8是否有IPv4地址。如果VMnet8状态异常,先在“虚拟网络编辑器”里恢复默认设置。这一步是为了排除“宿主机的门没开”的问题。很多新手会跳过这一步直接去虚拟机里改配置,结果宿主机本身网络栈就异常,虚拟机自然永远连不上。先把宿主机这一层确认到位,后面所有操作才有意义。

第二步,在虚拟机内ping网关。NAT模式下,虚拟机网关通常是VMnet8网段的“.2”地址,比如192.168.118.2。具体网关地址可以在“虚拟网络编辑器”的NAT设置里确认:

ping 192.168.118.2

网关不通,问题在虚拟机网卡配置、VMware网络服务或虚拟网卡驱动;网关通了,说明虚拟机到宿主机这一段的二层链路是好的,可以继续往下查。如果网关地址你不知道是多少,去“虚拟网络编辑器”的NAT设置里看一眼就有了,别自己瞎猜IP段。这一步是定位问题层级的关键分水岭,网关都ping不通,就不要继续看公网了,先把这一段修好。

第三步,在虚拟机内ping一个公网IP,比如阿里DNS的IP地址:

ping 223.5.5.5

公网IP通了但域名不通,说明DNS有问题;公网IP都不通,说明NAT出网不正常,回到第二步查网络服务。公网IP测试用的是ICMP请求,能通说明宿主机把数据成功路由出去了,NAT转发链路基本正常。如果这里不通,多半是NAT协议栈的问题,重启宿主机上的VMware NAT Service一般都能恢复。

第四步,测试域名解析:

nslookup www.baidu.com

域名能解析出IP,说明网络全链路正常;解析失败,按第4.2节改DNS。这一步只需要几秒钟,却能有效区分“网络不通”和“解析不通”两种完全不同的故障类型,很多新手把DNS问题和链路问题混为一谈,才导致越修越乱。改完DNS后记得清一下虚拟机里的DNS缓存,Windows下执行ipconfig /flushdns,Linux下执行sudo resolvectl flush-caches,再重新测试。

第五步,排查Web层面的问题。有时候ping和nslookup都正常,浏览器就是打不开网页,这时候用curl验证一下HTTP请求是否能通:

curl -I https://www.baidu.com

curl能返回HTTP响应头,说明网络和DNS都OK,问题可能在浏览器或上层应用的网络设置,和虚拟机的底层网络无关。如果curl超时,但前面ping和nslookup都正常,那就要检查虚拟机里是否有安全策略、hosts文件或者额外的网络过滤软件在干预。

第六步,重复测试确认。修完任何一步之后,都要回到第二步重新走一遍,确认从网关到公网IP再到DNS全部通畅,才算真正修好。这里要注意,虚拟机的DNS缓存也可能影响测试结果,Linux下可以用sudo systemd-resolve --flush-caches或者sudo resolvectl flush-caches清缓存,Windows下用ipconfig /flushdns。如果改了配置但现象不变,别忘了清一次DNS缓存再测。

5.2 常见问题速查表

我把这段时间遇到的高频问题整理成速查表:

症状可能原因处理办法
虚拟机网卡没有IP / 显示169.254.x.xDHCP服务未运行或虚拟网卡驱动异常启动VMware DHCP Service,重建VMnet8
能ping通网关,ping不通公网IPNAT Service异常或路由未配置重启VMware NAT Service,或恢复默认虚拟网络
能ping通公网IP,域名解析失败虚拟机DNS配置错误修改DNS为223.5.5.5或114.114.114.114
桥接模式下虚拟机时好时坏宿主机频繁切换网络、IP冲突改用NAT模式,或重新配置桥接网卡
宿主机防火墙关闭后虚拟机恢复防火墙拦截NAT转发流量放行VMware相关服务,而不是长期关闭防火墙
宿主机重启后虚拟机又断网VMware服务启动类型被改成手动把VMware NAT/DHCP服务设为自动启动

这张表建议收藏起来,遇到类似症状直接对照,比每次从头查一遍快得多。需要说明的是,表格里的处理办法是“按步骤从上到下排查后得出来的大概率解”,如果你没有经过阶梯式排查就直接用对应办法,可能会出现“修了但没完全修好”的情况。比如防火墙问题关掉防火墙确实立竿见影,但如果你后续又发现DNS不对,那说明本来就有多个故障叠加,还是要顺着5.1的流程走一遍。

5.3 桥接模式:最容易因环境变化翻车

如果你坚持用桥接模式,就要特别注意物理网卡的绑定问题。打开“虚拟网络编辑器”,选中VMnet0,点击“更改设置”,可以在“桥接到”下拉框里选择指定的物理网卡。这个页面需要有管理员权限才能修改,普通用户点开会发现下拉框是灰色的,记得先用管理员身份运行VMware Workstation。

为什么这个操作重要?因为笔记本往往同时有有线网卡和无线网卡,VMware默认的“自动”桥接策略可能把虚拟网卡绑定在旧网卡上,当你从有线切换到Wi-Fi,或者从一个Wi-Fi切换到另一个Wi-Fi,虚拟机的桥接链路就断了。手动绑定到当前正在使用的无线网卡后,问题会明显减少。

另外,桥接模式在公共网络环境下还有IP冲突的风险。比如在酒店或公司网络,DHCP分配的地址可能和其他设备冲突,或者网络管理员做了MAC地址绑定。这种场景下,我推荐的做法是直接切换到NAT模式,虽然局域网内其他设备无法直接访问虚拟机,但至少出外网是稳定可靠的。需要局域网访问时,再用端口转发或者临时切换回桥接。

6. 独家经验:我踩过的坑与收藏的习惯

6.1 几个坑,每一个都是用时间换来的

第一个坑:过度相信“恢复默认设置”。有一次我图省事,在虚拟网络编辑器点了“恢复默认设置”,发现网是通了,但之前在自定义VMnet2、VMnet3上搭的实验网络全没了,网络拓扑直接报废。所以这个操作只推荐在虚拟网络配置比较简单的时候使用;如果你的环境里存在很多自定义虚拟网段,操作前先记录现有配置,或者用快照保护。

第二个坑:忽略Windows系统更新。有一回虚拟机断网查了半天,最后发现是Windows更新后把VMware NAT Service的启动类型从“自动”改成了“手动”,服务压根没跑起来。从那以后,我每次更新系统都会顺手看一眼服务列表,免得再被坑一次。

第三个坑:Linux虚拟机的网卡名变化。装了VMware Tools或者打了系统补丁后,网卡名可能从eth0变成ens33或者ens160,之前配置的静态IP就失效了。遇到这种情况,先ip addr看当前网卡名,更新网络配置文件里对应的接口名,再重启网络服务,问题解决。

第四个坑:自定义网段太多导致管理混乱。我见过有人同时在VMnet2、VMnet3、VMnet8上配了多个NAT网络,结果自己都记不清哪台虚拟机接的哪个网段,排查起来一头雾水。建议在虚拟网络编辑器里给每个自定义网段写清楚用途,或者只保留一套NAT、一套仅主机,其余全部删掉,减少出问题的概率。

6.2 三个让排查效率翻倍的动作

排查网络问题之前,先把虚拟机做一个快照。光是这一个动作就能让你放开手脚折腾。我从虚拟化环境里得到最重要的一条经验就是:任何高风险操作(恢复默认配置、重装VMware Tools、删除虚拟网卡)之前先留一个快照,出了问题一键还原,不用重装系统。快照的缺点是会占用磁盘空间,所以排查结束后记得及时删除不需要的快照。

第二个动作是把常用的网络配置记录成文档。每家公司的网络环境、每款路由器的网段设置都不一样,记录下来之后换环境排查会快很多。比如我家里的环境就一份配置表:宿主机IP、VMnet8网段、虚拟机静态IP分配、DNS设置,全写在一个文档里。排查问题时直接对照记录,五分钟就能确认是否为环境变化导致的故障。

第三个动作是善用虚拟网络编辑器的自定义网段和端口转发功能。在“虚拟网络编辑器”里,可以创建自定义的VMnet2、VMnet3网段,分别选择桥接、NAT或仅主机模式。如果实验环境需要多个网段同时都能上网,可以在每个自定义虚拟网络的NAT设置里单独配置网关和端口转发。这个功能对网络实验特别有用,但配置前一定要把默认的VMnet0、VMnet1、VMnet8看住,不要随意改动,否则默认NAT网络也会跟着出问题。

我个人在实际操作中的体会是,大部分VMware连不上外网的问题,最终都落在三件事上:网络模式选错、Windows服务没起来、虚拟网卡配置冲突。只要按照“宿主机→服务→虚拟网络→虚拟机内部”这条链路逐层排查,绝大多数情况下都能在半小时内定位到根因。最后再分享一个小习惯:每次调完网络配置,我都会在虚拟机里跑一遍ping 网关 + ping 公网IP + nslookup这三个命令,确认三层网络全部通畅才算真正修好,绝不稀里糊涂地“反正暂时能用了”。

返回列表