为什么我克隆的 linux 虚拟机争夺相同的 IP

wic*_*ken 14 virtual-machine dhcp systemd systemd-networkd

我已经从 Ubuntu 17.10 模板克隆了两个 vSphere 虚拟机。启动后,他们都声称拥有相同的 IP 并为之而战(当 IP 在它们之间切换时 ssh 连接中断)。

两台机器的主机名和 MAC 地址不同。dhclient正确声明两个独立的 IP,但使用的解析器是systemd-networkd.

wic*_*ken 29

systemd-networkd使用不同的方法来生成 DUID,而不是dhclient. dhclient 默认使用的链路层地址,而systemd-networkd使用该内容的/etc/machine-id。由于 VM 是克隆的,因此它们具有machine-id相同的 IP,并且 DHCP 服务器为两者返回相同的 IP。

要修复,请替换/etc/machine-id. 这可以是任何东西,但删除文件并运行systemd-machine-id-setupmachine-id以与机器设置相同的方式创建随机数。

  • 请参阅 https://unix.stackexchange.com/questions/402999/ 了解为什么这不起作用,实际必须做什么,以及机器必须处于什么状态才能这样做。 (3认同)
  • 在 20.04 上,您不必弄乱 /var/lib/dbus/machine-id,它只是 /etc/machine-id 的符号链接。您唯一需要做的就是清除 /etc/machine-id 的内容并重新启动。请注意,删除文件会破坏 dhcp,而是清除“> /etc/machine-id”或“truncate -s0 /etc/machine-id”等内容。最后,如果您正在制作模板,请务必运行“cloud-init clean”。 (2认同)

小智 14

网络规划配置怎么样?有一个选项dhcp-configuration可以使用如下(摘自netplan 示例):

network:
  version: 2
  ethernets:
    enp3s0:
      dhcp4: yes
      dhcp-identifier: mac
Run Code Online (Sandbox Code Playgroud)

默认情况下,它使用机器 ID,但通过更改此功能,我们可以“强制”不使用。

摘自manpages / netplan,提供更多见解:

       dhcp-identifier (scalar)
              When  set  to `mac'; pass that setting over to systemd-networkd to use the device's
              MAC address as a unique identifier rather than a RFC4361-compliant Client ID.  This
              has no effect when NetworkManager is used as a renderer.
Run Code Online (Sandbox Code Playgroud)

  • VM 映像的绝佳解决方案。 (2认同)