systemd.network DUID、IAID、および DHCPv4 クライアント識別子

systemd.network DUID、IAID、および DHCPv4 クライアント識別子

以下を使用するように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現在のデフォルト値ですvendorIAID必要なフォーマットを理解したら、フォーマットを設定できます。

しかし、要求から得られたデフォルト値がどのように形成されるかをIAID理解できるように、デフォルト値がどのように生成されるかを知りたいと思います。DUIDDHCPv4

アイデアは、私のNixOS設定に正確な量の詳細が含まれていることを確認することです。これでデフォルト値を使用できますが、再DUID起動後も持続するかどうかはわかりません。

ベストアンサー1

DHCPv4に対して選択した場合、ClientIdentifier=duid生成されたDHCPv4クライアント識別子は0xFF(タイプ=DUID)+ 4バイトIAID + DHCPv6 DUID(によって異なりますDUIDType=)。

デフォルトのsystemd-networkd "ベンダー"DHCPv6 DUIDは、以下に基づいています。ハッシュ値/etc/machine-id。バラよりman networkd.conf利用可能な他のDUIDタイプの場合。

IAIDの形式は、同じDUIDを持つ複数のIAを区別するために使用される32ビット整数です。カスタムIAIDが提供されていない場合、systemd-networkdは既知の場合、インターフェイスの「予測可能な」名前をハッシュするか(現在アクティブな名前ではない場合でも)、MACアドレスをハッシュして信頼できるIAIDを生成します。

networkctl status eth0DHCPv4 クライアント ID と DHCPv6 DUID が表示されます。

クライアント識別子のバイト形式duidは、次のように定義されます。RFC 4361:

ClientIdentifier=duid 
DUIDType=サプライヤー

DHCPv4 クライアント ID = ff:5d:e2:6c:15:0:2:0:0:ab:11:f9:f9:80:f7:f7:20:2c:f5 |---|------------|--------- ------------- ---| クライアントIDタイプ= ff (255=DHCPv6 IAID+DUID) DHCPv6 IAID = 5d:e2:6c:15 (「enp2s0」のシファシ?) DHCPv6 DUID = 0:2:0:0:ab:11:f9:f9:80:f7:f7:20:2c:f5 |---|---------|------------| DHCPv6 DUIDタイプ= 0:2 (2=二人) DUID-ENサプライヤー= 0:0:ab:11 (43793=システム) DUID-EN データ = f9:f9:80:f7:f7:20:2c:f5

ClientIdentifier=macMACアドレスは静的であるため、常にプレフィックスが0x01(Type = Ethernet)のMACアドレスのみが含まれているため、使いやすくなります。これは、以下のように他のほとんどのDHCPv4クライアント(dhclientやWindowsなど)から送信された従来のIDタイプです。

client_id=mac

DHCPv4 クライアント ID = 1:4e:c8:ac:b7:d8:4e |-|----------------| クライアントIDタイプ= 1 (1=イーサネット) ハードウェアアドレス = 4e:c8:ac:b7:d8:4e

同様に、DHCPv6を使用できますDUIDType=link-layer

DUIDType=リンクレイヤ

DHCPv6 DUID = 0:3:0:1:4e:c8:ac:b7:d8:4e |---|---|------| DUIDタイプ= 0:3 (3=DUID-LL) リンクタイプ = 0:1 (1=イーサネット) LLアドレス= 4e:c8:ac:b7:d8:4e

(理論的にはとClientIdentifier=duid一緒に使用できますが、DUIDType=link-layerこれは少し冗長であり、ほとんどのDHCPサーバーはより良いサポートを提供しますClientIdentifier=mac。)

おすすめ記事