在 USB 上的 cloud-init nocloud 配置(CIDATA)中配置默认​​静态 IP 地址

在 USB 上的 cloud-init nocloud 配置(CIDATA)中配置默认​​静态 IP 地址

我已经构建了一个自定义的 Ubuntu 22.04 安装,该安装可通过 USB 记忆棒无人值守运行。我现在正在尝试添加目标将启动的默认静态 IP 地址。这些系统将在可能没有 DHCP 或其他网络服务的微型环境中启动,并将通过安装后脚本进一步定制,但我需要它们在 cloud-init 之后首次启动时即可访问网络。

我不会提前知道任何 mac 地址,甚至不知道接口设备,因为此映像需要跨多个硬件类别工作,这些硬件类别可能具有接口名称格式变体。有没有办法利用 cloud-init 识别“最佳”物理接口并在那里设置静态 IP 的能力?如果服务可用,我还希望它在同一接口上获取 DHCP 地址,但这不是必需的。

我正在创建的 USB 棒有一个 vfat 格式的 CIDATA 分区,其中包含一个按预期工作的用户数据文件。我在文档中读到,用户数据不能用于网络配置,我曾尝试在此分区中创建一个网络配置文件,如下所示,但我认为我走错了路。有人能提供一些关于如何实现我的目标的建议吗?

我尝试过的网络配置文件是:

ethernets:
  eno1:
    dhcp4: true
    dhcp6: false
    addresses: [ "192.168.1.13/24" ]```

答案1

我的建议是使用ip=内核命令行(即您必须修改引导加载程序配置)。我已经使用这种方法超过 2 年了,包括使用 jammy。cloud-init 会导入它而无需执行任何其他操作。如果您只需要一个静态 IP 地址,根据我的经验,这是最简单的解决方案。

在你的情况下,它会是这样的

ip=192.168.1.13::192.168.1.1:255.255.255.0::eno1:off:1.1.1.1

192.168.1.1我猜测默认网关1.1.1.1是 Cloudflare 的公共 DNS 服务器)

更复杂的选项是将 netplan 配置文件添加到 的user-data部分write_files,并将netplan apply添加到您的runcmd部分。这适用于更复杂的网络配置,但根据您的情况,您可能在 cloud-init 到达 之前没有网络连接runcmd,因此在某些情况下它可能不起作用。如果我需要分配多个 IP 地址和/或绑定到网络接口,我会使用此方法作为第一种方法的补充。然后操作系统从单个 IP 开始,稍后更改其配置。

相关内容