如何防止systemd-networkd发送客户端标识符?

问题描述 投票:1回答:2

我有一台安装在磁盘上的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;
}
  • PXE加载程序请求租约记录100.79.223.152,但DHCP服务器拒绝。
  • CoreOS的systemd-networkd请求租约记录100.79.223.150。 (我可以通过运行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不能正常工作。

client systemd identifier dhcp coreos
2个回答
1
投票

您是否尝试将客户端标识符设置为(空)?

$ cat /etc/systemd/network/zz-default.network
[Network]
DHCP=yes

[DHCP]
ClientIdentifier=
UseMTU=true
UseDomains=true

0
投票

经过多次实验,我发现只有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。

  • 客户端标识符将是一个字符串“\ 0x1”+ MAC,您可以在/var/lib/dh​​cp/dhcpd.leasesuid "..."uid“001304TDD210272”中确认它为grep file, e.g.,,对于任何不可打印的字符,它将被编码为3位八进制例如304.某些客户端自动生成一个客户端标识符,如“\ 0x1”+“MAAS”+ MAC ...
  • 最不幸的是:一旦客户端发送客户端标识符,对于相同的MAC,如果客户端发送没有客户端标识符的另一个请求,它将获得新的IP。
  • 考虑到DDNS,对于相同的MAC,当DHCP服务器为其组成DNS更新请求时,具有和不具有客户端标识符的DHCP请求被视为不同的客户端。简单地说, 对于没有客户端标识符的DHCP请求 - >服务器发送带有MAC哈希的DDNS请求 - > DNS服务器:确定 对于具有客户端标识符的DHCP请求 - >服务器发送带有客户端标识符哈希值的DDNS请求 - > DNS服务器:由于哈希值而被拒绝,以确保安全性。

这就是我发现的全部,希望它有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.