VMware 虚拟机网络不通是运维和开发人员遇到频率最高的问题之一:宿主机上网好好的,虚拟机里 ping 8.8.8.8 不通、拿不到 IP、或者能 ping 通网关但打不开网页。这类问题的难点在于数据链路跨了三层——虚拟机内的网卡配置、VMware 的虚拟网络层(vmnet / vSwitch)、以及宿主机的物理网络。任何一层断了都会表现为"网络不通",但排查方法完全不同。本文按"从虚拟机往外、从外往虚拟机"两个方向梳理一套完整的排查链路,覆盖 VMware Workstation / Fusion 的桥接与 NAT,以及 ESXi 的标准交换机 vSwitch。
一、先分清你用的是哪种网络模式
动手之前必须先确认虚拟机网卡挂在哪张虚拟网络上,否则后面所有排查都是盲目的。
| 模式 | Workstation 对应 | 工作原理 | 外部能否直接访问虚拟机 | 典型故障点 |
|---|---|---|---|---|
| 桥接 Bridged | vmnet0 | 虚拟机网卡通过虚拟网桥直接连到物理网卡,与宿主机同网段 | 能,虚拟机获得局域网独立 IP | 桥接到了错误的物理网卡(如桥到无线网卡但用了有线)、公司网络做了 MAC 绑定 |
| NAT | vmnet8(默认 192.168.x.0/24) | VMware 做地址转换,虚拟机共享宿主机 IP 出网 | 不能,需手工做端口转发 | NAT/DHCP 服务未启动、nat.conf 配置被改 |
| 仅主机 Host-only | vmnet1 | 只与宿主机通信,完全隔离外网 | 不能 | 被误当成能上网的模式使用 |
| ESXi 标准交换机 | vSwitch + Port Group | 虚拟机端口组绑定到上行链路 vmnic | 取决于 VLAN 与物理网络 | 上行链路未接、VLAN ID 配错、安全策略拒绝 |
判断方法很简单:看虚拟机 IP 段。NAT 模式下虚拟机通常是 192.168.xxx.xxx 且网关是 .2(VMware 约定网关为网段第二个地址);桥接模式下虚拟机 IP 与宿主机物理网卡在同一网段,网关是真实路由器。
二、虚拟机内部:先排除自身配置问题
不管外面怎样,先从虚拟机内部查起,这一步能排除掉一半的"假故障"。
# 1. 网卡是否有 IP、是否 UP ip addr show # 或传统命令 ifconfig -a # 2. 路由表是否存在默认网关 ip route show route -n # 3. DNS 是否配置 cat /etc/resolv.conf # 4. NetworkManager 是否接管了网卡 nmcli device status nmcli connection show # 5. 手动拉起连接(常见问题:ONBOOT=no 或 连接未激活) nmcli connection up ens33 # 或 ifup ens33 # 6. 重新申请 DHCP dhclient -r ens33 && dhclient -v ens33 # RHEL8+ 可用 nmcli connection modify ens33 ipv4.method auto && nmcli connection up ens33
分层测试的顺序很关键,它能精确定位断在哪一层:
ping 127.0.0.1—— 不通说明协议栈坏了(极罕见)。ping 网关IP—— 不通说明二层链路或 IP 配置有问题。ping 8.8.8.8—— 网关通但外网不通,说明是 NAT/路由/出口问题。ping www.baidu.com—— IP 通但域名不通,说明是 DNS 问题。curl -I https://www.baidu.com—— 域名通但业务不通,看应用层与端口。
如果虚拟机里 ip addr 显示网卡是 state DOWN,除了 NetworkManager 配置,还要检查 VMware 侧的两个开关:虚拟机设置里网卡的"已连接(Connected)"和"启动时连接(Connect at power on)"必须都勾上。这两个选项在迁移或复制虚拟机后经常被重置。
三、VMware Workstation / Fusion 侧排查(Linux 宿主机)
Workstation 在 Linux 上通过 vmnet 系列内核模块和几个后台服务实现虚拟网络。服务挂了、模块没加载、配置被改,都会导致网络全断。
# 1. 查看虚拟网络状态 sudo vmware-networks --status # 2. 完全重启虚拟网络(最常用的修复手段) sudo vmware-networks --stop sudo vmware-networks --start # 3. 查看宿主机上的虚拟网卡是否创建 ip addr show | grep -E 'vmnet|virbr' # 应能看到 vmnet1(host-only)、vmnet8(NAT) # 注意:vmnet0 是桥接,不会以独立网卡形式出现 # 4. 查看 NAT 与 DHCP 配置文件 ls -l /etc/vmware/vmnet8/nat/ cat /etc/vmware/vmnet8/nat/nat.conf cat /etc/vmware/vmnet8/dhcpd/dhcpd.conf # 5. 全局网络配置 cat /etc/vmware/networking # 6. 重启 VMware 全部服务(更彻底) sudo /etc/init.d/vmware restart # 或 systemd 环境 sudo systemctl restart vmware sudo systemctl restart vmware-workstation-server
如果 vmnet8 网卡压根不存在,通常是内核模块没编译或没加载。执行 sudo vmware-modconfig --console --install-all 重新编译模块,然后重启服务。内核升级后这一步几乎是必做的,也是"升级完系统 VMware 就上不了网"的标准答案。
3.1 桥接模式的特殊坑
桥接模式下虚拟机直接出现在局域网里,问题往往出在宿主机网络环境:
- 桥接到了错误的物理网卡。Virtual Network Editor 里 vmnet0 如果设为 "Automatic",在多网卡机器(有线 + 无线 + VPN 虚拟网卡)上极易桥错。应手工指定当前正在上网的那张物理网卡。
- 企业网络做了 802.1X 认证或 MAC 绑定。桥接后虚拟机是独立 MAC,交换机会直接拒绝,表现为获取到 IP 但无法通信。此时改用 NAT 模式是唯一选择。
- 无线网卡桥接限制。部分无线网卡不支持混杂模式,桥接会失败,这也是无线环境下推荐 NAT 的原因。
- IP 冲突。桥接后虚拟机占用了局域网里已分配给其他设备的 IP,表现为时通时断。
# 宿主机上确认桥接绑定关系 sudo vmware-netcfg # 图形化 Virtual Network Editor(Linux) # Windows 上为 vmnetcfg.exe,位于 VMware 安装目录 # 检查物理网卡是否处于 UP 且已联网 ip link show ip route show default # 抓包确认虚拟机流量有没有到达宿主机物理网卡 sudo tcpdump -i eth0 -nn 'icmp or port 67 or port 68'
四、VMware Workstation / Player(Windows 宿主机)排查
Windows 宿主机的问题集中在两个后台服务和一个网络重置。
:: 1. 检查并重启 VMware 网络服务(管理员权限 CMD) net start "VMware DHCP Service" net start "VMware NAT Service" sc query "VMware NAT Service" :: 2. 重置 Winsock 与 TCP/IP 栈(VPN 软件/安全软件常破坏这两项) netsh winsock reset netsh int ip reset :: 执行后必须重启 Windows :: 3. 查看 VMware 虚拟网卡状态 ipconfig /all :: 应看到 "VMware Network Adapter VMnet1" 与 "VMware Network Adapter VMnet8" :: 4. 若 VMnet1/VMnet8 缺失,在 Virtual Network Editor 里点 :: "还原默认设置(Restore Default)",会自动重建并重新分配网段 :: 5. 检查防火墙是否拦截了虚拟机流量 netsh advfirewall show allprofiles
特别注意:安装过 VPN 客户端、杀毒软件、或者做过系统大版本升级后,VMware 的虚拟网卡经常消失或驱动异常。"还原默认设置"是最省事的修复手段,代价是自定义网段和端口转发规则会被清空,需要重新配置。
4.1 NAT 端口转发配置
NAT 模式下外部无法直接访问虚拟机,如果要在宿主机上暴露虚拟机的 22 或 80 端口,需要手工加转发规则。Linux 宿主机编辑 /etc/vmware/vmnet8/nat/nat.conf,在 [incomingtcp] 段添加:
[incomingtcp] # 宿主机端口 = 虚拟机IP:端口 2222 = 192.168.100.128:22 8080 = 192.168.100.128:80 [incomingudp] # 按需添加 UDP 规则 # 修改后需重启虚拟网络生效 sudo vmware-networks --stop sudo vmware-networks --start
Windows 宿主机在 Virtual Network Editor 里选择 VMnet8 → NAT Settings → Add 添加同样的映射。
五、ESXi 环境:vSwitch 与端口组排查
ESXi 上的网络不通,排查对象是标准交换机(vSwitch)或分布式交换机(vDS)、端口组(Port Group)、上行链路(vmnic)和 VMkernel 网卡(vmk)。
# 1. 查看物理网卡(上行链路)状态 esxcli network nic list # 关注 Link Status: Up / Speed / Duplex # 2. 列出标准交换机 esxcli network vswitch standard list # 关注 Uplinks 是否包含预期 vmnic、MTU、Portgroup 数量 # 3. 列出端口组及其 VLAN esxcli network vswitch standard portgroup list # 关注 VLAN ID(0 表示不过滤,4095 表示 trunk 放行所有) # 4. 查看 VMkernel 接口(管理、vMotion、iSCSI 等) esxcli network ip interface list # 5. 查看虚拟机与网络的绑定关系 esxcli network vm list # 输出每个虚拟机的 World ID、端口组、MAC、上行链路 # 6. 从指定 VMkernel 接口 ping,验证管理网络连通性 vmkping -I vmk0 192.168.1.1 vmkping -I vmk0 -s 8972 192.168.1.1 # 大包测试 MTU( jumbo frame) # 7. 查看交换机端口统计,看是否有丢包/错包 esxcli network vswitch standard portgroup stats get -p "VM Network"
5.1 ESXi 常见故障点与修复命令
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 虚拟机全部断网 | vSwitch 上行链路 vmnic 全部 Down | 更换网线/端口,esxcli network nic list 确认 Link Up |
| 新虚拟机不通,老虚拟机正常 | 端口组选错或 VLAN ID 配错 | 核对端口组 VLAN 与交换机 trunk 放行 |
| 能 ping 通但大包丢 | MTU 不匹配(物理交换机未开 jumbo) | 统一 MTU,vmkping -s 8972 验证 |
| 混杂模式抓不到包 | vSwitch 安全策略默认拒绝混杂模式 | 在 vSwitch 安全策略中开启 Promiscuous Mode(注意安全风险) |
| 虚拟化嵌套环境不通 | 未开启 MAC 地址更改/伪传输 | 安全策略中开启 MAC Address Changes 与 Forged Transmits |
# 修改 vSwitch 安全策略(开启混杂模式、MAC 更改、伪传输)
esxcli network vswitch standard policy security set \
-v vSwitch0 --allow-promiscuous=true \
--allow-mac-change=true --allow-forged-transmit=true
# 新建端口组并指定 VLAN
esxcli network vswitch standard portgroup add -v vSwitch0 -p "Prod-VLAN100"
esxcli network vswitch standard portgroup set -p "Prod-VLAN100" -v 100
# 给 vSwitch 添加上行链路做冗余
esxcli network vswitch standard uplink add -v vSwitch0 -u vmnic1
# 查看上行链路绑定与故障切换顺序
esxcli network vswitch standard policy failover get -v vSwitch0
# 查看日志定位底层问题
tail -100 /var/log/vmkernel.log
grep -i 'link\|nic\|vmnic' /var/log/vmkernel.log | tail -50
六、标准化排查步骤清单
- 确认虚拟机的网络模式(桥接 / NAT / 仅主机 / 端口组)以及它对应的虚拟网络。
- 虚拟机内执行
ip addr与ip route,确认有 IP、网卡 UP、有默认网关。 - 按 127.0.0.1 → 网关 → 公网 IP → 域名 → 应用端口 的顺序分层测试,定位断点。
- 检查 VMware 侧开关:网卡"已连接"与"启动时连接"是否勾选。
- Workstation Linux:执行
vmware-networks --stop / --start,确认 vmnet1/vmnet8 存在。 - Workstation Windows:重启 VMware NAT/DHCP 服务,必要时
netsh winsock reset并重启。 - 桥接模式:确认 vmnet0 绑定到了正确的、正在联网的物理网卡。
- ESXi:
esxcli network nic list看链路,portgroup list看 VLAN,vmkping -I vmk0测连通。 - 宿主机抓包
tcpdump -i 物理网卡 'icmp or port 67',判断流量是否离开了宿主机。 - 仍不通则查看 VMware 日志(Linux
/var/log/、ESXi/var/log/vmkernel.log)并考虑还原默认网络设置。
小结
VMware 虚拟机网络不通的排查核心是分层定位,而不是反复重启。绝大多数问题可以归为四类:虚拟机内配置问题(IP/路由/DNS/网卡未激活)、VMware 虚拟网络层问题(服务未启动 / vmnet 缺失 / 桥接对象错误)、宿主机物理网络问题(网卡 Down、企业认证、IP 冲突)、以及 ESXi 交换机配置问题(上行链路、VLAN、MTU、安全策略)。按上面十条清单从内到外走一遍,通常五分钟内能定位。
避坑建议:
- 不要一上来就还原默认设置,先做分层测试保留现场;还原会清空所有自定义网段和端口转发。
- Linux 宿主机内核升级后,一定要重跑
vmware-modconfig --console --install-all,否则 vmnet 模块加载失败。 - 桥接模式在办公网(802.1X / MAC 绑定)和无线网卡上失败率很高,这类环境直接用 NAT。
- ESXi 修改网络配置前先确认有带外管理(iDRAC / iLO / IPMI)通道,改错 vSwitch 会导致管理网络失联。
- 生产环境开启混杂模式要评估风险,它等同于把该端口组的流量暴露给同网段所有虚拟机。
- 排查完成后把"可用配置"固化下来:静态 IP 写进网卡配置,端口转发规则做备份,避免下次重装又要从头调。
延伸阅读:如果使用的是 Docker 而非完整虚拟机,容器无法访问外网的排查思路与本文类似,但涉及的是 Docker 的 bridge/host/none 网络模式与 iptables 规则。
企业QQ咨询




