如何防止 systemd-networkd 发送客户端标识符?
how can I prevent systemd-networkd from sending client identifier?
我有一台machine,CoreOS 1800(or 1855)安装在磁盘上,下面是systemd-networkd config([=60中只有一个网络接口=]hine):
$ cat /etc/systemd/network/zz-default.network
[Network]
DHCP=yes
[DHCP]
ClientIdentifier=mac
UseMTU=true
UseDomains=true
另一个值得注意的事情是这个 machine 也配置了 PXE 启动但是 PXE 服务器将拒绝启动所以它最终将从磁盘启动。
当我重新启动machine时,会为它分配两个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 服务器拒绝。
- 租赁记录100.79.223.150由systemd-networkd请求
核心OS。 (我可以通过 运行
systemctl restart systemd-networkd
确认并查看租约文件)
一切似乎都很好,但是 PXE 租用记录 100.79.223.152 导致了其他问题(当真正的 PXE 启动 machine 并部署另一个 OS 时,它将获得 100.79.223.152而不是 150,然后导致其他私人问题)。
如果我安装其他 OS 不使用 systemd-networkd,那么重启只会导致 1 个租用记录。
可以看到租约100.79.223.150有一个uid字段"001010236001331(d)",意思是让DHCP服务器根据uid(客户端标识符)分配IP,目前和mac的内容是一样的地址,只打印为八位字节。
这就是两个IP的根本原因。
为了防止这两个 IP 问题,我尝试在 DHCP 服务器的 /etc/dhcp/dhcpd.conf 中设置 deny duplicates
,但没有任何改变。
我在想是否可以告诉 systemd-networkd 不要发送 uid(客户端标识符)。根据source of systemd,有意实施为“始终发送客户端标识符”,
在这种情况下,如何防止 systemd-networkd 发送客户端标识符?
编辑 2019/02/17:我发现我误解了 deny duplicates
的意思,这对解决这个问题没有帮助。
我记得我曾先测试过另一个选项,但没有用。
ignore-client-uids on;
The ignore-client-uids statement
ignore-client-uids flag;
If the ignore-client-uids statement is present and has a value of true
or on, the UID for clients will not be recorded. If this statement is
not present or has a value of false or off, then client UIDs will be
recorded.
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 和以前一样。
客户端标识符将是一个字符串“\0x1”+MAC,你可以在/var/lib/dhcp/dhcpd.leases[=18=中grepuid "..."
确认]uid "001304TDD210272"`,对于任何不可打印的字符,它将被编码为 3 位八进制,例如 304。一些客户端会自动生成这样的客户端标识符 "\0x1" + "MAAS" + MAC ...
最不幸的是:一旦客户端发送客户端标识符,对于相同的MAC,如果客户端发送没有客户端标识符的花药请求,它将得到新IP.
考虑到DDNS,对于相同的MAC,当DHCP服务器为它编写DNS更新请求时,带客户端标识符和不带客户端标识符的DHCP请求被视为不同的客户端。简单来说,
- 对于没有客户端标识符的 DHCP 请求 -> 服务器发送带有 MAC 散列的 DDNS 请求 -> DNS 服务器:OK
- 对于带有客户端标识符的 DHCP 请求 -> 服务器发送带有客户端标识符散列的 DDNS 请求 -> DNS 服务器:出于安全原因,由于散列不同而被拒绝。
这就是我找到的所有内容,希望对您有所帮助。
你也可以查看/运行/.../systemd/network/*.network下是否有配置,我也遇到过同样的问题,因为netplan把一个配置网络文件放在/运行 代替 etc 或 lib 应用。
这种情况下的解决方案是在 netplan yml 配置中添加 dhcp-identifier: mac
我有一台machine,CoreOS 1800(or 1855)安装在磁盘上,下面是systemd-networkd config([=60中只有一个网络接口=]hine):
$ cat /etc/systemd/network/zz-default.network
[Network]
DHCP=yes
[DHCP]
ClientIdentifier=mac
UseMTU=true
UseDomains=true
另一个值得注意的事情是这个 machine 也配置了 PXE 启动但是 PXE 服务器将拒绝启动所以它最终将从磁盘启动。
当我重新启动machine时,会为它分配两个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 服务器拒绝。
- 租赁记录100.79.223.150由systemd-networkd请求
核心OS。 (我可以通过 运行
systemctl restart systemd-networkd
确认并查看租约文件)
一切似乎都很好,但是 PXE 租用记录 100.79.223.152 导致了其他问题(当真正的 PXE 启动 machine 并部署另一个 OS 时,它将获得 100.79.223.152而不是 150,然后导致其他私人问题)。
如果我安装其他 OS 不使用 systemd-networkd,那么重启只会导致 1 个租用记录。
可以看到租约100.79.223.150有一个uid字段"001010236001331(d)",意思是让DHCP服务器根据uid(客户端标识符)分配IP,目前和mac的内容是一样的地址,只打印为八位字节。
这就是两个IP的根本原因。
为了防止这两个 IP 问题,我尝试在 DHCP 服务器的 /etc/dhcp/dhcpd.conf 中设置 deny duplicates
,但没有任何改变。
我在想是否可以告诉 systemd-networkd 不要发送 uid(客户端标识符)。根据source of systemd,有意实施为“始终发送客户端标识符”,
在这种情况下,如何防止 systemd-networkd 发送客户端标识符?
编辑 2019/02/17:我发现我误解了 deny duplicates
的意思,这对解决这个问题没有帮助。
我记得我曾先测试过另一个选项,但没有用。
ignore-client-uids on;
The ignore-client-uids statement
ignore-client-uids flag;
If the ignore-client-uids statement is present and has a value of true or on, the UID for clients will not be recorded. If this statement is not present or has a value of false or off, then client UIDs will be recorded.
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 和以前一样。
客户端标识符将是一个字符串“\0x1”+MAC,你可以在/var/lib/dhcp/dhcpd.leases[=18=中grep
uid "..."
确认]uid "001304TDD210272"`,对于任何不可打印的字符,它将被编码为 3 位八进制,例如 304。一些客户端会自动生成这样的客户端标识符 "\0x1" + "MAAS" + MAC ...最不幸的是:一旦客户端发送客户端标识符,对于相同的MAC,如果客户端发送没有客户端标识符的花药请求,它将得到新IP.
考虑到DDNS,对于相同的MAC,当DHCP服务器为它编写DNS更新请求时,带客户端标识符和不带客户端标识符的DHCP请求被视为不同的客户端。简单来说,
- 对于没有客户端标识符的 DHCP 请求 -> 服务器发送带有 MAC 散列的 DDNS 请求 -> DNS 服务器:OK
- 对于带有客户端标识符的 DHCP 请求 -> 服务器发送带有客户端标识符散列的 DDNS 请求 -> DNS 服务器:出于安全原因,由于散列不同而被拒绝。
这就是我找到的所有内容,希望对您有所帮助。
你也可以查看/运行/.../systemd/network/*.network下是否有配置,我也遇到过同样的问题,因为netplan把一个配置网络文件放在/运行 代替 etc 或 lib 应用。 这种情况下的解决方案是在 netplan yml 配置中添加 dhcp-identifier: mac