DHCPv6
DHCPv6 (от англ. англ. Dynamic Host Configuration Protocol for IPv6) — это специализированный протокол клиент-сервер для управляемой конфигурации устройств в сетях IPv6, определённый в RFC 3315 группой IETF (Internet Engineering Task Force). Он предназначен для централизованной настройки параметров сети, включая назначение адресов и передачу различных параметров конфигурации, что повышает степень администрирования IPv6-сетей и гибкость предоставления сервисов[1].
Введение
Несмотря на то, что IPv6 поддерживает автоматическую конфигурацию адресов (что и было одной из основных мотиваций создания DHCP для IPv4), использование DHCPv6[1] даёт сетевому администратору больший контроль над назначениями адресов и позволяет конфигурировать более широкий набор параметров сетевых сервисов.
DHCPv6 может работать совместно с механизмом «stateless» (без сохранения состояния). Выбор способов конфигурирования определяется администратором сети посредством рассылки RA-сообщений (Router Advertisement) в сети IPv6. Также DHCPv6 позволяет клиентам запрашивать несколько IPv6-адресов, чего не было возможно реализовать в IPv4 и с помощью механизмов stateless-автонастройки.
Работа протокола осуществляется поверх транспорта UDP: клиент использует адрес link-local или определённый другими способами для передачи и получения DHCPv6-сообщений.
Серверы DHCPv6 слушают мультикаст-адрес, выделенный специально для обмена с клиентами. Клиенты в большинстве случаев отправляют свои сообщения на этот адрес, что избавляет их от необходимости знать уникальный (unicast) адрес DHCPv6-сервера заранее.
Для поддержки межсегментной передачи DHCPv6 между клиентом и сервером, находящимися на разных сетевых сегментах, используются ретрансляторы DHCPv6, обеспечивающие пересылку сообщений в обе стороны.
Как только клиент определяет адрес сервера, он может при определённых условиях отправлять ему сообщения напрямую, используя unicast-адрес.
Запрос на назначение одного или нескольких адресов IPv6, а также другой информации конфигурации, начинается с обнаружения серверов DHCPv6 и соответствующего запроса от клиента.
Константы DHCPv6
- All_DHCP_Relay_Agents_and_Servers (FF02::1:2). — адрес link-local multicast, используемый клиентами для взаимодействия с агентами ретрансляции и соседними серверами. Все серверы и агенты ретрансляции входят в данную группу multicast.
- All_DHCP_servers (FF05::1:3). — адрес site-local multicast, используемый агентами ретрансляции для связи со всеми серверами на сайте или при отсутствии знаний об их unicast-адресах.
В таблице указаны основные типы DHCPv6-сообщений и их задачи:
| Название сообщения | Msg-type | Описание |
|---|---|---|
| SOLICIT | 1 | Клиент отправляет SOLICIT для обнаружения серверов. |
| ADVERTISE | 2 | Сервер отправляет ADVERTISE в ответ на SOLICIT, сигнализируя о своей доступности. |
| REQUEST | 3 | Клиент запрашивает параметры конфигурации (включая адрес) у выбранного сервера. |
| CONFIRM | 4 | Клиент проверяет у любых серверов, остаются ли выданные ему ранее адреса валидны. |
| RENEW | 5 | Клиент запрашивает продление времени жизни адреса и обновление параметров конфигурации у исходного сервера. |
| REBIND | 6 | Клиент обращается к любому серверу за продлением времени жизни адреса и обновлением параметров, если на RENEW не получено ответа. |
| REPLY | 7 | Сервер возвращает назначенные адреса и параметры в ответ на SOLICIT, REQUEST, RENEW, REBIND, а также на INFORMATION-REQUEST, CONFIRM, RELEASE и DECLINE. |
| RELEASE | 8 | Клиент уведомляет сервер, что более не будет использовать один или несколько выданных ему адресов. |
| DECLINE | 9 | Клиент сообщает серверу, что один или несколько выделенных адресов уже используются в данной сети другим узлом. |
| RECONFIGURE | 10 | Сервер информирует клиента о наличии новых/обновлённых параметров; клиент начинает цикл RENEW/REPLY или INFORMATION-REQUEST/REPLY. |
| INFORMATION-REQUEST | 11 | Клиент запрашивает параметры конфигурации без получения адреса. |
| RELAY-FORW | 12 | Агент ретрансляции отправляет серверу (или другому агенту) encapsulated DHCPv6-сообщение. |
| RELAY-REPL | 13 | Сервер возвращает encapsulated ответ агенту ретрансляции для последующей передачи клиенту. |
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| SOL_MAX_DELAY | 1 с | Максимальная задержка первого SOLICIT |
| SOL_TIMEOUT | 1 с | Начальное время ожидания SOLICIT |
| SOL_MAX_RT | 120 с | Макс. время ожидания SOLICIT |
| REQ_TIMEOUT | 1 с | Начальное время ожидания REQUEST |
| REQ_MAX_RT | 30 с | Макс. время ожидания REQUEST |
| REQ_MAX_RC | 10 | Макс. число повторов REQUEST |
| CNF_MAX_DELAY | 1 с | Макс. задержка первого CONFIRM |
| CNF_TIMEOUT | 1 с | Начальное время ожидания CONFIRM |
| CNF_MAX_RT | 4 с | Макс. время ожидания CONFIRM |
| CNF_MAX_RD | 10 с | Макс. длительность CONFIRM |
| REN_TIMEOUT | 10 с | Начальное время ожидания RENEW |
| REN_MAX_RT | 600 с | Макс. время ожидания RENEW |
| REB_TIMEOUT | 10 с | Начальное время ожидания REBIND |
| REB_MAX_RT | 600 с | Макс. время ожидания REBIND |
| INF_MAX_DELAY | 1 с | Макс. задержка первого INFORMATION-REQUEST |
| INF_TIMEOUT | 1 с | Начальное время ожидания INFORMATION-REQUEST |
| INF_MAX_RT | 120 с | Макс. время ожидания INFORMATION-REQUEST |
| REL_TIMEOUT | 1 с | Начальное время ожидания RELEASE |
| REL_MAX_RC | 5 | Макс. число попыток RELEASE |
| DEC_TIMEOUT | 1 с | Начальное время ожидания DECLINE |
| DEC_MAX_RC | 5 | Макс. число попыток DECLINE |
| REC_TIMEOUT | 2 с | Начальное время ожидания RECONFIGURE |
| REC_MAX_RC | 8 | Макс. число попыток RECONFIGURE |
| HOP_COUNT_LIMIT | 32 | Макс. число «прыжков» RELAY-FORWARD |
| Код | Название |
|---|---|
| 0 | Success |
| 1 | UnspecFail |
| 2 | NoAddrAvail |
| 3 | NoBinding |
| 4 | NotOnLink |
| 5 | UseMulticast |
| 6 | NoPrefixAvail |
| 7 | UnknownQueryType |
| 8 | MalformedQuery |
| 9 | NotConfigured |
| 10 | NotAllowed |
| 11 | QueryTerminated |
| 12-255 | Не назначено |
Формат сообщений клиент—сервер
Все сообщения DHCPv6 между клиентом и сервером имеют фиксированный формат заголовка и переменную область опций. Опции следуют друг за другом без заполнителей. Сообщение содержит следующие поля:
- Тип сообщения — определяет тип DHCP-сообщения.
- Идентификатор транзакции — уникальный номер обмена сообщениями.
- Опции — переменное содержимое.
Формат сообщений между ретрансляторами и серверами
Ретрансляторы пересылают сообщения между серверами и клиентами, находящимися вне одного сетевого сегмента.
Существуют два типа сообщений агента ретрансляции, но оба имеют идентичный формат:
- Тип сообщения. RELAY-FORW или RELAY-REPL
- Link-address. Глобальный или site-local адрес, используемый сервером для идентификации сегмента, с которого пришло сообщение от клиента.
- Peer-address. Адрес клиента или ретранслятора, от которого принято сообщение.
- Опции. Обязательно содержит Relay Message Options (опция вложенного сообщения); могут присутствовать и другие опции.
Уникальный идентификатор DHCP (DUID)
Каждый клиент и сервер DHCPv6 имеет уникальный идентификатор DUID. Серверы используют DUID для идентификации клиентов при подборе параметров конфигурации и для сопоставления IAs с клиентами. Клиенты используют DUID для идентификации сервера в сообщениям, требующих его уникального определения.
DUID рассматривается обеими сторонами как непрозрачное значение; его используют только для сравнения на равенство и не интерпретируют содержательно. DUID передаётся в поле опций (variable length) только когда это необходимо.
DUID состоит из двух октетов, указывающих тип, и произвольного (но ≤128 байт) последовательного содержимого.
Ассоциация идентификатора (IA)
Ассоциация идентификации (IA, англ. Identity Association) — структура, с помощью которой сервер и клиент группируют и управляют рядом связанных IPv6-адресов. Каждая IA состоит из уникального IAID и связанных данных конфигурации.
Клиент обязан создать отдельную IA на каждую сетевую интерфейсную карточку, для которой он запрашивает адреса через сервер DHCPv6. Каждая IA привязана к своей единственной интерфейсной карточке.
IAID выбирается клиентом и должен быть уникальным внутри устройства. Для корректного восстановления состояния после перезапуска, IAID сохраняется в энергонезависимой памяти либо генерируется устойчивым образом (пока не изменена конфигурация).
Сервер определяет назначаемые IA-адреса на основании:
- информации о сегменте сети (определяется по адресу источника или по полю link-address в сообщениях ретранслятора);
- DUID, предоставленного клиентом;
- других параметров, сообщённых клиентом или ретранслятором через опции.
Управление временными адресами
Клиент может запросить временные адреса (RFC 3041). Для DHCPv6 обработка таких адресов ничем не отличается: временные адреса инкапсулируются в опцию IA_TA. На каждый префикс в сегменте выделяется не более одного временного адреса.
Процесс запроса DHCPv6-сервера
Клиент формирует IAs и запрашивает для них адреса у сервера, сначала создавая IA и присваивая ей IAID. Далее он отправляет SOLICIT с соответствующей опцией IA.
Сообщение SOLICIT инициирует поиск серверов DGCPv6. Первая передача SOLICIT на интерфейсе задерживается случайным образом (0 — SOL_MAX_RT). Сервер отвечает ADVERTISE, подтверждая готовность.
Сервер может включить в ADVERTISE опцию предпочтения; по умолчанию значение — 0. Клиент анализирует все полученные ADVERTISE — выбирает наиболее предпочтительный (затем повторяет REQUEST на него).
Если SOLICIT содержит опции IA, сервер добавляет соответствующую информацию по ним в ADVERTISE. Если ни одна IA не может быть обслужена, сервер возвращает ADVERTISE только с кодом статуса NoAddrsAvail — такой ответ игнорируется клиентом. Ответ ADVERTISE всегда передаётся в unicast на интерфейсе получения SOLICIT.
Клиент собирает все ADVERTISE в течение RT секунд либо сразу переходит к REQUEST, если получен ADVERTISE с preference=255. Если не получено ни одного ответа — повторяет цикл.
Если в SOLICIT клиент указал Rapid Commit, сервер ответит REPLY с Rapid Commit.
Обмен конфигурацией DHCPv6, инициированный клиентом
Клиент начинает обмен с сервером для настройки или обновления информации. Процесс может запускаться системой при установке ОС, с превентивной целью, при конфигурировании уровня приложений или продлении срока жизни адреса.
В обычном жизненном цикле используются сообщения REQUEST, RENEW, REBIND, RELEASE, DECLINE. Для проверки привязки адресов к новому сегменту используется CONFIRM, а для получения только параметров — INFORMATION-REQUEST.
Сообщение REQUEST запрашивает адреса на IA и другие параметры. В поле опций передаются:
- идентификатор клиента (Client Identifier)
- идентификатор сервера (Server Identifier)
- список желаемых опций (Request Option)
Может указываться Reconfigure Accept.
Если сервер обнаружит несоответствие префикса в переданной в IA адресу — отвечает REPLY с кодом NotOnLink. Если не может назначить адрес — REPLY с NoAddrAvail.
Для каждой IA, по которой назначаются адреса, сервер указывает в ответе адреса и связанные параметры.
Если клиент сменил сегмент сети, назначенные ему ранее адреса могут быть некорректны. Для проверки клиент инициирует обмен CONFIRM/REPLY. Все относящиеся к интерфейсу IA перечисляются в CONFIRM. Сервер в ответе REPLY указывает, какие из адресов валидны для текущего сегмента.
Для продления срока жизни адреса из IA клиент отправляет RENEW исходному серверу. В сообщение включается IA с интересующей адресацией. Сервер по своей конфигурации определяет новые сроки, может добавить новые адреса или удалить (установив «lifetime=0»). Периоды T1 и T2 в IA регулируют периодичность обновлений.
На несогласованность сессии сервер отвечает REPLY с NoBinding; на успех — возвращает IA с новыми адресами и сроками.
Если время T2 истекло и RENEW не прошёл, клиент обращается через REBIND/REPLY к любому доступному серверу.
В отсутствие ответа клиент может запустить повторный SOLICIT/REQUEST либо использовать другие IA. Сервер валидирует полученную IA: если клиент не найден или адрес не подходит — адрес сбрасывается (lifetime=0); иначе выдаются новые сроки.
Для получения параметров конфигурации (например, DNS) без адреса используется INFORMATION-REQUEST. Обязательно указывать Client Identifier; если его нет — сервер не высылает специфичные параметры. Требуемые опции перечисляются явно.
Для освобождения адреса клиент посылает RELEASE своему серверу, указав соответствующие IA и Client Identifier. Использовать освобождаемый адрес для передачи RELEASE нельзя; при отсутствии REPLY клиент повторяет трансляцию RELEASE до завершения.
Приняв RELEASE, сервер валидирует IA и высвобождает адреса, делая их доступными для других клиентов; в ответ — REPLY с Success.
При обнаружении использования выданного адреса другим узлом клиент отправляет DECLINE. Сервер проверяет адрес, и если подтверждается пересечение — удаляет его из IA данного клиента и завершает ответом REPLY с Success.
Обмен DHCPv6-конфигурацией, инициируемый сервером
Сервер может инициировать обмен с целью сообщения клиентам о новых параметрах (например, при обновлении сервиса).
Сообщение RECONFIGURE от сервера заставляет клиента начать RENEW/REPLY или INFORMATION-REQUEST/REPLY.
В поле опций содержатся DUID сервера и клиента; дополнительно сервер может рекомендовать нужные опции через Request. Из-за риска атак типа отказ в обслуживании для RECONFIGURE обязательна DHCP-аутентификация. Передача RECONFIGURE осуществляется по unicast-адресу клиента; если он не известен — через RELAY-REPLY по ретранслятору.
Для каждого клиента создаётся отдельно RECONFIGURE; в случае отсутствия отклика допускаются повторы с удвоением REC_TIMEOUT вплоть до максимума после чего попытка считается неудачной.
Клиент, получив RECONFIGURE, реагирует RENEW или INFORMATION-REQUEST в соответствии с полученной инструкцией; новые RECONFIGURE игнорируются до завершения обмена.
Агенты ретрансляции DHCPv6
При получении сообщения от клиента агент создаёт RELAY-FORWARD, заполняя Peer-Address адресом источника, инкапсулирует оригинальное сообщение (Relay Message), устанавливает Hop Limit в 32.
Link-address задаётся глобальным или site-local-адресом префикса сегмента клиента; Hop-Count изначально 0, для каждого ретранслятора увеличивается на 1.
Если агент получает RELAY-FORWARD c Hop-Count ниже лимита — повторяет процедуру с увеличением счётчика.
Сервер на RELAY-FORWARD отвечает RELAY-REPLY, инкапсулируя ответ для каждого следующего ретранслятора до клиента. Каждый агент извлекает вложенное сообщение из Relay Message и пересылает по Peer-Address.
Аутентификация сообщений DHCPv6
Для предотвращения атак (отказ в обслуживании, несанкционированная конфигурация, атаки в открытых сетях) применяется механизм аутентификации сообщений DHCPv6, основанный на принципах аутентификации DHCPv4.
Аутентификация реализуется опцией Authentication, обеспечивающей подтверждение подлинности источника и целостности сообщения (обычно — не более одной Authentication-опции в сообщении).
Ретрансляторы и серверы могут защищать обмен через IPsec над IPv6. Для ретрансляции по разным цепочкам используются независимые ассоциации доверия.
Поле RDM (Replay Detection Method) определяет способ предотвращения replay-атак (например, метка времени).
Если поле Protocol в Authentication-опции равно 2, задействуется механизм задержанной аутентификации. Клиент запрашивает аутентификацию сообщением SOLICIT, сервер отдаёт ADVERTISE с challenge и MAC. Подсчёт MAC производится по алгоритму HMAC (MD5), который вычисляется по всему сообщению DHCPv6 с обнулённым полем MAC.
Клиент и сервер хранят набор ключей (идентификатор: <DHCP realm, DUID клиента, key-id>), каждый — с ограниченным сроком действия.
Протокол «Reconfigure Key Authentication» защищает клиентов от недружественных RECONFIGURE-сообщений. Сервер в первом обмене отправляет клиенту ключ Reconfigure, затем подписывает HMAC-ключом сообщения RECONFIGURE. Аутентификация передаётся через Authentication-опцию.
Протокол применяется только если не используется другая аутентификация и согласовано применение RECONFIGURE.
Опции DHCPv6
| Значение | Название | Описание |
|---|---|---|
| 1 | OPTION_CLIENTID | Опция идентификатора клиента (DUID клиента) |
| 2 | OPTION_SERVERID | Опция идентификатора сервера (DUID сервера) |
| 3 | OPTION_IA_NA | Ассоциация для невременных адресов (IA_NA) и связанных с ней параметров |
| 4 | OPTION_IA_TA | Ассоциация для временных адресов (IA_TA) |
| 5 | OPTION_IAADDR | Адрес IA, связывается с IA_NA или IA_TA (должна быть вложена) |
| 6 | OPTION_ORO | Список требуемых опций в сообщении клиента и сервера |
| 7 | OPTION_PREFERENCE | Опция предпочтения сервера |
| 8 | OPTION_ELAPSED_TIME | Время, затраченное клиентом на попытки конфигурации |
| 9 | OPTION_RELAY_MSG | Инкапсулированное сообщение DHCPv6 в RELAY-FORWARD/RELAY-REPLY |
| 10 | Не назначено | --- |
| 11 | OPTION_AUTH | Аутентификационная информация для проверки подлинности сообщения |
| 12 | OPTION_UNICAST | Сервер разрешает клиенту отвечать ему по Unicast |
| 13 | OPTION_STATUS_CODE | Коды состояния для сообщений и опций DHCPv6 |
| 14 | OPTION_RAPID_COMMIT | Сигнал о применении двухшаговой адресной схемы |
| 15 | OPTION_USER_CLASS | Класс пользователя — идентифицирует тип/категорию/приложения клиента |
| 16 | OPTION_VENDOR_CLASS | Класс производителя оборудования клиента |
| 17 | OPTION_VENDOR_OPTS | Обмен специфичной информацией между клиентом и сервером о производителе |
| 18 | OPTION_INTERFACE_ID | Идентификатор интерфейса, через который пришёл запрос (ретранслятор) |
| 19 | OPTION_RECONF_MSG | В RECONFIGURE-serv-сообщении указывает требуемый клиентский ответ |
| 20 | OPTION_RECONF_ACCEPT | Клиент уведомляет сервер о готовности принимать RECONFIGURE |
Протокол установления сеанса (SIP) — протокол управления приложений, обеспечивающий запуск/изменение/завершение мультимедиа-сессий. В DHCPv6 реализованы опции[2], позволяющие клиентам SIP находить SIP-серверы для обслуживания исходящих запросов.
Опция может содержать несколько доменных имён, каждый из которых указывает на отдельную NAPTR-запись. Клиенты проверяют их в порядке приоритета.
Опция определяет список IPv6-адресов SIP-прокси, к которым клиент может обращаться, в порядке приоритета.
В спецификации предусмотрены передачи списка DNS-серверов[3] и доменов поиска.
Список DNS-серверов для рекурсивных запросов, отсортированных по приоритету.
Список доменов поиска, используемых клиентом при разрешении имен. Отменяет любые другие механизмы разрешения.
Список всех актуальных опций для DHCPv6 представлен на сайте IANA[4].
Без сохранения состояния (stateless) DHCPv6 для IPv6
Узлы, получившие IPv6-адреса иными способами (автонастройка без состояния, ручная конфигурация), могут использовать stateless DHCPv6[5] для получения настроек (например, списка DNS). Сервер stateless не выделяет адреса и не ведёт динамический учёт клиентов — он лишь возвращает параметры по запросу.
В stateless DHCPv6 используются сообщения:
- Information-Request
- Reply
- Relay-Forward
- Relay-Reply
Примечания
Литература
- RFC 3315 — Droms, R. (2003-07). “Dynamic Host Configuration Protocol for IPv6 (DHCPv6)”. RFC 3315 [англ.]. IETF. Архивировано из оригинала 2020-12-29. Дата обращения 2024-07-07. Проверьте дату в
|date=(справка на английском) - RFC 3319 — Schulzrinne, H. (2003-11). “Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP)”. RFC 3319 [англ.]. IETF. Архивировано из оригинала 2023-01-28. Дата обращения 2024-07-07. Проверьте дату в
|date=(справка на английском) - RFC 3646 — Droms, R. (2003-12). “DNS Configuration options for Dynamic Host Configuration Protocol for IPv6”. RFC 3646 [англ.]. IETF. Архивировано из оригинала 2020-02-06. Дата обращения 2024-07-07. Проверьте дату в
|date=(справка на английском) - RFC 3736 — Droms, R. (2004-04). “Stateless Dynamic Host Configuration Protocol (DHCP) Service for IPv6”. RFC 3736 [англ.]. IETF. Архивировано из оригинала 2020-12-30. Дата обращения 2024-07-07. Проверьте дату в
|date=(справка на английском) - Список параметров DHCPv6 на сайте IANA










