Как избежать раскрытия моего MAC-адреса при использовании IPv6?
На моих Mac каждый IPv6-адрес включает MAC-адрес определенного компьютера (не моего маршрутизатора). Такие сайты, как http://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 ответа
Это решается двумя расширениями 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), которая должна храниться в
net.ipv6.conf.default.stable_secret
Sysctl. Чтобы сделать его постоянным, его можно поместить в/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 устройства.
К вашему сведению, это относится только к определенным схемам IP-адресации. Скорее всего, вы (или ваш интернет-провайдер) используете автоконфигурацию IPv6, для чего требуется достаточно большой блок IP-адресов. Решением может быть отключение этой функции. Ваш Интернет-провайдер может также использовать DHCP для назначения адресов, что все еще возможно с IPv6.