ping6.net
Основы

DHCPv6 против SLAAC: как устройства получают IPv6-адреса

Разберитесь в двух способах получения IPv6-адресов устройствами: SLAAC использует анонсы маршрутизатора, DHCPv6 использует сервер. Узнайте, когда использовать каждый.

ping6.net14 декабря 2024 г.6 min read
IPv6DHCPv6SLAACавтоконфигурацияанонсы маршрутизатора

Когда устройство подключается к 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:

  1. Вставить ff:fe в середину: 00:11:22:ff:fe:33:44:55
  2. Инвертировать 7-й бит: 02:11:22:ff:fe:33:44:55
  3. Результат: 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#

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

  1. Solicit: Клиент запрашивает конфигурацию
  2. Advertise: Сервер предлагает адрес
  3. Request: Клиент принимает предложение
  4. 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 DHCPv6
  • M=1, O=0: DHCPv6 для адресов (редкая конфигурация)
  • M=1, O=1: DHCPv6 для адресов и опций

Сравнение SLAAC и DHCPv6#

ФункцияSLAACDHCPv6
Назначение адресовАвтоматическое (префикс + Interface ID)Назначенное сервером
Состояние на сервереНетStateful отслеживает привязки
Конфигурация DNSRDNSS в 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.

Связанные статьи#

Большинство современных сетей хорошо работают с SLAAC + RDNSS для простоты, или SLAAC + Stateless DHCPv6 для более широкой совместимости. Резервируйте полностью управляемый DHCPv6 для сред с специфическими требованиями compliance или логирования. Какой бы вы ни выбрали, задокументируйте ваше решение и настройте его последовательно во всей вашей сети.