我有一台安装在磁盘上的CoreOS 1800(或1855)的机器,以及以下systemd-networkd config(机器中只有一个网络接口):
$ cat /etc/systemd/network/zz-default.network
[Network]
DHCP=yes
[DHCP]
ClientIdentifier=mac
UseMTU=true
UseDomains=true
另一个值得注意的事情是,这台机器也配置了PXE启动,但PXE服务器将拒绝启动,所以我最终将从磁盘启动。
当我重新启动机器时,将为其分配两个DHCP IP,我通过检查DHCP服务器中的/var/lib/dhcpd.leases来确认:
lease 100.79.223.152 {
starts 5 2018/09/28 02:34:00; ends 6 2018/09/29 02:33:59; tstp 6 2018/09/29 02:33:59; cltt 5 2018/09/28 02:34:00;
binding state active; next binding state free; rewind binding state free;
hardware ethernet 08:9e:01:d9:28:64;
option agent.circuit-id 0:5:8:b9:1:0:29;
}
lease 100.79.223.150 {
starts 5 2018/09/28 02:34:29; ends 6 2018/09/29 02:34:28; tstp 6 2018/09/29 02:34:28; cltt 5 2018/09/28 02:34:29;
binding state active; next binding state free; rewind binding state free;
hardware ethernet 08:9e:01:d9:28:64; uid "001010236001331(d";
option agent.circuit-id 0:5:8:b9:1:0:29;
}
systemctl restart
systemd-networkd
并查看租约文件来确认)一切似乎都很好,但是PXE租约记录100.79.223.152导致其他问题(当真正PXE启动机器并部署另一个操作系统然后它将获得100.79.223.152而不是150,然后导致其他私有问题)。
如果我安装其他不使用systemd-networkd的操作系统,那么重启只会导致1个租约记录。
你可以看到租约100.79.223.150有一个字段uid“001010236001331(d”,这意味着让DHCP服务器通过uid(客户端标识符)分配IP,目前它实际上是相同的mac地址内容,只是打印为八位字节。
这是两个IP的根本原因。
为了防止这两个IP问题,我试图在DHCP服务器中的deny duplicates
中设置/etc/dhcp/dhcpd.conf,但没有任何改变。
我徘徊,如果有可能告诉systemd-networkd不发送uid(客户端标识符)。根据source of systemd的说法,有意实施“始终发送客户端标识符”,
给定这样的条件,如何防止systemd-networkd发送客户端标识符?
编辑2019/02/17:我发现我误解了deny duplicates
的含义,它没有帮助解决这个问题。
我记得我曾经测试过另一种选择,但没有效果。
ignore-client-uids on;
ignore-client-uids语句
ignore-client-uids标志;
如果存在ignore-client-uids语句且其值为true或on,则不会记录客户端的UID。如果此语句不存在或值为false或off,则将记录客户端UID。
https://www.isc.org/wp-content/uploads/2017/08/dhcp43.html
DHCP服务器版本为isc-dhcpd-4.2.4
编辑2019-03-12:我有些错误并找到了一些东西,所以我自己回答了这个问题。简单的答案是服务器端的ignore-client-uids true;
运行良好,客户端的ClientIdentifier=mac
不能正常工作。
您是否尝试将客户端标识符设置为(空)?
$ cat /etc/systemd/network/zz-default.network
[Network]
DHCP=yes
[DHCP]
ClientIdentifier=
UseMTU=true
UseDomains=true
经过多次实验,我发现只有ignore-client-uids true;
不断工作,所有的神秘都消失了。当你设置它时,你可以确认没有uid "....."
出现在/ var / lib / dhcp / dhcpd.leases`文件中,服务器完全忽略了客户端标识符从客户端发送,只需使用MAC来确定如何分配IP。
如果你坚持使用ClientIdentifier=mac
,你可以看看我发现了什么:
ClientIdentifier=mac
(在客户端* .network上)确实让我获得与以前相同的IP。我说它不起作用的原因可能是因为我有另一个NIC,默认情况下也启用了DHCP,因此导致了新的IP。/lib/systemd/network/zz-default.network
[Network]
DHCP=yes
[DHCP]
UseMTU=true
UseDomains=true
我将上面的文件更改为
[Network]
DHCP=no
我只有1和同样的IP。
uid "..."
uid“001304TDD210272”中确认它为grep file, e.g.,
,对于任何不可打印的字符,它将被编码为3位八进制例如304.某些客户端自动生成一个客户端标识符,如“\ 0x1”+“MAAS”+ MAC ...这就是我发现的全部,希望它有所帮助。