你有没有遇到过这种情况:虚拟机刚装好时网络一切正常,可过个周末回来,开机发现怎么都上不了网;或者宿主机能访问虚拟机,虚拟机却访问不了外网;又或者换了台电脑,原来配置好的虚拟机突然就断了网。遇到这类问题,很多人第一反应是把网卡删了重建、重装系统,甚至直接重装虚拟机软件,其实大部分时候问题都出在虚拟网络栈的某一层上。
这篇文章我就以 VMware Workstation 和 VirtualBox 这两个最常见的跨平台虚拟机软件为例,从物理链路、虚拟交换、IP 路由、协议层四个维度,把虚拟机的网络故障排查思路完整梳理一遍。不管你是做开发环境搭建、服务器运维,还是刚接触虚拟机的小白,只要能按这个分层思路去定位,绝大多数网络问题都能在十分钟内找到方向。
1. 故障排查先立框架:分层的思路比命令本身更重要
很多人在排网络故障时喜欢瞎试,一会儿重启网卡,一会儿改 IP,一会儿又去动防火墙,最后不但没修好,反而把系统搞得更乱。我这些年排障下来最大的体会是:先立框架,再动手排查。网络本质上是一条链路,数据从虚拟机里的应用出发,要经过虚拟网卡、虚拟交换机、宿主机的网络协议栈、物理网卡,最后才能到达对端。任何一环出问题,现象都一样——连不上、ping 不通、访问超时。如果不分层定位,就只能靠猜。
1.1 虚拟网络故障的“快递包裹”模型
我习惯把一个网络请求比作寄快递。你从北京寄一个包裹到上海,包裹需要经过发件人揽收、站点分拣、干线运输、到达地分拣、派送员派送这几个环节。任何一个环节出了问题,收件人看到的都是“包裹没到”,但你很难直接判断是“还没揽收”还是“运输途中丢了”。
虚拟机网络也是同理:
- 物理链路层:相当于快递揽收站点,负责把数据从虚拟网卡送出去。这里的核心是虚拟网卡驱动状态、宿主物理网卡状态。
- 虚拟交换层:相当于干线分拣中心,VMware 的 VMnet0/VMnet8、VirtualBox 的 NAT/桥接模式,都是在这一层决定数据往哪里走。
- 网络层(IP):相当于包裹上的收件地址,IP 地址、子网掩码、网关、路由表都在这一层工作。
- 协议层:相当于包裹里的物品清单和签收流程,TCP/UDP 端口、防火墙规则、服务监听状态都在这里把关。
这个模型排障时特别有用。你拿到一个“虚拟机连不上外网”的故障,先不要急着去改 IP,而是应该从上到下层层确认:网卡是不是 UP 状态?IP 是不是配置正确?默认路由存在吗?网关是否能 ping 通?DNS 解析是否正常?每一层的问题都有一个或几个对应的核心命令。
1.2 四层模型与对应的核心工具
我在实际排查中有一个常用习惯:每层只用固定的几个命令,平时反复用,形成肌肉记忆,出问题时不假思索就能跑出来。下面这张表是我的基准工具清单,跨平台场景下 Windows 和 Linux 的差异我也会标出来:
| 排查层级 | Linux 核心命令 | Windows 核心命令 | 主要确认内容 |
|---|---|---|---|
| 物理链路层 | ip link show/ethtool eth0 | ipconfig /all/ 网络适配器状态 | 网卡是否 UP、驱动是否正常、MAC 是否异常 |
| 虚拟交换层 | 虚拟机软件设置、VBoxManage list | VMware 虚拟网络编辑器 | 模式是否匹配、虚拟网段是否冲突 |
| 网络层 | ip addr/ip route/cat /etc/resolv.conf | ipconfig /all/route print | IP、掩码、网关、DNS 是否配置正确 |
| 协议层 | ss -lnt/nc -zv/tcpdump | netstat -ano/Test-NetConnection | 端口监听、防火墙规则、会话建立是否正常 |
注意:排障时必须保持分层思维,不要跳层。比如你 ping 不通外网,如果连网关都 ping 不通,那就没必要去查 DNS。网络故障排查一定要顺着链路往下走,从最底层的物理层逐步往上验证,这样才不会浪费时间去处理与问题无关的配置。
2. 物理链路层排查:先确认“网线”真的插好了
第一层排查的是物理链路层,但在虚拟机场景里,“物理”其实有两层含义:一是虚拟机内部的虚拟网卡状态,二是宿主机真实的物理网卡状态。很多人忽略宿主机的部分,结果在虚拟机里折腾半天,最后发现是宿主机的无线网卡断开了。
2.1 虚拟机内网卡状态的快速确认
进入虚拟机系统后,第一件事不是打开浏览器试网页,而是先确认虚拟网卡的状态。Linux 虚拟机里我用得最多的是ip link show,因为它比ifconfig -a信息更全,还能看到网卡的 flags 和 MAC 地址:
ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000看到state UP说明网卡已启用。如果显示state DOWN,说明网卡被ip link set ens33 down关了,或者驱动没加载。再往下可以确认 MAC 地址是否和虚拟机设置面板里一致——这一点在克隆虚拟机后尤其重要,因为克隆操作会生成新的 MAC 地址,有些系统配置里还是老的。
Windows 虚拟机就简单了,直接看右下角的网络图标,或者打开设备管理器看网卡有没有黄色感叹号。如果 Windows 里显示“未识别的网络”或“无 Internet 访问”,但网卡本身状态正常,那大概率不是物理层问题,而是 IP 配置或网络模式问题,继续往下层排查。
2.2 宿主机的“隐性故障”不要忽略
宿主机的物理链路故障通常有三种,我踩过的坑都有:
- 无线网卡连接不稳定:笔记本用 Wi-Fi 时,VMware 的桥接模式经常出问题,但 NAT 模式一般不受影响。
- 物理网卡被禁用:有些优化软件会“优化”掉用不到的网卡,结果 VMware 的桥接协议找不到绑定的物理网卡,所有桥接虚拟机全部断网。
- Windows 的随机硬件地址功能:Win10/11 开了“随机硬件地址”后,每次连 Wi-Fi 都会生成不同的 MAC,VMware 桥接会因此频繁失效。
所以在排查虚拟机网络之前,先在宿主机上确认一下物理网卡是否正常工作。Windows 下打开命令行跑ipconfig看看以太网适配器或无线局域网适配器是不是有正常 IP,Linux 宿主机下用nmcli device status看连接状态。这一步 30 秒就能完成,但能帮你排除掉至少三成“莫名其妙”的问题。
2.3 虚拟机软件的服务与驱动状态
很多人忽略一个关键点:虚拟机软件本身是以服务形式在宿主机运行的。
VMware Workstation 有三个核心服务经常被误禁用:
- VMware NAT Service(负责 NAT 模式的 IP 转换)
- VMware DHCP Service(负责给虚拟机分配 IP)
- VMware Bridged Networking Service(负责桥接模式)
如果 NAT 模式下虚拟机拿不到 IP,先去看这三个服务是不是在正常运行。Windows 下按Win+R输入services.msc,找到 VMware 相关服务,确认状态是“正在运行”、启动类型是“自动”。VirtualBox 相对简单,但它的 VirtualBox 服务偶尔装机后不会自动启动,需要手动开启。
还有一类常见问题出现在安装或升级 VMware Tools / VirtualBox Guest Additions 之后:虚拟网卡驱动被更新成不兼容版本,导致虚拟机网络设备无法识别。解决办法通常是在虚拟机设置里移除旧网卡、添加一张新网卡,或者重装一遍增强工具。这类故障处理起来不难,但很烦人,因为现象上看起来像“网卡硬件坏了”。
3. 虚拟交换层排查:NAT、桥接和仅主机的“模式陷阱”
过了物理链路层,接下来就是整个虚拟网络里最核心、也最容易出问题的部分——虚拟交换层。VMware 和 VirtualBox 里的各种网络模式,本质上都是在宿主机上虚拟出不同的交换结构。不理解这几张虚拟交换机的底层逻辑,排障就只能靠撞运气。
3.1 三种经典网络模式的原理差异
VMware Workstation 的虚拟网络编辑器里能看到 VMnet0、VMnet1、VMnet8 这几个虚拟交换机,打开 VirtualBox 的全局网络设置则能看到不同的网络类型。名字虽然不同,底层原理其实一一对应:
NAT 模式(VMware 的 VMnet8 / VirtualBox 的 NAT 或 NAT 网络):这种模式下虚拟机和宿主机组成一个私有网段,虚拟机把网关指向 VMnet8 或 vboxnet 的宿主机侧 IP,宿主机替虚拟机做地址转换,把虚拟机访问外网的请求“翻译”成宿主机自己的请求。好处是虚拟机不需要占用局域网 IP,怎么折腾都不影响局域网;坏处是外部设备无法主动访问虚拟机,除非做端口转发。
桥接模式(VMware 的 VMnet0 / VirtualBox 的桥接):这种模式把虚拟网卡直接“桥接”到宿主机的物理网卡上,虚拟机就像局域网里一台独立的物理机,有自己独立的 IP。这种模式下虚拟机可以被局域网其他设备直接访问,适合搭建对外测试环境。
仅主机模式(VMware 的 VMnet1 / VirtualBox 的 Host-Only):虚拟机和宿主机组成一个完全私有的网络,不能访问外网。常用于隔离测试或搭建不依赖外网的环境。
三种模式之间没有绝对的好坏,关键看场景。但很多人的“虚拟机突然断网”问题,其实是从没搞清楚自己到底应该用哪种模式,误改了模式或者误选了错误的网卡绑定。
3.2 VMware 桥接模式的专属坑:物理网卡绑定与无线网络
桥接模式在 VMware 里是最容易出问题的。VMware 的虚拟网络编辑器里,桥接模式可以选择桥接到“自动”、“特定的物理网卡”或“特定的虚拟网络”。默认的“自动”听起来很智能,实际上经常选错。
举个我实际处理过的例子:一台笔记本同时有有线网卡和无线网卡,VMware 创建 VMnet0 时自动桥接到了有线网卡,但实际物理网线没插、用的是 Wi-Fi,结果虚拟机一直拿不到 IP。在虚拟网络编辑器里把桥接目标改成正在使用的无线网卡,重启虚拟机网络,问题立刻解决。
还有更隐蔽的:Windows 在连接某些公共 Wi-Fi 时默认开启“随机硬件地址”,虚拟机的桥接协议跟着宿主物理网卡的 MAC 一变,局域网里 ARP 表就乱了。宿主机的 DNS 也容易出问题,桥接模式下虚拟机的网关必须指向局域网路由器,而不是 VMnet8 的宿主机 IP——这个我在第 4 节细讲。
3.3 VirtualBox 网络类型选择与常见误配置
VirtualBox 的网络类型比 VMware 多一个“内部网络”,实际使用中我遇到最多的误配置有几种:
- 选了“NAT”以为可以像 VMware 那样双向互通,但实际上 VirtualBox 的默认 NAT 模式下,宿主机仍然可以访问虚拟机,但外部局域网设备访问不到。
- 选了“仅主机网络”但没在全局设置里创建 Host-Only 网络;或者创建了,但虚拟机网卡没有指定到对应适配器。
- 桥接模式选到了错误的物理网卡(VirtualBox 桥接时可以直接指定宿主机物理网卡,如果选错了,虚拟机可能拿到一个完全不通的 IP)。
VirtualBox 还有一个比较特殊的地方:NAT 模式下默认有一个内置的 DHCP 服务,而且默认网关是10.0.2.2,DNS 通常是10.0.2.3。很多新手把虚拟机 IP 改成和自己局域网同一个网段,却忘记改网关和 DNS,导致虚拟机只能和宿主机通信,但上不了外网。
我在实际项目中的习惯是:能用 NAT 就不轻易上桥接,除非你要对外提供服务。NAT 模式天然自带一层“隔离”,排障范围小很多。桥接模式出问题时,排查链路会延伸到局域网的路由器、IP 分配、ARP 缓存,复杂度直接翻倍。
4. 网络层排查:IP、网关、路由和 DNS 那些“基础”问题
当物理链路和虚拟交换层都确认无误后,还是连不通,那就要下钻到网络层。这一层的问题往往很“基础”——IP 写错、网关迷路、DNS 解析失败,但正因为基础,很多人反而不重视,出问题时习惯性跳到防火墙和各种“高级”配置里去翻找。
4.1 IP 地址和子网掩码的连环坑
虚拟机拿不到 IP,最常见的两个原因:DHCP 服务没开,或者 DHCP 租约冲突。
VMware 的 NAT 模式网段默认是192.168.x.0/24,VirtualBox 默认是10.0.2.0/24。如果你在 VMware 里手动把虚拟机设置成桥接,但 IP 还沿用 NAT 的网段,那就彻底连不通了。桥接模式下的虚拟机必须使用和宿主机同一个网段的 IP,网关、DNS 都要指向局域网路由器,这一点很多人会搞混。
静态 IP 配置也有一堆坑。Linux 虚拟机里我经常看到这种错误配置:
# 错误示范:掩码写错 ip addr add 192.168.1.100/16 dev ens33 # 子网掩码不对,影响跨网段通信 # 正确示范 ip addr add 192.168.1.100/24 dev ens33子网掩码写错,最大问题是“包能发出去但回不来”。因为本机以为对端在和自己在同一个网段,直接走二层广播找它,但实际对端可能在另一个网段,需要走网关。结果就是单向通信,或者干脆超时。排查时多用ip addr看仔细点,别急着改 IP。
4.2 默认路由和网关:决定数据走向的“十字路口”
网络层的第二大类问题是网关和路由表。虚拟机里如果缺少默认路由,或者路由表指向了错误的网关,就会出现“局域网内能通,外网全部不通”的典型故障。
Linux 下快速查看路由:
ip route default via 192.168.1.1 dev ens33 proto static 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.100看到default via才说明有默认路由。如果没有,就要手动添加:
ip route add default via 192.168.1.1 dev ens33但这只是临时方案,重启后会被清掉。要想永久生效,得写进系统配置文件:Ubuntu 下是/etc/netplan/下的 YAML,CentOS 下是/etc/sysconfig/network-scripts/ifcfg-ens33,操作前先备份,不要直接在原文件上动刀。
Windows 虚拟机就简单很多,route print结果里有0.0.0.0开头的路由就是默认路由。要是发现缺了,用管理员命令行执行route add 0.0.0.0 mask 0.0.0.0 网关IP临时加回去。
跨平台场景下尤其要注意:云上迁移过去的虚拟机,或者从宿主机导入的 OVA 镜像,网卡名可能会变(比如 ens33 变成 ens37),原来的静态 IP 配置可能全部失效。这时候最稳妥的办法是直接用 DHCP 模式先拿到可用 IP,再回头调整静态配置。
4.3 DNS 解析:ping 通 IP 但 ping 不通域名
这个故障太经典了:ping 8.8.8.8通,ping baidu.com却说找不到主机。不用想,肯定是 DNS 配置有问题。
Linux 下先看/etc/resolv.conf:
cat /etc/resolv.conf nameserver 192.168.1.1如果这个文件是空的或指向了不可用的 DNS,解析就会失败。临时解决办法是:
echo "nameserver 8.8.8.8" > /etc/resolv.conf但很多发行版的这个文件是 systemd-resolved 动态生成的,直接改会被覆盖。要永久改,Ubuntu 下用resolvectl或改 netplan 的配置,CentOS 用nmcli。
Windows 虚拟机 DNS 判断直接用nslookup:
nslookup baidu.com如果返回超时,就在网络适配器属性里手动填入可靠 DNS。注意,某些内网环境下必须使用内网 DNS 才能解析内部域名,这时候统一填公共 DNS 反而会连不上内网服务,所以改 DNS 前要先搞清楚你所在的环境。
4.4 网络层快速定位清单
遇到虚拟机网络不通,先按这个表对号入座,可以快速缩小范围:
| 故障现象 | 优先怀疑的网络层问题 | 核心验证命令 |
|---|---|---|
| 虚拟机 ping 不通外网 IP | 网关错误、默认路由缺失 | ip route/route print |
| 虚拟机 ping 不通域名 | DNS 配置错误 | cat /etc/resolv.conf/nslookup |
| 宿主机能访问虚拟机,反之不行 | 虚拟网段与宿主机不在同一子网 | ip addr/ VM 网络编辑器 |
| 虚拟机重启后 IP 变了 | DHCP 租约问题,需改静态 IP | cat /var/log/syslog里的 dhclient 记录 |
5. 协议层排查:端口、防火墙和 TCP 会话的细节
网络层通了,但服务就是连不上——比如浏览器打开虚拟机里的网站一直转圈,SSH 连接卡在认证界面,这类问题就进入协议层了。这是整个排查链条里最考验耐心的一层,因为网络层只是保证“包能到达”,但能不能被服务接收、能不能建立 TCP 会话,还要看端口、防火墙、监听地址这些“最后一步”。
5.1 服务监听地址与防火墙状态检查
先看服务是不是真的在监听。Linux 虚拟机里:
ss -lnt State Local Address:Port Process LISTEN 0.0.0.0:443 nginx注意Local Address是0.0.0.0还是127.0.0.1。很多开发者在虚拟机上启动服务时,默认只监听127.0.0.1,结果宿主机、局域网其他机器从外部访问,全部被拒。原因很简单:127.0.0.1只代表本机回环,不对外;改成0.0.0.0才能让所有可达地址访问。
防火墙又是另一大坑源。Ubuntu 默认的是 ufw,CentOS 用 firewalld,Windows 有 Defender 防火墙。有时候服务明明在监听,端口测不通,十有八九是防火墙规则没有放行。我通常先用这些命令快速状态确认:
# Linux 放行端口 sudo ufw allow 8080/tcp sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload # Windows PowerShell 放行端口 New-NetFirewallRule -DisplayName "Allow 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow实际排查时,我强烈建议先把防火墙临时关闭一次做对照测试。如果关闭后能通,再重新开启并精确配置放行规则。这个操作能帮你把问题精确定位到防火墙规则上,而不是浪费时间反复阅读防火墙日志。
5.2 端口连通性测试与 nc 妙用
判断一个端口是否可以从外部访问,最直接的工具是nc:
nc -zv 192.168.1.100 8080返回Connection succeeded说明端口从外部可以到达;如果返回Connection refused,说明服务可能没监听;如果长时间无响应然后超时,说明数据包被防火墙丢弃,或者中间环节有丢包。
Windows 虚拟机里没有 nc,可以用 PowerShell 的:
Test-NetConnection -ComputerName 192.168.1.100 -Port 8080这个命令会给出 TcpTestSucceeded 的 True/False,比 telnet 直观很多。
5.3 用 tcpdump 抓包:一锤定音的高级排查手段
如果到端口测试还是定位不了问题,就要上抓包工具了。tcpdump是 Linux 平台我最常用的抓包命令,它在协议层排查里几乎是决定性的工具。
举个例子,虚拟机内访问宿主机上的 8080 端口服务不通,我在虚拟机里抓包:
sudo tcpdump -i ens33 host 192.168.1.100 and port 8080抓包后的情况大概分三种:
- 完全没有抓到任何包:说明请求根本没有从虚拟机发出去,问题在虚拟机内部(路由或防火墙出站规则)。
- 抓到了 SYN,但一直没抓到 SYN-ACK:数据包到达了宿主机,但宿主机侧没有回包。可能是宿主机防火墙丢弃,也可能是服务监听地址不对。
- 抓到了 SYN 和 SYN-ACK,但后续异常:建立了部分连接但会话被中断,可能是 MTU 问题,也可能是中间设备 RST。
ARP 层的 A 坑也不能忽视。克隆虚拟机后,如果新旧两台虚拟机同时开着,并且 IP 一样,局域网的 ARP 缓存会错乱,导致发往这个 IP 的流量到达了错误的机器。排查时用arp -d清空缓存再试,或者直接ip neigh flush all,能解决很多“看起来像断网”的诡异现象。
6. 高频故障场景实录与排查速查表
前面几节按层级讲了理论和通用流程,这一节我直接把平时工作中遇到最多的高频场景拎出来,逐一说现象、原因和解决路径。这些场景在搜索引擎里几乎天天有人问,真按这个列表走一遍,能解决大部分虚拟机网络问题。
6.1 场景一:主机访问不了虚拟机里的网站
这个场景我至少帮人处理过十几次。典型现象:虚拟机里 nginx 已经启动,在虚拟机内用curl localhost能正常返回页面,但宿主机浏览器打开http://虚拟机IP就是转圈打不开。
排查步骤(按优先级排序):
- 确认 nginx 监听地址:
ss -lnt看0.0.0.0:80还是127.0.0.1:80。如果是后者,改 nginx 配置里的 listen 为0.0.0.0:80。 - 确认虚拟机防火墙放行端口:先临时关掉 ufw 或 firewalld 做一次对照,通了再精确放行。
- 确认网络模式:NAT 模式下外部访问虚拟机的服务,需要做端口转发;桥接模式则直接可以访问。如果你图方便用的 NAT,那宿主机访问虚拟机网站的地址应该是
localhost+ 转发端口,而不是虚拟机 IP。 - 确认宿主机访问地址:NAT 模式下用 VMnet8 对应的宿主机侧 IP,桥接模式下用虚拟机的局域网 IP。常见错误是 NAT 模式下访问虚拟机 IP,结果踩进路由黑洞里。
6.2 场景二:虚拟机重启后 IP 地址变了
DHCP 模式下 IP 租约到期就会换地址。如果你平时靠固定 IP 连接虚拟机,突然连不上是必然的。解决办法一劳永逸——给虚拟机配置静态 IP。在 Linux 的 netplan 配置里把dhcp4: false,写上addresses、routes、nameservers,然后sudo netplan apply。
如果嫌麻烦,也可以保留 DHCP,但给虚拟机网卡配置一个 DHCP 保留地址。VMware 的虚拟网络编辑器里可以设置 DHCP 保留,但是操作比较繁琐,不如直接静态 IP 来得干脆。
6.3 场景三:克隆或复制虚拟机后网络失效
这是跨平台虚拟化场景里特别高频的问题。复制出来的虚拟机,网卡会生成新的 MAC 地址,但系统内部可能还保留着旧网卡的配置文件。
Linux 里最常见的是/etc/sysconfig/network-scripts/ifcfg-ens33里写死了旧的 UUID 和 MAC 地址,导致系统无法正确识别新网卡。处理方式是删掉/etc/udev/rules.d/70-persistent-net.rules这个持久化网卡规则文件,重启后系统重建网卡配置。Windows 虚拟机克隆后如果出现“未识别的网络”,通常是在设备管理器里把网卡卸载,然后点“扫描检测硬件改动”,让系统重新识别。
6.4 场景四:本地加虚拟机多端口 Nginx 多站点自定义域名配置
开发环境常见需求:宿主机访问虚拟机的 nginx,通过不同端口或不同域名访问不同的站点。这里的网络底子非常简单——只要虚拟机网络通了,剩下的全是 nginx 配置的事。
常见做法是 nginx 里多建几个 server 块,不同server_name对应不同项目,然后宿主机改 hosts 文件把自定义域名指向虚拟机 IP。需要注意的是,自定义域名解析不走公网 DNS,只在 hosts 生效;如果在手机上测试,可能要连同一个局域网并且手动指定。
6.5 场景五:VMware 启动虚拟机直接蓝屏
这不算网络问题,但出现频率太高,且网上一搜全是误导信息,我提一句。VMware 启动虚拟机导致宿主机蓝屏,首要排查以下三点:
- BIOS/UEFI 里是否开启了虚拟化(VT-x/AMD-V),没开的话 VMware 会卡在启动阶段。
- Windows 的 Hyper-V 是否与 VMware 冲突,两者同时启用会导致蓝屏。解决办法是关闭 Hyper-V 和内核隔离。
- 虚拟机分配内存是否过大或者显卡驱动冲突,可以先把虚拟机内存调到 2GB 以内做对照测试。
6.6 网络故障排查速查总表
最后,我把本篇文章的核心经验总结成一张可以打印出来的速查表,贴在你的工作台边上,遇到问题先对号入座,不要盲目操作。
| 症状 | 优先怀疑层 | 核心验证命令 | 常用解决方案 |
|---|---|---|---|
| 虚拟机内网卡是 DOWN 状态 | 物理链路层 | ip link show | 修改虚拟机网络设置,重装 VMware Tools |
| 虚拟机拿不到 IP | 虚拟交换层 | VMware 服务状态 / vboxnet 配置 | 检查 DHCP 服务,确认网络模式 |
| 能 ping 通 IP,不能 ping 通域名 | 网络层 | cat /etc/resolv.conf | 修改 DNS 配置 |
| 内网通、外网不通 | 网络层 | ip route | 添加默认网关路由 |
| ping 通但端口连不上 | 协议层 | nc -zv/ss -lnt | 检查服务监听与防火墙放行 |
| 外部设备访问不到虚拟机服务 | 协议层 | tcpdump | 检查监听地址是否为 0.0.0.0 |
| 克隆后网络失效 | 物理链路层 + 网络层 | ip link show/ udev 规则文件 | 删除持久化网卡规则,重新配置 |
我个人在实际操作中的最大体会是:遇到虚拟机网络故障,先别急着改配置,把现象描述完整再往上查。“昨天还能连、今天不行”和“刚装好就不通”是完全不同的排查起点。前者大概率是变化点导致的,比如更新了宿主机系统、改了虚拟网络设置、装了新软件;后者才需要从头到尾把链路完整试一遍。
最后分享一个小技巧:每次修改虚拟网络配置之前,先给虚拟机打个快照,或者至少备份一下网卡配置文件。别小看这一步,出问题时它能帮你一秒回到可用的状态,省下大量反复调试的时间。很多“越修越坏”的故障,往往是因为在错误的方向上连续改了好几处配置,最后已经分不清哪一步是有效操作、哪一步是在破坏现场了。