1. 为什么要在本地虚拟化环境里折腾一台 Ubuntu Server
把 Ubuntu Server 跑在 VMware Workstation 里,再给它配一个固定不变的 IP,这套组合在我过去几年里出现的频率高得离谱。原因很朴素:绝大多数后端服务、容器编排的实验、Ansible 批量下发、数据库主从、私有镜像仓库、内网 DNS,都需要一台"地址永远不变、随时能重建、不占物理机"的 Linux 机器。笔记本上开一台 Ubuntu Server,等于随身带了一个小型机房,出差、断网、换办公室都不影响,只要宿主机的硬盘还在,环境就还在。
很多刚接触的朋友容易走进两个极端。一种是直接拿桌面版 Ubuntu 当服务器用,图形界面占内存不说,很多服务在桌面环境下的网络行为还不太一样,尤其是 NetworkManager 和 netplan 抢夺网络管理权的时候,能让人排查到怀疑人生。另一种是跑去用云主机做实验,成本先放一边,每次重装系统、改网络配置都要等远程重连,网断了连控制台都进不去,实验节奏被彻底打乱。本地虚拟机最舒服的一点就是控制台永远在手上,改错了网络配置也不怕失联,随时能通过 VMware 的窗口进去救场。
这篇内容我打算把"装系统"和"配静态 IP"这两件事讲透,特别是静态 IP 部分,我不满足于只给你一份能用的 YAML,而是想把 netplan 那套渲染机制、网关和 DNS 到底谁管谁、为什么改了配置有时候要netplan apply有时候得重启才能生效,这些平时文档里一笔带过的东西掰开揉碎说清楚。目标读者我觉得有三类:准备入门 Linux 运维的在校生,需要在本地搭实验环境的开发同学,还有手里已经有一堆虚拟机、但网络这块一直靠 DHCP 碰运气、想彻底理顺的同行。基础方面,只要你会在 Windows 上装个普通软件、能看懂命令行里一行行输出,就足够了,剩下的我会补齐。
2. 前期准备:版本选择与镜像获取的取舍
2.1 为什么锁定 Workstation 16 Pro 和 22.04.1 这个组合
Workstation 16 Pro 属于比较特殊的一个版本。它同时支持 Windows 和 Linux 宿主机,虚拟硬件版本最高到 18,对 USB 3.1、虚拟 TPM、嵌套虚拟化都有比较成熟的实现,而且相比更新的 17.x,它在 Windows 10 老机器上的稳定性口碑更好,不少企业的内网镜像库里至今还挂着它的安装包。Pro 版和 Player 版最大的区别,就是 Pro 有虚拟网络编辑器(Virtual Network Editor),这个工具是后面配静态 IP 能省一大半事的核心——你能自定义 VMnet 网段、把 DHCP 分配范围整个关掉、决定 NAT 还是桥接,而 Player 版只能吃默认配置,很多时候被迫接受 192.168.x.x 这种和公司内网冲突的网段。
再说 Ubuntu Server 22.04.1。它是 22.04 LTS 的第一个点版本,属于长期支持分支,标准支持期到 2027 年,安全维护能延到 2032 年。选它而不是 24.04,主要考虑生态成熟度:很多中间件、Docker 版本、Ansible 插件在 22.04 上的验证最充分,出问题的概率最低。22.04.1 相比初版 22.04 修掉了一批早期安装器的 bug,尤其是安装阶段网络配置那块的体验顺滑不少。至于架构,服务器场景一律选 amd64,除非你在 Apple Silicon 上做实验,那就得考虑 arm64 镜像,但要注意处理器架构和 VMware 支持的匹配问题。
2.2 镜像下载与校验的正确姿势
镜像我强烈建议只从官方渠道取。Ubuntu 的服务器版镜像标准路径挂在其官方发布站点上,文件名叫ubuntu-22.04.1-live-server-amd64.iso,大小在 1.4 GB 左右。这里有个很多人忽略的细节:那个live-server前缀意味着它是 Live 安装镜像,安装过程本身跑在内存里,这跟早期的alternate文本安装镜像不是一回事,所以你会看到安装界面虽然是文本风格,但流程其实是现代化的。
下载完一定要做校验,这不是洁癖,是防止镜像在传输中被损坏导致安装到一半报莫名其妙的错。官方会同时提供 SHA256SUMS 文件,拿到后做比对:
# Windows PowerShell 里校验 Get-FileHash .\ubuntu-22.04.1-live-server-amd64.iso -Algorithm SHA256 # Linux 宿主机里校验 sha256sum ubuntu-22.04.1-live-server-amd64.iso比对结果和官方文件里那一行完全一致才继续,否则重新下载。我见过不止一次因为镜像损坏,安装到最后一步写入引导失败,白白浪费半小时。
2.3 宿主机硬件的账要算清楚
配置虚拟机之前先把账算明白。Ubuntu Server 最小安装大约占 4 GB 磁盘,但你要跑服务、装 Docker 镜像、留日志空间,20 GB 是底线,40 GB 起步比较从容。内存方面,纯命令行系统 1 GB 能开机,跑 Ansible 或者几个容器建议 2 GB 到 4 GB。CPU 核心数不要超过宿主机物理核心数,双核起步即可。
宿主机这边,虚拟化功能必须在 BIOS/UEFI 里打开。Intel 平台叫 VT-x,AMD 平台叫 SVM。Windows 上还得注意一个坑:如果宿主机启用了 Hyper-V 或者"虚拟机平台"这类特性,VMware Workstation 16 有时会退化成兼容模式运行,性能明显下降,甚至报某些虚拟化相关的错误。可以在"启用或关闭 Windows 功能"里把 Hyper-V、Windows 虚拟机监控程序平台这些关掉再重启,VMware 就能走自己的虚拟化引擎,快得不是一点半点。
提示:关 Hyper-V 前确认自己不用 WSL2 或者 Windows 沙盒,这两个都依赖它。如果确实都要用,可以保留,但接受 Workstation 性能打折。
3. 创建虚拟机:每一步背后的用意
3.1 新建向导里的关键选择
打开 Workstation,走"创建新的虚拟机",选"自定义(高级)"而不是"典型"。典型模式会替你把一堆参数定死,比如磁盘类型、网络模式,后期想调还得进设置里翻。自定义模式多花两分钟,但后面省心。
硬件兼容性那一页,如果你确定只在 Workstation 16 及以上用,选最高的 16.x 版本;如果这台虚拟机可能被拷到更老的机器上跑,往下选一档。磁盘类型选 SCSI 而不是 IDE,Linux 对 SCSI 的驱动支持更好,性能也略有优势。虚拟磁盘选"将虚拟磁盘拆分成多个文件"还是"存储为单个文件",我个人倾向单个文件,拷贝和快照时省事,除非你的目标分区是 exFAT 之类对单文件大小有限制的文件系统。
3.2 网络模式的选择逻辑
这一步是全局里最需要想清楚的。VMware 提供三种常用模式:桥接、NAT、仅主机。
桥接模式让虚拟机像一台独立设备一样直接连到你的物理局域网,能从路由器拿真实网段的地址,同网段的其他机器也能访问它。优点是真实,缺点是占用公司或家里的 IP 资源,而且一旦你在不同网络之间来回切换,配置好的静态 IP 可能就失效了,因为网段变了。
NAT 模式是虚拟机躲在宿主机后面,通过 VMware 的虚拟 NAT 设备上网。宿主机的物理网段换了它也不受影响,非常适合笔记本电脑这种到处跑的场景。缺点是同网段的别人访问不了你的虚拟机,不过你可以给宿主机做端口转发来解决。
仅主机模式最封闭,只有宿主机和虚拟机之间能通信,适合做完全隔离的实验。
我这次配置静态 IP 用的是 NAT 模式配合自定义网段,因为它兼顾了"能上网"和"地址稳定"。后面虚拟网络编辑器会详细讲怎么改。
3.3 磁盘与内存的分配建议
磁盘分配 40 GB,选"立即分配"还是"按需分配"。按需分配会随着实际使用慢慢长,节省宿主机空间;立即分配能避免磁盘碎片,性能更稳。我个人一般选按需,配合定期做碎片整理或者干脆放 SSD 上。内存给 2 GB,CPU 给 2 核,这些都能后期在关机状态下调整。
创建完成后先别急着开机,进"编辑虚拟机设置"再检查一遍:网络适配器是不是 NAT,CD/DVD 是不是指向了下载好的 ISO,是不是勾选了"启动时连接"。这三项没对上,开机就是一场空。
4. 系统安装全过程与那些值得停一下的地方
4.1 引导与安装器语言选择
开机后安装器会跑自检,几秒后进入语言选择界面。这里选 English 还是中文,看个人习惯。我建议选 English,因为服务器上很多日志、报错信息本来就是英文的,安装时用英文界面,术语能对得上,排查问题时不用在脑子里做一遍翻译。而且文本安装界面对中文的字体支持有时候会渲染得歪歪扭扭,英文更清爽。
接下来是键盘布局,一般选 English (US)。如果宿主机是笔记本,键盘布局错了会导致后期输入某些符号错位,早发现早改。
4.2 网络配置阶段的两条路线
安装器会检测网络接口,一般是ens33这种命名(新版 systemd 的 predictable network interface names 规则)。这里有两种做法:
一种是在安装阶段就把静态 IP 配好,这样做的好处是安装过程中下载更新(如果勾选了)就走静态网络,一步到位。另一种是先让它走 DHCP 装完,进系统后再改 netplan,这样做的好处是安装过程更顺,万一静态 IP 配错导致下载更新失败也不影响系统装完。
我推荐第二种,也就是安装阶段先用 DHCP 装完,进系统后再动手改。理由很实在:安装器里的网络配置界面是 netplan 的一个简化前端,你在这里填的东西会直接写进/etc/netplan/下的 YAML 文件,但它的语法校验没有系统内那么直观,填错了它不一定马上告诉你。先装完再改,你能在完整环境里用netplan try做安全回滚,心里踏实。
在安装器的网络那一页,你只要确认接口拿到了地址就行,即使没有勾选"创建静态配置"也无所谓。记住这个接口名ens33,后面会反复用到。
4.3 分区方案与用户信息
分区这一步,新手选"使用整个磁盘并设置 LVM"即可,安装器会自动切出/boot、根逻辑卷、以及一个 swap。LVM 的好处是后期扩容方便,比如根分区不够用了,能在不停机的情况下从新加的虚拟磁盘里扩。如果你就是想理解分区结构,也可以选手动,但服务器实验场景没必要在安装阶段纠结分区,LVM 默认布局已经够用了。
用户名和密码这块,注意 Ubuntu 从 22.04 开始默认不再启用 root 直接登录,你创建的第一个用户会被加进 sudo 组。用户名建议全小写,避免某些脚本里大小写敏感的坑。主机名先随便起,比如ubuntu-srv,后面能改。
SSH 那一页,一定勾选"Install OpenSSH server"。不然后面还得登录进去用apt install装,多一步。虽然安装阶段勾了它也会从网络下载一部分包,但联网正常的话就几秒钟的事。
4.4 磁盘写入与第一次重启
快照这一步看你要不要把预装内容包括进去。如果只是想装个干净系统,可以跳过这些"常用软件"的勾选,装完再按需装。确认摘要后开始写入,等它把系统拷到虚拟磁盘上,最后提示重启。重启时它会提示移除安装介质,VMware 里它会自动断开 ISO 的连接,如果卡住不动,手动在"虚拟机设置"里把 CD/DVD 的连接状态取消勾选即可。
5. 静态 IP 配置:netplan 到底怎么管网络
5.1 先搞清楚接口名和当前网络状态
登录进去之后,第一件事是确认接口名字和当前的寻址情况:
ip -br addr ip route第一条会输出类似ens33 UP 192.168.152.128/24的内容,这个ens33就是你要写进 netplan 的接口名。第二条输出的default via 192.168.152.2里的192.168.152.2通常就是 VMware NAT 网络的网关地址,192.168.152.0/24是网段。这个网关地址很关键,它不是随便填的,得跟虚拟网络编辑器里那个 NAT 设置对得上。
这里需要解释一下 netplan 是什么。Ubuntu 17.10 之后,网络配置统一用 netplan 描述,它本身不直接管网络,而是一个"渲染器":你写 YAML 描述意图,netplan 把它翻译成后端网络管理器的配置。Ubuntu Server 上默认后端是systemd-networkd,桌面版是 NetworkManager。这个设计的意义在于同一份配置能适配不同后端,但也带来一个常见困惑——改了 YAML 之后到底生效没有,得看后端有没有真正读进去。
5.2 查看并理解默认的 netplan 文件
确认一下有几个 netplan 配置文件:
ls -l /etc/netplan/安装时选了 DHCP 的话,通常会看到一个00-installer-config.yaml,内容是:
network: ethernets: ens33: dhcp4: true version: 2这个文件命名里的00-前缀表示它会最先被读取,数字越小优先级越高。如果你新建一个01-static.yaml,只要它不和前面冲突,也能生效;如果冲突,后面的会覆盖前面的。我个人的做法是直接改00-installer-config.yaml,避免多个文件互相干扰。
5.3 写一份可靠的静态 IP 配置
把上面的文件改成下面这样(假设你决定用192.168.152.100作为静态地址):
network: version: 2 renderer: networkd ethernets: ens33: dhcp4: false dhcp6: false addresses: - 192.168.152.100/24 routes: - to: default via: 192.168.152.2 nameservers: addresses: - 192.168.152.2 - 8.8.8.8 - 114.114.114.114逐行说下用意。dhcp4: false和dhcp6: false是明确关掉自动获取,光写静态地址而不关 DHCP 是有风险的,有些后端会同时保留 DHCP 租约,导致地址行为不确定。addresses里的/24是 CIDR 前缀,代表掩码 255.255.255.0。routes里的to: default是 22.04 引入的新写法,等价于老版本的gateway4,而gateway4在 22.04 里已经标记为废弃,继续用会有警告。nameservers里的顺序有意义,systemd-resolved 会按顺序尝试,把网关放第一个能让内网域名优先解析。
注意 YAML 对缩进极其敏感,必须是空格,不能混 tab。每层缩进两个空格,对齐错一个位置整个文件就解析失败。
注意:
routes的to: default和via:组合是新写法,如果你在网上看到用gateway4的老教程,在 22.04 上照样能用但会打警告,长期建议换成新写法。
5.4 应用配置与安全回滚机制
改完保存,先做语法检查和试应用:
sudo netplan trynetplan try会应用配置并启动一个 120 秒倒计时,要求你在这期间按回车确认。如果配置有问题导致你失联,倒计时结束它会自动回滚到上一个可用配置。这是 netplan 最实用的功能之一,强烈建议每次都先用try,确认无误后再:
sudo netplan applyapply是直接生效不回滚,所以它只应该在你已经用try验证过之后执行。如果执行apply后没反应或者报Permissions相关错误,检查文件权限,netplan 的 YAML 建议设置成600,避免被其他用户篡改:
sudo chmod 600 /etc/netplan/00-installer-config.yaml5.5 验证:不要只看一个命令就下结论
配置生效后,用一组命令交叉验证:
ip addr show ens33 ip route show ping -c 3 192.168.152.2 ping -c 3 114.114.114.114 ping -c 3 baidu.com第一条确认地址真的挂上了。第二条确认默认路由指向你写的网关。第三条验证能不能通网关,这步不通说明二层有问题,多半是虚拟网络或者地址写错。第四条验证到公网 IP 层的连通性,这步通了说明路由没问题,但 DNS 可能还没好。第五条验证域名解析,这一步通了才说明 DNS 配置生效。从网关到公网 IP 再到域名,逐层验证,哪一层断了就锁定哪一层的问题,这是排查网络问题的基本思路。
如果ip addr里地址是对的但 ping 不通网关,去检查 VMware 的虚拟网络编辑器里 VMnet8 的网段是不是192.168.152.0/24,网关是不是192.168.152.2。不一致的话,要么改 netplan 去适配 VMware 的设置,要么改 VMware 去适配你的规划,两边必须一致。
6. 把 VMware 虚拟网络编辑器用明白
6.1 为什么要动虚拟网络编辑器
默认安装时,VMware 会把 NAT 网络的 DHCP 服务打开,分配的地址从某个池子里随机取。你给虚拟机配了静态地址,只要这个地址不在 DHCP 池范围内,通常不会冲突。但如果你配的地址恰好落在池子里,就可能出现抢地址的情况。更稳妥的做法是进虚拟网络编辑器,把 DHCP 分配范围改小甚至关掉,或者干脆把静态地址选在池子外的位置。
打开方式:Workstation 菜单"编辑"->"虚拟网络编辑器",需要管理员权限才能改。找到 VMnet8(NAT 模式用的那个),点"NAT 设置"能看到网关地址,点"DHCP 设置"能看到地址池范围。
6.2 网段规划与冲突排查
规划网段时,先看看宿主机所在物理网络用的是什么段。如果宿主机在公司内网走192.168.1.0/24,那么 VMnet 最好避开这个段,改成192.168.152.0/24这种不容易撞的。否则虽然 NAT 理论上隔离,但路由表里出现两条相似前缀时,某些应用的连接行为会变得不可预测。
常用命令帮你在宿主机上确认物理网段:
# Windows ipconfig # Linux 宿主机 ip -br addr如果宿主机和虚拟机的网段确实撞了,最干净的做法是回到虚拟网络编辑器,把 VMnet8 的网段整体换成别的,比如192.168.200.0/24。改完后,虚拟机内的 netplan 配置也要同步改地址、网关。
6.3 NAT 设置与端口转发的必要性
NAT 模式下一个必须理解的事实:外部网络看不到虚拟机的真实地址,只能看到宿主机的地址。所以如果你想让局域网里另一台设备访问这台虚拟机的 SSH,光配置虚拟机自己的静态 IP 不够,还得在虚拟网络编辑器的 NAT 设置里做端口转发,把宿主机的某个端口(比如 2222)映射到虚拟机的 22 端口。这样别人连宿主机的2222就能进来。
这个机制的本质是 NAT 的表转换。理解它有助于你判断"为什么我在虚拟机里能访问外面,外面却访问不了我",答案就是 NAT 是单向发起的,除非有显式的映射。
7. 收尾阶段:SSH、快照与日常维护
7.1 用 SSH 替代虚拟机窗口工作
系统装好、IP 固定之后,第一件提升体验的事就是换 SSH 登录。在宿主机上开个终端:
ssh 用户名@192.168.152.100连上之后,粘贴、滚动、多窗口都顺畅了,虚拟机窗口基本可以关掉。建议顺手在宿主机上配个 SSH 密钥登录,避免每次输密码:
# 宿主机上生成密钥(如果还没有) ssh-keygen -t ed25519 -C "local-vm" # 把公钥传到虚拟机 ssh-copy-id 用户名@192.168.152.100之后就可以免密登录,脚本化操作也方便。
7.2 快照的正确用法
系统配好静态 IP、装完基础组件之后,立刻做一个快照。这是虚拟机相比物理机最大的优势。快照的用法有个原则:只在关键状态点做,不要滥用。快照层数太多会让磁盘性能下降,而且管理混乱。我一般会保留三个点:刚装完系统、配置静态 IP 完成、装完特定开发环境。
回滚快照时注意,虚拟机的网络状态也会回到快照时刻,如果你在快照之后改过虚拟网络设置,回滚后可能对不上,需要重新确认。
7.3 常见维护动作与注意点
日常几个动作:
- 更新系统:
sudo apt update && sudo apt upgrade -y,升级前做快照,因为内核升级有时会带来网络驱动变化。 - 检查 netplan 生效状态:
networkctl status ens33,能看到后端驱动实际拿到的配置。 - 确认 DNS 解析用的谁:
resolvectl status,能看到每个接口实际生效的 DNS。 - 时间同步:虚拟机时间容易被宿主机的休眠唤醒搞得漂移,装上
chrony并确认服务在跑。
8. 踩过的坑与排查速查表
8.1 典型问题与解决思路
下面这张表是我在实际操作中反复遇到并整理出来的,按现象分类。
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
netplan apply报解析错误 | YAML 缩进用了 tab 或对齐错位 | 用sudo netplan generate先看报错行号,改成两个空格缩进 |
| 配置了静态 IP 但仍走 DHCP 地址 | 旧 DHCP 租约还在,或dhcp4没关 | 在 YAML 里显式dhcp4: false,重启systemd-networkd |
| 能 ping 网关但 ping 不通域名 | DNS 没配或resolvectl没生效 | 检查nameservers,用resolvectl status确认接口 DNS |
| ping 不通网关 | 地址/网关和 VMnet 网段不一致 | 对照虚拟网络编辑器里的 VMnet8 设置 |
| 虚拟机上网时通时断 | 宿主机切了物理网络,NAT 未刷新 | 重启 VMware NAT 服务,或在虚拟网络编辑器里点"还原默认设置" |
| SSH 连不上但本地能登录 | 宿主机防火墙挡了端口转发 | 检查宿主机防火墙规则 |
| 开机后接口名变了 | 虚拟硬件变化触发网卡重新命名 | 用ip -br addr重新确认名字,更新 netplan |
8.2 几条真正省时间的经验
第一,改网络配置前一定保留一个能进系统的方式。最好的保险是让虚拟机在开机时多一个网络适配器走仅主机模式,主适配器配静态 IP。这样即使静态 IP 配崩了,你还能通过仅主机的那个接口进来。不过用netplan try已经能覆盖大部分场景,这个双网卡方案是给特别复杂的环境用的。
第二,别在安装阶段一次性把网络配置复杂化。DHCP 装完,进系统后再改,这个流程的容错空间最大。见过太多人在安装器的网络界面里折腾半天,最后连系统都没装完。
第三,netplan try的 120 秒不是让你干等的。回车确认之前,先在另一个终端里 ping 一下网关和公网,确认通了再确认,这才是它的正确用法。
第四,关于ubuntu server中的name servers什么意思这类疑问,最直白的解释就是:nameservers 就是你告诉系统"遇到域名时去问谁"的服务器地址列表。配错了或者留空,域名就解析不了,但 IP 直连照样通,这也是为什么验证要分层次做。
第五,虚拟机的电源管理可以关掉不必要的休眠,避免网络在唤醒后短暂异常。在宿主机的电源计划里把相关选项调一下,比事后排查划算得多。
8.3 排查口诀
我把整个排查流程压缩成一句话:先看地址、再看路由、然后通网关、再通公网 IP、最后才看域名解析,永远从下往上查。大多数时候问题卡在第一或第二步,因为静态配置本质就是"告诉系统我是谁、我的出口在哪"。把这两件事确认死了,后面都是顺水推舟。
实际动手下来,我最大的感受是:静态 IP 配错从来不是最难的部分,难的是很多人只盯着 netplan 文件本身,忘了它只是描述意图,真正的生效由systemd-networkd和 VMware 的虚拟网络共同决定。任何一端不一致,配置再漂亮也没用。把虚拟网络编辑器、netplan 文件、后端渲染这三层在脑子里串成一条线,这套环境你就真正掌握了,换任何发行版、任何虚拟化平台,思路都能直接搬过去。