Назад | Перейти на главную страницу

Генерация IPv6 ULA (уникальный локальный адрес)

RFC4193 содержит псевдокод для генерации ULA IPv6 (уникальный локальный адрес). Должен ли я следовать этому алгоритму или действителен произвольный 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?

Что касается получения некоторых битов из локального адреса ссылки, не все адреса подходят для этого. Не полученный MAC не будет иметь случайности, fe80::1 в некоторых сетях используется как шлюз для всех.

Технически этот алгоритм не требуется. Но ULA должны быть случайными. Из раздела 3.2.1 непосредственно перед этим:

Локально назначенные глобальные идентификаторы ДОЛЖНЫ создаваться с помощью псевдослучайного алгоритма, совместимого с [СЛУЧАЙНО]. Раздел 3.2.2 описывает предлагаемый алгоритм. Важно, чтобы все сайты, генерирующие глобальные идентификаторы, использовали похожий по функциям алгоритм, чтобы гарантировать высокую вероятность уникальности.

Предлагаемый алгоритм использует общедоступные примитивы в качестве входных данных, чтобы быть надежно уникальным. Возможно, что кто-то другой мог иметь тот же MAC-адрес, если не переадресовал виртуальную машину или производитель сетевого адаптера сделал ошибку. Но также создание одного с той же меткой времени NTP крайне маловероятно. Конечно, вы можете найти уже написанные реализации этого, если не хотите писать код.

Если вы используете что-то еще, не используйте схему, основанную исключительно на MAC-адресах. Возможно чтение 40 бит из / dev / random.