VirtualBox dhcp 服务器将相同的 IP 租给所有连接到 VirtualBox Nat 网络的来宾 VM

Dan*_*ang 5 networking virtualbox dhcp nat

我创建了一个新的 nat 网络,通过我的 VirtualBox 6.0 上的 GUI 启用了 dhcp,并将 2 个来宾 VM 连接到它,但是即使它们同时运行,也会继续为两个 VM 分配相同的 IP。

  • 主机:Ubuntu 桌面 18.04。
  • 来宾 A:Ubuntu Server 18.04。08:00:27:33:ac:c6
  • 来宾 B:Ubuntu 服务器 18.04。08:00:27:b9:41:77(从客人 A 克隆)

我检查了 VirtualBox 在第一次启动 VM 后生成的 NatNetwork-Dhcpd.leases 文件,发现两个 VM 的租约都显示为“已确认”,但即使它们具有不同的 MAC 地址,也获得了相同的 IP。

<?xml version="1.0"?> <Leases version="1.0"> <Lease mac="08:00:27:b9:41:77" id="ffe2343f3e00020000ab117f957fa5c66cfffd" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565568632" expiration="1200"/> </Lease> <Lease mac="08:00:27:33:ac:c6" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565568546" expiration="1200"/> </Lease> </Leases>

我还注意到,如果我关闭访客 A 并再次打开它,那么 NatNetwork-Dhcpd.leases 会将id属性删除到访客 B 的租用部分,并将其添加到访客 A 的租用部分,并具有完全相同的值修改文件如下:

<?xml version="1.0"?> <Leases version="1.0"> <Lease mac="08:00:27:b9:41:77" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565568632" expiration="1200"/> </Lease> <Lease mac="08:00:27:33:ac:c6" id="ffe2343f3e00020000ab117f957fa5c66cfffd" network="0.0.0.0" state="acked"> <Address value="10.0.2.4"/> <Time issued="1565576544" expiration="1200"/> </Lease> </Leases>

我的 VirtualBox nat 网络如下:

<NetserviceRegistry> <DHCPServers> <DHCPServer networkName="HostInterfaceNetworking-vboxnet0" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/> <DHCPServer networkName="NatNetwork" IPAddress="10.0.2.3" networkMask="255.255.255.0" lowerIP="10.0.2.4" upperIP="10.0.2.254" enabled="1"> <Options> <Option name="3" value="10.0.2.1"/> <Option name="6" value="10.0.2.1"/> </Options> </DHCPServer> </DHCPServers> <NATNetworks> <NATNetwork networkName="NatNetwork" network="10.0.2.0/24" ipv6="0" ipv6prefix="fd17:625c:f037:2::/64" advertiseDefaultIPv6Route="0" needDhcp="1" enabled="1"> <Mappings> <Loopback4 address="127.0.0.1" offset="2"/> </Mappings> </NATNetwork> </NATNetworks> </NetserviceRegistry>

任何帮助将非常感激。

Dan*_*ang 5

经过更多的研究+反复试验,我发现

问题的原因是 Ubuntu 18.04 的内置网络配置不再使用 NIC Mac 地址作为 DHCP 请求的默认 id。(anneb,2018 年,第 1 段)。

还有那个

Mos DHCP 客户端,包括 dhclient,提供类型为“01”(基于 MAC)的客户端 ID 字段。另一种常见类型是“00”(域名)。然而,默认情况下,systemd-networkd 提供一个“不透明”的客户端 ID,它是从 /etc/machine-id 的内容生成的。

根据 DHCP 协议,租用首先由客户端 ID 选择(只要客户端提供“客户端 ID”选项,该选项可能基于也可能不基于 MAC),然后仅在客户端没有时才通过 MAC 地址选择发送身份证。(grawity,2018 年,第 4-5 段)。

所以我以 hvd (2017, np)的方式在访客 B 中生成了一个新的 /etc/machine-id 文件建议:

  1. 验证 /var/lib/dbus/machine-id 是否是 /etc/machine-id 的符号链接

    $ sudo ls -l /var/lib/dbus/machine-id lrwxrwxrwx 1 root root 15 Aug 1 17:18 /var/lib/dbus/machine-id -> /etc/machine-id

  2. 删除 /etc/machine-id

    sudo rm -f /etc/machine-id

  3. 重新生成 /etc/machine-id

    sudo dbus-uuidgen --ensure=/etc/machine-id

  4. 重启虚拟机

    sudo init 6

  5. 登录并验证新 IP 地址已分配给访客 B

    $ ip addr show enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:b9:41:77 brd ff:ff:ff:ff:ff:ff inet 10.0.2.5/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 1070sec preferred_lft 1070sec inet6 fe80::a00:27ff:feb9:4177/64 scope link valid_lft forever preferred_lft forever