☰
虚拟机连不上网络排查指南:NAT、桥接、DNS与虚拟网卡修复
2026/10/1 6:26:52 网站建设 项目流程

虚拟机这玩意儿,装的时候一路下一步挺顺,用起来最让人抓头的就是某天一开机发现网断了。我大概从 VMware 10 一路用到 17,中间也折腾过 VirtualBox、Parallels,还在各种云主机上搭过开发环境,"虚拟机连接不上网络"这个毛病,绝对排得进我遇到过的 top3 高频问题。它讨厌的地方在于——报错信息往往就一句"网络不可达"或者干脆什么都没有,但背后的原因可能横跨宿主系统、虚拟化软件、虚拟网卡、来宾系统四层。这篇就把我这几年排查这类故障的完整思路、用到过的命令行、踩过的坑,一次性摊开讲清楚。不管你是刚装完 Ubuntu 24.04 发现上不了网的新手,还是克隆了一台 CentOS 之后宿主机访问不了网站服务的老手,都能在这里找到对应的排查路径。

1. 先把"连不上"这件事拆开看:故障边界与排查思路

虚拟机连不上网络,最大的坑不是不会修,而是一上来就乱修。我见过太多人第一步就去改/etc/resolv.conf,结果发现根本是虚拟网卡都没起来。所以动手之前,得先建立一个"分层排查"的框架。

1.1 三种"连不上"其实是完全不同的故障

同样一句"虚拟机上不了网",实际操作中至少要分成三类来对待。第一类是虚拟机完全出不了网,宿主机和外网都碰不到;第二类是能上外网但宿主机访问不了虚拟机里的服务,比如你在虚拟机上跑了 Nginx 或者开发服务器,宿主浏览器打不开;第三类是宿主机能访问,但局域网里其他机器访问不了。这三类的根因完全不在一个层面上,第一类看虚拟网络模式和网卡状态,第二类看宿主防火墙和虚拟网卡地址,第三类基本只能靠端口转发或者桥接模式解决。先给故障归类,能省掉一半的无用功。

我一般会让提问的人先执行几个动作:在虚拟机里ping一下网关,再ping一下公网 IP,最后ping一个域名。这三步的结果组合,直接就把问题锁定到了链路层、路由层还是 DNS 层。

虚拟机 ping 网关ping 8.8.8.8 之类的公网 IPping 域名结论方向
通通通网络本身没问题,问题在应用层或防火墙
通通不通DNS 配置问题
通不通不通网关/NAT 转发问题
不通不通不通虚拟网卡、网段、模式配置问题

这张表是我这几年最常用的一张"体检表",比任何图形化工具的报错都直接。

1.2 排查顺序为什么必须从宿主侧开始

很多人习惯从虚拟机内部查起,我建议反过来——先看宿主机的虚拟网络服务,再看虚拟机的网卡,最后才进系统改配置。原因是宿主侧的问题会同时影响所有虚拟机,而虚拟机内部的问题只影响单台。你要是先花两小时在 Linux 里改 IP,最后发现是宿主机的 VMware DHCP 服务被某个"系统优化软件"关掉了,那真是白忙。

宿主机要看的几个点很固定:Windows 上打开"服务"面板,找VMware DHCP Service和VMware NAT Service,这两兄弟必须是"正在运行"且启动类型为"自动"。NAT 模式依赖前者分配地址、后者做转发,任何一个停了,NAT 模式必挂。其次是"网络连接"面板里有没有VMware Network Adapter VMnet1和VMnet8这两块虚拟网卡,如果带黄色感叹号或者干脆消失了,那就得去虚拟网络编辑器里"还原默认设置"。这三步走完,宿主的嫌疑基本就能排掉七七八八。

注意:Windows 上有些安全软件会静默禁用 VMware 的两个后台服务,表现就是"昨天还好好的,今天一开机全断了"。如果你经常遇到这种"隔夜失效",优先怀疑这类软件。

2. 虚拟网络的基础原理:三种网络模式到底在干什么

不理解三种网络模式的本质,排查就永远是碰运气。这一节把 NAT、桥接、仅主机三者的工作原理讲透,后面所有排查动作你都能自己推导出来。

2.1 NAT、桥接、仅主机三种模式的本质区别

桥接模式的逻辑最简单粗暴:虚拟机的虚拟网卡直接"搭"在宿主机的物理网卡上,虚拟机就像局域网里多插了一台真实的机器。它的 IP 由你所在局域网的 DHCP 服务器分配,和宿主机同网段。好处是局域网里任何一台机器都能直接访问虚拟机的服务,坏处是依赖局域网的 DHCP,公司网络、校园网经常做端口隔离或者 MAC 绑定,这时候桥接就会拿不到 IP,表现为"网卡在但一直没有地址"。

NAT 模式是虚拟机里最省心的方案。VMware 会在宿主机上造一个独立的小网络,虚拟机全部在这个虚拟网段里,网段里有个"虚拟路由器"负责把你的流量做地址转换后再从宿主机物理网卡发出去。默认情况下,虚拟机能上网、能访问宿主机,宿主机也能访问虚拟机,但局域网里的其他机器看不到虚拟机。对大多数开发场景来说这就够了。

仅主机模式则更封闭,只保留宿主机和虚拟机之间的通路,连外网的口子都没有。它的典型用途是搭隔离测试环境,比如你想跑一个干净的实验,不想让它碰到外网。很多人"上不了网"其实是自己不小心把虚拟机设成了仅主机模式,改回 NAT 就好了。

模式虚拟机能否上外网宿主机能否访问虚拟机局域网其他机器能否访问典型用途
桥接能能能对外提供服务、模拟独立主机
NAT能能默认不能(需端口转发)日常开发、学习
仅主机不能能不能隔离测试环境

2.2 虚拟网卡与虚拟 DHCP 服务的工作机制

再往深一层看,VMware 在宿主机上给你装了若干块虚拟网卡,VMnet1对应仅主机模式,VMnet8对应 NAT 模式,桥接模式则是把虚拟网卡直接绑到物理网卡上。每一块 VMnet 背后都是一段独立网段,网段里的默认网关通常是x.x.x.2,一个是x.x.x.1,专门留给宿主机的虚拟网卡。

这里有个特别容易踩的坑:NAT 网段和你的物理局域网网段撞车。比如你家里的路由器给电脑分的是192.168.1.100,而 VMnet8 恰好也配成了192.168.1.0/24,那宿主机上就出现了两条指向同一网段的路由,谁先谁后全看系统心情,结果就是时通时不通。解决办法是进虚拟网络编辑器,把 VMnet8 的子网地址改成别的网段,比如192.168.138.0/24。改完记得让虚拟机重新获取一次地址。这个冲突造成的"玄学断网"我至少遇到过三次,每次都是重新装虚拟机、重装系统折腾一大圈之后才发现根源在网段,实在不划算。

另外,DHCP 分配是有租期的,默认大概半小时到两小时。虚拟机挂起再恢复、宿主机睡眠唤醒之后,有时候地址续租失败,网卡还在但地址没了。这时候进系统执行一次释放和重新获取就行:

# Linux sudo dhclient -r ens33 && sudo dhclient ens33 # Windows 虚拟机 ipconfig /release ipconfig /renew

ens33是 VMware 下 Linux 常见的网卡名,具体名字用ip addr看,可能是ens160、eth0。名字写错命令会直接报错,别硬着头皮往下走。

3. 按症状对症下药:六类常见故障的实操修复

前面铺垫了原理,这一节直接进入实操。我把这几年处理过的故障按"症状"归成六类,每一类都对应一个具体的修复路径,你可以对照自己的现象直接找。

3.1 症状一:虚拟机里根本没有网络适配器

表现是进虚拟机后ip addr只看到一个lo回环接口,或者 Windows 虚拟机里"网络连接"面板空空如也。这种情况分两头查。先看 VMware 的虚拟机设置里,"网络适配器"那一栏有没有勾上"已连接"和"启动时连接"。很多人装系统的时候手滑把网卡移除了,或者升级 VMware 17 之后配置文件里的设备被重置了,虚拟机上就真的没有网卡了。加一块网卡、选好模式,重启即可。

如果设置里网卡在,但系统里看不见,那就是驱动层面。Linux 下多半是虚拟硬件版本和内核不匹配,重装open-vm-tools试试;Windows 下进设备管理器,看有没有带黄色感叹号的"以太网控制器",有的话装一次 VMware Tools 就能把驱动补齐。

3.2 症状二:有网卡但显示未识别网络或感叹号

这是最常见的一类。网卡在那里,但状态是"未识别"、"无 Internet 访问"或者带个小感叹号。根因基本集中在宿主侧的虚拟网卡上——VMnet8或VMnet1自己出问题了,VMware 分给它的地址丢了或者变成了169.254.x.x这种自动私有地址。

修复动作很固定:打开 VMware 的"编辑 - 虚拟网络编辑器",点右下角"更改设置"(需要管理员权限),然后点"还原默认设置"。这个操作会把 VMnet1、VMnet8 全部重建,DHCP 和 NAT 服务的绑定关系也一并恢复。实测下来,九成以上的"感叹号"问题到这一步就结束了。

注意:还原默认设置会把你自己加过的端口转发规则、改过的子网网段一并清掉,如果之前配置过这些,记得先记下来。我在一个项目里配了七八条端口转发,一次手快还原全没了,重配花了半小时。

如果还原之后还是不行,就在宿主机上以管理员身份跑一遍网络堆栈重置:

netsh winsock reset netsh int ip reset ipconfig /flushdns

跑完重启宿主机。这几条命令的作用是把 Windows 的网络组件恢复到初始状态,代价是所有自定义的网络设置会丢,所以养成先备份的习惯。

3.3 症状三:能 ping 通网关但上不了网

这类故障的特征很明确——ping 192.168.x.2通,ping 8.8.8.8也通,但一ping baidu.com就报"未知的名称或服务"。链路是好的,纯粹是域名解析出了岔子。

先看/etc/resolv.conf里有没有正常的nameserver。Ubuntu 用 systemd-resolved 之后,这个文件经常被接管成一个软链接指向127.0.0.53,看着像空的其实有内容,用resolvectl status看真实配置才是正道。如果你手动改过/etc/resolv.conf,重启就被覆盖,那就应该改 netplan 或者 NetworkManager 里的 DNS 配置,而不是去动这个文件。

另一个常见原因是 NetworkManager 自带的 dnsmasq 转发层挂了,systemctl restart NetworkManager一般能救回来。还有一种情况是 DNS 服务器本身不可达——比如你配的是公司内网 DNS,把虚拟机搬到家里用,自然解析不了。临时换成公共 DNS 先验证:

# 临时测试,重启失效 echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf

通了说明就是 DNS 配置的问题,再去把持久化配置改对。

3.4 症状四:宿主机访问不了虚拟机里的网站服务

虚拟机能上网,你在里面python -m http.server 8000起了个服务,宿主浏览器打开http://虚拟机IP:8000却一直转圈。这时候按顺序查四件事。第一,服务是不是只监听了127.0.0.1,很多框架默认绑定本地回环,必须显式改成0.0.0.0。第二,虚拟机自己的防火墙(ufw、firewalld、Windows 防火墙)有没有放行这个端口,sudo ufw allow 8000试一下。第三,宿主机 Windows 防火墙有没有拦,尤其是宿主和虚拟机不属于同一个"网络位置"的时候,"公用网络"的入站策略比"专用网络"严格得多,把宿主上的 VMnet 网卡改成专用网络往往就通了。

第四点最容易被忽略:NAT 模式下,局域网里别的机器默认访问不到虚拟机。如果你的需求是让同事也能访问,那要么切到桥接模式,要么在虚拟网络编辑器的 NAT 设置里加一条端口转发,把宿主机的某个端口映射到虚拟机的对应端口。端口转发的好处是虚拟机的 IP 变了也不影响外部访问,生产环境里这套玩法很常见。

3.5 症状五:克隆或迁移之后断网

从模板克隆虚拟机、把虚拟机文件拷到另一台电脑上跑,非常容易出现"网络明明配好了就是不通"。原因通常有两个。一是 MAC 地址冲突——克隆出来的虚拟机默认可能沿用原机器的 MAC,同一网段里两台机器 MAC 相同,交换机直接懵了。解决方法是虚拟机设置里找到网卡,点"高级",生成一个新的 MAC。二是 Linux 的machine-id和网卡配置文件里的 UUID 重复,/etc/machine-id抄一份原机的,NetworkManager 会把连接认成"别人的"。

顺带提一句,克隆之后网卡名字也可能变,原来是ens33,新机器变成ens34,而你改的还是旧的配置文件,自然不生效。用ip addr确认实际名字,再对照配置文件检查一遍。

3.6 症状六:Linux 侧 network 服务与管理器打架

这条是 CentOS 7 到 8 过渡期的经典坑。系统里同时存在老的network服务和新的NetworkManager,两个都想管网卡,结果就是配置改了不生效,或者重启后回到 DHCP。判断方法是systemctl status NetworkManager和systemctl status network都看一眼,哪个是 active 的。RHEL 8 之后统一用 NetworkManager,network服务已经废弃,就别再systemctl restart network了,改用:

nmcli connection reload nmcli connection up ens33

4. 手工配置静态 IP:一条可以抄作业的完整流程

动态地址在学习阶段够用,但只要你做服务端开发、搭建集群、跑数据库主从,静态 IP 就是刚需。这一节给一套完整的、跨发行版都能用的配置流程。

4.1 先摸清楚网段、网关、DNS 三个参数

配置之前必须搞清楚三件事:你这台虚拟机在哪个网段、网关地址是多少、用什么 DNS。前两个参数从虚拟网络编辑器里拿——打开编辑器选中 VMnet8,能看到子网 IP 和子网掩码,网关一般是子网里的第二个可用地址。举个例子,子网是192.168.138.0,掩码255.255.255.0,那可用地址是192.168.138.1到192.168.138.254,其中.1给宿主机的虚拟网卡、.2给虚拟网关,DHCP 池默认从.128起。你的静态 IP 就选在.3到.127之间,避开 DHCP 池,防止哪天 DHCP 把地址分给别人造成冲突。

DNS 用公共的就够,223.5.5.5和119.29.29.29这两个我用得最多,国内解析速度和稳定性都不错。参数定好,写进配置就行。

4.2 Ubuntu 24.04 与 CentOS 的配置差异

Ubuntu 从 18.04 开始用 netplan,配置文件在/etc/netplan/下,文件名各版本略有不同。Ubuntu 24.04 桌面版默认渲染器换成了 NetworkManager,服务器版还是 systemd-networkd,看文件里的renderer字段就知道。一个静态 IP 的 netplan 配置长这样:

network: version: 2 renderer: networkd ethernets: ens33: dhcp4: false addresses: - 192.168.138.150/24 routes: - to: default via: 192.168.138.2 nameservers: addresses: [223.5.5.5, 119.29.29.29]

YAML 对缩进极其敏感,必须用空格不能用 Tab,缩进错了netplan apply会直接报错。这点我吃过亏,从别处复制配置的时候经常混进 Tab,排查半天。

CentOS 7 走的是/etc/sysconfig/network-scripts/ifcfg-ens33,关键字段如下:

TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.138.150 NETMASK=255.255.255.0 GATEWAY=192.168.138.2 DNS1=223.5.5.5

ONBOOT=yes这一行特别重要,装系统时默认可能是no,意思是开机不激活网卡,很多人装完发现没网就是这个问题。CentOS 8 之后推荐用 nmcli,一条命令搞定:

nmcli connection modify ens33 \ ipv4.addresses 192.168.138.150/24 \ ipv4.gateway 192.168.138.2 \ ipv4.dns "223.5.5.5 119.29.29.29" \ ipv4.method manual nmcli connection up ens33

4.3 改完不生效?配置文件与服务的正确重载顺序

改完配置就reboot是最笨也最稳的做法,但效率低。正确的重载顺序是:先校验配置语法,再应用,最后验证。Ubuntu 是netplan try或netplan apply,netplan try会在 120 秒内自动回滚,适合远程操作时防止把自己关在门外。CentOS 7 是systemctl restart network,CentOS 8+ 是nmcli connection reload加nmcli connection up。

验证顺序也别乱:先ip addr看地址有没有上去,再ip route看默认路由在不在,然后ping网关,最后ping外网域名。哪一步断掉就针对哪一步查,比无头苍蝇式地重启强太多。

提示:改网络配置之前,如果你是通过 SSH 连的虚拟机,建议先开一个本地控制台窗口备用。配置写错导致断线、又只能靠 SSH 恢复,那场面相当难受。

5. 环境层面的坑:虚拟化平台、驱动与系统设置

有些"连不上网"根本不是网络配置的问题,而是宿主环境出了状况。这一节讲三类在物理层和系统层埋雷的情况。

5.1 Windows 虚拟化组件与 Hyper-V 抢占资源

在 Windows 上开了 Hyper-V、WSL2 或者容器相关的功能之后,系统会启用一个叫 Hyper-V 虚拟化平台的东西,它和 VMware 抢 CPU 的硬件虚拟化指令。表现是虚拟机跑得特别慢,网络时断时续,甚至开不了机。老版本 VMware 会直接报"此平台不支持虚拟化的 Intel VT-x/EPT"。从 VMware Workstation 15.5 开始已经能跟 Hyper-V 共存,但性能会有折扣。

如果你遇到了虚拟机莫名卡顿加网络异常,可以检查"启用或关闭 Windows 功能"里的 Hyper-V、虚拟机平台、Windows 虚拟机监控程序平台这几个选项。真需要 VMware 全速跑,就把它们关掉重启;真需要 WSL2,那就升级到较新的 VMware 版本,接受性能折损。顺便说,BIOS 里的 VT-x / AMD-V 开关必须打开,不然所有虚拟化软件都用不了,这个是最底层的前提。

5.2 虚拟网卡驱动异常与重置网络堆栈

设备管理器里如果VMware Virtual Ethernet Adapter for VMnet1/VMnet8带感叹号,说明驱动装歪了或者被其他软件顶掉了。最直接的办法是卸载设备并勾选"删除驱动程序软件",然后重装一遍 VMware Workstation,它会重新注册虚拟网卡和协议绑定。装完之后在宿主网卡的属性里,应该能看到VMware Bridge Protocol这一项被勾上,如果被安全软件取消勾选,桥接模式就用不了。

另一个隐藏问题是网卡绑定的顺序。Windows 上如果有多块物理网卡(有线加无线),桥接模式可能绑到了错误的网卡上,虚拟机发了包却从那个没连网的网卡出去了。这种情况在虚拟网络编辑器的"桥接"设置里,把"自动"改成手动指定你实际在用的那块物理网卡就行。

5.3 WSL2 与虚拟机并存的注意事项

现在不少人电脑上既有 VMware 虚拟机,又开了 WSL2 当开发环境。这两者共用底层的虚拟化能力,偶尔会出现资源争抢导致虚拟机的虚拟网卡异常。我遇到过的具体表现是:WSL2 开着的状态下,VMware 的 NAT 服务偶尔挂掉,虚拟机上不了网;关掉 WSL2 里的发行版重启 VM 服务就恢复正常。

还有一点是端口占用。WSL2 会做本地端口转发,如果宿主上已经监听了某个端口,你想在虚拟机里跑同样端口的服务,就会冲突。排查方式很简单,宿主上用netstat -ano | findstr 端口号看谁在占,找到进程再决定停谁。

6. 常见问题速查表与避坑心得

前面讲的都是按类别展开,这一节把最常见的问题压缩成一张速查表,出问题的时候可以照着表格直接对号入座,省去翻长文的时间。

6.1 故障现象与解决路径速查表

现象高概率原因首选解决动作
虚拟机上不了任何网VMware DHCP/NAT 服务未运行服务面板启动两个服务并设为自动
虚拟机上不了任何网忘记选模式,设成了仅主机改回 NAT 或桥接
网卡带黄色感叹号VMnet8 虚拟网卡异常虚拟网络编辑器还原默认设置
网卡在但地址是 169.254.x.x没能从 DHCP 拿到地址释放并重新获取,或查宿主虚拟网卡
能 ping IP 不能 ping 域名DNS 配置问题检查 resolv.conf 与 netplan/NM 配置
宿主访问不了虚拟机服务服务只监听回环或防火墙拦截改监听 0.0.0.0,放行端口
局域网其他机器访问不了NAT 模式的天然限制切桥接或配置端口转发
克隆后网络不通MAC 地址或 UUID 冲突重新生成 MAC,清理 machine-id
配置改了不生效改错文件或服务没重载按发行版对应的重载命令执行
时通时断NAT 网段与物理局域网冲突修改 VMnet8 子网网段

这张表里每一条我都在真实环境里验证过,遇到问题时按行找就行。表格的价值在于它逼你先判断现象,而不是直接冲进去改配置。

6.2 我踩过的几个坑

第一个坑是"过度修改"。有一次虚拟机断网,我从 DNS 改到路由表,折腾两个多小时,最后发现问题出在宿主的安全软件把 VMware 服务禁用了。从此我养成了一个习惯:任何网络问题,先花一分钟看宿主的服务状态和虚拟网卡状态,这一步的性价比高得离谱。

第二个坑是"还原默认设置太随意"。虚拟网络编辑器的还原按钮确实好用,但它清空一切自定义配置。后来我改成了先截图备份配置,再动手。同理,改网络配置文件之前先cp一份,出问题能快速回滚,这比凭记忆重写配置可靠得多。

第三个坑是"忽略虚拟机的资源分配"。虚拟机内存给得太小,系统在内存压力下会杀掉网络相关的后台进程,表现出来也是断网,但你怎么查网络配置都是对的。后来我给虚拟机分配内存时至少留 2GB 余量,这类诡异问题就很少出现了。

第四个坑是"快照恢复后的网络残留"。从快照恢复虚拟机时,网卡状态可能停留在快照那一刻,DHCP 租约已经过期而系统还不知道。恢复快照后手动触发一次续租,或者干脆重启虚拟机,能避免很多莫名其妙的"断网"。

如果看到这里你手上的问题还没解决,我的建议是回到第 1 节的那张三层排查表,老老实实从网关、公网 IP、域名这三步重新走一遍。虚拟机网络排查最忌讳的就是跳步,每一步的结论都是下一步的前提,顺序对了,问题基本跑不掉。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询