在 ESXi 8 上快速准备一台 Ubuntu Linux 虚拟机。目标是把系统先跑起来,并完成 SSH、时区语言、固定 IP 和 53 端口释放等基础配置。
后续如果要部署 DNS 服务,比如 mosdns,建议先确认本文这些前置步骤都已经完成。
准备 Ubuntu Cloud Image
Ubuntu Cloud Image 官方下载站:
https://cloud-images.ubuntu.com/
在 ESXi 中使用 Cloud Image 的好处是部署速度快,适合快速拉起一台轻量 Linux 虚拟机。但 Cloud Image 默认会依赖 cloud-init,因此创建虚拟机时建议提前准备好用户、密码或 SSH 公钥配置。
创建虚拟机并写入 cloud-init
在 ESXi 里创建虚拟机后,可以通过 guestinfo.userdata 写入 cloud-init 配置。原文示例里使用了 base64 方式:
guestinfo.userdata.encoding base64
guestinfo.userdata下面是对应的 cloud-init 明文示例。请把用户名、密码和 SSH 公钥改成你自己的值:
#cloud-config
users:
- name: mac
groups: sudo
sudo: ['ALL=(ALL) NOPASSWD:ALL']
plain_text_passwd: '12345'
lock_passwd: false
# ssh_authorized_keys:
# - ssh-ed25519 AAAA... your-key如果要转换成 base64,可以在本机保存为 user-data.yaml 后执行:
base64 -w0 user-data.yamlmacOS 上的 base64 没有 -w0,可以用:
base64 < user-data.yaml | tr -d '\n'生成结果再填入 ESXi 的 guestinfo.userdata。
开启 SSH 登录
进入系统后先切换到 root 环境并设置 root 密码:
sudo -i
passwd编辑 SSH 配置:
nano /etc/ssh/sshd_configCloud Image 环境中,如果登录时反复提示密码错误,可以检查下面这一行是否加载了额外配置:
Include /etc/ssh/sshd_config.d/*.conf原文的处理方式是把它注释掉:
#Include /etc/ssh/sshd_config.d/*.conf然后允许 root 密码登录:
PermitRootLogin yes
PasswordAuthentication yes保存后重启 SSH:
systemctl restart ssh更稳妥的做法是优先使用普通 sudo 用户和 SSH 公钥登录;只有在临时初始化或内网维护时,再开启 root 密码登录。
基础系统初始化
更新系统并安装常用工具:
apt update
apt install -y curl unzip lsof nano设置时区为北京时间。这里的作用是把系统本地时间显示为 Asia/Shanghai,不是手动校准系统时钟:
timedatectl set-timezone Asia/Shanghai确认时区:
timedatectl
date在 Ubuntu 25.10 中,时间同步默认已经改用 chrony。如果要确认网络校时状态,可以继续检查:
systemctl status chrony
chronyc tracking也就是说:timedatectl set-timezone Asia/Shanghai 负责设置北京时间显示,chrony 负责把系统时钟同步准确。
如果需要中文环境,可以启用中文 locale:
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
dpkg-reconfigure locales重启后再更新一次软件源:
reboot
apt update修改固定 IP
Ubuntu 服务器通常使用 Netplan 配置网络。先进入配置目录:
cd /etc/netplan
ls编辑其中的 YAML 配置文件,例如:
nano /etc/netplan/00-installer-config.yaml不同镜像的文件名可能不同,以实际 ls /etc/netplan 输出为准。
云镜像示例
下面是原文里的云镜像示例。注意替换 IP、网关、DNS、MAC 地址和网卡名:
network:
ethernets:
ens192:
addresses:
- 192.168.16.8/24
routes:
- to: 0.0.0.0/0
via: 192.168.16.5
nameservers:
addresses: [192.168.16.2]
match:
macaddress: 00:0c:29:34:70:3c
set-name: eth0
version: 2应用配置:
netplan applyIPv4 + IPv6 示例
如果需要同时配置 IPv4 和 IPv6,可以参考:
network:
version: 2
ethernets:
eth0:
addresses:
- 10.20.20.9/24
- fd88::9999/64
match:
macaddress: bc:24:11:61:c0:a4
nameservers:
addresses:
- 223.5.5.5
- 8.8.8.8
- 1.1.1.1
- fd88::6666
search:
- local
routes:
- to: default
via: 10.20.20.1
- to: default
via: fd88::1111
set-name: eth0普通安装镜像示例
如果不是 cloud image,而是普通 Ubuntu 安装镜像,可以参考:
network:
renderer: networkd
ethernets:
ens192:
dhcp4: false
dhcp6: false
addresses:
- 192.168.8.8/24
routes:
- to: default
via: 192.168.8.1
nameservers:
addresses:
- 192.168.8.1
search: []
version: 2带 IPv6 的版本:
network:
renderer: networkd
ethernets:
ens192:
dhcp4: false
dhcp6: false
addresses:
- 192.168.8.8/24
- fd88::6666/64
routes:
- to: default
via: 192.168.8.1
- to: ::/0
via: fd88::1
nameservers:
addresses:
- 192.168.8.1
- fd88::1
search: []
version: 2Cloud-init 网络配置注意点
Ubuntu Cloud Image 可能会生成类似下面的提示:
# This file is generated from information provided by the datasource.
# Changes to it will not persist across an instance reboot.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}意思是当前 Netplan 文件可能会被 cloud-init 重新生成。如果你想手动维护网络配置,可以创建:
nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg写入:
network: {config: disabled}然后再维护 /etc/netplan/ 下的配置文件。
释放 53 端口
如果后续要在本机运行 DNS 服务,需要先确认 53 端口是否被 systemd-resolved 占用:
lsof -i:53编辑配置:
nano /etc/systemd/resolved.conf找到这一项:
#DNSStubListener=yes改成:
DNSStubListener=no重启 systemd-resolved:
systemctl reload-or-restart systemd-resolved再次检查:
lsof -i:53如果 53 端口已经没有被 systemd-resolved 监听,后续 DNS 服务就可以直接绑定本机 :53。
建议做快照
到这里,虚拟机已经完成基础初始化。建议在 ESXi 里先做一次快照,再继续安装后续服务。这样后面如果配置 DNS 服务或网络规则出错,可以很快回滚。