虚拟机获得相同的 IP

虚拟机获得相同的 IP

我经常在 VirtualBox VM 中运行多个 Ubuntu Server 实例来测试各种东西。我通常安装一次 Ubuntu,然后根据需要多次克隆 VM。我在 VirtualBox 中使用桥接网络,并从路由器获取动态 IP。VirtualBox 能够随机化虚拟 NIC 的 MAC 地址。使用 16.04 时,这很有效:安装 + 克隆 + 随机化 MAC = 每个实例都有自己独特的 IP。

这在 18.04 中不再起作用。我不明白为什么,但即使我更改了 MAC,所有克隆也总是获得相同的 IP 地址。(我的路由器似乎认为最后启动的实例拥有 IP。)

此外,当我使用 netplan 将虚拟机更改为静态 IP 时,如下所示...

$ cat /etc/netplan/01-netcfg.yaml

network:
    version: 2
    renderer: networkd
    ethernets:
        enp0s3:
            dhcp4: no
            addresses: [192.168.1.28/24]
            gateway4: 192.168.1.1
            nameservers:
                addresses: [192.168.1.1]

... NIC 最终IP——我分配的静态地址和原始动态 IP,如下所示:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:dd:e5:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.28/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.1.154/24 brd 192.168.1.255 scope global secondary dynamic enp0s3
       valid_lft 86383sec preferred_lft 86383sec
    inet6 fe80::a00:27ff:fedd:e5ea/64 scope link
       valid_lft forever preferred_lft forever

我到处搜索,但还是搞不清楚。我猜这可能与 cloud-init 有关,但如果是这样的话,我不知道该怎么做。

感谢任何帮助!

答案1

最近我已经多次看到这种情况了,所以我现在只是假设你也有同样的感受,并提供答案。如果你的情况不是这样,至少它可能对其他人有帮助。

问题要素:

  • 启动系统后克隆系统(在我看来不应该这样做)
  • 网络化

现在发生的情况是,在第一次启动时,systemd 将生成/etc/machine-id一个客户端 ID,然后 networkd 将使用它在其 dhcp 请求中创建一个客户端 ID。

这将是服务 IP 的首选唯一 ID,因此所有使用相同 ID 克隆的机器/etc/machine-id都会发生冲突。

首次启动/初始化时要做的不仅仅是这些,这也是我认为您应该从干净的云映像和部署程序开始的原因。但目前,请确保/etc/machine-id删除。它将在启动时生成一个新的,并且系统可以通过 DHCP 服务器进行区分。

相关内容