Dan*_*ang 5 networking virtualbox dhcp nat
我创建了一个新的 nat 网络,通过我的 VirtualBox 6.0 上的 GUI 启用了 dhcp,并将 2 个来宾 VM 连接到它,但是即使它们同时运行,也会继续为两个 VM 分配相同的 IP。
我检查了 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>
任何帮助将非常感激。
经过更多的研究+反复试验,我发现
问题的原因是 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 文件。建议:
验证 /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
删除 /etc/machine-id
sudo rm -f /etc/machine-id
重新生成 /etc/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id
重启虚拟机
sudo init 6
登录并验证新 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
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |