简介:这份文档面向在 VMware 虚拟机中安装 Ubuntu 的初学者与运维人员,聚焦虚拟机网络连接配置这一常见难点,帮助读者解决 Ubuntu 无法上网、网络模式选择不清等问题。资源包共 1 个 doc 文件,约 63KB,内容围绕 VMware 7.1.0 与 Ubuntu 10.10 环境展开,系统讲解 NAT 模式的配置思路。文档从虚拟机网络模式入手,说明 Bridged、NAT、Host-only 等模式的区别,并重点给出 NAT 模式下的完整操作流程:设置以太网为 NAT、通过主机 ipconfig 获取 vmnet8 信息、在 Ubuntu 网络连接中编辑 Auto eth0 的 IPv4 参数,包括 IP 地址 192.168.145.X、子网掩码 255.255.255.0、网关与 DNS 192.168.145.2 等具体取值,同时提醒开启 VMware NAT Service 与 VMware DHCP Service 服务。目前已有 1015 人学习,适合需要快速排查虚拟机联网问题、对照实操的读者参考。
1. 虚拟机网络配置:为什么你的 Ubuntu 总是连不上外网
很多人第一次在 VMware 里装完 Ubuntu,打开终端敲下ping baidu.com,结果卡在那里一动不动,或者干脆报Network is unreachable。更让人抓狂的是,宿主机明明网速飞快,虚拟机却像被关进了一个没有窗户的房间。这个问题几乎每个做嵌入式开发、后端测试、安全实验的人都会遇到,而 VMware 里 Ubuntu 网络连接设置恰恰是那道绕不过去的坎。
这篇文章面向的是需要在虚拟机里跑通网络的新手,以及被 NAT、桥接、仅主机三种模式绕晕过的熟手。我会把 VMware 的网络模式选择、Ubuntu 侧的网卡配置、DNS 解析、静态 IP 设置、以及最常见的翻车场景拆开讲清楚。读完你至少能做到:知道什么场景选哪种模式,能手动改配置文件让 Ubuntu 稳定联网,遇到连不上时知道先看哪三个地方。
2. VMware 三种网络模式:选错了后面全是白费功夫
在动手改 Ubuntu 之前,必须先搞清楚 VMware 给虚拟机提供的三种网络模式到底在干什么。很多人一上来就装系统,装完发现连不上,然后开始瞎改 Ubuntu 里的配置,其实问题出在虚拟机设置那一层。选错模式,后面怎么调都是徒劳。
2.1 NAT 模式:最省心的默认选择,但有个隐藏限制
NAT 模式是 VMware 的默认选项,也是新手最不容易翻车的模式。它的工作方式是:虚拟机通过宿主机的网络出去,宿主机相当于一个路由器,给虚拟机分配一个私有 IP(通常是 192.168.x.x 段),虚拟机访问外网时,数据包经过宿主机做地址转换。
这个模式的好处是:你不需要管宿主机连的是 Wi-Fi 还是网线,也不需要管宿主机 IP 怎么变,虚拟机都能上网。适合的场景是:你只是想在 Ubuntu 里装软件、拉代码、跑测试,不需要局域网里其他机器访问这台虚拟机。
但 NAT 模式有个隐藏限制:局域网里的其他设备无法直接访问这台虚拟机。因为虚拟机躲在宿主机后面,外部设备看到的只是宿主机的 IP。如果你要做的是让手机连虚拟机上的服务做测试,或者让同事访问你虚拟机里的 Web 服务,NAT 模式就会让你白忙一场。
在 VMware 里设置 NAT 模式的路径是:虚拟机设置 → 网络适配器 → 选择「NAT 模式」。选完之后,VMware 会自动创建一个虚拟网络 VMnet8,你可以在宿主机的「虚拟网络编辑器」里看到它的子网地址和网关。
2.2 桥接模式:让虚拟机成为局域网里的独立设备
桥接模式的逻辑是:虚拟机的虚拟网卡直接桥接到宿主机的物理网卡上,虚拟机就像局域网里一台独立的电脑,会从路由器那里拿到一个和宿主机同网段的 IP。比如宿主机是 192.168.1.100,虚拟机可能就是 192.168.1.101。
这个模式适合的场景很明确:你需要局域网内其他设备访问虚拟机,或者你需要虚拟机拥有独立的 IP 地址做网络实验。比如你在 Ubuntu 里跑了一个 Web 服务,想让同办公室的同事访问,桥接模式就是正确选择。
但桥接模式也有坑。如果宿主机的网络环境是公司内网,IT 部门可能做了 MAC 地址绑定或者端口安全策略,虚拟机拿不到 IP。另外,如果你在咖啡馆或者酒店连 Wi-Fi,桥接模式经常拿不到地址,因为那些网络只允许一个设备上线。我一般会在公司内网用桥接,回家用 NAT,这个习惯帮我省了很多排查时间。
2.3 仅主机模式:隔离网络的正确打开方式
仅主机模式(Host-Only)创建一个完全隔离的网络,虚拟机和宿主机之间可以互相通信,但虚拟机不能访问外网。这个模式听起来很鸡肋,但在做安全实验、网络协议分析、或者搭建隔离测试环境时非常有用。
比如你要测试一个恶意样本的行为,或者你要模拟一个没有外网的内网环境,仅主机模式就是最安全的选择。VMware 会创建一个 VMnet1 虚拟网卡,宿主机在这个网段里有一个 IP,虚拟机也有一个同网段的 IP,两者可以直接通信。
选哪种模式,核心判断标准就一条:虚拟机需不需要被局域网其他设备访问,需不需要访问外网。需要外网不需要被访问,选 NAT;需要外网也需要被访问,选桥接;不需要外网只需要宿主机通信,选仅主机。
2.4 用命令行确认当前网络模式是否生效
选完模式之后,怎么确认虚拟机真的拿到了正确的网络配置?在 Ubuntu 里打开终端,先看网卡状态:
# 查看所有网卡的状态和 IP 地址 ip addr show # 查看默认路由,确认网关是否正确 ip route show # 测试外网连通性,-c 4 表示只发 4 个包 ping -c 4 8.8.8.8 # 测试 DNS 解析是否正常 ping -c 4 baidu.comip addr show会列出所有网卡,重点看ens33或者eth0这类有线网卡有没有inet开头的 IP 地址。如果没有,说明 DHCP 没拿到地址,或者网卡根本没启用。ip route show会显示default via 192.168.x.1这样的默认路由,如果这一行缺失,说明网关没配好,外网肯定不通。
ping 8.8.8.8和ping baidu.com的区别很关键:前者测的是 IP 层连通性,后者测的是 DNS 解析。如果8.8.8.8通但baidu.com不通,问题出在 DNS 配置上,而不是网络本身。这个区分能帮你快速定位问题在哪一层。
3. Ubuntu 侧网络配置:从 DHCP 到静态 IP 的完整操作
确认了 VMware 的网络模式之后,接下来要处理 Ubuntu 内部的网络配置。现代 Ubuntu 桌面版用 NetworkManager 管理网络,服务器版可能用 netplan 或者 systemd-networkd。不同版本、不同安装方式,配置文件的位置和写法都不一样,这是很多人翻车的地方。
3.1 先用 DHCP 跑通,再考虑静态 IP
我强烈建议的顺序是:先用 DHCP 自动获取 IP,确认能上网之后,再改成静态 IP。很多人一上来就配静态 IP,结果网关写错、DNS 写错,连问题出在哪都不知道。
DHCP 模式下,Ubuntu 会自动从 VMware 的虚拟 DHCP 服务器拿到 IP、网关和 DNS。你只需要确认网卡是启用的就行。用nmcli命令可以快速查看和操作:
# 查看所有网络连接的状态 nmcli device status # 如果 ens33 显示 disconnected,手动启用 sudo nmcli device connect ens33 # 查看当前连接的详细信息,包括 IP、网关、DNS nmcli device show ens33nmcli device status会显示每个网卡的状态,connected表示已连接,disconnected表示未连接。如果网卡是disconnected,用nmcli device connect启用它。nmcli device show会输出详细的 IP 配置信息,包括IP4.ADDRESS、IP4.GATEWAY、IP4.DNS,这三个值就是排查网络问题的核心。
如果 DHCP 能拿到地址但上不了网,先检查 VMware 的 NAT 设置里 DHCP 服务有没有开启。在 VMware 的「虚拟网络编辑器」里,选中 VMnet8,点击「DHCP 设置」,确认「启动 DHCP 服务」是勾选的。
3.2 用 netplan 配置静态 IP:YAML 格式的坑最多
Ubuntu 18.04 之后,服务器版默认用 netplan 管理网络,配置文件在/etc/netplan/目录下,通常是00-installer-config.yaml或者类似的名字。这个文件是 YAML 格式,对缩进极其敏感,多一个空格少一个空格都会导致配置不生效。
先看一下默认的配置文件长什么样:
# 查看 netplan 配置文件内容 cat /etc/netplan/00-installer-config.yaml默认内容大概是这样的:
network: ethernets: ens33: dhcp4: true version: 2改成静态 IP 的话,需要把dhcp4: true替换成具体的地址信息:
network: ethernets: ens33: dhcp4: false addresses: - 192.168.1.150/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 8.8.8.8 - 114.114.114.114 version: 2这里有几个关键点:addresses后面的/24是子网掩码,表示 255.255.255.0;routes里的via是网关地址,必须和 VMware 虚拟网络编辑器里看到的网关一致;nameservers是 DNS 服务器,可以写多个。
改完之后执行sudo netplan apply让配置生效。如果报错,用sudo netplan --debug apply看详细日志。最常见的错误是缩进不对,YAML 要求同级元素对齐,子元素比父元素多两个空格。
注意:改 netplan 配置之前,先用
ip route show记下当前的网关地址,静态 IP 的网关必须和它一致,否则改完直接断网。
3.3 DNS 解析失败:最容易误判为「网络不通」的问题
DNS 问题是虚拟机网络里最容易被误判的。现象是:ping 8.8.8.8通,但ping baidu.com报Temporary failure in name resolution。很多人看到这个报错第一反应是「网络断了」,其实网络是通的,只是域名解析不了。
Ubuntu 的 DNS 配置有几个地方要检查。首先是/etc/resolv.conf,这个文件可能是符号链接,指向 systemd-resolved 的管理文件:
# 查看 resolv.conf 的实际指向 ls -l /etc/resolv.conf # 查看当前生效的 DNS 服务器 resolvectl status # 手动测试 DNS 解析 nslookup baidu.com 8.8.8.8如果resolvectl status显示的 DNS 服务器是空的或者不对,可以在 netplan 配置里加上nameservers字段,或者直接改/etc/systemd/resolved.conf:
[Resolve] DNS=8.8.8.8 114.114.114.114 FallbackDNS=1.1.1.1改完之后重启 systemd-resolved 服务:sudo systemctl restart systemd-resolved。然后用resolvectl status确认 DNS 已经生效。
还有一个常见坑:VMware 的 NAT 模式自带 DNS 代理,虚拟网络编辑器里可以设置「NAT 设置」中的 DNS 服务器。如果这里配错了,虚拟机拿到的 DNS 就是错的。我一般会把这个地方手动改成8.8.8.8,避免 VMware 自动获取的 DNS 不稳定。
3.4 用 nmcli 配置静态 IP:桌面版的另一种选择
如果你的 Ubuntu 是桌面版,NetworkManager 是默认的网络管理工具,用nmcli配置静态 IP 比改 netplan 更直接:
# 查看当前连接名称 nmcli connection show # 修改连接的 IPv4 配置为手动 sudo nmcli connection modify "Wired connection 1" \ ipv4.method manual \ ipv4.addresses 192.168.1.150/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8,114.114.114.114" # 重新激活连接使配置生效 sudo nmcli connection up "Wired connection 1"ipv4.method manual表示手动配置,ipv4.addresses是 IP 和掩码,ipv4.gateway是网关,ipv4.dns是 DNS 服务器,多个 DNS 用逗号分隔。改完之后必须执行nmcli connection up重新激活,否则配置不会生效。
这个方式的优点是即时生效,不需要重启网络服务,也不依赖 YAML 缩进。缺点是如果 NetworkManager 和 netplan 同时存在,可能会互相覆盖。我一般会在桌面版用 nmcli,服务器版用 netplan,避免两套配置打架。
4. 避坑与排查:虚拟机网络连不上的五个血泪教训
虚拟机网络问题最让人头疼的地方是:现象一样,原因可能完全不同。下面这五个坑是我自己踩过、也帮别人排查过的典型场景,每个都按「现象 → 原因 → 解决」的结构写清楚。
4.1 现象:Ubuntu 显示网卡已连接,但 ping 不通任何地址
原因:VMware 的虚拟网卡驱动或者虚拟网络服务没有正常启动。Windows 宿主机上,VMware 会安装 VMnet1 和 VMnet8 两个虚拟网卡,如果这两个网卡被禁用或者驱动异常,虚拟机网络就会断。
解决:在 Windows 的「网络连接」里找到 VMware Network Adapter VMnet1 和 VMnet8,确认它们是启用状态。如果显示灰色或者有黄色感叹号,右键禁用再启用一次。如果还不行,在 VMware 的「编辑」菜单里打开「虚拟网络编辑器」,点击「还原默认设置」,这会重建虚拟网卡和虚拟网络。
4.2 现象:桥接模式下虚拟机拿不到 IP,NAT 模式正常
原因:宿主机的物理网卡没有正确桥接,或者当前网络环境不允许额外设备接入。公司内网的交换机可能开启了端口安全,只允许一个 MAC 地址通过;酒店或公共 Wi-Fi 可能做了客户端隔离。
解决:在虚拟网络编辑器里,把 VMnet0 的桥接目标从「自动」改成具体的物理网卡。如果还是不行,说明当前网络环境不支持桥接,换回 NAT 模式。我一般会在桥接模式连不上时,先用手机热点测试一下,如果热点能拿到 IP,说明是原网络环境的问题,不是配置问题。
4.3 现象:改完静态 IP 后,虚拟机彻底断网,连宿主机都 ping 不通
原因:静态 IP 的网段和 VMware 虚拟网络的网段不一致,或者网关写错了。比如 VMware 的 VMnet8 是 192.168.100.0/24 网段,你把虚拟机 IP 配成了 192.168.1.150,两者根本不在一个网络里。
解决:在 VMware 的虚拟网络编辑器里确认 VMnet8 的子网地址和网关。NAT 模式下,网关通常是子网的第二个 IP,比如子网是 192.168.100.0/24,网关就是 192.168.100.2。静态 IP 必须在这个子网范围内,且不能和 DHCP 地址池冲突。
4.4 现象:能 ping 通 IP,但浏览器打不开网页,apt 更新也失败
原因:DNS 解析有问题,或者 HTTP 代理设置残留。Ubuntu 的 apt 和浏览器可能走了不同的代理配置,如果之前设置过代理,改网络后代理失效会导致所有 HTTP 请求失败。
解决:先检查/etc/apt/apt.conf.d/目录下有没有代理配置文件,有的话删掉或者注释掉。然后检查环境变量http_proxy和https_proxy,用env | grep -i proxy查看,如果有值就用unset清除。最后确认 DNS 配置正确,用nslookup baidu.com测试解析是否正常。
4.5 现象:虚拟机重启后 IP 变了,之前配的静态 IP 失效
原因:netplan 配置文件被覆盖,或者 NetworkManager 和 netplan 同时管理网络导致冲突。Ubuntu 桌面版默认用 NetworkManager,如果 netplan 里也配了同样的网卡,两者会互相覆盖。
解决:确认当前生效的网络管理工具。用systemctl status NetworkManager和systemctl status systemd-networkd看哪个在运行。如果两个都在运行,建议禁用其中一个。桌面版保留 NetworkManager,服务器版保留 systemd-networkd。然后在对应的工具里配置静态 IP,不要两边都配。
5. 进阶技巧:用快照和克隆批量复制网络配置
当你需要同时跑多台 Ubuntu 虚拟机做集群测试时,一台一台配网络会让人崩溃。我一般会先配好一台「模板机」,然后用 VMware 的克隆功能批量复制,配合快照做版本管理。
5.1 模板机制作:一台配好,批量复制
先创建一台 Ubuntu 虚拟机,网络模式选 NAT,用 DHCP 确认能上网。然后改成静态 IP,确认重启后 IP 不变。接着安装常用工具,清理日志和临时文件,最后关机。
在 VMware 里右键这台虚拟机 → 管理 → 克隆 → 创建完整克隆。完整克隆会复制整个磁盘,克隆出来的虚拟机有独立的 MAC 地址和磁盘文件,不会互相影响。链接克隆则共享父磁盘,节省空间但性能稍差,适合临时测试。
克隆完成后,启动新虚拟机,第一件事是改主机名和静态 IP。主机名用hostnamectl set-hostname改,静态 IP 在 netplan 或 nmcli 里改。如果忘了改 IP,两台虚拟机会冲突,现象是其中一台突然断网。
5.2 快照策略:改网络配置前的后悔药
VMware 的快照功能是网络配置的后悔药。在改任何网络配置之前,先打一个快照,改完如果断网了,直接回滚,不用重装系统。
我一般会在三个时间点打快照:装完系统确认能上网之后、改静态 IP 之前、装完关键软件之后。快照名字写清楚,比如「DHCP-正常上网」「静态IP-已配置」「Docker-已安装」,这样回滚的时候不会搞混。
注意:快照会占用磁盘空间,而且快照越多,虚拟机性能越差。我一般只保留最近三个快照,旧的及时删除。
5.3 用脚本批量验证网络连通性
克隆出多台虚拟机之后,怎么快速确认每台的网络都正常?写一个简单的 bash 脚本,在每台机器上跑一遍:
#!/bin/bash # 检查网络连通性的三个关键指标 echo "=== 网卡 IP 地址 ===" ip addr show | grep "inet " | grep -v "127.0.0.1" echo "=== 默认网关 ===" ip route show | grep "default" echo "=== 外网连通性 ===" if ping -c 2 8.8.8.8 &> /dev/null; then echo "IP 层连通正常" else echo "IP 层不通,检查网关和网卡" fi echo "=== DNS 解析 ===" if nslookup baidu.com &> /dev/null; then echo "DNS 解析正常" else echo "DNS 解析失败,检查 nameservers 配置" fi这个脚本把网络排查的四个关键点串起来了:IP 地址、网关、IP 层连通性、DNS 解析。在每台克隆机上跑一遍,输出结果一目了然。如果某台机器 IP 层不通,重点看网关;如果 IP 层通但 DNS 失败,重点看 nameservers 配置。
我自己的习惯是:每次克隆完虚拟机,先跑这个脚本,确认网络正常再开始干活。这个习惯帮我省了很多「以为是代码问题,其实是网络问题」的排查时间。希望帮到你。
本文还有配套的精品资源,点击获取