尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

虚拟机连不上网络排查指南:NAT、桥接、DNS与虚拟网卡修复

虚拟机连不上网络排查指南:NAT、桥接、DNS与虚拟网卡修复 虚拟机这玩意儿装的时候一路下一步挺顺用起来最让人抓头的就是某天一开机发现网断了。我大概从 VMware 10 一路用到 17中间也折腾过 VirtualBox、Parallels还在各种云主机上搭过开发环境虚拟机连接不上网络这个毛病绝对排得进我遇到过的 top3 高频问题。它讨厌的地方在于——报错信息往往就一句网络不可达或者干脆什么都没有但背后的原因可能横跨宿主系统、虚拟化软件、虚拟网卡、来宾系统四层。这篇就把我这几年排查这类故障的完整思路、用到过的命令行、踩过的坑一次性摊开讲清楚。不管你是刚装完 Ubuntu 24.04 发现上不了网的新手还是克隆了一台 CentOS 之后宿主机访问不了网站服务的老手都能在这里找到对应的排查路径。1. 先把连不上这件事拆开看故障边界与排查思路虚拟机连不上网络最大的坑不是不会修而是一上来就乱修。我见过太多人第一步就去改/etc/resolv.conf结果发现根本是虚拟网卡都没起来。所以动手之前得先建立一个分层排查的框架。1.1 三种连不上其实是完全不同的故障同样一句虚拟机上不了网实际操作中至少要分成三类来对待。第一类是虚拟机完全出不了网宿主机和外网都碰不到第二类是能上外网但宿主机访问不了虚拟机里的服务比如你在虚拟机上跑了 Nginx 或者开发服务器宿主浏览器打不开第三类是宿主机能访问但局域网里其他机器访问不了。这三类的根因完全不在一个层面上第一类看虚拟网络模式和网卡状态第二类看宿主防火墙和虚拟网卡地址第三类基本只能靠端口转发或者桥接模式解决。先给故障归类能省掉一半的无用功。我一般会让提问的人先执行几个动作在虚拟机里ping一下网关再ping一下公网 IP最后ping一个域名。这三步的结果组合直接就把问题锁定到了链路层、路由层还是 DNS 层。虚拟机 ping 网关ping 8.8.8.8 之类的公网 IPping 域名结论方向通通通网络本身没问题问题在应用层或防火墙通通不通DNS 配置问题通不通不通网关/NAT 转发问题不通不通不通虚拟网卡、网段、模式配置问题这张表是我这几年最常用的一张体检表比任何图形化工具的报错都直接。1.2 排查顺序为什么必须从宿主侧开始很多人习惯从虚拟机内部查起我建议反过来——先看宿主机的虚拟网络服务再看虚拟机的网卡最后才进系统改配置。原因是宿主侧的问题会同时影响所有虚拟机而虚拟机内部的问题只影响单台。你要是先花两小时在 Linux 里改 IP最后发现是宿主机的 VMware DHCP 服务被某个系统优化软件关掉了那真是白忙。宿主机要看的几个点很固定Windows 上打开服务面板找VMware DHCP Service和VMware NAT Service这两兄弟必须是正在运行且启动类型为自动。NAT 模式依赖前者分配地址、后者做转发任何一个停了NAT 模式必挂。其次是网络连接面板里有没有VMware Network Adapter VMnet1和VMnet8这两块虚拟网卡如果带黄色感叹号或者干脆消失了那就得去虚拟网络编辑器里还原默认设置。这三步走完宿主的嫌疑基本就能排掉七七八八。注意Windows 上有些安全软件会静默禁用 VMware 的两个后台服务表现就是昨天还好好的今天一开机全断了。如果你经常遇到这种隔夜失效优先怀疑这类软件。2. 虚拟网络的基础原理三种网络模式到底在干什么不理解三种网络模式的本质排查就永远是碰运气。这一节把 NAT、桥接、仅主机三者的工作原理讲透后面所有排查动作你都能自己推导出来。2.1 NAT、桥接、仅主机三种模式的本质区别桥接模式的逻辑最简单粗暴虚拟机的虚拟网卡直接搭在宿主机的物理网卡上虚拟机就像局域网里多插了一台真实的机器。它的 IP 由你所在局域网的 DHCP 服务器分配和宿主机同网段。好处是局域网里任何一台机器都能直接访问虚拟机的服务坏处是依赖局域网的 DHCP公司网络、校园网经常做端口隔离或者 MAC 绑定这时候桥接就会拿不到 IP表现为网卡在但一直没有地址。NAT 模式是虚拟机里最省心的方案。VMware 会在宿主机上造一个独立的小网络虚拟机全部在这个虚拟网段里网段里有个虚拟路由器负责把你的流量做地址转换后再从宿主机物理网卡发出去。默认情况下虚拟机能上网、能访问宿主机宿主机也能访问虚拟机但局域网里的其他机器看不到虚拟机。对大多数开发场景来说这就够了。仅主机模式则更封闭只保留宿主机和虚拟机之间的通路连外网的口子都没有。它的典型用途是搭隔离测试环境比如你想跑一个干净的实验不想让它碰到外网。很多人上不了网其实是自己不小心把虚拟机设成了仅主机模式改回 NAT 就好了。模式虚拟机能否上外网宿主机能否访问虚拟机局域网其他机器能否访问典型用途桥接能能能对外提供服务、模拟独立主机NAT能能默认不能需端口转发日常开发、学习仅主机不能能不能隔离测试环境2.2 虚拟网卡与虚拟 DHCP 服务的工作机制再往深一层看VMware 在宿主机上给你装了若干块虚拟网卡VMnet1对应仅主机模式VMnet8对应 NAT 模式桥接模式则是把虚拟网卡直接绑到物理网卡上。每一块 VMnet 背后都是一段独立网段网段里的默认网关通常是x.x.x.2一个是x.x.x.1专门留给宿主机的虚拟网卡。这里有个特别容易踩的坑NAT 网段和你的物理局域网网段撞车。比如你家里的路由器给电脑分的是192.168.1.100而 VMnet8 恰好也配成了192.168.1.0/24那宿主机上就出现了两条指向同一网段的路由谁先谁后全看系统心情结果就是时通时不通。解决办法是进虚拟网络编辑器把 VMnet8 的子网地址改成别的网段比如192.168.138.0/24。改完记得让虚拟机重新获取一次地址。这个冲突造成的玄学断网我至少遇到过三次每次都是重新装虚拟机、重装系统折腾一大圈之后才发现根源在网段实在不划算。另外DHCP 分配是有租期的默认大概半小时到两小时。虚拟机挂起再恢复、宿主机睡眠唤醒之后有时候地址续租失败网卡还在但地址没了。这时候进系统执行一次释放和重新获取就行# Linux sudo dhclient -r ens33 sudo dhclient ens33 # Windows 虚拟机 ipconfig /release ipconfig /renewens33是 VMware 下 Linux 常见的网卡名具体名字用ip addr看可能是ens160、eth0。名字写错命令会直接报错别硬着头皮往下走。3. 按症状对症下药六类常见故障的实操修复前面铺垫了原理这一节直接进入实操。我把这几年处理过的故障按症状归成六类每一类都对应一个具体的修复路径你可以对照自己的现象直接找。3.1 症状一虚拟机里根本没有网络适配器表现是进虚拟机后ip addr只看到一个lo回环接口或者 Windows 虚拟机里网络连接面板空空如也。这种情况分两头查。先看 VMware 的虚拟机设置里网络适配器那一栏有没有勾上已连接和启动时连接。很多人装系统的时候手滑把网卡移除了或者升级 VMware 17 之后配置文件里的设备被重置了虚拟机上就真的没有网卡了。加一块网卡、选好模式重启即可。如果设置里网卡在但系统里看不见那就是驱动层面。Linux 下多半是虚拟硬件版本和内核不匹配重装open-vm-tools试试Windows 下进设备管理器看有没有带黄色感叹号的以太网控制器有的话装一次 VMware Tools 就能把驱动补齐。3.2 症状二有网卡但显示未识别网络或感叹号这是最常见的一类。网卡在那里但状态是未识别、无 Internet 访问或者带个小感叹号。根因基本集中在宿主侧的虚拟网卡上——VMnet8或VMnet1自己出问题了VMware 分给它的地址丢了或者变成了169.254.x.x这种自动私有地址。修复动作很固定打开 VMware 的编辑 - 虚拟网络编辑器点右下角更改设置需要管理员权限然后点还原默认设置。这个操作会把 VMnet1、VMnet8 全部重建DHCP 和 NAT 服务的绑定关系也一并恢复。实测下来九成以上的感叹号问题到这一步就结束了。注意还原默认设置会把你自己加过的端口转发规则、改过的子网网段一并清掉如果之前配置过这些记得先记下来。我在一个项目里配了七八条端口转发一次手快还原全没了重配花了半小时。如果还原之后还是不行就在宿主机上以管理员身份跑一遍网络堆栈重置netsh winsock reset netsh int ip reset ipconfig /flushdns跑完重启宿主机。这几条命令的作用是把 Windows 的网络组件恢复到初始状态代价是所有自定义的网络设置会丢所以养成先备份的习惯。3.3 症状三能 ping 通网关但上不了网这类故障的特征很明确——ping 192.168.x.2通ping 8.8.8.8也通但一ping baidu.com就报未知的名称或服务。链路是好的纯粹是域名解析出了岔子。先看/etc/resolv.conf里有没有正常的nameserver。Ubuntu 用 systemd-resolved 之后这个文件经常被接管成一个软链接指向127.0.0.53看着像空的其实有内容用resolvectl status看真实配置才是正道。如果你手动改过/etc/resolv.conf重启就被覆盖那就应该改 netplan 或者 NetworkManager 里的 DNS 配置而不是去动这个文件。另一个常见原因是 NetworkManager 自带的 dnsmasq 转发层挂了systemctl restart NetworkManager一般能救回来。还有一种情况是 DNS 服务器本身不可达——比如你配的是公司内网 DNS把虚拟机搬到家里用自然解析不了。临时换成公共 DNS 先验证# 临时测试重启失效 echo nameserver 223.5.5.5 | sudo tee /etc/resolv.conf通了说明就是 DNS 配置的问题再去把持久化配置改对。3.4 症状四宿主机访问不了虚拟机里的网站服务虚拟机能上网你在里面python -m http.server 8000起了个服务宿主浏览器打开http://虚拟机IP:8000却一直转圈。这时候按顺序查四件事。第一服务是不是只监听了127.0.0.1很多框架默认绑定本地回环必须显式改成0.0.0.0。第二虚拟机自己的防火墙ufw、firewalld、Windows 防火墙有没有放行这个端口sudo ufw allow 8000试一下。第三宿主机 Windows 防火墙有没有拦尤其是宿主和虚拟机不属于同一个网络位置的时候公用网络的入站策略比专用网络严格得多把宿主上的 VMnet 网卡改成专用网络往往就通了。第四点最容易被忽略NAT 模式下局域网里别的机器默认访问不到虚拟机。如果你的需求是让同事也能访问那要么切到桥接模式要么在虚拟网络编辑器的 NAT 设置里加一条端口转发把宿主机的某个端口映射到虚拟机的对应端口。端口转发的好处是虚拟机的 IP 变了也不影响外部访问生产环境里这套玩法很常见。3.5 症状五克隆或迁移之后断网从模板克隆虚拟机、把虚拟机文件拷到另一台电脑上跑非常容易出现网络明明配好了就是不通。原因通常有两个。一是 MAC 地址冲突——克隆出来的虚拟机默认可能沿用原机器的 MAC同一网段里两台机器 MAC 相同交换机直接懵了。解决方法是虚拟机设置里找到网卡点高级生成一个新的 MAC。二是 Linux 的machine-id和网卡配置文件里的 UUID 重复/etc/machine-id抄一份原机的NetworkManager 会把连接认成别人的。顺带提一句克隆之后网卡名字也可能变原来是ens33新机器变成ens34而你改的还是旧的配置文件自然不生效。用ip addr确认实际名字再对照配置文件检查一遍。3.6 症状六Linux 侧 network 服务与管理器打架这条是 CentOS 7 到 8 过渡期的经典坑。系统里同时存在老的network服务和新的NetworkManager两个都想管网卡结果就是配置改了不生效或者重启后回到 DHCP。判断方法是systemctl status NetworkManager和systemctl status network都看一眼哪个是 active 的。RHEL 8 之后统一用 NetworkManagernetwork服务已经废弃就别再systemctl restart network了改用nmcli connection reload nmcli connection up ens334. 手工配置静态 IP一条可以抄作业的完整流程动态地址在学习阶段够用但只要你做服务端开发、搭建集群、跑数据库主从静态 IP 就是刚需。这一节给一套完整的、跨发行版都能用的配置流程。4.1 先摸清楚网段、网关、DNS 三个参数配置之前必须搞清楚三件事你这台虚拟机在哪个网段、网关地址是多少、用什么 DNS。前两个参数从虚拟网络编辑器里拿——打开编辑器选中 VMnet8能看到子网 IP 和子网掩码网关一般是子网里的第二个可用地址。举个例子子网是192.168.138.0掩码255.255.255.0那可用地址是192.168.138.1到192.168.138.254其中.1给宿主机的虚拟网卡、.2给虚拟网关DHCP 池默认从.128起。你的静态 IP 就选在.3到.127之间避开 DHCP 池防止哪天 DHCP 把地址分给别人造成冲突。DNS 用公共的就够223.5.5.5和119.29.29.29这两个我用得最多国内解析速度和稳定性都不错。参数定好写进配置就行。4.2 Ubuntu 24.04 与 CentOS 的配置差异Ubuntu 从 18.04 开始用 netplan配置文件在/etc/netplan/下文件名各版本略有不同。Ubuntu 24.04 桌面版默认渲染器换成了 NetworkManager服务器版还是 systemd-networkd看文件里的renderer字段就知道。一个静态 IP 的 netplan 配置长这样network: version: 2 renderer: networkd ethernets: ens33: dhcp4: false addresses: - 192.168.138.150/24 routes: - to: default via: 192.168.138.2 nameservers: addresses: [223.5.5.5, 119.29.29.29]YAML 对缩进极其敏感必须用空格不能用 Tab缩进错了netplan apply会直接报错。这点我吃过亏从别处复制配置的时候经常混进 Tab排查半天。CentOS 7 走的是/etc/sysconfig/network-scripts/ifcfg-ens33关键字段如下TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.138.150 NETMASK255.255.255.0 GATEWAY192.168.138.2 DNS1223.5.5.5ONBOOTyes这一行特别重要装系统时默认可能是no意思是开机不激活网卡很多人装完发现没网就是这个问题。CentOS 8 之后推荐用 nmcli一条命令搞定nmcli connection modify ens33 \ ipv4.addresses 192.168.138.150/24 \ ipv4.gateway 192.168.138.2 \ ipv4.dns 223.5.5.5 119.29.29.29 \ ipv4.method manual nmcli connection up ens334.3 改完不生效配置文件与服务的正确重载顺序改完配置就reboot是最笨也最稳的做法但效率低。正确的重载顺序是先校验配置语法再应用最后验证。Ubuntu 是netplan try或netplan applynetplan try会在 120 秒内自动回滚适合远程操作时防止把自己关在门外。CentOS 7 是systemctl restart networkCentOS 8 是nmcli connection reload加nmcli connection up。验证顺序也别乱先ip addr看地址有没有上去再ip route看默认路由在不在然后ping网关最后ping外网域名。哪一步断掉就针对哪一步查比无头苍蝇式地重启强太多。提示改网络配置之前如果你是通过 SSH 连的虚拟机建议先开一个本地控制台窗口备用。配置写错导致断线、又只能靠 SSH 恢复那场面相当难受。5. 环境层面的坑虚拟化平台、驱动与系统设置有些连不上网根本不是网络配置的问题而是宿主环境出了状况。这一节讲三类在物理层和系统层埋雷的情况。5.1 Windows 虚拟化组件与 Hyper-V 抢占资源在 Windows 上开了 Hyper-V、WSL2 或者容器相关的功能之后系统会启用一个叫 Hyper-V 虚拟化平台的东西它和 VMware 抢 CPU 的硬件虚拟化指令。表现是虚拟机跑得特别慢网络时断时续甚至开不了机。老版本 VMware 会直接报此平台不支持虚拟化的 Intel VT-x/EPT。从 VMware Workstation 15.5 开始已经能跟 Hyper-V 共存但性能会有折扣。如果你遇到了虚拟机莫名卡顿加网络异常可以检查启用或关闭 Windows 功能里的 Hyper-V、虚拟机平台、Windows 虚拟机监控程序平台这几个选项。真需要 VMware 全速跑就把它们关掉重启真需要 WSL2那就升级到较新的 VMware 版本接受性能折损。顺便说BIOS 里的 VT-x / AMD-V 开关必须打开不然所有虚拟化软件都用不了这个是最底层的前提。5.2 虚拟网卡驱动异常与重置网络堆栈设备管理器里如果VMware Virtual Ethernet Adapter for VMnet1/VMnet8带感叹号说明驱动装歪了或者被其他软件顶掉了。最直接的办法是卸载设备并勾选删除驱动程序软件然后重装一遍 VMware Workstation它会重新注册虚拟网卡和协议绑定。装完之后在宿主网卡的属性里应该能看到VMware Bridge Protocol这一项被勾上如果被安全软件取消勾选桥接模式就用不了。另一个隐藏问题是网卡绑定的顺序。Windows 上如果有多块物理网卡有线加无线桥接模式可能绑到了错误的网卡上虚拟机发了包却从那个没连网的网卡出去了。这种情况在虚拟网络编辑器的桥接设置里把自动改成手动指定你实际在用的那块物理网卡就行。5.3 WSL2 与虚拟机并存的注意事项现在不少人电脑上既有 VMware 虚拟机又开了 WSL2 当开发环境。这两者共用底层的虚拟化能力偶尔会出现资源争抢导致虚拟机的虚拟网卡异常。我遇到过的具体表现是WSL2 开着的状态下VMware 的 NAT 服务偶尔挂掉虚拟机上不了网关掉 WSL2 里的发行版重启 VM 服务就恢复正常。还有一点是端口占用。WSL2 会做本地端口转发如果宿主上已经监听了某个端口你想在虚拟机里跑同样端口的服务就会冲突。排查方式很简单宿主上用netstat -ano | findstr 端口号看谁在占找到进程再决定停谁。6. 常见问题速查表与避坑心得前面讲的都是按类别展开这一节把最常见的问题压缩成一张速查表出问题的时候可以照着表格直接对号入座省去翻长文的时间。6.1 故障现象与解决路径速查表现象高概率原因首选解决动作虚拟机上不了任何网VMware DHCP/NAT 服务未运行服务面板启动两个服务并设为自动虚拟机上不了任何网忘记选模式设成了仅主机改回 NAT 或桥接网卡带黄色感叹号VMnet8 虚拟网卡异常虚拟网络编辑器还原默认设置网卡在但地址是 169.254.x.x没能从 DHCP 拿到地址释放并重新获取或查宿主虚拟网卡能 ping IP 不能 ping 域名DNS 配置问题检查 resolv.conf 与 netplan/NM 配置宿主访问不了虚拟机服务服务只监听回环或防火墙拦截改监听 0.0.0.0放行端口局域网其他机器访问不了NAT 模式的天然限制切桥接或配置端口转发克隆后网络不通MAC 地址或 UUID 冲突重新生成 MAC清理 machine-id配置改了不生效改错文件或服务没重载按发行版对应的重载命令执行时通时断NAT 网段与物理局域网冲突修改 VMnet8 子网网段这张表里每一条我都在真实环境里验证过遇到问题时按行找就行。表格的价值在于它逼你先判断现象而不是直接冲进去改配置。6.2 我踩过的几个坑第一个坑是过度修改。有一次虚拟机断网我从 DNS 改到路由表折腾两个多小时最后发现问题出在宿主的安全软件把 VMware 服务禁用了。从此我养成了一个习惯任何网络问题先花一分钟看宿主的服务状态和虚拟网卡状态这一步的性价比高得离谱。第二个坑是还原默认设置太随意。虚拟网络编辑器的还原按钮确实好用但它清空一切自定义配置。后来我改成了先截图备份配置再动手。同理改网络配置文件之前先cp一份出问题能快速回滚这比凭记忆重写配置可靠得多。第三个坑是忽略虚拟机的资源分配。虚拟机内存给得太小系统在内存压力下会杀掉网络相关的后台进程表现出来也是断网但你怎么查网络配置都是对的。后来我给虚拟机分配内存时至少留 2GB 余量这类诡异问题就很少出现了。第四个坑是快照恢复后的网络残留。从快照恢复虚拟机时网卡状态可能停留在快照那一刻DHCP 租约已经过期而系统还不知道。恢复快照后手动触发一次续租或者干脆重启虚拟机能避免很多莫名其妙的断网。如果看到这里你手上的问题还没解决我的建议是回到第 1 节的那张三层排查表老老实实从网关、公网 IP、域名这三步重新走一遍。虚拟机网络排查最忌讳的就是跳步每一步的结论都是下一步的前提顺序对了问题基本跑不掉。
返回列表