资讯动态

虚拟机ping不通?一文搞定网卡模式与防火墙排查

发布时间:2026/9/14 18:17:26 来源:尧图企业网站定制
在本地用 VMware 或 VirtualBox 装个 Ubuntu 虚拟机是大多数人进入 Linux 世界的第一步。环境装好系统也能正常启动结果你在 Windows 上一敲 ping Ubuntu 的 IP直接给你来个“请求超时”或者“无法访问目标主机”刚从 Windows 转过来的朋友很容易在这里卡住甚至怀疑自己安装步骤是不是错了。这个问题的本质不是 Ubuntu 装坏了也不是 VMware 出 bug 了而是虚拟机的网络链路没通。它涉及虚拟网卡模式、IP 地址规划、Windows 防火墙、Ubuntu 防火墙等多个环节。这篇就按我实际排查这类问题的思路把每一步怎么做、为什么要这么做讲清楚尽量让你以后再遇到同类问题能自己动手定位。1. 环境搭建与网卡模式选型1.1 三种网卡模式到底有什么区别虚拟机网络连不通十有八九是从一开始网卡模式就选得不合适。VMware 和 VirtualBox 里最常见的三种模式分别是 NAT、桥接、仅主机Host-Only它们的区别需要先有个基本认识。NAT 模式相当于 Windows 主机充当了一台“路由器”虚拟机在它后面的私有网段里。VMware 的默认 NAT 网段通常是 192.168.xxx.0/24比如 192.168.88.0/24VirtualBox 则是 10.0.2.0/24。虚拟机的流量通过主机转发出去上网主机能看到虚拟机虚拟机也能看到主机但外部设备看不到虚拟机。桥接模式相当于虚拟机直接“插”到了你客厅的路由器上和 Windows 主机共享同一层网络。它有自己的局域网 IP和主机、手机、打印机都在一个网段像是局域网里一台独立的机器。只要路由器没有做端口隔离或 AP 隔离虚拟机、主机、其他设备之间默认就能互访。仅主机模式相当于虚拟机只和 Windows 主机之间有一条“私线”完全与外界隔离。VMware 里默认对应 VMnet1 网卡VirtualBox 里是 vboxnet0。它最大的特点是虚拟机只能和主机通信不能访问外网外部也访问不到虚拟机适合做纯本地实验。选哪种网卡直接决定了后续排查范围和难度。如果你选的是 NAT那虚拟机连不通主要检查 NAT 网段和主机防火墙就够了如果选桥接除了主机防火墙还要看路由器是否开了隔离、网段是否冲突如果选仅主机那基本只跟 VMware 虚拟网卡的子网配置有关。1.2 学习场景怎么选才不给自己挖坑我自己给新手做推荐时基本按这个标准来如果是跟着教程做 Linux 系统实验不需要外部设备访问你首选 NAT如果要做 ssh、Web 服务并且想让手机或局域网其他电脑也能访问那就用桥接如果只是验证网络服务、模拟内网环境不在乎能不能上外网就用仅主机。刚开始学习 Linux我建议从 NAT 开始。因为 NAT 模式下虚拟机的 IP 由 VMware 的 DHCP 自动分配默认就能上网链路最简单不会一上来就被一堆网络概念劝退。后面等你对 Linux 熟悉了再切到桥接去理解局域网通信或者切到仅主机玩静态 IP都会轻松很多。不过确认模式只是第一步。模式没问题依然 ping 不通才是今天要重点说的排查过程。接下来第二部分我就按“从下往上、逐级检查”的顺序把排查链路和操作命令完整过一遍。2. 从现象到根因ping 不通的标准排查链路2.1 先搞清楚“ping 不通”背后可能断在哪一环很多人一看到 ping 不通第一反应就是去关防火墙这其实是个容易走偏的习惯。ping 不通只是一条链路断掉的“结果”断点可能在虚拟网卡、IP 网段、路由、防火墙、服务版本等多个位置。正确做法是先把可能的断点全部列出来然后逐层验证。以 Windows 主机和 Ubuntu 虚拟机之间通信为例一条完整的 ICMP 报文路径大概是这样的物理链路VMware 的虚拟网卡有没有启用虚拟机网卡是否处于连接状态IP 层主机与虚拟机是否在同一个子网或至少存在可达路由防火墙Windows Defender 防火墙、Ubuntu 的 ufw 或 iptables 是否拦截了 ICMP目标主机响应Ubuntu 是否正常运行sshd、网络服务有没有挂掉系统是否休眠/挂起这个链路里任何一个环节出问题最终表现都是“ping 不通”。所以排查时不能只盯一个点而是从现象出发一步步收窄范围。做网络排查我一直习惯用一个“三问法”第一问虚拟机能不能上网能说明 NAT 和网卡驱动正常不能先解决虚拟机自身网络第二问主机能不能 ping 通虚拟机的网关能说明主机与虚拟网卡之间的链路正常第三问换个方向虚拟机能不能 ping 通主机能说明链路已经通了问题在 Windows 防火墙的回显请求或者虚拟机自身防火墙这套思路每次都很管用因为绝大多数“ping 不通”问题问完这三个问题基本能定位到具体环节。2.2 逐级排查命令、参数与分析第一件事先看虚拟机能不能上网。在 Ubuntu 终端里执行ip addr show正常会看到 eth0 或 ens33 这类网卡有 inet 地址比如 192.168.88.128/24。如果没有 IP或者只有 127.0.0.1 的回环地址说明网卡没拿到地址。这个情况在 Linux 学习中经常出现根因是系统安装完后网卡没自动启用或者 VMware Tools 没装好导致虚拟网卡驱动没加载。确认有 IP 后再执行ping -c 4 223.5.5.5阿里 DNS 的 IP能通说明虚拟机出网正常NAT 的转发链路没问题。如果这里不通就先不要折腾“主机和虚拟机互 ping”了优先解决虚拟机自身网络。第二步回到 Windows 主机看一下和虚拟机之间的链路。打开 cmd 或 PowerShell用 ipconfig 查看当前使用中的虚拟网卡 IP。NAT 模式一般是 VMware Network Adapter VMnet8IP 通常为 192.168.88.1 或类似地址。这里有个容易忽视的细节Windows 主机有物理网卡、虚拟网卡、蓝牙网卡等一堆网卡ipconfig 输出很长。我给个建议直接先用 route print 看路由表如果看到 192.168.88.0 —— 直接对应 VMnet8 网段的条目说明虚拟网卡已经正确启用。或者也可以这样ping 192.168.88.128如果主机能 ping 通虚拟机问题基本已经解决了一半。如果不通先确认 VMnet8 虚拟网卡的 IP以及 Ubuntu 中网卡配置的 IP 是否在同一个网段。举个例子VMnet8 是 192.168.88.1虚拟机却是 192.168.10.10这种跨网段又没路由的情况下ping 不通是必然的。第三步反向测试。在 Ubuntu 里执行 ping 192.168.88.1看能否 ping 通主机的 VMnet8 地址。如果虚拟机 ping 主机不通而主机 ping 虚拟机通那大概率是 Windows 防火墙拦了“回显请求”这类入站 ICMP 包。如果这些基础检查都通过了但两台机器还是互相 ping 不通那就需要进入更深一层的检查比如 ARP 缓存是否异常、VMware 的虚拟网络服务是否没启动、宿主机是否有第三方安全软件拦了虚拟网卡流量。2.3 让虚拟机“固定”IP静态 IP 配置示例排查过程中很多问题其实出在 DHCP 分配的 IP 会变。今天调试通的是 192.168.88.128明天开启虚拟机变成 192.168.88.135你 Windows 这边还按老 IP 去 ping自然就失败了。所以排查网络问题时我强烈建议先把虚拟机改成静态 IP。在 Ubuntu 22.04 及以后的版本中网络配置由 Netplan 管理不再推荐直接编辑 /etc/network/interfaces。修改前先看一下现有配置ls /etc/netplan/常见的文件名是 00-installer-config.yaml 或 01-network-manager-all.yaml。用编辑器打开比如sudo vim /etc/netplan/00-installer-config.yaml内容一般长这样network: version: 2 ethernets: ens33: dhcp4: false addresses: - 192.168.88.128/24 routes: - to: default via: 192.168.88.2 nameservers: addresses: - 223.5.5.5 - 119.29.29.29注意这里的网关 192.168.88.2 是 VMware NAT 模式的默认网关地址不是 .1。VMware 的 NAT 网关一般是 .2很多教程里写 .1 会让虚拟机失去外网连接。VirtualBox 的 NAT 一般是 10.0.2.2默认网段不同需要留意。写完执行sudo netplan apply再验证ip addr show ens33 ping -c 4 223.5.5.5到这里虚拟机的网络参数就完全可控了后面排查防火墙时不容易被“IP 漂移”干扰。这个静态 IP 的配置过程本身也是很典型的 Linux 基础训练值得多敲几遍。3. 防火墙才是隐形大坑3.1 为什么说先别急着关防火墙很多网上的老教程遇到“ping 不通”就让人直接关闭 Windows 防火墙或者停掉 Ubuntu 的 ufw比如“执行 systemctl stop ufw”“把防火墙关了就行”这种处理方式在当时能解决问题但也掩盖了真正的根因。万一你后面在虚拟机部署了一个 Web 服务在服务器上跑了 Nginx想让局域网里的手机或同事访问却发现谁都访问不了这时候你就会发现当初关防火墙并没有解决网络通信的理解问题只是把规则问题跳过了。更合理的做法是精确放行 ICMP 协议而不是一刀切关掉所有防护。Windows 防火墙里有一组规则叫“文件和打印机共享(回显请求 - ICMPv4-In)”默认情况下在专用网络是启用的在公用网络则可能被禁用。如果你的 Windows 当前网络配置文件是“公用”即使 VMware 虚拟网卡是专用网络也可能受策略影响导致主机不回包。因此我的建议是把 ICMPv4-In 规则打开同时把虚拟网卡对应的网络配置文件改成“专用网络”这样既保证功能又不破坏防火墙的安全结构。3.2 Windows 侧放行 ICMP 的常规操作在 Windows 10/11 上WinR 输入 wf.msc 打开“高级安全 Windows Defender 防火墙”然后在左侧“入站规则”里找到“文件和打印机共享(回显请求 - ICMPv4-In)”这条规则如果状态是禁用右键启用即可。如果嫌 GUI 操作慢也可以用命令直接操作。以管理员身份打开 cmd 或 PowerShell执行netsh advfirewall firewall set rule name文件和打印机共享(回显请求 - ICMPv4-In) new enableyes需要注意的是中文系统规则名可能带“文件和打印机共享”字样英文系统则是“File and Printer Sharing (Echo Request - ICMPv4-In)”命令执行前先用下面的命令确认规则名netsh advfirewall firewall show rule nameall | findstr ICMPv4还有一种更彻底但不建议在生产环境用的做法直接新建一条入站规则允许所有 ICMPv4 流量。操作路径为“入站规则”→“新建规则”→“自定义”→“协议类型 ICMPv4”→“允许连接”作用域选择“任何 IP 地址”即可。做完这些回到命令行再 ping 一次 Ubuntu如果能返回 64 bytes from ...就说明 Windows 侧已经放行了。3.3 Ubuntu 侧常见防火墙配置与验证Ubuntu 桌面版默认不开启 ufw所以大多数情况下Ubuntu 侧不会主动拦截 ICMP。但如果你在装某些环境时按教程执行过 sudo ufw enable那就得确认。用命令查看状态sudo ufw status如果状态是 active且没有任何 allow 规则ICMP 可能会被丢弃。我们可以用下面的命令放行 ICMP即允许其他设备 ping 通本机sudo ufw allow proto icmp放行后记得重新加载sudo ufw reload还有一种情况如果 Ubuntu 里装过 dockerdocker 会直接操作 iptables 的 FORWARD 链可能影响虚拟机和主机之间的转发规则。不过标准情况下宿主机 ping 虚拟机docker 一般不干扰只有涉及 Docker 容器跨主机网络时才会牵扯到 iptables 的复杂策略。做完 Ubuntu 侧的检查后两端防火墙都已放行再用 ping 验证。如果还是不通那问题就很可能出在更底层的虚拟网络服务而不是单纯的防火墙策略了。4. 常见问题速查与避坑经验4.1 高频问题速查表这里把平时最常遇到的现象、原因和处理方式整理成一张表方便以后对号入座现象可能原因处理方式虚拟机无法获取 IP显示 169.254.x.xDHCP 服务异常或 VMnet8 网卡被禁用检查 VMware NAT 服务检查 VMware 虚拟网络编辑器重置虚拟网卡主机能 ping 通虚拟机但虚拟机 ping 不通主机Windows 防火墙拦截了入站 ICMP允许“文件和打印机共享(回显请求 - ICMPv4-In)”规则虚拟机拿到 192.168.88.x但网段和主机的 VMnet8 不同手动改过虚拟网络编辑器或残留了旧的 DHCP 配置查看虚拟网络编辑器确认 VMnet8 子网与虚拟机 IP 在同一网段虚拟机可以上网但 ping 不通外部 IP 的域名DNS 配置错误修改 /etc/resolv.conf或 netplan 里的 nameservers用 IP 测试 DNS 是否异常Windows cmd 中 ping 一直请求超时但页面能访问目标设备禁 ICMP 回显或本机网络配置为公用网络检查防火墙规则检查网络配置文件类型用 tcping 或 Test-NetConnection 测端口桥接模式虚拟机无法和主机互通但能上网路由器开启了 AP 隔离或端口隔离登录路由器管理页关闭 AP/端口隔离或改用 NAT 模式这张表里的每一项我基本都踩过。最常见、也最容易迷惑人的是第一种虚拟机显示 169.254.x.x。这个地址是 Windows 在 DHCP 失败后自动分配的 APIPA 地址出现这个地址基本就说明虚拟机没有从 VMware 虚拟 DHCP 服务拿到合法 IP。解决办法是到 Windows 服务里确认“VMware DHCP Service”和“VMware NAT Service”两个服务是否正在运行以及虚拟网络编辑器里对应的网段配置是否正确。4.2 连环境都没问题但还是 ping 不通多半是这些细节有些时候IP 配置、防火墙都检查完了还是 ping 不通这时候多半问题出在“你想当然认为没问题”的细节里。我单独把它拎出来说因为这类问题最伤排查信心。第一类细节是 VMware 的虚拟网卡和虚拟网络服务没起来。打开 Windows 服务管理器在服务列表里找到 VMnetDHCP、VMware NAT Service如果没在运行右键启动。这是个非常隐蔽的坑因为 VMware 安装后某些杀毒软件、优化软件会把这些服务设为“手动启动”开机时没拉起来导致虚拟网络异常。第二类细节是 VMware“虚拟网络编辑器”里的子网设置和实际虚拟机网段不一致。比如你之前做过实验把 VMnet8 改成了 192.168.77.0/24后来又安装了其他虚拟机软件把 NAT 网段又改回了 192.168.88.0/24但虚拟机的 Netplan 配置还停留在旧网段那当然 ping 不通。排查时打开 VMware 的“编辑 → 虚拟网络编辑器”查看 VMnet8 的 NAT 子网再和 Ubuntu 的 ifconfig 输出对比不一致就统一改到同一网段。第三类细节是主机有多个网卡你在 VMware 虚拟网络编辑器里给 VMnet8 配了 IP但 Windows 的网络连接里该网卡被禁用了。这个操作不常见但因为虚拟网卡默认名称里带 VMware很多人重装系统或清理网络配置时很容易误禁用。打开 Windows 的“更改适配器选项”把 VMware Network Adapter VMnet8 启用。第四类细节是如果你之前给虚拟机关机时处于挂起状态然后宿主机休眠/重启过虚拟机的时钟和网络状态可能异常。最简单的处理方式是“重启虚拟机 重启 VMware 网络服务”有时候能一劳永逸地解决一批奇怪问题。还有一个非常实用的技巧不要只依赖 ping 一种命令。ping 用的是 ICMP 协议很多环境对 ICMP 做了限制。日常排查时我一般同时用 ping telnet/ssh 命令来做双向验证。比如要确认 Ubuntu 虚拟机里的 SSH 服务是否正常直接在 Windows 里执行ssh user192.168.88.128如果某条端口能连上说明网络其实通了只是 ICMP 被防火墙拦了。这个思路能帮你避开“网络不通”的假象。Windows 下也可以用 Test-NetConnection 这个更现代化的命令Test-NetConnection 192.168.88.128 -Port 22如果端口通基本可以排除 IP 层和链路层问题把注意力放到 ICMP 策略上。根据我个人经验这类“Windows 和 Ubuntu 虚拟机 ping 不通”的问题百分之八十以上都集中在以下几个方面虚拟网卡事件、网段不一致、防火墙策略。其中 50% 是网段/服务问题30% 是防火墙剩下的才是少数内核级和驱动级问题。所以排查时不用慌按第 2 部分的链路一步步走再配合防火墙放行大多数情况半小时内都能解决。最后再分享一个小技巧如果你只是为了学 Linux不建议一开始就在虚拟机网络配置上追求“完美”。能跑起来、能上网、能 ssh 进去敲命令就够了。等你对系统命令、用户权限、文件系统熟悉之后再回过头来把桥接、仅主机、NAT 都玩一遍你会发现网络这块的很多知识在真实服务器上也同样适用。这比一开始就纠结于物理机与虚拟机之间那几个小水坑要高效得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价