Самоконфигурация по умолчанию

Одна из определяющих особенностей IPv6 в том, что хост может настроить рабочий адрес без какого-либо сервера и без какой-либо ручной настройки. Там, где IPv4 опирается на , чтобы раздавать адреса, IPv6 может строить их локально из информации, которую маршрутизатор транслирует. Результат в том, что один интерфейс обычно заканчивает с несколькими адресами сразу, каждый для иной цели, что удивляет людей, приходящих из IPv4.

Link-local идёт первым

Прежде всего прочего, каждый интерфейс IPv6 настраивает адрес link-local в fe80::/10 (тип, который инструмент помечает как link-local). Он генерируется локально, никогда не маршрутизируется за пределы локального канала, и существует, чтобы хост мог немедленно говорить с соседями и маршрутизаторами, в том числе чтобы спросить, как настроить остальные свои адреса. Link-local — это начальная загрузка: он всегда присутствует, и машинерия обнаружения соседей в статье обнаружение соседей работает поверх него.

Объявление маршрутизатора решает метод

Чтобы получить глобально маршрутизируемый адрес, хост слушает Объявления Маршрутизатора (Router Advertisements), периодические сообщения, которые маршрутизатор посылает (и которые хост может запросить Запросом Маршрутизатора, Router Solicitation). Объявление несёт on-link префикс, почти всегда /64, и два флага, которые говорят хосту, как себя настроить:

  • Флаг M (Managed) говорит «используй DHCPv6, чтобы получить адрес».
  • Флаг O (Other) говорит «настрой свой адрес сам, но получи другие настройки вроде DNS от DHCPv6».

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

SLAAC: построение собственного адреса

Бесстатусная Автоконфигурация Адресов (Stateless Address Autoconfiguration, RFC 4862) — это механизм, который хост использует, чтобы сформировать свой собственный адрес: возьмите префикс /64 из объявления и присоедините 64-битный идентификатор интерфейса. Это вся причина, почему подсеть должна быть /64 (см. статью разбиение на подсети). Ни один сервер не отслеживает назначение, что и означает «бесстатусный».

Идентификатор интерфейса может быть сформирован несколькими способами, и это имеет реальные последствия для приватности:

  • Модифицированный выводит идентификатор из MAC-адреса интерфейса, что инструмент может продемонстрировать. Он стабилен и удобен, но он встраивает аппаратный адрес в каждый адрес IPv6, который хост использует, позволяя удалённому серверу отслеживать устройство через сети.
  • Стабильные, непрозрачные идентификаторы (RFC 7217) производят идентификатор, стабильный на сеть, но не раскрывающий никакого аппаратного адреса, исправляя проблему межсетевого отслеживания при сохранении согласованного адреса на данном канале.
  • Временные (приватные) адреса (RFC 8981, которая делает устаревшей более раннюю RFC 4941) генерируют случайные идентификаторы, которые ротируются со временем, так что исходящие соединения вообще не представляют долгоживущего адреса.

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

Обнаружение Дублирующегося Адреса

Прежде чем хост фактически использует любой адрес, который он сформировал, он выполняет Обнаружение Дублирующегося Адреса (Duplicate Address Detection): он посылает Запрос Соседа (Neighbor Solicitation) для своего собственного пробного адреса и ждёт. Если кто-то отвечает, адрес уже в использовании и не должен быть востребован. — это дешёвая страховка, что самоконфигурация не производит коллизий, и она опирается на те же сообщения обнаружения соседей, описанные в сопутствующей статье.

DHCPv6 для статусного контроля

Когда администратор хочет отслеживать и назначать адреса централизованно, DHCPv6 (RFC 8415) предоставляет статусное назначение, очень как DHCP в IPv4: сервер арендует конкретные адреса и записывает, у кого что. Есть также бесстатусный режим DHCPv6, который раздаёт только конфигурацию вроде серверов DNS, пока хост всё ещё формирует свой собственный адрес через , что выбирает флаг O. DHCPv6 — это также где живёт делегирование префикса, механизм, которым домашний маршрутизатор получает целый префикс, чтобы разбивать на подсети за собой.

Много адресов, по замыслу

Ментальная модель, которую стоит унести, в том, что хост IPv6 в значительной мере самоуправляем. У него всегда есть адрес link-local, он узнаёт префикс и метод конфигурации из объявлений маршрутизатора, и в зависимости от флагов он либо строит свои собственные глобальные адреса с SLAAC, либо арендует их от DHCPv6, часто заканчивая со стабильным адресом и ротирующимся временным бок о бок. Когда инструмент показывает вам адрес и идентифицирует его тип, тот тип говорит вам, какой из этих путей его произвёл.