简介:这份资源面向在 VMware 虚拟机中安装 Ubuntu 的初学者与运维入门者,聚焦解决虚拟机上网配置这一常见难题。内容以 VMware 7.1.0 搭配 Ubuntu 10.10 为实验环境,围绕 NAT 模式展开,涵盖虚拟机网络模式选择、vmnet8 信息查询、Ubuntu 有线连接中 IPv4 地址、子网掩码、网关与 DNS 的填写,以及 VMware NAT Service 和 VMware DHCP Service 的启动方法,并附有 Windows XP 下的服务开启路径,便于对照操作。资源包共 1 个 doc 文档,约 63KB,篇幅精炼,适合作为配置时的速查手册。目前已有 1015 人学习下载,说明该问题在虚拟机使用者中较为普遍。读者可借此快速理清 NAT 模式下的网络配置思路,掌握从主机到虚拟机的完整设置流程,并学会通过开启相关服务排查无法联网的故障,适合需要快速搭建 Ubuntu 上网环境的学习者参考。
1. 虚拟机网络又断了:为什么每次重启都要重设一遍
在 VMware 里跑 Ubuntu 的人,大概率都经历过这个场景:昨天还能apt update,今天开机就只剩ping不通网关,浏览器转圈,SSH 连不上。你打开设置面板,发现网卡状态是「已连接」,但就是没网。于是开始怀疑镜像有问题、怀疑 VMware 版本、怀疑系统装坏了——最后发现只是网络模式选错了,或者 DHCP 没拿到地址。
这个标题讲的就是这件事:在 VMware 虚拟化环境里,把 Ubuntu 虚拟机的网络连接从「玄学」变成「可复现」。它解决的不是某个高深问题,而是三类高频诉求:一是让虚拟机稳定上网,二是让宿主机和虚拟机互相访问,三是让虚拟机拥有独立可被外部访问的地址。适合谁?适合刚装完 Ubuntu 虚拟机的新手,也适合被 NAT 端口转发折磨过的老手——因为下面这些参数和排查路径,很多人其实一直没系统梳理过。
2. 先选对网络模式:桥接、NAT、仅主机到底差在哪
2.1 三种模式的本质区别与选型逻辑
VMware 给虚拟机提供的网络模式,核心就三种:桥接(Bridged)、NAT、仅主机(Host-Only)。很多人翻车不是因为不会配,而是一开始就选错了模式,后面怎么调都是白费。
桥接模式的逻辑是:虚拟机直接「挂」到宿主机所在的物理网络上,从物理网络的 DHCP 服务器拿地址。对局域网里的其他设备来说,这台 Ubuntu 就是一台独立主机。它的优点是虚拟机可以被局域网内其他机器直接访问,适合做服务器、需要被外部连接的场景。缺点是会占用物理网络的一个 IP,如果公司或学校网络做了 MAC 地址绑定或准入控制,虚拟机可能拿不到地址。
NAT 模式的逻辑是:VMware 在宿主机上虚拟出一个 NAT 设备,虚拟机通过它共享宿主机的网络出口。虚拟机可以上网,但外部设备默认访问不到虚拟机,除非手动做端口转发。它的优点是即插即用,不依赖物理网络的 DHCP 策略,适合个人开发、临时测试。缺点是外部访问需要额外配置,且某些依赖广播或组播的协议会受限。
仅主机模式的逻辑是:只保留宿主机和虚拟机之间的私有网络,虚拟机不能上外网。它适合做隔离实验、安全测试、纯内网集群模拟。选它的理由通常很明确——就是要断外网。
选型判断可以按这个顺序问自己:虚拟机需不需要被局域网其他设备访问?需要就桥接。不需要但需要上网?NAT。完全不需要外网?仅主机。
2.2 在 VMware 里切换模式的完整步骤
选好模式后,操作路径是固定的。先关掉 Ubuntu 虚拟机,不是挂起,是彻底关机。然后在 VMware 里右键虚拟机 → 设置 → 网络适配器,选择对应模式。
这里有个细节:如果你选的是「自定义」,可以指定具体的虚拟网络,比如 VMnet0 对应桥接,VMnet8 对应 NAT,VMnet1 对应仅主机。默认的「桥接」和「NAT」选项会自动关联到对应虚拟网络,但如果你之前改过虚拟网络编辑器,最好确认一下。
# 关机后操作,不要挂起 # VMware 菜单:虚拟机 -> 设置 -> 网络适配器 # 选择「桥接」或「NAT」或「仅主机」 # 如果选「自定义」,确认对应的 VMnet 编号切换完成后开机,Ubuntu 里需要确认网卡是否识别到新网络。用ip link看接口状态,用ip addr看有没有拿到地址。如果接口是 DOWN,先sudo ip link set ens33 up(接口名以实际为准)。
参数说明:VMnet0 默认桥接,VMnet1 默认仅主机,VMnet8 默认 NAT。这些编号可以在 VMware 的「虚拟网络编辑器」里查看和修改,但改之前要确认宿主机没有其他虚拟化软件占用相同网段。
2.3 桥接模式下的网段冲突排查
桥接模式最常见的问题是网段冲突。比如宿主机所在局域网是 192.168.1.0/24,而 VMware 的桥接虚拟网络也配成了 192.168.1.0/24,但 DHCP 范围跟物理路由器重叠,就会导致虚拟机拿到一个和物理设备冲突的地址,或者干脆拿不到地址。
排查方法是:在 Ubuntu 里ip addr看地址,在宿主机上ipconfig(Windows)或ifconfig(Linux/macOS)看宿主机地址,对比网段。如果虚拟机地址是 169.254.x.x,说明 DHCP 失败,需要检查桥接的物理网卡选对没有。VMware 的桥接设置里可以指定「桥接到」哪块物理网卡,如果宿主机有多块网卡(有线、无线、虚拟网卡),选错了就会导致虚拟机挂在一个没有 DHCP 的网络里。
解决方式:打开虚拟网络编辑器 → 选中 VMnet0 → 桥接到指定网卡,不要用「自动」。自动模式在有多块网卡时经常选错。
3. NAT 模式下的上网配置与端口转发
3.1 确认 NAT 的 DHCP 和网关参数
NAT 模式能上网的前提是:虚拟机从 VMware 的 DHCP 服务拿到了地址,且网关指向 NAT 设备的地址。默认情况下,VMnet8 的网段是 192.168.x.0/24,网关通常是 192.168.x.2,DHCP 范围是 192.168.x.128 到 192.168.x.254。
在 Ubuntu 里用ip route看默认路由,应该是default via 192.168.x.2 dev ens33。如果默认路由缺失,说明 DHCP 没配好,或者 Netplan 配置有问题。
# 查看地址和路由 ip addr show ens33 ip route show # 手动测试网关连通性 ping -c 3 192.168.xxx.2 # 测试 DNS 解析 nslookup example.com如果网关能通但域名解析失败,检查/etc/resolv.conf或 Netplan 里的 nameservers 配置。Ubuntu 18.04 之后默认用 Netplan 管理网络,配置文件在/etc/netplan/下。
3.2 Netplan 静态地址配置模板
如果你不想用 DHCP,或者 DHCP 不稳定,可以配静态地址。Netplan 的配置文件通常是/etc/netplan/00-installer-config.yaml,编辑前先备份。
# /etc/netplan/00-installer-config.yaml network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no addresses: - 192.168.xxx.100/24 routes: - to: default via: 192.168.xxx.2 nameservers: addresses: - 192.168.xxx.2 - 8.8.8.8改完后执行sudo netplan apply。如果报错,用sudo netplan try可以在 120 秒内回滚,避免配错后失联。
参数说明:dhcp4: no关闭 DHCP;addresses里的地址要在 VMnet8 的网段内,且不要和 DHCP 范围冲突;via是 NAT 网关地址,默认是网段里的 .2;nameservers可以填 NAT 网关,也可以填公共 DNS。注意 YAML 对缩进敏感,用空格不用 Tab。
3.3 端口转发让外部访问 NAT 虚拟机
NAT 模式下外部访问虚拟机需要端口转发。在 VMware 的虚拟网络编辑器里,选中 VMnet8 → NAT 设置 → 添加映射。比如把宿主机的 2222 端口转发到虚拟机的 22 端口,外部通过ssh -p 2222 user@宿主机IP就能连上。
# 宿主机上测试端口转发是否生效 ssh -p 2222 user@127.0.0.1 # 虚拟机内确认 sshd 监听 22 端口 ss -tlnp | grep 22注意:端口转发只对 TCP/UDP 生效,ICMP 默认不转发,所以外部ping不通虚拟机是正常的。另外,如果宿主机防火墙拦截了 2222 端口,需要放行。
4. 避坑与排查:网络不通时先看这五个地方
4.1 网卡没起来,ip addr只有 lo
现象:Ubuntu 里ip addr只显示回环接口,没有 ens33 或其他以太网接口。原因通常是 VMware 的网络适配器被移除,或者 Ubuntu 的网卡驱动没加载。解决:先确认 VMware 设置里网络适配器存在且已连接,然后在 Ubuntu 里lspci | grep -i ethernet看有没有识别到虚拟网卡。如果没有,尝试sudo modprobe e1000或sudo modprobe vmxnet3,具体模块取决于 VMware 配置的适配器类型。
4.2 有地址但 ping 不通网关
现象:ip addr有 192.168.x.x 地址,但ping 网关超时。原因可能是网段配错、网关地址写错,或者 VMware 的 NAT 服务没启动。解决:先核对虚拟网络编辑器里的网段和网关,再在宿主机服务里确认「VMware NAT Service」和「VMware DHCP Service」是否运行。Windows 下按services.msc查看,Linux 下用systemctl status vmware检查。
4.3 DNS 解析失败但 IP 能通
现象:ping 8.8.8.8通,但ping example.com失败。原因是 DNS 配置缺失或错误。解决:检查/etc/resolv.conf是否有nameserver条目。如果是 Netplan 管理,改 YAML 里的nameservers后netplan apply。注意/etc/resolv.conf可能是符号链接,直接改可能被覆盖。
4.4 桥接模式拿不到地址
现象:桥接模式下虚拟机地址是 169.254.x.x。原因是桥接的物理网卡选错,或者物理网络禁止未知 MAC 地址。解决:在虚拟网络编辑器里把 VMnet0 桥接到正确的物理网卡,不要用自动。如果是公司网络做了 MAC 准入,桥接模式可能无法使用,换 NAT。
4.5 改完配置后 SSH 断连
现象:通过 SSH 改 Netplan 配置,netplan apply后连接断开,再也连不上。原因是地址或网关改错,虚拟机失联。解决:改配置前用sudo netplan try,它会在应用后等待确认,超时自动回滚。如果已经失联,通过 VMware 控制台进入虚拟机,检查ip addr和ip route,修正配置。
5. 让网络配置可复现:快照、克隆与自动化检查
5.1 用快照锁定可用网络状态
网络调通后,第一件事是打快照。VMware 的快照可以保存当前网络配置和系统状态,下次出问题直接回滚,不用重新配。操作:虚拟机 → 快照 → 拍摄快照,命名写清楚,比如「NAT-静态IP-可上网」。
但快照不是后悔药,它占磁盘,且如果虚拟机在快照后有大量数据写入,回滚会丢数据。我一般只在网络配置刚调通、还没装其他东西时打一个基线快照。
5.2 克隆时避免 MAC 地址冲突
克隆虚拟机时,VMware 会问是「创建链接克隆」还是「创建完整克隆」。链接克隆共享磁盘,完整克隆独立磁盘。不管哪种,都要注意 MAC 地址:如果克隆时选了「保留 MAC 地址」,两台虚拟机同时开机就会冲突,导致网络异常。
正确做法:克隆时选「创建新 MAC 地址」,或者在虚拟机设置里手动重新生成 MAC。克隆后开机,Ubuntu 里可能看到网卡名变了(比如从 ens33 变成 ens34),因为 Netplan 按 MAC 匹配配置。这时需要更新 YAML 里的接口名,或者用sudo dpkg-reconfigure重置网络配置。
5.3 一个可复用的网络自检脚本
每次改完网络,跑一遍这个脚本,能快速定位问题出在哪一层。
#!/bin/bash # net-check.sh - 虚拟机网络自检 echo "=== 接口状态 ===" ip -br link echo "=== 地址信息 ===" ip -br addr echo "=== 默认路由 ===" ip route | grep default echo "=== 网关连通性 ===" GW=$(ip route | grep default | awk '{print $3}') if [ -n "$GW" ]; then ping -c 2 -W 2 "$GW" && echo "网关可达" || echo "网关不可达" else echo "无默认网关" fi echo "=== DNS 解析 ===" nslookup example.com 2>&1 | tail -3 echo "=== 外网连通性 ===" ping -c 2 -W 2 8.8.8.8 && echo "外网可达" || echo "外网不可达"逻辑说明:先看链路层接口是否 UP,再看网络层有没有地址,再看路由是否正确,然后逐层测试网关、DNS、外网。参数说明:-br是简洁输出,-W 2是超时 2 秒,避免卡住。这个脚本不依赖特定网段,桥接、NAT、仅主机都能用。
5.4 我踩过的一个坑:Netplan 和 NetworkManager 打架
Ubuntu 桌面版默认用 NetworkManager 管理网络,服务器版用 systemd-networkd。如果你在桌面版上手动写了 Netplan 配置,但 renderer 写的是 networkd,NetworkManager 可能不认,导致配置不生效。现象是netplan apply没报错,但ip addr还是旧地址。
解决:桌面版把 renderer 改成 NetworkManager,或者干脆用nmcli命令配。服务器版保持 networkd。判断方法:systemctl status NetworkManager看是否运行,运行就用 NetworkManager。
# 桌面版用 nmcli 配静态地址 nmcli con mod "有线连接 1" ipv4.addresses 192.168.xxx.100/24 nmcli con mod "有线连接 1" ipv4.gateway 192.168.xxx.2 nmcli con mod "有线连接 1" ipv4.dns "192.168.xxx.2" nmcli con mod "有线连接 1" ipv4.method manual nmcli con up "有线连接 1"这个坑我翻过两次,后来养成习惯:先确认系统用哪套网络管理,再决定写 Netplan 还是 nmcli。希望帮到你。
本文还有配套的精品资源,点击获取