关于proxmox 制作虚拟机模板的动态dhcp问题

背景

proxmox 制作ubuntu24.04 的模板,虽然已经设置了dhcp,启动了ip还是会附带之前的信息。为了解决这个问题。

如果要保证 Ubuntu 云镜像克隆后每台机器都自动生成唯一的 machine-idDHCP 客户端 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: true

bootcmd:
  # 删除旧的 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: 2
  ethernets:
    ens18:       # 按需替换为你的网卡名
      dhcp4: true
      dhcp-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. 云镜像准备注意事项

  1. 清理 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
  1. 关机并制作镜像/模板(不要再开机)
  2. 克隆时保证 MAC 地址不同(不然即使用 mac 作为 ID,也会冲突)

完整流程总结

  • cloud-init 负责清理 machine-id 并重新生成
  • netplan 设置为 DHCP 自动获取
  • dhcp-identifier: mac 避免因 machine-id 重复导致的冲突
  • 模板制作前运行 cloud-init clean 并清除 machine-id

posted @ 2025-09-18 17:18  学不会xuebuhui  阅读(30)  评论(0)    收藏  举报
Language: javascript //图片预览