DHCPv6 против SLAAC: как устройства получают IPv6-адреса
Разберитесь в двух способах получения IPv6-адресов устройствами: SLAAC использует анонсы маршрутизатора, DHCPv6 использует сервер. Узнайте, когда использовать каждый.
Когда устройство подключается к IPv6-сети, ему нужен адрес. В отличие от IPv4, где DHCP — стандартный подход, IPv6 предлагает два механизма: SLAAC (Stateless Address Autoconfiguration) и DHCPv6. Понимание того, когда использовать каждый, необходимо для сетевых инженеров.
TL;DR - Краткое резюме
Ключевые моменты:
- SLAAC не сохраняет состояние и автоматический через Router Advertisements — сервер не нужен
- DHCPv6 обеспечивает централизованный контроль и отслеживание адресов как DHCPv4
- Флаги M и O в Router Advertisements управляют, какой метод использовать
Перейти к: SLAAC для автоматической конфигурации, DHCPv6 для централизованного управления, или Что использовать когда для руководства по развёртыванию.
SLAAC: автоконфигурация без сохранения состояния#
SLAAC позволяет устройствам настроить себя без сохранения состояния в сети. Маршрутизатор периодически отправляет сообщения Router Advertisement (RA), содержащие сетевой префикс, а устройства генерируют свои собственные адреса.
Как работают Router Advertisements#
Маршрутизаторы отправляют RA-сообщения multicast на ff02::1 (multicast всех узлов) каждые 200 секунд по умолчанию. Устройства также могут запросить RA немедленно, отправив Router Solicitation (RS) на ff02::2 (multicast всех маршрутизаторов).
RA содержит:
- Сетевой префикс (например,
2001:db8::/64) - Адрес шлюза по умолчанию
- Время жизни префикса (valid и preferred)
- Флаги M и O (объясняются ниже)
Устройство комбинирует анонсированный префикс с самостоятельно сгенерированным 64-битным Interface ID для создания своего адреса.
Генерация Interface ID#
Существует два распространённых метода:
EUI-64 (Modified Extended Unique Identifier)
Выводит Interface ID из MAC-адреса. Для MAC 00:11:22:33:44:55:
- Вставить
ff:feв середину:00:11:22:ff:fe:33:44:55 - Инвертировать 7-й бит:
02:11:22:ff:fe:33:44:55 - Результат:
2001:db8::211:22ff:fe33:4455
Это детерминировано, но раскрывает идентичность оборудования, создавая проблемы приватности.
Расширения приватности (RFC 4941) Генерирует случайные Interface ID. Современные операционные системы создают временные адреса, которые меняются периодически (ежедневно в большинстве систем). Устройство поддерживает как стабильный адрес (для входящих соединений), так и временные адреса (для исходящих соединений).
# Linux: Просмотр типов адресов
ip -6 addr show eth0
# Вы увидите scope global для стабильных адресов
# и scope global temporary для адресов приватностиЧто предоставляет SLAAC#
SLAAC обрабатывает:
- Назначение IPv6-адреса
- Шлюз по умолчанию
- Длину префикса
Что не предоставляет по умолчанию:
- DNS-серверы
- Список поиска доменов
- NTP-серверы
Опция RDNSS (Recursive DNS Server) RFC 8106 позволяет маршрутизаторам анонсировать DNS-серверы в RA-сообщениях. Большинство современных систем поддерживают это, устраняя необходимость в DHCPv6 в простых сетях.
DHCPv6: управляемая конфигурация#
DHCPv6 работает аналогично DHCPv4: клиенты запрашивают конфигурацию у сервера. Он работает в двух режимах.
Stateful DHCPv6#
Сервер назначает адреса и отслеживает, у какого клиента какой адрес. Клиенты выполняют обмен четырьмя сообщениями:
- Solicit: Клиент запрашивает конфигурацию
- Advertise: Сервер предлагает адрес
- Request: Клиент принимает предложение
- Reply: Сервер подтверждает назначение
Адреса выдаются в аренду с временем жизни preferred и valid, требуя продления.
Stateless DHCPv6#
Устройства используют SLAAC для адресов, но запрашивают DHCPv6 для дополнительных опций, таких как DNS-серверы, доменное имя или NTP-серверы. Сервер не отслеживает адреса, отсюда «stateless».
Флаги M и O#
Router Advertisements содержат два критических флага:
Флаг M (Managed Address Configuration) Когда установлен в 1, устройства должны использовать DHCPv6 для получения адресов. SLAAC-адреса всё ещё могут генерироваться в зависимости от флага A в информации о префиксе.
Флаг O (Other Configuration) Когда установлен в 1, устройства должны использовать DHCPv6 для получения дополнительных опций (DNS, NTP и т.д.), но не адресов.
Комбинации флагов:
M=0, O=0: Только SLAAC (используйте RDNSS для DNS)M=0, O=1: SLAAC + Stateless DHCPv6M=1, O=0: DHCPv6 для адресов (редкая конфигурация)M=1, O=1: DHCPv6 для адресов и опций
Сравнение SLAAC и DHCPv6#
| Функция | SLAAC | DHCPv6 |
|---|---|---|
| Назначение адресов | Автоматическое (префикс + Interface ID) | Назначенное сервером |
| Состояние на сервере | Нет | Stateful отслеживает привязки |
| Конфигурация DNS | RDNSS в RA (RFC 8106) | Опция 23 (DNS-серверы) |
| Отслеживание адресов | Невозможно | Полная видимость |
| Сложность клиента | Минимальная | Требуется DHCPv6-клиент |
| Режим отказа | Продолжает работать | Единая точка отказа |
| Делегирование префикса | Не поддерживается | Поддерживается (DHCPv6-PD) |
Распространённые конфигурации#
Только SLAAC (с RDNSS)#
Лучше всего для простых сетей, где отслеживание адресов не требуется. Пример radvd.conf на Linux:
interface eth0 {
AdvSendAdvert on;
prefix 2001:db8:1::/64 {
AdvOnLink on;
AdvAutonomous on;
};
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
AdvRDNSSLifetime 300;
};
};Эта конфигурация предоставляет всё, что нужно большинству клиентов, без DHCPv6.
SLAAC + Stateless DHCPv6#
Используйте, когда RDNSS не поддерживается или когда нужны дополнительные опции. Установите флаг O в radvd:
interface eth0 {
AdvSendAdvert on;
AdvOtherConfigFlag on; # O=1
prefix 2001:db8:1::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};DHCPv6-сервер предоставляет DNS и другие опции, но не назначает адреса.
Только DHCPv6 (Managed)#
Предприятия часто предпочитают это для учёта и контроля доступа. Установите флаг M:
interface eth0 {
AdvSendAdvert on;
AdvManagedFlag on; # M=1
AdvOtherConfigFlag on; # O=1
prefix 2001:db8:1::/64 {
AdvOnLink on;
AdvAutonomous off; # Не использовать SLAAC
};
};Примечание: Некоторые клиенты всё равно будут генерировать link-local адреса и могут создавать SLAAC-адреса несмотря на AdvAutonomous off. Политики сетевой безопасности не должны полагаться только на отключение SLAAC.
Когда что использовать#
Используйте SLAAC когда:
- Малые и средние сети
- Устройства доверенные
- Отслеживание адресов не требуется
- Приоритет простоте
- Все клиенты поддерживают RDNSS
Используйте DHCPv6 когда:
- Нужно централизованное управление адресами
- Compliance требует логирования адресов
- Требуется делегирование префикса (от провайдера к клиентскому маршрутизатору)
- Нужно предоставить сложные опции помимо DNS
- Сети Windows (исторически лучшая поддержка DHCPv6)
Гибридный подход (SLAAC + Stateless DHCPv6):
- Хороший компромисс для многих сетей
- Устойчив (SLAAC работает, если DHCPv6 отказывает)
- Предоставляет гибкость для дополнительных опций
Отладка назначения адресов#
Устройство имеет только link-local (fe80::/10)
Router Advertisements не получены. Проверьте:
# Linux: Захват RA
tcpdump -i eth0 'icmp6 && ip6[40] == 134'
# Проверка, что маршрутизатор отправляет RA
radvdumpУстройство имеет SLAAC-адрес, но нет DNS Маршрутизатор не отправляет RDNSS, или клиент не поддерживает это. Проверьте содержимое RA:
radvdump | grep RDNSSЕсли отсутствует, добавьте RDNSS в конфигурацию маршрутизатора или включите stateless DHCPv6.
DHCPv6 не работает Проверьте, что флаг M или O установлен в RA:
radvdump | grep -E "M flag|O flag"Проверьте, что DHCPv6-сервер запущен и доступен на UDP-порту 547:
# Сторона сервера
ss -ulnp | grep 547
# Сторона клиента
tcpdump -i eth0 port 547Несколько адресов на интерфейсе Это нормально. Вы можете увидеть:
- Link-local адрес (всегда присутствует)
- Стабильный SLAAC-адрес (EUI-64)
- Временные SLAAC-адреса (расширения приватности)
- DHCPv6-адрес (если используется stateful DHCPv6)
Все корректны; ОС выбирает подходящий адрес источника на основе RFC 6724.
Связанные статьи#
- Включение IPv6 — Научитесь настраивать IPv6 на ваших устройствах и маршрутизаторах, используя SLAAC или DHCPv6
- Расширения приватности IPv6 — Узнайте, как улучшить вашу приватность при использовании SLAAC
Большинство современных сетей хорошо работают с SLAAC + RDNSS для простоты, или SLAAC + Stateless DHCPv6 для более широкой совместимости. Резервируйте полностью управляемый DHCPv6 для сред с специфическими требованиями compliance или логирования. Какой бы вы ни выбрали, задокументируйте ваше решение и настройте его последовательно во всей вашей сети.