我已将我的 NixOS 设置为使用systemd-networkd
::
systemd.network.enable = true;
我的界面配置如下:
networking {
interfaces.enp5s0f0np0.useDHCP = true;
interfaces.enp5s0f1np1.macAddress = cfg.myMacAddress;
interfaces.enp5s0f1np1.ipv6.addresses = [ {
address = "fd00:cafe::1";
prefixLength = 64;
}];
};
现在DHCPv4
,我想修复clientIdentifier
(最终我的 DHCP 服务器需要地址MAC
和clientID
给固定 IP);为此我可以做这样的事情:
systemd.network.networks."40-enp5s0f1np1" = {
dhcpV4Config.ClientIdentifier = "duid";
dhcpV4Config.DUIDType = "vendor";
dhcpV4Config.IAID = <something>;
};
clientIdentifier
本质上是( duid
) 和DUIDType
( )的当前默认值vendor
。IAID
一旦我理解了它应该采用的格式,我就可以设置一个.
但是,我想弄清楚默认值IAID
是如何生成的(这样我就可以理解DUID
我在DHCPv4
请求中获得的默认值是如何形成的)。
我的想法是确保我的 NixOS 配置包含正确数量的细节。现在,我可以使用默认值DUID
,但我不知道它是否会在重启后持续存在……
当
ClientIdentifier=duid
为 DHCPv4 选择 时,生成的 DHCPv4 客户端标识符为 0xFF ( type=DUID ) + 四字节 IAID + DHCPv6 DUID(取决于DUIDType=
)。默认的 systemd-networkd“供应商”DHCPv6 DUID基于
/etc/machine-id
.man networkd.conf
有关其他可用的 DUID 类型,请参阅。IAID的格式只是一个32位的整数,用于区分多个具有相同DUID的IA。如果未提供自定义 IAID,systemd-networkd 将通过散列接口的“可预测”名称(如果已知)(即使这不是当前活动名称)或否则散列 MAC 地址来生成稳定的 IAID。
networkctl status eth0
将告诉您 DHCPv4 客户端 ID 以及 DHCPv6 DUID。客户端标识符的字节格式
duid
如RFC 4361中所定义:由于您的 MAC 地址是静态的,因此使用起来会简单得多
ClientIdentifier=mac
,它始终只包含前缀为 0x01 的 MAC 地址(类型=以太网)。这是大多数其他 DHCPv4 客户端(例如 dhclient 或 Windows)发送的传统 ID 类型,看起来像:同样,您可以使用
DUIDType=link-layer
DHCPv6:(理论上您可以结合使用
ClientIdentifier=duid
,DUIDType=link-layer
但这有点多余,而且大多数 DHCP 服务器对 有更好的支持ClientIdentifier=mac
。)