136

На моих Mac каждый IPv6-адрес включает MAC-адрес определенного компьютера (не моего маршрутизатора). Такие сайты, как ipv6-test.com, не только показывают его, но даже говорят, что он принадлежит компьютеру Apple.

Это похоже на супер cookie, и может относиться и к другим операционным системам. Как я могу избежать раскрытия моих MAC-адресов?

Справочная информация: MAC-адрес не виден. Как для 2001:0db8:1:2:60:8ff:fe52:f9d8:

  • Возьмите последние 64 бита (идентификатор хоста) и добавьте начальные нули: 0060:08ff:fe52:f9d8 .
  • Снимите часть ff:fe с середины. Если этих байтов нет, то здесь нет MAC-адреса.
  • Для первого байта: дополнить второй бит младшего разряда (универсальный / локальный бит; если бит равен 1, сделать его 0, а если это 0, сделать его 1). Итак: 0x00 (00000000) становится 0x02 (00000010).
  • Presto: 60:8ff:fe52:f9d8 переводится обратно в MAC-адрес 02:60:08:52:f9:d8 .

Примечание: начиная с macOS 10.12 Sierra, согласно Ars Technica, Apple приняла новый способ генерирования стабильных адресов, не основанных на MAC-адресе, который Windows, очевидно, уже делала годами.


Этот вопрос был Супер Вопросом Пользователя Недели.
Прочитайте запись в блоге для более подробной информации или внесите свой вклад в блог самостоятельно

2 ответа2

129

Это решается двумя расширениями IPv6:

  • RFC 4941, также известный как "Адресация конфиденциальности", позволяет исходящим соединениям использовать временные, случайно сгенерированные адреса (которые чередуются каждые несколько часов).
  • RFC 7217 позволяет генерировать первичный статический адрес из непрозрачного хеша, который не раскрывает никакой информации.

По крайней мере один, но все чаще оба метода поддерживаются популярными операционными системами.

Обратите внимание, что эти функции являются ортогональными. Вы можете использовать оба одновременно, если хотите.

Стабильные частные адреса

В некоторых операционных системах MAC-адрес (EUI-48) просто больше не используется для идентификаторов интерфейса. Вместо этого используется случайный или основанный на хэше идентификатор, как правило, в соответствии с RFC 7217.

  • Windows использует собственную схему по умолчанию, начиная с Windows Vista.

    Чтобы проверить, активна ли эта функция, выполните команду PowerShell:

    Get-NetIPv6Protocol | fl RandomizeIdentifiers
    

    Чтобы включить / отключить функцию:

    Set-NetIPv6Protocol -RandomizeIdentifiers Enabled
    Set-NetIPv6Protocol -RandomizeIdentifiers Disabled
    
  • Linux (NetworkManager) поддерживает RFC 7217 начиная с NetworkManager v1.2.0, используя UUID профиля соединения как часть начального числа. Эта функция активна по умолчанию в последних версиях NM.

    Чтобы включить или отключить эту функцию:

    nmcli con modify "<profilename>" ipv6.addr-gen-mode stable-privacy
    nmcli con modify "<profilename>" ipv6.addr-gen-mode eui64
    
  • Linux (ядро SLAAC) поддерживает RFC 7217 начиная с ядра v4.1.0; однако, он должен быть активирован вручную путем сохранения секретного семени через sysctl.

    Секретный ключ - это 128-битная шестнадцатеричная строка (в форме адреса IPv6), которая должна храниться в sysctl net.ipv6.conf.default.stable_secret . Чтобы сделать его постоянным, его можно поместить в /etc/sysctl.d/50-rfc7217.conf или аналогичный:

    net.ipv6.conf.default.stable_secret = 84a0:d5aa:52b0:4d35:k567:3aa6:7af5:474c
    

    Установка секрета автоматически активирует этот режим для всех сетевых интерфейсов. Чтобы проверить, активна ли эта функция, найдите "addrgenmode stable_secret" в ip -d link или значение "2" в sysctl net.ipv6.conf.<ifname>.addr_gen_mode .

Временные частные адреса

Как определено в RFC 4941, временные адреса конфиденциальности генерируются случайным образом и поворачиваются каждые несколько часов.

  • Windows поддерживает временные адреса начиная с Windows XP SP2.

    Чтобы включить / отключить эту функцию:

    netsh interface ipv6 set privacy state=enabled
    netsh interface ipv6 set privacy state=disabled
    

    Обратите внимание, что Windows больше не использует первичные адреса на основе MAC-адресов, начиная с Windows Vista.

  • Linux (NetworkManager): последние версии NetworkManager обрабатывают RA самостоятельно, хотя два значения ниже имеют значения, идентичные sysctl (2 = предпочитать приватный адрес, 1 = предпочитать главный адрес):

     nmcli con modify <name> ipv6.ip6-privacy 2
    

    Кроме того, начиная с версии 1.2.0 стал доступен улучшенный режим, который изменяет основной адрес, чтобы он больше не основывался на MAC-адресах, а стал уникальным для каждой сети (RFC 7217):

    (Обратите внимание, что конфиденциальная адресация ортогональна к addr-gen-mode; возможно использовать оба варианта.)

    Примечание: Начиная с версии 1.4.0, NM также позволяет рандомизировать сам MAC-адрес. Установите wifi.cloned-mac-address в stable чтобы иметь разные MAC для каждой сети (рекомендуется), или в random чтобы рандомизировать его для каждого соединения (может вызвать проблемы).

    Во всех случаях <name> должно быть именем соединения, например, WiFi SSID или "Wired Connection 1" . Используйте nmcli con чтобы перечислить все.

    Чтобы сделать это значением по умолчанию для новых подключений, начиная с 1.2.0 вы можете изменить /etc/NetworkManager/NetworkManager.conf:

     [connection]
     ipv6.addr-gen-mode=stable-privacy
     wifi.cloned-mac-address=stable
    
  • Linux (ядро SLAAC) поддерживает временные адреса, но не использует их по умолчанию. Их можно активировать через sysctl.

    Чтобы включить временные адреса и сделать их предпочтительными для исходящих соединений:

     sysctl net.ipv6.conf.all.use_tempaddr=2
     sysctl net.ipv6.conf.default.use_tempaddr=2
    

    Чтобы включить генерацию временного адреса, но оставьте статический адрес SLAAC предпочтительным:

     sysctl net.ipv6.conf.all.use_tempaddr=1
     sysctl net.ipv6.conf.default.use_tempaddr=1
    

    Часть all или default может быть заменена определенным именем интерфейса; например, net.ipv6.conf.eth0.use_tempaddr .

    (Я использовал ip link set eth0 down && ip link set eth0 up для принудительного назначения адреса, но вы также можете запустить rdisc6 eth0 или просто подождать несколько минут для следующего периодического объявления маршрутизатора.)

  • Mac OS X - включена по умолчанию с OS X 10.7 Lion:

     sysctl -w net.inet6.ip6.use_tempaddr=1
    

    Временные адреса, если включены, будут предпочтительными.

  • FreeBSD:

     sysctl net.inet6.ip6.use_tempaddr=1
    
     sysctl net.inet6.ip6.prefer_tempaddr=1
    
  • NetBSD:

     sysctl -w net.inet6.ip6.use_tempaddr=1
    

    Предпочтение временных адресов? Я понятия не имею. Адрес autoconf представляется предпочтительным. ifconfig не отображает список свойств адреса.

  • OpenBSD - поддержка добавлена в 5.2 ; включен и предпочтен по умолчанию в 5.3 .

     ifconfig em0 autoconfprivacy
    

    ifconfig показывает "autoconfprivacy" рядом с временными адресами.

Примечания по конфигурации:

  • В Linux, OS X и на всех BSD отредактируйте /etc/sysctl.conf чтобы сделать настройку постоянной.

  • В Windows изменения сохранятся автоматически. (Вы можете добавить store=active к команде netsh если хотите, чтобы она сохранялась до перезагрузки.)


Частично основано на операционных системах IPv6 на IPv6INT.net. Смотрите также Общие замечания по IPv6.


Если аппаратный адрес используется в адресе IPv6, это обычно означает, что ваша сеть использует автоматическую настройку IPv6 без сохранения состояния. В этом случае вы можете просто выбрать свой собственный суффикс адреса и настроить IPv6 вручную.

Однако даже если в добавленном вручную адресе не будет вашей информации об оборудовании, он все равно будет статическим (в отличие от адресации конфиденциальности, которая часто меняет адреса). Кроме того, статические адреса могут быть проблемой в сети, превышающей 2-3 устройства.

1

К вашему сведению, это относится только к определенным схемам IP-адресации. Скорее всего, вы (или ваш интернет-провайдер) используете автоконфигурацию IPv6, для чего требуется достаточно большой блок IP-адресов. Решением может быть отключение этой функции. Ваш Интернет-провайдер может также использовать DHCP для назначения адресов, что все еще возможно с IPv6.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .