Кратко

  • Relay может передать IPv4-адрес в suboption 11, а поддерживающий сервер обязан поместить его в option 54. Адрес возвращает renewal к relay, но не является интерфейсом или доказательством личности реального сервера.
  • Несовместимый сервер способен успешно выдать lease и скрыть проблему до renewal. Проверять нужно полный жизненный цикл и каждую серверную instance.

Тест завершается DHCPACK, и система ставит зелёную отметку. Однако сервер не поддерживает Server Identifier Override. Он проигнорировал suboption и записал в option 54 свой интерфейс. Через половину lease client отправляет DHCPREQUEST прямо на сервер. Relay не видит packet, Circuit-ID отсутствует, и политика получает другой набор фактов.

В начальном DHCPv4 exchange relay может добавить Relay Agent Information к DHCPDISCOVER. Circuit-ID, Remote-ID и другие suboptions описывают точку доступа. После выдачи lease client в состоянии RENEWING обычно посылает DHCPREQUEST прямо по адресу Server Identifier, и topology может исключить relay из дальнейшего пути.

RFC 5107 вводит suboption 11 длиной четыре octets. Relay указывает IPv4-адрес, который поддерживающий сервер должен скопировать в option 54 ответа. Следующий renewal приходит по этому адресу к relay, получает свежую Relay Agent Information и только затем уходит к реальному серверу.

Следовательно, Server Identifier может не быть адресом server interface. В этом режиме он служит точкой возврата в control path. Адрес для клиента, relay, фактическая server instance и authority над lease не совпадают автоматически.

Сервер должен запомнить override address для последующих сообщений client до новой relay message. Это вспомогательное состояние имеет поколение, источник и срок. Без этих полей restart или migration создаёт необъяснимое расхождение между сохранённым lease и старым return path.

Поведение неподдерживающего сервера нормативно важно: он игнорирует suboption и использует свой адрес. Поэтому initial success не доказывает поддержку. Проверка должна дождаться RENEW и подтвердить, что packet действительно вернулся через relay.

В смешанном pool capability измеряется на каждой instance. Два сервера могут echo override, третий — нет. Общая ACK rate остаётся высокой. Нужны receipt полученного suboption, выданной option 54 и наблюдаемого renewal path.

Обычно сервер сверяет option 54 в DHCPREQUEST со своими интерфейсами. При override он сравнивает option 54 и suboption 11. Если они совпадают, request следует обработать, даже когда адрес не локален.

Это проверка согласованности полей, а не authentication. Она не доказывает, кто вставил suboption, доверен ли relay, получил ли client подлинный ответ и кому принадлежит адрес. match нельзя превращать в server identity.

Relay продолжает выставлять giaddr. Override не заменяет allocation context, Circuit-ID, Remote-ID, Device Class или исходный broadcast/unicast mode. Каждое значение отвечает на отдельный вопрос.

RFC 5010 предоставляет Relay Agent Flags для исходного режима доставки, и RFC 5107 рекомендует их использовать. Сервер видит уже преобразованный packet и не может восстановить client-side mode по transport leg от relay.

Если relay настроен на несколько серверов, он должен пересылать все DHCP messages, включая renewals, всем. Это избавляет его от shadow lease table. Серверы сопоставляют request со своим состоянием, и владелец lease отвечает.

Fan-out требует per-destination receipts. Получение relay не доказывает server delivery. Один ACK не доказывает отправку всем. Молчание instance без lease не означает packet loss. Корреляция использует transaction, override generation и внутреннюю identity сервера.

Relay становится зависимостью lease continuity. Если client не достигает override address, ломается первый leg. Если relay не достигает server pool, ломается второй. Option 54 при этом может оставаться синтаксически правильной до истечения lease.

Полная evidence chain включает client ingress, выбор address, giaddr, original mode, digest option 82, server receipt, сохранение generation, reply option 54, client receipt, renewal relay receipt, fan-out, lease decision, application и first traffic.

Restart-тест должен отдельно проверять lease и override state. Server способен восстановить lease, но потерять auxiliary address. Client хранит старую option 54. Точный reason code — override_state_lost, а не invalid client или unknown server.

Migration создаёт другой разрыв. Anycast address остаётся, relay set меняется; либо server pool остаётся, return address меняется. Address continuity, instance identity и decision authority надо версионировать независимо.

Security основывается на trust между relay и сервером. Rogue relay может указать собственный address, перехватить renewals, затем отказать в них, изменить DHCPACK options или показать более длинный lease. Suboption сама по себе не даёт security benefit.

DHCP Authentication и Relay Agent Information authentication защищают разные связи. Receipt должен назвать principal и поля. Authentication relay для server не является authentication server для client.

Даже подлинный DHCPACK доказывает только message receipt. Установка address, mask, router и route — другой переход. Policy, traffic и service следуют ещё позже. Server Identifier не может служить их суррогатом.

Практический вывод RFC 5107 — не принимать wire label за реальный объект. Поле с именем Server Identifier способно намеренно содержать relay-chosen address. Наблюдаемость должна хранить indirection, а реальный server — отдельно.

Источники