ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

虚拟机连接不上网络排查:VMware网络模式、DNS与静态IP配置

虚拟机连接不上网络排查:VMware网络模式、DNS与静态IP配置 1. 装完系统那一刻的断网先把现象分到四类里晚上十一点Ubuntu 22.04 装完apt update卡在Connecting to archive.ubuntu.com光标一动不动。这种场景我遇到过太多次了第一反应千万别是重装系统——虚拟机连接不上网络这件事九成以上跟系统本身没关系而是虚拟网络这一层出了问题。虚拟机的网络是宿主机 虚拟网络设备 虚拟机内部配置三段拼起来的链路任何一段断了表现都是上不了网但修法完全不同。所以动手之前先做一件事把现象归类。虚拟机断网不是一个病是一类症状。你把它分到下面四类里基本就能锁定是哪一段出了问题剩下的就是照方抓药。1.1 网卡根本没出现适配器列表里空空如也Linux 下敲ip addr只看到lo一个回环口没有ens33、eth0这类名字Windows 下ipconfig /all只列出回环伪接口。这说明虚拟网卡压根没被操作系统识别出来问题 100% 在虚拟机硬件层或宿主机侧跟 IP、DNS 一点关系都没有。常见诱因有三个一是虚拟机设置里网络适配器被删掉了或者被勾成了已断开连接二是这台虚拟机是从别的机器上直接复制过来的MAC 地址跟原机器撞了三是宿主机上 VMware 的虚拟网卡被卸载了虚拟机以为自己在插一张不存在的网线。这一类问题的特征是干净得可疑——连报错都没有因为系统根本没发现过网卡。1.2 网卡在但地址是 169.254 开头的ip addr能看到网卡状态是 UP但拿到的是169.254.x.x这样的地址掩码255.255.0.0。这是 Windows 上的 APIPA 机制Linux 上叫 zeroconf翻译成人话就是我没等到 DHCP 应答先自己编一个地址凑合用。这个地址是死路一条它连本地网段都出不去。看到 169.254不要再折腾虚拟机内部的配置了直接把注意力转到宿主机侧VMware 的 DHCP 服务是不是没启动VMnet8 这张虚拟网卡在 Windows 网络连接里是不是带个黄色感叹号虚拟网络编辑器里的使用本地 DHCP 服务是不是被取消勾选了1.3 能 ping 通网关和 IP就是解析不了域名这一类最容易被误判成没网。表现为ping 192.168.152.2秒回ping 223.5.5.5也通但ping www.baidu.com报Temporary failure in name resolution浏览器打不开任何网页。这是纯 DNS 问题链路层和网络层都是好的只是域名没法翻译成 IP。之所以要单独列出来是因为很多人一看浏览器打不开就去重装 VMware Tools、去还原虚拟网络设置把本来正常的网络配置改乱了。判断方法很简单只要 IP 能通就说明虚拟网络本身没坏。1.4 单向连通宿主机连不上虚拟机的服务还有一种半通不通的情况虚拟机自己能上网浏览器也正常但你在虚拟机里起了个 Nginx 或 Tomcat回到宿主机浏览器里输虚拟机的 IP转圈半天打不开。或者反过来局域网里的同事访问不了你这台虚拟机上跑的服务。这种方向性故障多半不是网络断了而是模式选错了、端口没映射、或者防火墙拦了入站。尤其主机访问虚拟机网站这个需求在 NAT 模式下必须手工做端口映射很多人不知道这一点以为是网络故障其实只是少配了一条规则。2. 桥接、NAT、仅主机模式选错后面全是无用功分类完现象之后第二个必须确认的事情是你的虚拟机用的是哪种网络模式。这个选项在虚拟机设置里就三个字母的差别但它决定了你的虚拟机在网络拓扑里的位置也决定了后面该去改哪一层。选错模式再多的排查都是白费功夫。2.1 桥接模式像一台独立设备接入局域网桥接Bridged是把虚拟机的虚拟网卡直接搭到宿主机所连的那块物理网卡上让虚拟机看起来像局域网里新插了一台设备。它会从你路由器那边拿到一个和宿主机同网段的 IP同网段的其他电脑也能直接访问它。做局域网内多机联调、模拟真实的客户端-服务端环境桥接是最贴近真实场景的选择。代价也很明确虚拟机成了局域网设备就得受这个局域网的规矩管。有些办公网络会做接入限制只放行已登记的设备有些路由器会挑 MAC 地址还有些人用的是无线网卡Intel 等厂商的无线驱动对桥接的支持本来就一般典型症状是虚拟机开机后一直拿不到地址。这类环境下用桥接纯属给自己找麻烦。2.2 NAT 模式默认选项入站访问要额外开洞NAT 模式是 VMware 新装虚拟机时的默认值走的是 VMnet8 这个虚拟网络。虚拟机通过宿主机的网络出口访问外网出方向基本不用管装完就能用。它的好处是不占用局域网 IP不会跟公司网络策略打架换 WiFi 也不需要重配。它的限制在入方向外部设备没办法主动连进来因为虚拟机藏在宿主机后面。你要在宿主机浏览器里访问虚拟机的网站就得去虚拟网络编辑器的 NAT 设置里加一条端口映射把宿主机的 8080 映射到虚拟机的 80。这个操作后面我会详细写先记住结论NAT 模式下虚拟机上网没问题被访问要手动开洞。2.3 仅主机模式它天生就不该上网仅主机Host-Only走的是 VMnet1只有宿主机和虚拟机之间能互相看到外网完全隔离。这个模式的用途是做安全隔离的实验环境比如你想跑一些不想让它接触外网的东西。很多人装完系统发现上不了网一查模式选的是仅主机那就别查了改模式吧——这个模式上不了网是设计如此不是故障。2.4 三种模式的取舍对照模式对应虚拟网卡能否上外网能否被局域网访问典型使用场景桥接VMnet0能依赖宿主机网络能需同网段多机联调、模拟真实服务器NATVMnet8能开箱即用不能需端口映射日常开发、装软件、跑容器仅主机VMnet1不能只能宿主机访问隔离实验、安全测试我自己的习惯是只要不是明确需要在局域网里被别的机器访问一律用 NAT。理由很直白——NAT 跟宿主机的网络环境完全解耦你从家里换到公司、从 WiFi 换到有线虚拟机里的配置一个都不用改。桥接虽然真实但每次换网络环境都要重新拿地址麻烦。3. 宿主机这一侧虚拟网卡与两个后台服务确认了模式接下来把视角拉回宿主机。虚拟机连接不上网络绝大多数根因都在这一侧但偏偏这一步最容易被跳过——大家都习惯一头扎进虚拟机里改/etc/resolv.conf改了半天发现宿主机上服务根本没起来。3.1 两个后台服务没启动症状极具辨识度Windows 上按Win R输入services.msc在列表里找这两个VMware DHCP Service和VMware NAT Service。这两个服务正常情况下是自动启动的但如果你装过某些系统优化开机加速类软件它们经常被顺手禁掉然后虚拟机就再也拿不到 DHCP 地址了。判断方法很直接如果你用的是 NAT 模式虚拟机拿到的是 169.254 开头的地址而宿主机上这两个服务里有一个处于已停止状态那就是它了。把启动类型改成自动手动启动一次回到虚拟机里执行ipconfig /renew或重启网络地址立刻就回来了。3.2 VMnet1 / VMnet8 出现感叹号的三种修法打开控制面板 → 网络和 Internet → 网络连接如果看到VMware Network Adapter VMnet8上面挂着个黄色感叹号说明这张虚拟网卡驱动状态异常。按下面的顺序从轻到重试别一上来就重装 VMware第一步禁用再启用。右键网卡选禁用等几秒再选启用。这一步能解决掉相当一部分因为休眠、快速启动导致的驱动挂起问题。第二步卸载后重建。打开设备管理器展开网络适配器找到VMware Virtual Ethernet Adapter for VMnet8右键卸载设备如果弹出删除此设备的驱动程序软件的选项就勾上。然后打开 VMware 的编辑 → 虚拟网络编辑器点右下角更改设置提权再点还原默认设置。这一步会重建全部虚拟网卡宿主机上的自定义网段配置会丢但能修好九成驱动问题。第三步修复安装。控制面板里对 VMware Workstation 选更改 → 修复保留虚拟机文件只重装程序部分。3.3 虚拟网络编辑器里几个真正影响连通性的开关虚拟网络编辑器是这套东西的控制中枢但它的界面信息密度不高很多人打开看一眼就关了。里面有几个开关值得逐项确认一是桥接模式到底桥到哪块网卡。默认是自动自动逻辑会挑一块正在工作的物理网卡。但如果你同时插着有线和无线或者装了虚拟专用网卡之类的额外适配器自动选择经常挑错。这时候改成手动指定到实际在用的那块网卡问题就解决了。二是子网 IP 和掩码。默认 NAT 网段是192.168.x.0/24其中宿主机侧的 VMnet8 网卡分到.1NAT 设备用.2DHCP 从.128开始往后发。这三个数字后面配静态 IP 时要用到建议截图存下来。三是NAT 设置里的端口映射。前面提到的主机访问虚拟机网站就在这里配。添加一条规则主机端口 8080类型 TCP虚拟机 IP 填你虚拟机实际拿到的地址虚拟机端口 80。配完在宿主机浏览器里访问http://localhost:8080就能看到虚拟机的页面了。主机端口别用 80容易跟宿主机上已有的服务撞车。3.4 宿主机的防火墙把虚拟网段当成公用网络还有一种很隐蔽的情况网络链路完全正常虚拟机内部也一切正常但就是宿主机访问不了虚拟机上的服务。这时候去看看 Windows Defender 防火墙。虚拟网卡首次启用时系统会让它归类为专用网络还是公用网络如果被归成了公用入站规则会严格得多虚拟机的网站自然打不开。处理方式是进防火墙和网络保护找到对应的网络配置文件改成专用网络或者在高级设置里针对VMnet8网段加一条入站放行规则。Linux 宿主机上如果是ufw记得sudo ufw allow from 192.168.152.0/24把整个虚拟网段放进来不然虚拟机的请求会被宿主机自己挡掉。4. 虚拟机内部从链路层一路查到 DNS宿主机侧确认无误之后才轮到进虚拟机里排查。这里我习惯按 OSI 模型的顺序自下往上走一层一层验证绝不跳步。跳步的后果是——你可能改了 DNS结果真正的问题是网卡没起来。4.1 第一层网卡有没有被识别、是不是 UPip addr ip link show正常输出里应该能看到你要用的那块网卡Ubuntu 通常是ens33CentOS 常见ens160老一点的镜像可能是eth0状态字段里有UP下面挂着inet地址。如果看到state DOWN先试着把它拉起来sudo ip link set ens33 up。如果ip addr里压根没有这块网卡那就回到第 1.1 节这是硬件层的事。Windows 虚拟机里对应的命令是ipconfig /all输出里留意三件事IPv4 地址是什么、默认网关有没有值、DHCP 是否已启用。4.2 第二层有没有默认路由有 IP 不等于有路由。很多时候虚拟机的地址配对了但路由表里没有默认网关结果就是能通自己通不了任何别人。执行ip route正常应该看到类似default via 192.168.152.2 dev ens33这一行。注意 NAT 模式下的网关通常是网段的.2不是.1。.1是宿主机上 VMnet8 那块网卡自己的地址.2才是做地址转换的那个虚拟设备。这个细节坑过不少人——他们把网关填成.1然后一直纳闷为什么上不了网。验证方法就是直连网关ping -c 3 192.168.152.2通则说明链路和网关都没问题不通就说明问题在虚拟网络这一层回去检查 VMware 服务和虚拟网卡。4.3 第三层NetworkManager 是否在托管这块网卡这是 Linux 虚拟机里最常见也最容易被忽略的坑。Ubuntu 20.04 之后默认用 netplan 生成网络配置底层的 renderer 可能是systemd-networkd也可能是NetworkManager。如果你手动改过/etc/network/interfaces或者把 renderer 改来改去很容易出现网卡明明在、配置明明对但就是没有 IP的状态。排查命令nmcli device status nmcli connection show如果网卡状态显示unmanaged或disconnected说明 NetworkManager 没接管它。可以尝试sudo nmcli device connect ens33或者检查/etc/netplan/目录下的 yaml 文件确认renderer字段跟你实际的网络管理方式一致。桌面版 Ubuntu 里右上角网络图标显示未托管基本就是这个原因。4.4 第四层DNS 到底是谁在管确认 IP 和网关都通了之后再看 DNScat /etc/resolv.conf resolvectl status nslookup www.baidu.com 223.5.5.5最后那条命令很关键它绕开系统配置的 DNS直接拿一个公共 DNS 去解析。如果指定 DNS 能解析、不指定就不行那问题 100% 出在本机的 DNS 配置上跟网络链路毫无关系。反过来如果指定 DNS 也解析不了那 DNS 服务器的出方向不通回去查路由。Ubuntu 上/etc/resolv.conf通常是个软链接指向systemd-resolved的运行时文件你直接编辑它重启后被覆盖白改。正确的做法是改 netplan 配置里的nameservers字段然后sudo netplan apply。4.5 第五层DHCP 客户端的日志里写着答案如果 DHCP 一直拿不到地址别猜直接看日志journalctl -u NetworkManager -b | grep -i dhcp或者看/var/log/syslog。日志里通常会明确写no DHCPOFFERS received翻译过来就是广播出去了但没人应答指向的正是宿主机侧的 DHCP 服务。Windows 虚拟机上看事件查看器或者干脆ipconfig /release再ipconfig /renew看它报什么错。4.6 一个容易漏掉的隐形杀手MTU有些环境里会出现这样诡异的现象ping小包全通ping大包全丢网页打不开但 IM 能用。这通常是 MTU 不匹配。桥接模式下如果宿主机物理网卡的 MTU 被改过有些网络环境要求 1400 或者更小虚拟机的默认 1500 就会造成分片失败。验证方法是用不允许分片的探测包ping -M do -s 1472 192.168.1.1把-s后面的数字逐步调小找到能通的最大值再加 28 就是合适的 MTU。然后在虚拟机里把网卡 MTU 调到这个值。这类问题排查起来最耗时间因为所有常规检查都是正常的。5. 静态 IP让地址别再来回漂用 DHCP 图省事但代价是地址会变。今天虚拟机是192.168.152.128明天开机变成.130你昨天配好的端口映射、写死在代码里的连接串全部失效。做开发环境我建议直接上静态 IP一次配好省心。5.1 Linux 侧netplan 配置要点Ubuntu 18.04 之后网络配置统一走 netplan。编辑/etc/netplan/下的 yaml 文件文件名无所谓以.yaml结尾即可内容大致长这样network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: false addresses: - 192.168.152.100/24 routes: - to: default via: 192.168.152.2 nameservers: addresses: - 192.168.152.2 - 223.5.5.5几个必须注意的点dhcp4一定要显式设成false否则静态地址和 DHCP 会打架via填的是网关也就是前文说的.2nameservers里先用虚拟网段内的 DNSVMware 会把宿主机的 DNS 转发进来再加一个公共 DNS 做兜底。改完先sudo netplan try它会给你 120 秒确认窗口如果配错了会自动回滚比直接apply安全得多。5.2 Windows 虚拟机里的静态 IP 设置Windows 虚拟机相对直观网络适配器属性里选 IPv4手动填地址、掩码、网关、DNS。网关同样填.2。如果更喜欢命令行管理员权限的 PowerShell 里用netsh interface ip set address系列命令也能配好处是能写成脚本批量执行。不管哪种方式配完都要验证一遍ipconfig /all看地址是否生效ping网关看是否通nslookup看域名解析是否正常。三步都过了才算配好。5.3 复制虚拟机导致的 IP 与 MAC 冲突这是个高频坑你把一台配好的虚拟机复制一份当第二台用两台同时开机然后其中一台上不了网。原因是复制出来的虚拟机跟原机器共用同一套 MAC 地址和 IP网络里出现两个相同身份路由器或交换机直接懵了。解决办法是改 MAC。VMware 里虚拟机设置 → 网络适配器 → 高级 → 生成新的 MAC 地址。改完之后Linux 里可能还要处理/etc/machine-id和 udev 规则Windows 里可能会多出一张未识别的网络的虚拟网卡把它们清理掉再重新配 IP。所以我一般建议复制虚拟机之后第一件事就是改 MAC别等到冲突了再回头找原因。6. 克隆、快照、嵌套虚拟化带来的假故障有一类断网最难查因为它的现象和普通网络故障一模一样但根因完全不在网络配置上。这类问题我统称为假故障踩过几次之后就能一眼认出来。6.1 克隆之后网卡从列表里消失VMware 克隆虚拟机会重新生成 MAC 地址如果原来的 Linux 系统里把 MAC 写死在了 netplan 配置或 udev 规则里/etc/udev/rules.d/70-persistent-net.rules新 MAC 和旧规则对不上系统就会干脆不给这块网卡配地址。表现就是ip addr里只能看到lo。处理方式删掉 udev 里的旧规则文件检查 netplan 配置里有没有写macaddress字段有就删掉。Windows 上对应的是设备管理器里显示隐藏的设备把灰色的旧网卡删掉然后扫描硬件改动。6.2 快照回滚之后网络退回过去快照回滚会把整个系统状态一起退回去包括/etc/netplan的配置和 DHCP 租约记录。问题在于宿主机侧的 DHCP 服务并不知道你回滚了它可能已经把那个地址分给了别的虚拟机。结果就是你回滚完开机地址看起来是对的但网络里已经有个李鬼在用了。症状是能通网关但时通时不通或者干脆完全不通。处理办法很简单回滚之后执行一次ipconfig /renewWindows或sudo netplan apply加重新连接Linux让它重新走一遍地址申请流程。6.3 宿主机开启了 Hyper-V 或 WSL2VMware 的网络行为变奇怪这个坑我在 Windows 11 上遇到过。宿主机上启用了 WSL2 之后VMware 的桥接模式开始时不时失效虚拟网卡在设备管理器里反复消失又出现。原因是这两套东西都在抢底层的虚拟化能力Hyper-V 一旦启用VMware 就得走另一条兼容路径桥接模式的实现方式也跟着变了。判断方法检查控制面板 → 程序和功能 → 启用或关闭 Windows 功能里Hyper-V、虚拟机平台等相关组件是否被勾选。如果你不需要它们取消勾选并重启VMware 的网络通常就恢复正常了。如果你确实需要 WSL2那就接受桥接不好使日常改用 NAT 模式这个组合是可以正常工作的。另外宿主机上如果开启了内核隔离、内存完整性这类安全功能也可能影响虚拟化行为排查时可以临时关掉验证一下。7. 一张速查表和几条真金白银的心得排查链路讲完了最后给你一张可以直接贴墙上的速查表。遇到虚拟机断网从第一行往下对不用跳步。现象最快验证方式大概率原因处理动作只有 lo没有业务网卡ip addr网卡被删、MAC 冲突、克隆后残留检查虚拟机设置改 MAC清 udev 规则地址为 169.254.x.xip addrDHCP 服务未启动、VMnet 网卡异常启动 VMware DHCP 服务还原默认设置IP 通、域名不通nslookup 域名 公共DNSDNS 配置错误或被覆盖改 netplan 的 nameservers别直接改 resolv.conf网关填错ip route网关写成.1而非.2改成 NAT 网段的.2虚拟机上网正常、主机访问不了宿主机浏览器访问NAT 模式缺少端口映射虚拟网络编辑器里加端口转发一切正常但服务打不开换 IP 直连测试宿主机防火墙拦截入站放行虚拟网段改网络归类为专用小包通、大包丢ping -M do -s 1472MTU 不匹配下调虚拟机网卡 MTU几条我自己踩出来的经验写在这里供参考。排查顺序千万别反。先看宿主机上的 VMware 服务和虚拟网卡再看虚拟机内部的配置。反过来的话你会在虚拟机里改半天最后发现宿主机上的 NAT 服务压根没启动。每次只改一个变量。网络问题涉及好几层同时改三处配置改完通了也不知道是哪一处起的作用下次遇到还是不会。改一处、验一次这个习惯值千金。别动不动就还原默认设置。这个操作会清掉你所有的自定义网段、端口映射和静态 IP 规划。如果环境里还有其他虚拟机依赖这套配置一按下去全都得重配。先在前面几级轻量方案里试实在不行再动它。装系统之前就把网络模式定下来。我见过太多人在系统装完之后来回切换桥接和 NAT切一次网卡名变一次配置全废。预先想清楚这台机器要不要被局域网访问选一个模式一路用到底。顺手记一份网络参数。网段、网关、DHCP 地址池范围、DNS这四个数字截图存在笔记里。下次再出问题不用重新打开虚拟网络编辑器翻直接对照检查能省不少时间。
返回列表