1. 先搞清楚三种网络模式到底在干什么
很多人装完 VMware 之后,虚拟机里 ping 不通外网、宿主机 ping 不通虚拟机、虚拟机之间互相也 ping 不通,第一反应就是“网络坏了”。其实十有八九不是坏了,而是你根本没搞清楚 VMware 这三种网络模式各自在干什么。我见过太多人在这上面卡了一整天,最后发现只是选错了模式。
先把最核心的认知建立起来:VMware Workstation 的三种网络模式,本质上是三套不同的“虚拟网络拓扑”。你选哪种模式,就等于把虚拟机接入了哪种“虚拟交换机”,而这个虚拟交换机怎么跟你的物理网卡、宿主机、外网打交道,三种模式完全不同。
- NAT 模式:虚拟机躲在一个虚拟路由器后面,通过宿主机上网。虚拟机可以访问外网,但外网默认访问不到虚拟机。
- 桥接模式:虚拟机直接“搭”在物理网卡上,跟宿主机平起平坐,在局域网里拥有独立 IP,外网也能直接访问它。
- 仅主机模式:虚拟机只跟宿主机通信,完全隔离在一个封闭的小网络里,上不了外网。
这三句话看起来简单,但真正出问题的时候,症状往往很迷惑。比如 NAT 模式下虚拟机 ping 不通宿主机,桥接模式下虚拟机拿不到 IP,仅主机模式下宿主机 ping 不通虚拟机。每一种症状背后都有一串可能的原因,而排查的关键在于:你要先确认虚拟机的网络链路到底断在哪一段。
我一般的排查顺序是这样的:先看虚拟机网卡有没有识别到、有没有拿到 IP,再看虚拟交换机(VMnet)的配置对不对,然后看宿主机这边的虚拟网卡状态,最后才去查防火墙和路由。这个顺序很重要,因为如果你一上来就怀疑防火墙,很可能把时间浪费在一个根本不是问题的地方。
下面这张表可以先帮你快速定位方向:
| 模式 | 虚拟机能否上外网 | 宿主机能否 ping 通虚拟机 | 局域网其他机器能否 ping 通虚拟机 | 典型用途 |
|---|---|---|---|---|
| NAT | 能 | 通常能 | 不能 | 日常上网、测试 |
| 桥接 | 能 | 能 | 能 | 服务器模拟、对外提供服务 |
| 仅主机 | 不能 | 能 | 不能 | 隔离实验、内网测试 |
注意:这张表是“默认配置下”的典型情况,实际能不能通,还取决于你有没有手动改过 VMnet 配置、宿主机防火墙有没有放行、物理网络有没有做端口隔离。
2. NAT 模式 ping 不通的排查思路
NAT 模式是大多数人装完虚拟机后的默认选择,因为它最省事——虚拟机自动获取一个内网 IP,通过宿主机 NAT 转发上网,不需要你手动配什么。但省事不代表不出问题,NAT 模式下的 ping 不通,通常集中在几个固定的点上。
2.1 先确认虚拟机有没有拿到 IP
这是最基础的一步,但也是最容易被跳过的一步。很多人一上来就 ping 外网,结果虚拟机压根没拿到 IP,ping 什么都是白搭。
在 Linux 虚拟机里执行:
ip addr show或者老一点的系统用:
ifconfig你要看的是虚拟网卡(通常是 ens33、eth0 之类)有没有 inet 地址。如果只有 lo 回环地址,说明网卡没拿到 IP。这时候先检查虚拟机里的网络服务有没有起来:
systemctl status NetworkManager如果是 Ubuntu Server 版本,可能用的是 netplan:
cat /etc/netplan/*.yaml确认配置里写的是 dhcp4: true。如果配置没问题但就是拿不到 IP,那问题大概率出在 VMware 的 DHCP 服务上。
2.2 检查 VMware DHCP 和 NAT 服务有没有启动
这是 NAT 模式最经典的坑。VMware Workstation 在 Windows 宿主机上会安装两个服务:VMware DHCP Service和VMware NAT Service。这两个服务如果没启动,NAT 模式基本就是废的。
在 Windows 宿主机上按 Win+R,输入 services.msc,找到这两个服务,确认状态是“正在运行”。如果没运行,手动启动,并且把启动类型改成“自动”。
我遇到过好几次,用户说“昨天还好好的,今天就不行了”,一问就是 Windows 更新之后这两个服务被禁用了。所以如果你用的是 Windows 宿主机,这个点一定要优先排查。
2.3 确认 VMnet8 的配置是否正确
NAT 模式对应的是 VMnet8 这个虚拟网络。在 VMware Workstation 里点“编辑”->“虚拟网络编辑器”,选中 VMnet8,看一下几个关键配置:
- 子网 IP:通常是 192.168.x.0,比如 192.168.100.0
- 子网掩码:255.255.255.0
- NAT 设置:网关地址通常是 192.168.x.2
- DHCP 设置:分配的地址范围通常是 192.168.x.128 到 192.168.x.254
如果虚拟机的 IP 不在这个网段里,那肯定 ping 不通。比如虚拟机拿的是 169.254.x.x 这种地址,说明 DHCP 没拿到,系统自动分配了一个链路本地地址,这种情况下什么都通不了。
2.4 宿主机 ping 不通虚拟机的特殊情况
NAT 模式下,宿主机 ping 虚拟机通常是能通的,因为宿主机上有一个 VMnet8 的虚拟网卡,IP 通常是 192.168.x.1。但有时候你会发现宿主机 ping 不通虚拟机,原因可能是:
- 宿主机防火墙拦截了 ICMP:Windows 防火墙默认可能不允许来自 VMnet8 网段的 ICMP 请求。你可以临时关闭防火墙测试一下,如果关了就能通,那就是防火墙规则的问题。
- 虚拟机防火墙拦截了 ICMP:Linux 虚拟机的 firewalld 或 iptables 可能默认不允许 ping。可以临时放行:
# CentOS/RHEL 系 firewall-cmd --add-icmp-block-inversion --permanent firewall-cmd --reload # 或者直接临时关闭 systemctl stop firewalld- 虚拟机网卡没有正确连接到 VMnet8:在虚拟机设置里,网络适配器要选“自定义:特定虚拟网络”,然后选 VMnet8。如果选的是“仅主机模式”或者别的,那自然不通。
2.5 NAT 模式下 ping 外网域名不通但 ping IP 通
这个症状很典型:ping 8.8.8.8 能通,但 ping www.baidu.com 不通。这说明网络链路是通的,问题出在 DNS 解析上。
检查虚拟机的 DNS 配置:
cat /etc/resolv.conf如果里面没有 nameserver,或者 nameserver 指向了一个不可用的地址,那就手动加一个:
nameserver 114.114.114.114 nameserver 8.8.8.8但要注意,/etc/resolv.conf 在某些系统上重启后会被覆盖。如果是 NetworkManager 管理的系统,应该在网卡配置里加 DNS:
nmcli con mod ens33 ipv4.dns "114.114.114.114 8.8.8.8" nmcli con up ens33实操心得:NAT 模式下 DNS 问题非常常见,尤其是你换了网络环境之后。我一般会在虚拟机里直接写死两个公共 DNS,省得每次换网络都要排查一遍。
3. 桥接模式 ping 不通的排查思路
桥接模式是三种模式里最“真实”的一种,虚拟机就像局域网里的一台独立机器,有自己的 IP,能被其他机器访问。但正因为如此,它受物理网络环境的影响也最大,出问题的概率反而比 NAT 模式高。
3.1 桥接模式的核心原理
桥接模式下,VMware 会在宿主机上创建一个虚拟网桥,把虚拟机的网卡“桥接”到宿主机的物理网卡上。虚拟机的网络流量会直接走物理网卡出去,跟宿主机在同一个二层网络里。
这意味着:虚拟机的 IP 必须跟宿主机在同一个网段,否则就不通。比如宿主机是 192.168.1.100,那虚拟机也得是 192.168.1.x。如果虚拟机拿的是 192.168.100.x,那肯定 ping 不通。
3.2 桥接模式最常见的坑:桥接到了错误的网卡
这是桥接模式第一大坑,没有之一。现在的笔记本往往有多个网络接口:有线网卡、无线网卡、蓝牙网络、虚拟网卡等等。VMware 默认的桥接设置是“自动”,它会自己选一个物理网卡来桥接。但它的选择逻辑有时候很迷,可能桥接到一个根本没连网的网卡上。
解决办法:在“虚拟网络编辑器”里,选中 VMnet0(桥接模式对应的虚拟网络),把“桥接到”从“自动”改成你实际在用的那块物理网卡。比如你用的是 Wi-Fi,就选无线网卡;用的是有线,就选有线网卡。
注意:如果你用的是 Wi-Fi,有些无线网卡驱动不支持桥接模式,或者桥接后不稳定。这种情况下,NAT 模式反而是更稳妥的选择。
3.3 虚拟机拿不到 IP 怎么办
桥接模式下,虚拟机通常也是通过 DHCP 获取 IP。如果物理网络里有 DHCP 服务器(比如路由器),虚拟机应该能拿到一个跟宿主机同网段的 IP。但如果拿不到,可能的原因有:
- 物理网络的 DHCP 地址池满了:这种情况在小路由器上偶尔会遇到,重启路由器或者手动给虚拟机配静态 IP。
- 桥接到了错误的网卡:上面已经说了,检查桥接设置。
- 物理网络做了 MAC 地址过滤:有些企业网络会限制未注册的 MAC 地址接入,虚拟机的 MAC 地址不在白名单里,自然拿不到 IP。
- 无线网络的客户端隔离:有些 Wi-Fi 开启了 AP 隔离,设备之间不能互相通信,虚拟机虽然连上了,但拿不到 IP。
手动配静态 IP 的方法(以 Ubuntu 为例):
# 编辑 netplan 配置 sudo vim /etc/netplan/01-netcfg.yaml内容改成:
network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.1.200/24 gateway4: 192.168.1.1 nameservers: addresses: [114.114.114.114, 8.8.8.8]然后执行:
sudo netplan apply3.4 宿主机能 ping 通虚拟机,但虚拟机 ping 不通宿主机
这个症状说明虚拟机的网络链路是通的,但宿主机的防火墙可能拦了 ICMP。Windows 防火墙默认会阻止来自其他网段的 ping 请求。你可以这样检查:
在 Windows 宿主机上打开“高级安全 Windows Defender 防火墙”,找到“入站规则”,启用“文件和打印机共享(回显请求 - ICMPv4-In)”这条规则。或者临时关闭防火墙测试。
如果关了防火墙就能通,那就说明是防火墙问题,你可以针对 VMnet0 网段单独放行,而不用整个关掉防火墙。
3.5 桥接模式下虚拟机之间 ping 不通
如果你有多台虚拟机都用了桥接模式,它们应该像局域网里的独立机器一样能互相通信。如果 ping 不通,检查:
- 两台虚拟机的 IP 是否在同一网段
- 两台虚拟机的防火墙是否放行了 ICMP
- 物理网络是否做了端口隔离(有些交换机默认开启端口隔离,同一交换机下的设备不能互通)
4. 仅主机模式 ping 不通的排查思路
仅主机模式是最“封闭”的一种模式,虚拟机只能跟宿主机通信,不能上外网。很多人用仅主机模式来做隔离实验,比如测试病毒样本、搭建内网靶场。但正因为封闭,它的配置也最容易出问题。
4.1 仅主机模式的核心配置
仅主机模式对应的是 VMnet1 这个虚拟网络。在“虚拟网络编辑器”里,你可以看到 VMnet1 的配置:
- 子网 IP:通常是 192.168.x.0
- 子网掩码:255.255.255.0
- DHCP 设置:是否启用 DHCP
关键点:宿主机上会有一个 VMnet1 的虚拟网卡,IP 通常是 192.168.x.1。虚拟机的 IP 必须在这个网段里,才能跟宿主机通信。
4.2 宿主机 ping 不通虚拟机的常见原因
- VMnet1 虚拟网卡被禁用了:在 Windows 的“网络连接”里,找到 VMware Network Adapter VMnet1,确认它是启用状态。有时候系统更新或者网络重置会把它禁用。
- 虚拟机的 IP 不在 VMnet1 网段:如果虚拟机手动配了一个别的网段的 IP,那肯定不通。
- DHCP 没有启用:如果 VMnet1 的 DHCP 没启用,虚拟机又设的是自动获取,那就拿不到 IP。要么启用 DHCP,要么手动配静态 IP。
- 防火墙拦截:跟前面一样,检查宿主机和虚拟机的防火墙。
4.3 仅主机模式下虚拟机 ping 不通宿主机
反过来,如果虚拟机 ping 不通宿主机,除了防火墙之外,还要检查宿主机的 VMnet1 网卡有没有 IP。有时候 VMnet1 网卡虽然启用了,但没有分配到 IP,这时候宿主机自己都不知道自己的地址,虚拟机自然 ping 不通。
可以在宿主机上执行:
ipconfig找到 VMnet1 的适配器,看它的 IPv4 地址是不是 192.168.x.1。如果不是,可以在“虚拟网络编辑器”里点“还原默认设置”,让 VMware 重新配置。
4.4 仅主机模式下想上外网怎么办
仅主机模式默认不能上外网,但如果你确实需要,可以在宿主机上做网络共享。Windows 下可以这样操作:
- 打开“网络连接”,找到你用来上网的物理网卡
- 右键 -> 属性 -> 共享
- 勾选“允许其他网络用户通过此计算机的 Internet 连接来连接”
- 在下拉框里选择 VMnet1
这样虚拟机就能通过宿主机的网络共享上外网了。但要注意,这种方式下虚拟机的网关要指向 VMnet1 的宿主机 IP(192.168.x.1),DNS 也要手动配。
5. 通用排查工具和命令速查
不管哪种模式,排查网络问题的基本工具和命令都是通用的。这一节我整理了一份速查表,你可以直接抄作业。
5.1 虚拟机内部排查命令
| 命令 | 作用 | 关键看什么 |
|---|---|---|
ip addr | 查看网卡和 IP | 网卡有没有 UP,有没有 inet 地址 |
ip route | 查看路由表 | 默认网关是否正确 |
ping 网关IP | 测试到网关的连通性 | 通不通 |
ping 8.8.8.8 | 测试外网 IP 连通性 | 通不通 |
ping www.baidu.com | 测试 DNS 解析 | 通不通 |
cat /etc/resolv.conf | 查看 DNS 配置 | 有没有 nameserver |
systemctl status NetworkManager | 查看网络服务状态 | 是否 running |
nmcli con show | 查看连接配置 | 网卡是否 connected |
5.2 宿主机排查命令(Windows)
| 命令 | 作用 |
|---|---|
ipconfig /all | 查看所有网卡配置,包括 VMnet1 和 VMnet8 |
ping 虚拟机IP | 测试到虚拟机的连通性 |
arp -a | 查看 ARP 表,确认虚拟机 MAC 是否解析 |
route print | 查看路由表 |
services.msc | 查看 VMware 相关服务状态 |
5.3 宿主机排查命令(Linux)
| 命令 | 作用 |
|---|---|
ip addr | 查看 VMnet1/VMnet8 网卡状态 |
brctl show | 查看网桥配置(桥接模式) |
iptables -L -n | 查看防火墙规则 |
systemctl status vmware | 查看 VMware 服务状态 |
6. 那些年我踩过的坑和独家经验
这一节不讲理论,只讲实战中遇到的真实问题和解决办法。有些坑你可能正在踩,有些坑你迟早会踩。
6.1 虚拟机克隆后网络不通
这是超级常见的坑。你装好一台虚拟机,配置好网络,然后克隆了一台新的。结果新虚拟机网络不通,或者 IP 跟原来那台冲突。
原因:克隆的时候,VMware 会保留原来的 MAC 地址,导致两台虚拟机 MAC 地址相同。在同一个网络里,MAC 地址冲突会导致网络异常。
解决办法:克隆完成后,在虚拟机设置里,找到网络适配器,点“高级”,然后点“生成”一个新的 MAC 地址。或者在虚拟机里手动改 MAC 地址。
6.2 换了网络环境后 NAT 模式不通
你带着笔记本从公司回到家,NAT 模式的虚拟机突然上不了网了。这是因为公司的网络网段和家里的不一样,VMware 的 NAT 配置可能还停留在原来的网段。
解决办法:在“虚拟网络编辑器”里点“还原默认设置”,让 VMware 重新根据当前网络环境生成配置。或者手动改 VMnet8 的子网 IP,改成跟当前网络不冲突的网段。
6.3 桥接模式在 Wi-Fi 下不稳定
前面提过,有些无线网卡对桥接模式支持不好。表现是:有时候能通,有时候不通;或者速度很慢。如果你遇到这种情况,别折腾了,直接用 NAT 模式。NAT 模式在 Wi-Fi 下稳定得多。
6.4 虚拟机 ping 不通但 SSH 能连
这个症状很迷惑:ping 不通,但 SSH 能连上。这说明网络是通的,只是 ICMP 被拦了。很多云服务器默认就是这样,只放行特定端口,不放行 ICMP。如果你在虚拟机里也遇到这种情况,检查防火墙规则,看看是不是只放行了 TCP 而没放行 ICMP。
6.5 仅主机模式下 DHCP 分配了错误网段的 IP
有时候 VMnet1 的 DHCP 配置被改过,分配了一个跟 VMnet1 子网不匹配的 IP。比如 VMnet1 是 192.168.100.0/24,但 DHCP 分配的是 192.168.200.x。这种情况下虚拟机肯定不通。
解决办法:在“虚拟网络编辑器”里检查 DHCP 设置,确保分配的地址范围在 VMnet1 的子网内。
6.6 虚拟机网卡显示“网络电缆被拔出”
这个提示通常出现在 Windows 虚拟机里。原因是虚拟机的网卡没有连接到任何虚拟网络。检查虚拟机设置里的网络适配器,确认勾选了“已连接”和“启动时连接”,并且选对了网络模式。
7. 一套完整的排查流程
最后,我把整个排查流程串起来,给你一套可以直接照着走的步骤。不管你遇到的是哪种模式的问题,都可以按这个流程来。
7.1 第一步:确认虚拟机网卡状态
在虚拟机里执行ip addr,确认网卡是 UP 状态,并且有 IP 地址。如果没有 IP,先解决 IP 问题。
7.2 第二步:确认网络模式
在虚拟机设置里确认网络适配器选的是哪种模式。然后确认对应的 VMnet 配置是否正确。
7.3 第三步:测试到网关的连通性
在虚拟机里 ping 网关。NAT 模式的网关通常是 192.168.x.2,桥接模式的网关是物理网络的网关,仅主机模式的网关是 192.168.x.1。如果 ping 不通网关,说明虚拟机和虚拟网络之间的链路有问题。
7.4 第四步:测试到外网的连通性
ping 8.8.8.8。如果通,说明网络链路没问题,问题在 DNS。如果不通,说明 NAT 转发或者路由有问题。
7.5 第五步:测试 DNS 解析
ping www.baidu.com。如果不通但 ping 8.8.8.8 通,那就是 DNS 问题,检查 /etc/resolv.conf。
7.6 第六步:检查宿主机侧
在宿主机上 ping 虚拟机的 IP。如果不通,检查宿主机的虚拟网卡状态、防火墙规则、VMware 服务状态。
7.7 第七步:检查物理网络
如果是桥接模式,检查物理网络有没有做 MAC 过滤、端口隔离、DHCP 限制等。
这套流程走下来,基本上 90% 的网络问题都能定位到。剩下的 10% 可能是驱动问题、系统 bug 或者硬件兼容性问题,那就需要具体问题具体分析了。
我个人在实际操作中的体会是:网络排查最忌讳的就是瞎猜。不要一上来就怀疑防火墙,也不要一上来就重装 VMware。按照链路一层一层往下查,从虚拟机内部到虚拟网络,再到宿主机,最后到物理网络,每一步都有明确的检查点。这样排查效率最高,也最不容易漏掉问题。
另外再分享一个小技巧:如果你实在搞不定某种模式,不妨换一种模式试试。比如 NAT 模式搞了半天不通,换成桥接模式可能五分钟就通了。反过来也一样。三种模式总有一种能适合你当前的网络环境,没必要在一棵树上吊死。