SLAAC
SLAAC (аббревиатура от англ. Stateless Address Autoconfiguration — «безсостоятельная автоматическая конфигурация адресов») — это механизм автоматического получения узлом (клиентом) глобального IPv6-адреса, не требующий постоянного сервера для хранения информации о назначенных адресах (состояния). SLAAC является одним из двух основных методов автоматической настройки адресов в протоколе IPv6, наряду с DHCPv6. Он позволяет устройству самостоятельно сгенерировать свой IP-адрес на основе префикса сети, объявленного маршрутизатором, и собственного идентификатора интерфейса (обычно на основе MAC-адреса или случайного числа).
История и предпосылки появления
SLAAC был разработан как часть спецификации для нового поколения протокола IP — IPv6. Одной из главных задач при проектировании IPv6 было упрощение и автоматизация процесса настройки сети, чтобы исключить необходимость ручного ввода адресов для каждого нового устройства. Оригинальное описание механизма содержится в документах RFC 2462 (1998 год), который позже был заменён и дополнен RFC 4862 (2007 год) и RFC 7217 (2014 год). В отличие от «состоятельного» (stateful) подхода, используемого в DHCPv6, SLAAC является «безсостоятельным» (stateless), то есть маршрутизаторам не нужно запоминать, какой адрес был выдан каждому устройству — вся ответственность за уникальность адреса лежит на клиенте.
Принцип работы
SLAAC основан на протоколе Neighbor Discovery Protocol (NDP), который является частью стека протоколов IPv6. Процесс автоматической настройки можно разбить на несколько этапов.
1. Запрос информации от маршрутизатора
Когда устройство подключается к сети (например, включается или меняет точку доступа), оно отправляет многоадресный запрос Router Solicitation (RS). Этот запрос адресован всем маршрутизаторам в данной широковещательной области (обычно по адресу ff02::2). Маршрутизаторы, получив RS, отвечают многоадресным объявлением Router Advertisement (RA).
2. Получение и анализ Router Advertisement
Маршрутизатор периодически (по умолчанию каждые несколько секунд) отправляет пакеты RA на адрес ff02::1 (все узлы локальной сети). Кроме того, он отправляет RA в ответ на RS. Пакет RA содержит важнейшую информацию для автоконфигурации:
- Префикс (Prefix) — часть сети (например,
2001:db8::/64). - Флаги (Flags) — два ключевых флага, определяющих способ настройки:
- M-флаг (Managed Address Configuration Flag) — указывает, следует ли устройству использовать DHCPv6 для получения адреса.
- O-флаг (Other Configuration Flag) — указывает, следует ли использовать DHCPv6 для получения других параметров (DNS-сервер, домен).
- Время жизни префикса (Valid Lifetime) — срок, в течение которого адрес, сгенерированный из этого префикса, считается действительным.
- MTU (необязательно) — максимальный размер пакета.
3. Формирование собственного адреса
Если в RA флаг M=0 (не использовать DHCPv6 для адреса), устройство приступает к генерации адреса. Оно берёт префикс из объявления (обычно длиной 64 бита) и комбинирует его с идентификатором интерфейса (Interface ID), который также имеет длину 64 бита. Идентификатор может быть сформирован одним из двух способов:
- EUI-64 (по MAC-адресу) — классический метод: на основе MAC-адреса (48 бит) вставляется
ff:feв середину, и старшим битам инвертируется второй младший бит (бит «индивидуального/группового» адреса). Например, MAC00:11:22:33:44:55даёт идентификатор0211:22ff:fe33:4455. - Случайный идентификатор (Privacy Extensions, RFC 4941, 7217) — для противодействия отслеживанию устройства по неизменному MAC-адресу используется генерация случайного или хэшированного идентификатора, который может периодически меняться.
Таким образом формируется полный IPv6-адрес (например, 2001:db8::ab11:cd22:ef33:4455).
4. Проверка уникальности (DAD)
Перед использованием сгенерированного адреса устройство обязано проверить, что он не конфликтует с адресами других устройств в той же подсети. Это делается с помощью механизма Duplicate Address Detection (DAD). Устройство отправляет многоадресный Neighbor Solicitation (NS) с предполагаемым адресом в качестве цели. Если от другого узла приходит ответ (Neighbor Advertisement, NA), это означает, что адрес занят, и устройство должно сгенерировать новый. DAD выполняется на локальном адресе (link-local) в первую очередь, а затем на глобальном.
Виды и сценарии автоконфигурации
SLAAC является лишь частью более общей картины. В реальных сетях IPv6 возможны несколько моделей настройки, которые определяются комбинацией флагов M и O в Router Advertisement.
Таблица режимов конфигурации IPv6
| M-флаг | O-флаг | Режим настройки | Описание |
|---|---|---|---|
| 0 | 0 | Stateless (SLAAC) | Устройство получает адрес только через SLAAC. Другие параметры (DNS) берутся из RA (если они там есть) или не настраиваются. Самый простой и распространённый сценарий. |
| 0 | 1 | Stateless DHCPv6 | Адрес получается через SLAAC, а дополнительные параметры (DNS-сервер, домен поиска) — через DHCPv6-сервер. DHCPv6 используется в безсостоятельном режиме (без отслеживания выданных адресов). |
| 1 | 0 или 1 | Stateful DHCPv6 | Адрес и все параметры получаются от DHCPv6-сервера, который ведёт учёт выданных адресов. SLAAC при этом не используется для глобального адреса. |
На практике в интернет-провайдерах и домашних сетях чаще всего встречается режим SLAAC (M=0, O=0) или Stateless DHCPv6 (M=0, O=1) — второй даёт возможность передать клиенту адреса DNS-серверов.
Преимущества и недостатки SLAAC
Преимущества
- Простота и отсутствие серверной инфраструктуры — не требуется настройка DHCP-сервера, маршрутизатору достаточно просто рассылать RA-пакеты.
- Автоматическая адаптация — новое устройство сразу получает адрес без участия администратора.
- Работа при смене префикса — если провайдер меняет префикс (например, при обновлении IP-адресации), маршрутизатор начинает рассылать новый префикс в RA, и устройства автоматически получают новые адреса, сохраняя старые до окончания их времени жизни.
- Масштабируемость — маршрутизатор не хранит состояние о каждом устройстве, что снижает нагрузку.
Недостатки
- Сложность с DNS — SLAAC сам по себе не передаёт адреса DNS-серверов. Это решается либо включением DNS в RA (расширение RDNSS, RFC 6106), либо использованием Stateless DHCPv6.
- Отсутствие контроля — администратор не может централизованно управлять адресами; любое устройство, подключенное к сети, может получить адрес.
- Вопросы безопасности — поскольку проверка DAD не требует аутентификации, возможны атаки типа «человек посередине» с подменой ответов. Однако в современных реализациях используются криптографические механизмы (Secure Neighbor Discovery — SEND, RFC 3971).
- Зависимость от RA — если маршрутизатор перестаёт отправлять RA, устройства не смогут обновить адреса по истечении времени жизни, но уже существующие адреса останутся рабочими до конца Valid Lifetime.
Связь с другими протоколами
SLAAC тесно связан с протоколом ICMPv6, на котором базируется NDP. NDP также отвечает за обнаружение соседей, разрешение адресов (аналог ARP для IPv4), отслеживание недоступности маршрутизаторов и редирект пакетов. В отличие от IPv4, где ARP используется для определения MAC-адреса по IP, в IPv6 эту функцию выполняет Neighbor Discovery.
Также SLAAC может использоваться совместно с DHCPv6. В режиме Stateless DHCPv6 адрес берётся из SLAAC, а DNS и другие опции — из DHCPv6. Это даёт преимущества обоих методов.
Безопасность
При использовании SLAAC без каких-либо дополнений есть уязвимость: злоумышленник, подключённый к той же сети, может отправлять ложные RA-пакеты, навязывая устройствам свой префикс или вынуждая их использовать его в качестве шлюза. Для защиты используются:
- SeND (Secure Neighbor Discovery) — криптографическая подпись пакетов NDP (RFC 3971).
- RA Guard (Router Advertisement Guard) — технология на коммутаторах, отфильтровывающая подозрительные RA из ненадёжных портов.
- Проверка источника RA — на маршрутизаторах может быть включена проверка IP-адреса отправителя.
Интересные факты
- SLAAC придумали для IPv6 с целью заменить ARP и DHCP в IPv4, поэтому в стандарте IPv6 не предусмотрено широковещательных (broadcast) запросов — все взаимодействия одноадресные или многоадресные.
- В классическом SLAAC без Privacy Extensions идентификатор интерфейса обычно не меняется со временем и привязан к MAC-адресу сетевой карты, что позволяет легко отслеживать устройство при переходе между различными сетями (например, при подключении к разным Wi-Fi-точкам в городе).
- В операционной системе Windows для SLAAC по умолчанию используются случайные идентификаторы (Privacy Extensions), тогда как в Linux без специальной настройки может использоваться EUI-64.
Источники
- RFC 4862 — IPv6 Stateless Address Autoconfiguration
- RFC 4941 — Privacy Extensions for Stateless Address Autoconfiguration in IPv6
- RFC 7217 — A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC)
- RFC 6106 — IPv6 Router Advertisement Options for DNS Configuration
- RFC 3971 — SEcure Neighbor Discovery (SEND)
- RFC 2461 — Neighbor Discovery for IP Version 6 (IPv6) (ранний, заменён на RFC 4861)
- Документы Internet Engineering Task Force (IETF)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →