背景
proxmox 制作ubuntu24.04 的模板,虽然已经设置了dhcp,启动了ip还是会附带之前的信息。为了解决这个问题。
如果要保证 Ubuntu 云镜像克隆后每台机器都自动生成唯一的 machine-id 和 DHCP 客户端 ID(避免 IP 冲突),可以结合 cloud-init + netplan 这样配置。
1. cloud-init 模板(推荐写到 /etc/cloud/cloud.cfg.d/99-custom.cfg
)
# cloud-init configuration
# 确保每次实例化时重新生成 machine-id 和 DHCP 客户端 ID# 保证 systemd-machine-id 每次克隆都重建
system_info:regenerate_ssh_host_keys: truebootcmd:# 删除旧的 machine-id,systemd 会在开机时自动生成新的- rm -f /etc/machine-id- rm -f /var/lib/dbus/machine-id- systemd-machine-id-setup# 确保 cloud-init 不保留 DHCP 客户端 ID(默认就会根据 machine-id 生成新的)
network:config: disabled # 告诉 cloud-init 不去覆盖 netplan,让我们自己管理
2. Netplan DHCP 配置(例如 /etc/netplan/01-netcfg.yaml
)
确保 所有网卡通过 DHCP 自动获取地址:
network:version: 2ethernets:ens18: # 按需替换为你的网卡名dhcp4: truedhcp-identifier: mac # 使用 MAC 地址做 DHCP ID(避免 machine-id 重复问题)
- 如果使用
dhcp-identifier: mac
,则每台 VM 的 DHCP 租约基于 MAC,不基于 machine-id- 如果使用
dhcp-identifier: duid
,则基于 DUID(默认用 machine-id 生成)- 云环境常用
mac
,因为每个克隆 VM 通常会改 MAC
3. 云镜像准备注意事项
- 清理 cloud-init 状态(做模板前执行一次)
sudo cloud-init clean --logs --machine-id
sudo rm -f /etc/machine-id /var/lib/dbus/machine-id
sudo systemd-machine-id-setup
- 关机并制作镜像/模板(不要再开机)
- 克隆时保证 MAC 地址不同(不然即使用 mac 作为 ID,也会冲突)
完整流程总结
- cloud-init 负责清理 machine-id 并重新生成
- netplan 设置为 DHCP 自动获取
- dhcp-identifier: mac 避免因 machine-id 重复导致的冲突
- 模板制作前运行
cloud-init clean
并清除 machine-id