IPv6 ULA (ユニークローカルアドレス) 生成

IPv6 ULA (ユニークローカルアドレス) 生成

RFC4193 には、IPv6 ULA (Unique Local Address) を生成するための疑似コードが含まれています。このアルゴリズムに従う必要がありますか、それとも任意の ULA が有効ですか?

   3.2.2. Sample Code for Pseudo-Random Global ID Algorithm

   The algorithm described below is intended to be used for locally
   assigned Global IDs.  In each case the resulting global ID will be
   used in the appropriate prefix as defined in Section 3.2.

     1) Obtain the current time of day in 64-bit NTP format [NTP].

     2) Obtain an EUI-64 identifier from the system running this
        algorithm.  If an EUI-64 does not exist, one can be created from
        a 48-bit MAC address as specified in [ADDARCH].  If an EUI-64
        cannot be obtained or created, a suitably unique identifier,
        local to the node, should be used (e.g., system serial number).

     3) Concatenate the time of day with the system-specific identifier
        in order to create a key.

     4) Compute an SHA-1 digest on the key as specified in [FIPS, SHA1];
        the resulting value is 160 bits.

     5) Use the least significant 40 bits as the Global ID.

     6) Concatenate FC00::/7, the L bit set to 1, and the 40-bit Global
        ID to create a Local IPv6 address prefix.

時間が問題にならないことを望みます。リンク ローカル アドレス (Mac から派生) を取得し、最初のオクテットを置き換えて ULA に変換することは許容されますか?

答え1

リンク ローカル アドレスからいくつかのビットを取得する場合、すべてのアドレスがそれに適しているわけではありません。MAC から派生したアドレスにはランダム性がなく、fe80::1一部のネットワークでは全員のゲートウェイとして使用されます。

技術的には、そのアルゴリズムは必須ではありません。しかし、ULA はランダムである必要があります。その直前のセクション 3.2.1 から:

ローカルに割り当てられたグローバルIDは、以下の擬似ランダムアルゴリズムを使用して生成されなければならない。[ランダム]セクション 3.2.2 では、推奨されるアルゴリズムについて説明します。グローバル ID を生成するすべてのサイトで、一意性が高い確率を確保するために、機能的に類似したアルゴリズムを使用することが重要です。

提案されたアルゴリズムは、確実に一意になるように、一般的に利用可能なプリミティブを入力として使用します。VM を再アドレス指定しなかったり、NIC ベンダーがミスを犯したりして、他の誰かが同じ MAC アドレスを持つ可能性があります。ただし、同じ NTP タイムスタンプを持つアドレスを生成する可能性は極めて低いです。コードを書きたくない場合は、すでに記述されている実装を確実に見つけることができます。

他のものを使用している場合は、純粋に MAC アドレス ベースのスキームを使用しないでください。/dev/random から 40 ビットを読み取るとよいでしょう。

関連情報