news 2026/10/1 1:31:35

虚拟机连不上网:网络模式、主机服务与DNS三层排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
虚拟机连不上网:网络模式、主机服务与DNS三层排查

上周帮同事处理一台连不上网的虚拟机,他从上午折腾到下午,改了静态 IP、重置了网卡、重装了一遍系统,问题还在。我接手后先没碰虚拟机,而是在主机上敲了两条命令,八分钟后定位到原因——主机侧一个网络相关服务被安全软件顺手关掉了。这件事让我又一次确认:虚拟机连不上网,绝大多数时候不是虚拟机自己的问题,而是网络模式、主机服务、虚拟机内部配置这三层里某一层断了。盯着虚拟机内部反复改 IP,是最典型的白忙。

这篇内容就是把我这些年处理"虚拟机连不上网"的几种常见情形、对应的解决方法,以及排查顺序完整写出来。涉及 VMware Workstation、VirtualBox 这类主流虚拟化软件,也涉及 Linux 和 Windows 两类客户机的具体配置。不管你是刚装完虚拟机发现没网的新手,还是遇到过"昨天还好今天就不通"的老手,都能在里面找到能直接抄的步骤。我尽量把每一步的"为什么"讲清楚,因为只有知道原理,下次遇到变形的问题你才能自己判断,而不是挨个试。

1. 先把"虚拟机没网"拆成三层:模式、服务、系统内部

很多人处理这个问题的第一反应是打开虚拟机里的网络设置,看一眼 IP 是不是169.254.x.x,然后手动填一个静态地址。这个动作本身没错,但它跳过了前两层排查,成功率大概只有三成。我把整个链路分成三层来看,效率会高很多。

1.1 三层各自的职责边界

第一层是网络模式,也就是虚拟机网卡被接到了哪个虚拟交换机上。桥接、NAT、仅主机这三种模式决定了虚拟机的数据包往哪走,模式选错的话,虚拟机内部再怎么配都出不去。

第二层是主机侧的虚拟网络组件,包括虚拟网卡(VMnet1、VMnet8 这类)、DHCP 服务、NAT 服务、虚拟网络编辑器里的网段设置。这一层是 Windows 主机上出问题最多的地方,因为它牵扯到系统服务、驱动、防火墙、甚至其他虚拟化软件的抢占。

第三层才是客户机系统内部的配置,IP 地址、网关、DNS、网卡是否启用、网络管理服务是否在跑。

这三层是自上而下的依赖关系。上层不通,下层配置再完美也没用。我见过太多人在第三层反复折腾,其实问题在第一层——网卡模式被设成了"仅主机",那当然上不了外网。

1.2 十分钟定位法:四条命令判断断点在哪

我一般用下面这个顺序快速定位,全程不需要改任何配置,只是"看":

# 在虚拟机内执行,先看有没有拿到 IP ip addr # Linux ipconfig /all # Windows 客户机 # 看默认网关和路由 ip route # Linux route print # Windows 客户机 # 试探性连通性测试,分三跳 ping 223.5.5.5

配合主机侧执行:

# 主机上看虚拟网卡状态 ipconfig /all

判断逻辑很清晰:虚拟机里根本没有 IP 或者只有169.254.x.x,说明 DHCP 没拿到地址,问题大概率在主机侧的服务或模式设置;虚拟机有正常 IP、能 ping 通网关但出不去,说明模式没问题,卡在 NAT 或主机转发;能 ping 通 IP 但域名解析失败,那就是 DNS 的事,跟网络通不通是两码事。这三句话能砍掉八成的无效尝试。

注意:ping通不通只能作为参考,有些网络环境会屏蔽 ICMP 回包,ping 不通不代表真的没网。最终判断还是要看能不能打开网页、能不能下载文件。

2. 桥接、NAT、仅主机:虚拟机到底被放在了网络的什么位置

要判断模式选得对不对,得先知道这三种模式到底干了什么。我习惯用一个小区宽带做类比:桥接相当于物业给你家单独拉了一根线,桥接模式下虚拟机会从你所在局域网的路由器直接要一个 IP,它和你的主机是"平起平坐"的两台设备。

2.1 桥接模式的适用条件与常见误用

桥接模式下,虚拟机会出现在和主机同一个网段里,同一局域网的其他设备能直接访问它,它也能访问别人。这种模式适合做需要被外部访问的实验,比如搭一个给同事测试的服务。

但它有几个硬性前提:你所在的局域网必须允许新设备接入。很多公司网络和校园网做了 MAC 地址绑定或接入认证,桥接出去的虚拟机会被直接拒之门外,表现就是"虚拟机拿不到 IP"或者"拿到 IP 但什么都访问不了"。这时候不管你重装几次系统都没用,要么找网络管理员登记,要么换成 NAT 模式。

另一个高频误用是主机同时插着有线和无线网卡。桥接模式默认的"自动桥接"会从所有物理网卡里挑一个,挑到无线网卡的时候,很多无线网卡驱动并不支持桥接所需的混杂模式,结果就是虚拟机完全没网。这个问题我在第四章会详细拆。

2.2 NAT模式为什么是日常首选

NAT 模式下,主机相当于一个路由器,虚拟机的所有对外流量都会经过主机做一次地址转换,以主机自己的身份发出去。对外界来说,只能看到你的主机,看不到虚拟机。

这个模式的好处很直接:只要主机能上网,虚拟机就一定能上网,不依赖局域网放行,也不受 MAC 绑定限制。日常学习、跑环境、装软件,我一律建议先用 NAT 把系统跑通,把网络无关的坑先排掉。

代价也有:外网设备无法直接访问虚拟机,需要额外做端口转发才能暴露服务。但对于绝大多数"我要装个 Linux 学命令"的场景,这不是问题。

2.3 仅主机模式和自定义VMnet的边界

仅主机模式顾名思义,虚拟机和主机之间能互相通信,但虚拟机没有通往外部的出口。这个模式适合做隔离实验,比如测试网络攻击行为、观察病毒样本行为,不希望它碰到外网。它的典型症状就是——主机能 ping 通虚拟机,虚拟机 ping 不通任何外部地址。如果你在排查网络问题时发现自己不小心把模式设成了仅主机,那"故障"的原因就找到了,改回 NAT 即可。

自定义 VMnet 则是把一个虚拟网段手动指派给虚拟机,通常配合多台虚拟机搭内网拓扑用。它容易出的问题是网段冲突:如果你把某个 VMnet 的子网设成了192.168.1.0/24,而你主机所在的真实局域网也是192.168.1.x,路由表就会出现歧义,表现是时通时断。改掉虚拟网段是唯一的解法。

3. NAT模式连不上外网:从VMnet8到主机服务逐项检查

选定 NAT 之后还是不通,问题基本落在主机侧。这个章节按从易到难的顺序给你一条排查链路。

3.1 先确认VMnet8虚拟网卡是否正常存在

在 Windows 主机的命令提示符里执行ipconfig /all,往下翻找名字带"VMware Network Adapter VMnet8"的适配器。正常状态下它应该有一个类似192.168.x.1的地址,并且这个网段要和虚拟网络编辑器里 NAT 模式的子网一致。

如果这条适配器完全不存在,说明虚拟网卡驱动没装好或在某次系统更新后被剥离了。最快的方式是重新运行虚拟化软件的安装包,选择"修复"或者"更改",把虚拟网络驱动重新装一遍。装完之后最好重启一次主机,让驱动完整加载。

如果它存在但地址是169.254.x.x,说明它没能从自带的 DHCP 拿到地址——但注意,VMnet8 这个主机侧网卡通常是静态配置的,出现这种地址往往意味着服务没起来,接着往下看。

如果它带一个黄色感叹号,那就是驱动层面的问题了,见第六章。

3.2 主机服务被关掉:最隐蔽的一类故障

这是我最常遇到的坑,也是开头那位同事卡了一下午的原因。按Win + R输入services.msc,找到这两个服务:

服务名称作用缺失后的表现
VMware DHCP Service给虚拟机的 NAT 网段分配 IP虚拟机拿不到地址,卡在169.254.x.x
VMware NAT Service做地址转换和转发虚拟机有 IP、能 ping 通网关,但出不去外网

这两个服务的启动类型应该是"自动"。如果它们的状态是"已停止",右键启动;如果启动后又自动停,去看事件查看器里的错误日志,通常是软件冲突或者安装不完整。

需要特别提醒的是:某些安全软件、系统优化工具在做"一键加速"或者"开机优化"时,会把这类看起来"不常用"的服务禁用掉。如果你装过这类工具,装完之后虚拟机突然没网,先来这里看一眼,比什么都快。

3.3 用虚拟网络编辑器恢复默认设置

如果上面两项都正常还是不通,打开虚拟网络编辑器(在软件的"编辑"菜单里,需要管理员权限)。先点"更改设置"拿到写权限,然后选中 NAT 模式那一行,点"还原默认设置"。

这个操作会把所有 VMnet 的网段、DHCP 范围、NAT 规则重置成出厂状态,能解决掉绝大多数"配置被改乱"的问题。代价是自己定义过的端口转发规则会丢,如果你之前配过,先截图记下来。

恢复完成后,主机侧会重新生成 VMnet1 和 VMnet8 网卡,虚拟机内重启一次网络服务或者干脆重启虚拟机,一般就通了。

提示:如果还原默认设置后 VMware 相关的服务没有自动重启,手动去服务列表里启动一次,别急着判定"还原没用"。

4. 桥接模式上不了网:网卡选错、无线限制与地址冲突

桥接模式的问题比 NAT 更"看环境",因为它要跟你所在的真实网络打交道。下面三类是我遇到最多的。

4.1 自动桥接为什么会挑错网卡

现代主机的网络适配器数量远超想象:有线网卡、无线网卡、蓝牙网络适配器、各种虚拟网卡(包括其他虚拟化软件留下的)、某些外设自带的网络接口。桥接设置里的"自动"会把虚拟机桥接到"当前活动的物理网卡"上,但这个判断逻辑有时候会挑错。

结果是虚拟机看起来桥接出去了,但数据包走到了一个根本不通外网的接口上。解决办法很直接:在虚拟网络编辑器的"桥接到"选项里,把"自动"改成手动指定你那块真正在用的物理网卡。怎么确认是哪一块?在主机上执行ipconfig /all,看哪个适配器有正常的网关和能上网的 IP,那就是它。

同时建议把"自动"换成手动之后,顺手把那些用不到的适配器在桥接列表里排除掉,避免以后环境变化时又被挑错。

4.2 无线网卡桥接失败的原因和替代思路

无线网卡桥接是个老大难。桥接在技术上要求网卡能接收所有帧,而很多无线网卡的驱动和固件并不开放这个能力,尤其是消费级笔记本上的集成无线网卡。表现就是:桥接设置看起来正常,虚拟机却一张包都发不出去。

遇到这种情况,我给你三个可操作的替代方案:

  1. 改用 NAT。这是最省事的,只要主机能上网,虚拟机就能上网,完全绕开无线网卡的限制。
  2. 给主机插一根网线,用有线网卡做桥接。有线网卡基本都支持桥接所需的模式。
  3. 用主机做端口转发,在 NAT 模式下把虚拟机的服务端口映射出来,让局域网的其他设备能访问。虽然不如桥接直接,但功能上够用。

我自己的笔记本常年用方案一,需要给外部访问的时候就切到方案三,几年下来没出过问题。

4.3 局域网拒绝接入的几种表现

桥接之后虚拟机拿不到 IP,还有一类原因是所在网络做了限制。校园网和不少公司网络会做接入认证或者 MAC 白名单,虚拟机的虚拟 MAC 不在名单里,直接被交换机丢弃。还有一种情况是 DHCP 地址池已经满了,虚拟机的请求得不到响应。

这两种情况的区分方法是:把虚拟机的网卡模式改成 NAT,如果能上网,那基本可以确定是局域网侧的限制,而不是虚拟机自身的问题。确认之后,要么去申请登记这台设备的 MAC,要么就长期使用 NAT。

另外提醒一句:不要随便给桥接的虚拟机填一个静态 IP。如果你填的地址正好和局域网里某台设备重复,会引发 IP 冲突,轻则自己不通,重则影响别人的正常使用。需要静态地址的话,先在网关的 DHCP 分配记录里找一个不在池子里的地址。

5. 主机能上网、虚拟机IP也正常,却打不开网页

这一类故障特别有迷惑性:ping 223.5.5.5通,ping www.example.com不通,浏览器打不开任何页面。这不是网络不通,而是域名解析出了问题。

5.1 分清"网络不通"和"解析失败"

判断方法就一句话:直接用 IP 去连,能通就是 DNS 的问题。

ping 223.5.5.5 # 通,说明三层网络是好的 ping www.baidu.com # 不通,说明域名解析失败 cat /etc/resolv.conf # 看 DNS 配置是否为空或指向了不存在的地址

DNS 配置为空或者指向一个已经失效的地址,是这个问题的绝对主因。常见于克隆出来的虚拟机、手动配过静态 IP 之后忘记填 DNS、以及 DHCP 下发的 DNS 信息不完整这几种情况。

5.2 Linux客户机里DNS的持久化写法

Linux 这边有个坑:直接编辑/etc/resolv.conf很多时候是没用的,因为 NetworkManager 或者 netplan 会在下次网络事件时把它覆盖回去。正确的做法是从上层的网络配置入手。

对于使用 netplan 的新版发行版,编辑对应的配置文件(通常在/etc/netplan/下):

network: version: 2 ethernets: ens33: dhcp4: true dhcp4-overrides: use-dns: true nameservers: addresses: [223.5.5.5, 114.114.114.114]

写完之后执行:

sudo netplan apply

对于用 NetworkManager 管理的桌面版,可以用命令行改:

nmcli connection modify "有线连接 1" ipv4.dns "223.5.5.5 114.114.114.114" nmcli connection up "有线连接 1"

对于传统的 CentOS 系,编辑/etc/sysconfig/network-scripts/ifcfg-ens33,加上DNS1=223.5.5.5,然后重启网络服务。

5.3 Windows客户机的网关和DNS检查

Windows 虚拟机里,在"网络和共享中心"打开适配器属性,确认 IPv4 设置为自动获取,或者至少要保证"默认网关"和"首选 DNS 服务器"两栏有正确的值。常见错误是手动配 IP 时只填了地址和掩码,网关和 DNS 空着——这个配置下虚拟机能和同网段通信,但出不了门,也解析不了域名。

如果确认配置没问题还是解析失败,试试清一下缓存:

ipconfig /flushdns ipconfig /release ipconfig /renew

提示:如果ipconfig /renew报错说无法联系 DHCP 服务器,那就回到第三章,检查主机侧的 DHCP 服务。

6. 网卡"消失"了:适配器缺失、VMnet感叹号与虚拟化功能抢占

有一类故障不是"连不上网",而是"压根看不见网卡"。这种问题给人的心理冲击更大,因为它看起来像虚拟机坏了。

6.1 虚拟机里看不到网卡的三类情形

第一类是虚拟机配置里根本没加网络适配器。新建虚拟机时如果选了"不添加网络连接",后面进系统当然看不到网卡。解决办法是在虚拟机关机状态下,打开虚拟机设置,添加一个网络适配器,选好模式再开机。

第二类是网卡在系统里被禁用了。Linux 下用ip link能看到设备但状态是 DOWN,用ip link set ens33 up打开;Windows 下在"网络连接"界面里看适配器是不是灰的,右键启用。

第三类是驱动没有识别。这种在 Linux 里比较少见,Windows 客户机上偶尔会遇到,尤其在换过虚拟硬件版本之后。在设备管理器里看"其他设备"下面有没有带问号的以太网控制器,有的话重新安装一下虚拟机工具即可。

6.2 主机侧VMnet带感叹号怎么处理

主机侧ipconfig /all里看到 VMnet1 或 VMnet8 带感叹号,或者干脆不出现在列表里,说明虚拟网卡驱动出了问题。我常用的处理顺序是:

  1. 在设备管理器里找到对应网卡,右键卸载设备,勾选"删除此设备的驱动程序软件"。
  2. 打开虚拟网络编辑器,点"还原默认设置",让软件重新安装虚拟网卡。
  3. 如果还不行,用管理员权限运行虚拟化软件的安装包,选择修复安装。
  4. 重启主机。

这套流程走下来,九成以上的虚拟网卡异常都能解决。走不完的那一成,通常是杀毒软件的驱动拦截或者系统组件损坏,那就需要单独处理了。

6.3 其他虚拟化功能对网络的抢占

这个坑比较隐蔽,也很符合"刚装完某个东西虚拟机就没网了"的时间线。Windows 上启用 Hyper-V、Windows 沙盒、部分安卓模拟器所需的虚拟化平台之后,系统的网络栈会多出一层虚拟交换机。这层东西会和虚拟化软件自带的桥接机制打架,典型表现是NAT 还行,桥接彻底不通,或者虚拟网卡直接无法创建。

判断方法很直接:把 Hyper-V 关掉(在"启用或关闭 Windows 功能"里取消勾选,重启),如果虚拟机网络立刻恢复,那原因就确认了。如果确实需要同时使用,就长期用 NAT 模式,绕开桥接这条路径。

7. 克隆、快照与MAC地址:那些"昨天还好今天不通"的原因

有一类故障时间线特别诡异:昨天一切正常,今天开机就不通了,中间你什么都没改。这种情况我一般先怀疑下面三件事。

7.1 克隆之后MAC冲突与地址租约打架

虚拟机克隆时如果保留了原有的 MAC 地址,主机侧会出现两台设备用同一个 MAC 的情况。DHCP 服务会把同一个地址分给两台机器,结果两边都时通时断,或者干脆都拿不到地址。

解决办法是克隆完成后,在虚拟机设置的网络适配器里点一次"生成新的 MAC 地址",然后在客户机里重新获取一次 IP。这一步我养成了习惯动作,克隆完先做,能省掉后面很多莫名其妙的排查。

7.2 快照回滚把网络配置一起带回去了

快照会保存虚拟机的完整磁盘状态,包括当时的网络配置。如果你打过快照之后改过模式或网段,回滚快照会把这些改动一起撤销,于是虚拟机又回到了那个"没网"的旧状态。

发现这种情况时,别急着重新配,先检查虚拟网络管理器里的网段和快照时间点是否对得上。对不上就切回正确的模式,问题自然消失。

7.3 Linux下onboot=no和网络服务未托管的经典坑

传统 CentOS 系发行版安装完之后默认网卡是不启用的,配置文件里ONBOOT=no,表现就是系统装好了却永远没网。

# 编辑 /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=dhcp ONBOOT=yes

改完执行systemctl restart network(新版用nmcli)。

另一个坑是 NetworkManager 把某块网卡标记为"未托管",这种情况在手动改过配置文件的机器上常见。执行nmcli device status,如果看到网卡状态是unmanaged,把对应配置文件里的NM_CONTROLLED=yes加上,再重启服务即可。

8. 一套可复用的排查顺序

前面分了八类情形讲,实际处理的时候我更希望有一套固定的动作顺序,这样不会遗漏。下面这套流程我用了很多年,从主机侧往虚拟机侧推进,一般十分钟内能锁定问题。

8.1 主机侧先看的六件事

  1. 主机本身能不能上网,先排除网络出口的问题。
  2. ipconfig /all里 VMnet 网卡是否存在、地址是否合理、有没有感叹号。
  3. 服务列表里 DHCP 和 NAT 两个服务是否在运行。
  4. 虚拟网络编辑器里的网段是否和主机真实网段冲突。
  5. 桥接模式下是否错误地桥接到了无线网卡或其他非活动接口。
  6. 最近是否启用了其他虚拟化功能,或安装过安全软件、优化工具。

8.2 虚拟机内再看的五件事

  1. 网卡是否存在且处于启用状态。
  2. 是否拿到了正常网段的 IP,还是169.254.x.x。
  3. 默认网关是否正确。
  4. DNS 是否配置且可用。
  5. ONBOOT之类的开机自启选项是否打开。

下面这张表是我总结的"现象到原因"快速映射,实际排查时可以照着对:

现象最可能的原因优先动作
无 IP,仅169.254.x.xDHCP 服务未运行或模式错误查主机服务、确认 NAT 模式
有 IP,ping 不通网关网段冲突或桥接到了错误网卡检查虚拟网段、改用手动桥接
ping 通 IP,域名不通DNS 未配置或被覆盖修改 netplan 或 NetworkManager 配置
网卡在系统里看不见适配器未添加或被禁用添加/启用网卡
克隆后不通MAC 冲突重新生成 MAC 并重新获取 IP
启用 Hyper-V 后桥接失效虚拟化功能抢占关闭冲突功能或改用 NAT

9. 我踩过的几个坑和长期习惯

说几个实打实踩过的教训。有一次我为了图省事,给桥接的虚拟机直接填了静态 IP,正好撞上局域网里一台打印机,结果整层楼的人都打印不了,被同事念了半天。从那以后我给自己定了规矩:桥接模式下能自动获取就自动获取,非要静态也得先去路由器后台确认地址空闲。

还有一次是虚拟机网络时通时断,排查了两个小时,最后发现主机上装的一个网络加速类工具在接管流量,它会过滤掉虚拟网卡发出的包。卸载之后立刻恢复。这类工具装的时候都会说"优化网络体验",但对虚拟机来说就是隐形的墙,如果你遇到主机能上网、虚拟机就是不行而且查不出原因,可以往这个方向想想。

长期习惯方面,我现在给每台虚拟机建好之后都会做三件事:一是固定用 NAT 模式跑通基础环境,网络相关的坑能绕掉一大半;二是把虚拟网络编辑器里的网段截图存下来,将来多了几台虚拟机也不会打架;三是克隆完第一件事就是重新生成 MAC,再重新获取 IP。

我还习惯在装完系统之后先跑一遍连通性三步验证——ping 网关、ping 一个外部 IP、ping 一个域名。三步都通,说明三层网络、NAT 转发、DNS 全都正常,后面装什么软件、改什么配置心里都有底。如果哪一步不通,也能立刻知道是哪个环节出了问题,而不是等到装完一堆东西才发现网络不对劲,那时候排查成本就高多了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 1:31:35

source 并非全局生效:深入理解 /etc/profile 与环境变量传播

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 1:30:57

微信开源WeKnora:RAG知识库流水线深度解析与部署实践

最近微信团队的 GitHub 仓库里多了一个值得 AI 应用圈关注的开源项目——WeKnora。它不是又一个刷榜的大模型,而是把"从一堆文档到可被大模型检索的知识"这整条链路做成了开箱即用的服务。如果你折腾过 RAG,被 PDF 解析折磨过,或者…

作者头像 李华
网站建设 2026/10/1 1:30:44

PMX骨骼名称对照:MMD动作移植与骨骼映射实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 1:30:22

SharedArrayBuffer报错?跨域隔离COOP/COEP配置实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华