VMware Ubuntu 静态 IP 配置手册 (NAT + cloud-init)

2026/11/14 VMware

# 一、前置背景与现状诊断

VMware 网络环境:NAT 模式(VMnet8),网段 192.168.134.0/24,网关 192.168.134.2,DHCP 池 128-254。静态 IP 需避开 DHCP 池,选用安全区 3-127。

Ubuntu 当前状态:底层由 systemd-networkd 管理,网卡 ens33(驱动 e1000),当前通过 DHCP 获取了 192.168.134.128(位于 DHCP 池内),网关与 DNS 均指向 192.168.134.2。

关键发现:/etc/netplan/ 下配置文件为 50-cloud-init.yaml,说明网络由 cloud-init 接管(常见于 cloud image / 虚拟机模板)。

配置目标:将 IP 固定为安全区地址(如 192.168.134.10),且重启后不被 cloud-init 覆盖。

**为什么 cloud-init 会"抢走"网络管理权?**cloud-init 是云镜像/虚拟机模板中用于初始化系统的工具。安装程序在首次启动时通过它写入了网络配置(DHCP),之后每次启动它都会"重新宣誓主权",导致你手动改的静态 IP 被覆盖。我们需要让它"放手"。


# 二、静态 IP 配置思路骨架

  1. 确认接管方:判断 cloud-init 是否在管理网络(cloud-init status)。
  2. 禁用 cloud-init 网络管理:写入 99-disable-network-config.cfg,让 Netplan 配置"归自己所有"。
  3. 选安全 IP:避开 .0(网络)、.2(网关)、.255(广播)、128~254(DHCP 池),选 192.168.134.10。
  4. 改 Netplan 配置:编辑 50-cloud-init.yaml,关闭 DHCP,写死地址/网关/DNS。
  5. 应用生效:netplan generate 校验语法 → netplan try 安全应用(远程连接必用)→ 或 netplan apply 立即生效。
  6. VMware 侧对齐:确认 NAT 子网 192.168.134.0、网关 .2,静态 IP 落在安全区即不冲突。

# 三、静态 IP 配置操作手册

# 1. 规划静态参数

配置项 配置值 说明
网卡 ens33 VMware 中常见命名,可用 ip link 确认
静态 IP 192.168.134.10/24 安全区,好记(可换 .11/.12,只要不在 128-254 内)
网关 192.168.134.2 VMware NAT 网关(不是 .1,.1 是仅主机模式的网关)
DNS 114.114.114.114, 8.8.8.8 国内首选 114,备用 Google;也可保留 192.168.134.2 让网关转发
搜索域 不配置 新手可跳过,避免解析异常

如何确认你的网卡名?

ip link
1

看到 lo 之外带 state UP 的那个就是,常见为 ens33(VMware)或 enp0s3(VirtualBox)。

# 2. 备份并删除安装器留下的网络配置

# 备份后删除
sudo cp /etc/cloud/cloud.cfg.d/90-installer-network.cfg /etc/cloud/cloud.cfg.d/90-installer-network.cfg.bak
sudo rm /etc/cloud/cloud.cfg.d/90-installer-network.cfg
1
2
3

90-installer-network.cfg 就是安装程序留给 cloud-init 的"网络遗嘱",每次启动都让它重新 DHCP。删掉它 + 禁用文件双保险,你的静态 IP 就真正稳了。

# 3. 禁用 cloud-init 网络管理

# echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<EOF
network: {config: disabled}
EOF
1
2
3
4
5

为什么需要这一步? 即使删除了 90-installer-network.cfg,cloud-init 仍可能从其他数据源(如 VMware guest info、metadata server)获取网络配置。这个文件明确告诉它:"网络配置交给我自己,你别管。"

# 4. 修改 Netplan 静态配置

sudo vim /etc/netplan/50-cloud-init.yaml
1

写入内容(YAML 缩进严格,冒号后空格):

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: false
      addresses:
        - 192.168.134.10/24
      routes:
        - to: default
          via: 192.168.134.2
      nameservers:
        addresses: 
          - 114.114.114.114
          - 8.8.8.8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 5. 应用 Netplan 静态配置

I. 校验语法(有错误会直接提示,不报错才能继续)

sudo netplan generate
1

II. 安全应用(远程 SSH 连接必用!)

sudo netplan try
1

netplan try 的工作机制: 它会应用配置并等待你 120 秒内确认。如果网络断了(SSH 掉线无法确认),它会自动回滚到上一版配置。这是远程操作时的"保命命令"。

看到提示 Do you want to keep these settings? 后,在终端输入 yes 或等待倒计时结束即可。

III. 如果你是 VMware 本地控制台操作(非 SSH),可直接 apply

sudo netplan apply
1

IV. 重启验证(最关键的一步:确认重启后 IP 不变、不被 cloud-init 覆盖)

sudo reboot
1

# 6. 验证 Netplan 静态配置

重启后重新登录,按以下顺序逐条验证。每一步成功再做下一步,方便定位问题:

I. 确认 IP 已变为静态地址

ip addr show ens33 # 应看到: inet 192.168.134.10/24
1

II. 确认默认路由指向网关

ip route # 应看到: default via 192.168.134.2
1

III. 测试网关连通性(网络层)

ping -c 3 192.168.134.2 # 能 ping 通说明:网卡→IP→路由 全部正确
1

IV. 测试外网 + DNS 解析(应用层)

ping -c 3 baidu.com # 能 ping 通说明:DNS 解析 + 网关 NAT 转发 全部正确
1