Это решается двумя расширениями 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 устройства.