我正在使用 Debian Bullseye 来运行具有两个来宾的 KVM(基于内核的虚拟机)vdeb02-10-base
和vdeb03-10-base
.两台客户机都安装了 Debian Buster。出于测试目的,vdeb03-10-base
只是 的克隆vdeb02-10-base
,使用该virt-clone
实用程序来确保它具有唯一的系统参数,如 mac 地址等。在我使用的所有设备(主机、访客)上systemd-networkd。
如果我开始vdeb02-10-base
启用 DHCP 以从 ISC-DHCP 服务器获取 IP 地址,则一切正常,如 DHCP 服务器日志所示:
Oct 05 18:43:49 vnetsvr30-10 dhcpd[1534]: DHCPDISCOVER from 52:54:00:ee:f5:0a via ens1
Oct 05 18:43:50 vnetsvr30-10 dhcpd[1534]: DHCPOFFER on 192.168.30.104 to 52:54:00:ee:f5:0a (vdeb02-10-base) via ens1
Oct 05 18:43:50 vnetsvr30-10 dhcpd[1534]: DHCPREQUEST for 192.168.30.104 (192.168.30.10) from 52:54:00:ee:f5:0a (vdeb02-10-base) via ens1
Oct 05 18:43:50 vnetsvr30-10 dhcpd[1534]: Wrote 56 leases to leases file.
Oct 05 18:43:50 vnetsvr30-10 dhcpd[1534]: DHCPACK on 192.168.30.104 to 52:54:00:ee:f5:0a (vdeb02-10-base) via ens1
Oct 05 18:43:50 vnetsvr30-10 dhcpd[1534]: Added new forward map from vdeb02-10-base.home.hoeft-online.de. to 192.168.30.104
Oct 05 18:43:50 vnetsvr30-10 dhcpd[1534]: Added reverse map from 104.30.168.192.in-addr.arpa. to vdeb02-10-base.home.hoeft-online.de.
动态 DNS 名称已映射到 DNS 服务器,因此我可以使用以下命令查询它:
~$ dig +search +noall +answer vdeb02-10-base
vdeb02-10-base.home.hoeft-online.de. 3600 IN A 192.168.30.104
如果我启动,vdeb03-10-base
DHCP 服务器日志会显示以下内容:
Oct 05 18:44:55 vnetsvr30-10 dhcpd[1534]: DHCPDISCOVER from 52:54:00:ed:c5:df (vdeb02-10-base) via ens1
Oct 05 18:44:55 vnetsvr30-10 dhcpd[1534]: ICMP Echo reply while lease 192.168.30.104 valid.
Oct 05 18:44:55 vnetsvr30-10 dhcpd[1534]: Abandoning IP address 192.168.30.104: pinged before offer
Oct 05 18:44:55 vnetsvr30-10 dhcpd[1534]: Removed forward map from vdeb02-10-base.home.hoeft-online.de. to 192.168.30.104
Oct 05 18:44:55 vnetsvr30-10 dhcpd[1534]: Removed reverse map on 104.30.168.192.in-addr.arpa.
Oct 05 18:44:57 vnetsvr30-10 dhcpd[1534]: DHCPDISCOVER from 52:54:00:ed:c5:df via ens1
Oct 05 18:44:58 vnetsvr30-10 dhcpd[1534]: DHCPOFFER on 192.168.30.95 to 52:54:00:ed:c5:df (vdeb03-10-base) via ens1
Oct 05 18:44:58 vnetsvr30-10 dhcpd[1534]: DHCPREQUEST for 192.168.30.95 (192.168.30.10) from 52:54:00:ed:c5:df (vdeb03-10-base) via ens1
Oct 05 18:44:58 vnetsvr30-10 dhcpd[1534]: DHCPACK on 192.168.30.95 to 52:54:00:ed:c5:df (vdeb03-10-base) via ens1
Oct 05 18:44:58 vnetsvr30-10 dhcpd[1534]: Added new forward map from vdeb03-10-base.home.hoeft-online.de. to 192.168.30.95
Oct 05 18:44:58 vnetsvr30-10 dhcpd[1534]: Added reverse map from 95.30.168.192.in-addr.arpa. to vdeb03-10-base.home.hoeft-online.de.
为什么 DHCP-Server 表示来自DHCPDISCOVER
而vdeb02-10-base
不是来自vdeb03-10-base
? Mac 地址和主机名不同。当然,DHCP 服务器使用 ping 测试意味着网络上存在 IP 地址冲突。然后它会删除 的 DNS 映射vdeb02-10-base
并将其替换为 的映射,vdeb03-10-base
结果我无法vdeb02-10-base
再解析其名称。
这里发生了什么?为什么 DHCP 服务器要替换 DNS 服务器上的主机名,而不是仅添加第二个来宾的名称?问题可能出在哪里?在客户机上,或者在带有标准网桥的主机上,或者在 DHCP 服务器上,或者使用 systemd-networkd?也许有一个选项可以用在/etc/dhcp/dhcpd.conf
?
答案1
从 DHCP 服务器的日志来看,它似乎无法区分两个不同的设备,尽管它们具有不同的名称和 MAC 地址。显然这不用于识别网络上的设备。因为vdeb03-10-base
是克隆,vdeb02-10-base
肯定有克隆后没有改变的不同标识(名字和mac地址都变了)。
看看man systemd.network
这可能是什么,我发现ClientIdentifier=
可以设置为“苹果“ 或者 ”杜伊德如果将此设置为mac
两个设备名称都会动态正确映射到 DNS 服务器,但这并不能解决问题的根源。必须有一个 DUID 在两个设备上仍然相同,并且可能会导致其他问题。
我发现可以设置DHCP的DUID,/etc/systemd/networkd.conf
但下一个问题是如何计算它?在man networkd.conf
我发现:
如果“DUIDType=vendor”,则将使用“43793”作为供应商标识符 (systemd) 和 machine-id(5) 的哈希内容生成 DUID 值。如果未指定 DUIDType=,则这是默认值。
所以问题的根源在于机器 ID两位客人都是一样的。
但改起来有一些麻烦。如何做到这一点我发现:更改/etc/machine-id 可以吗?。简而言之,你必须这样做:
~$ sudo rm -f /etc/machine-id
~$ sudo dbus-uuidgen --ensure=/etc/machine-id
~$ sudo rm /var/lib/dbus/machine-id
~$ sudo dbus-uuidgen --ensure