虚拟机无法上网时,核心结论是:先判断虚拟机的网络模式是NAT、桥接还是仅主机模式,再按对应模板块逐项排查,绝大多数情况下问题出在虚拟网络编辑器的DHCP配置、Windows防火墙或网卡驱动上。
先搞清楚虚拟机用的哪种网络模式
虚拟机连不上网,第一步不是瞎点设置,而是先确认当前虚拟机的网卡接在了哪个虚拟交换机上,VMware和VirtualBox的默认逻辑不同:VMware Workstation默认走NAT模式,VirtualBox默认走NAT,但很多教程让用户手动改成“桥接模式”反而把网络搞断了。
打开虚拟机的“网络适配器”设置,看看勾选的是哪种模式:
- NAT模式:虚拟机通过宿主机共享IP上网,宿主机能上网,虚拟机一般就能上。
- 桥接模式:虚拟机直接占用局域网IP,相当于局域网里的一台独立设备。
- 仅主机模式:只能和宿主机通信,不能访问外网,这个模式下不能上网是正常的。
搞清楚模式之后,再看宿主机是否能正常上网,如果宿主机本身断网,虚拟机上不了网也就不奇怪了,这一步排查看似多余,但身边不少朋友折腾半天虚拟机,最后发现是Wi-Fi断了,这种情况估计你也遇到过。
VMware虚拟机NAT模式无法上网怎么处理
NAT模式是大多数人用的默认方案,思路是让虚拟机通过宿主机做地址转换出去,只要宿主机能上网,虚拟机理论上就能上网,如果上不了,问题通常集中在以下几个点。
检查VMware自带的三项系统服务
VMware的NAT和DHCP功能依赖Windows后台服务,如果服务没启动,虚拟机自然拿不到IP。
按Win+R输入services.msc,找到以下三个服务:
- VMware NAT Service
- VMware DHCP Service
- VMware Authorization Service
确认它们的状态是“正在运行”,启动类型是“自动”,如果是“手动”或“已停止”,右键启动,再打开VMware验证,很多情况下,重启电脑后这三个服务没跟着起来,导致NAT网络直接罢工。
清理失效的虚拟网络编辑器配置
VMware的虚拟网络编辑器里,VMnet8对应的就是NAT模式的虚拟交换机,如果之前手动改过子网IP、DHCP地址池,或者装过其他虚拟机工具(比如Docker、VirtualBox)改了系统网络,VMnet8的配置可能会乱掉。
操作路径:VMware菜单栏“编辑” > “虚拟网络编辑器”,选中VMnet8,点“更改设置”(需要管理员权限),
- 确认勾选了“NAT模式(共享主机IP地址)”。
- 确认“子网IP”和“子网掩码”是正常的,比如
168.x.0和255.255.0。 - 点“NAT设置”,确认网关IP和子网IP在同一网段,通常网关是
168.x.2之类的地址。 - 点“DHCP设置”,确认地址池起始和结束IP都在子网网段内,别让地址池和网关冲突。
如果不管怎么调都不行,干脆恢复默认:点“还原默认设置”,然后重启VMware,重新配置NAT模式,这个操作会重置所有虚拟网络配置,副作用是之前手动改过的端口转发规则会被清空,重新设置时请自行权衡。
行业共识认为,八成以上的NAT模式问题,都能靠“还原默认设置”解决,因为之前不合理的配置会被清理掉。
确认虚拟机内部网卡是DHCP获取IP
虚拟机系统里如果手动配置过静态IP,而这个IP和NAT子网不在同一网段,会导致内外网都不通。
以Ubuntu 22.04为例(不同版本的配置文件路径可能略有差异),检查Netplan配置:
cat /etc/netplan/.yaml
如果是CentOS/RHEL系列,看这个文件:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
确认配置里是dhcp方式拿IP,或者手动IP的网段、网关和VMnet8的子网、网关保持一一对应,如果拿不准,直接改成DHCP:
sudo dhclient <网卡名>
Windows虚拟机则在“网络连接”里找到以太网适配器,右键“属性” > “Internet协议版本4(TCP/IPv4)”,选择“自动获取IP地址”和“自动获取DNS服务器地址”。
虚拟机桥接模式下局域网互通但上不了外网
桥接模式比NAT更容易出问题,因为它需要虚拟机的IP、掩码、网关和宿主机完全一致(DNS可以一致也可以不同),很多人的误区在于:设置了桥接模式,虚拟机确实能和局域网里的其他设备互访,但访问不了外网。
先查网卡绑定是否选对了
虚拟机桥接模式不能只选“桥接模式”就完事,在VMware的“虚拟机设置” > “网络适配器”里,“桥接模式”旁边有个“复制物理网络连接状态”的选项,建议勾上。
关键一步:在“虚拟网络编辑器”中选中VMnet0(桥接模式),确认“桥接至”后面的下拉框选的是当前宿主机正在使用的物理网卡,如果宿主机用的是无线网卡,桥接到有线网卡上,那无论如何都上不了外网。
VirtualBox用户同理:设置里面的“桥接网卡”名称要选对,不能选“未指定”。
检查路由器是否开启了AP隔离
如果虚拟机桥接后能拿到局域网IP,能ping通网关,但上不了外网,大概率不是虚拟机自身问题,而是路由器设置。AP隔离(也叫“客户端隔离”)会禁止同一Wi-Fi下的设备互访和外网转发某些协议,虽然AP隔离主要影响局域网互访,但部分路由器实现不完善,会连带阻断虚拟机的NAT流量。
登录路由器管理后台,在无线设置里找到“AP隔离”或“隔离客户端”,把这个选项关掉,如果是公司或学校网络,可能是管理员在交换机上做了端口隔离策略,这种情况下建议换用NAT模式,别用桥接硬刚,大概率无功而返。
双网卡环境下优先用有线网卡
笔记本电脑双网卡(有线+无线)环境下,桥接模式经常出幺蛾子,虚拟网络编辑器只绑定了有线网卡,但实际连的是Wi-Fi,那虚拟机虽然显示“已连接”,数据却发不出去,解决办法是让VMnet0桥接到“自动”或手动切换绑定到当前正在联网的网卡上,自动”有时候不靠谱,还是手动选更稳。
虚拟机网卡重启和防火墙放行
如果前面配置都正确,但虚拟机还是上不了网,可能是虚拟机系统内部的问题,国内不少用户用的是Ghost版Windows或者精简版Linux镜像,防火墙规则被改得乱七八糟,需要重置一下。
在虚拟机里重置网卡
Windows虚拟机以管理员身份运行CMD:
netsh winsock reset
netsh int ip reset
ipconfig /flushdns
然后重启虚拟机,这套命令解决的是Winsock目录损坏和TCP/IP协议栈异常的问题,重启之后生效。
Linux虚拟机可以尝试重启网络服务,命令如下:
sudo systemctl restart NetworkManager
或者直接让网卡重新获取IP:
sudo dhclient -r
sudo dhclient
操作能恢复绝大多数因系统内部网络状态卡死导致的异常,实测成功率较高。
防火墙规则拦截了虚拟机的DHCP请求
VMware在安装时会自动给Windows防火墙添加几条入站规则,允许虚拟机的DHCP和NAT流量通过,但如果后来装过安全软件,或者手动优化过系统防火墙,这些规则可能被误删。
在宿主机上打开“控制面板” > “Windows Defender防火墙” > “允许应用或功能通过Windows防火墙”,滚动列表,找到VMware相关的条目,确保“专用”和“公用”两个复选框都勾上了,如果没有找到VMware条目,可以手动添加:
- 点击“允许其他应用”。
- 浏览到VMware安装目录下的
vmware-vmx.exe和vmware-authd.exe。 - 勾选“专用”即可。
VMware写入了防火墙规则但未生效的情况很常见,添加后通常能通。
虚拟机无法上网常见Q&A
虚拟机自动获取的IP是169.254开头,说明什么
254开头的IP是Windows在DHCP失败后自动分配的“备用地址”,表示虚拟机根本没从DHCP服务器拿到IP,检查宿主机上VMware DHCP Service是否运行,并确认VMnet8的DHCP地址池和子网IP不冲突,如果是桥接模式,则要确认路由器DHCP池还有剩余地址,有些路由器地址池较小,超过限制后新设备就拿不到IP了。
手机热点下虚拟机无法桥接上网,怎么办
手机热点(尤其是iPhone热点)默认开启了客户端隔离,桥接模式的虚拟机会拿到热点分配的IP,但无法和宿主机通信,换NAT模式配合出网,这是最推荐的做法,实测华为和iPhone热点下NAT模式均可正常使用,Android热点可以在设置里关掉“Wi-Fi共享”或“允许设备互访”,但不同手机厂商命名不同,找起来可能费事,直接上NAT模式更省时间。
宿主机重启后虚拟机就连不上网了
VMware的服务设置为“手动”或“延迟启动”会导致重启后NAT服务未加载,按之前提到的方法,把三个VMware服务全部改为“自动”,并在VMware设置里取消“关闭虚拟机时移除所有快照”之类的无关选项(该选项与网络无关,但涉及虚拟机整体健康),对于VirtualBox用户,重启后需要手动启动VirtualBox Host-Only Network适配器,这是它和VMware的机制差异,属于正常现象。
虚拟机网络问题排查到这里已经覆盖了绝大多数场景。记住一个原则:先从网络模式确认逻辑,再到宿主机的虚拟网络配置,最后才查虚拟机内部系统设置,按照这个顺序走一遍,基本上就能定位到问题根源了。