Что DHCP-клиент считает «лучшим» ответом?

13

У нас есть учебные комнаты, где обычно установлена ​​Windows XP (через PXE). «Нормальной» инфраструктурой DNS / DHCP являются Windows-серверы. Учебная комната имеет собственную VLAN (отличную от серверов Windows), поэтому наиболее вероятно, что IP-помощник для запросов DHCP активен на маршрутизаторе Cisco, к которому подключены все ПК из этой комнаты.

Теперь мы хотели конвертировать некоторые ПК в Linux. Идея заключалась в следующем: поместите наш собственный ноутбук с сервером DHCP в VLAN комнаты и переопределите «нормальный» ответ DHCP. Идея заключалась в том, что это должно работать, поскольку непосредственно подключенный DHCP-сервер в этой VLAN должен иметь более быстрое время отклика, чем «обычный» DHCP-сервер, расположенный в нескольких шагах от этой VLAN.

Оказалось, что это не сработало. Нам пришлось вручную снять аренду на исходном DHCP-сервере, чтобы он заработал.

На ноутбуке мы увидели, что клиент запрашивает IP, и «наш» dhcp отправлял NACK на запрос Windows IP, прежде чем мы предложили наш собственный ответ.

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

Обновление 2012-08-08:

Проблема восстановления была объяснена в DHCP-RFC. Теперь это объясняет, почему ПК восстанавливает свою старую аренду.

Теперь мы освобождаем IP-адрес от Windows-DHCP-сервера, прежде чем дать ему еще одну попытку.

Опять же - Windows-DHCP-сервер побеждает.

Я подозреваю, что существует некоторый алгоритм для dhcp-клиента, который определяет «лучший» dhcp-ответ для клиента. Новый вопрос:

Как клиент выбирает «лучший» ответ?

Nils
источник
где вы выпускаете IP-адрес? в клиенте windows или в загрузочном агенте PXE?
Longneck
@longneck, чтобы заставить его работать, нам пришлось освободить адрес на сервере Windows-DHCP.
Нильс
Странный способ создать новый вопрос, надеюсь, что вы решите его, хотя
Даниэль Ли

Ответы:

4

Это зависит от производителя, даже от прошивки, как клиент реагирует на несколько ответов DHCP.

Варианты, которые я видел за эти годы:

1) Примите первый независимо от того, ACK или NACK.

2) Возьмите первый ACK, полностью игнорируйте NACK.

3) Возьмите последний ACK, полученный в течение установленного интервала времени (обычно 5-10 секунд).

Пример: несколько лет назад у нас были проблемы с МФУ Ricoh.
У нас было 2 DHCP-сервера. Один предоставил адреса, другой только дополнительные параметры DHCP. 2-й сервер всегда отвечал первым.
Используемый Ricoh вариант 1), даже если 1-е предложение содержало только параметры DHCP. Ricoh изменил его на вариант 2) с обновлением прошивки после того, как мы объяснили им проблему.

Tonny
источник
Эти OFFERпакеты , что система клиента необходимости решить между ними. ACKи NACKпакеты отправляются только в ответ на a REQUEST, что происходит только после того, как клиент «решил», какое предложение продолжить. Это довольно крутая ошибка с принтерами!
Шейн Мэдден
@ShaneMadden Это верно, но я видел множество случаев, когда клиенты отправляли запрос в ответ на ОБА предложения и затем действовали в соответствии с ответами, как я описал. Прошло много времени с тех пор, как я посмотрел на это подробно. Я ясно помню, что в этом были виноваты NT4, W2K и XP. Ricoh тоже. Они запускали ядро ​​Linux 2.2 и сетевой стек.
Тонни
9

Предполагая, что маршрутизатор все еще действует как ретранслятор DHCP и пересылает запрос на ваш исходный сервер, тогда причина, по которой он это сделал, заключается просто в том, что DHCP-сервер Windows велел ему продолжать и использовать IP-адрес. В этом случае DHCPNACK с нового сервера не имеет значения, так как клиент DHCP будет учитывать все ответы, и, поскольку он получил предложение от Windows DHCP box, он совершенно счастлив использовать его.

ПК: О, привет, я могу использовать 192.168.1.123?

New-DHCP: я говорю нет.

Старый-DHCP: я говорю да.

ПК: Кто-то сказал да! Сладкий, я буду использовать это!

ThatGraemeGuy
источник
После холодной загрузки ПК начинается разговор: «Мой MAC - XYZ - пожалуйста, дайте мне IP». Тогда оба DHCP-сервера предлагают IP-адреса ... единственное отличие состоит в том, что он имеет активную аренду на одном из серверов - но это всего лишь перспектива сервера.
Нильс
1
нет, если у ПК уже был IP-адрес. если ранее ему был назначен IP-адрес DHCP-сервером, он сначала попросит его использовать, прежде чем запрашивать другой адрес.
Longneck
@ longneck, где этот IP будет храниться на ПК?
Нильс
с моей головы, я не знаю. но правильный способ прояснить это - использовать ipconfig / release
longneck
3
@longneck - операция задает вопрос в среде PXE, где мы предполагаем, что загрузочный BIOS не помнит о предыдущих загрузках или IP-адресах
Марк Хендерсон
3

Если больше ничего не помогает - RTFM (прочитайте прекрасное руководство). В этом случае первым был хит.

RFC 2131 описывает DHCP-операции.

Раздел 1.6 гласит, что DHCP должен :

Сохраните конфигурацию DHCP-клиента при перезагрузке сервера, и, когда это возможно, DHCP-клиенту должны быть назначены те же параметры конфигурации, несмотря на перезапуски механизма DHCP,

Теперь интересный вопрос заключается в том, как эта цель дизайна достигается на клиенте, который не знает своего прошлого. Раздел 3.2 описывает:

3.2 Клиент-серверное взаимодействие - повторное использование ранее выделенного сетевого адреса

Если клиент запоминает и желает повторно использовать ранее выделенный
сетевой адрес, клиент может решить пропустить некоторые шаги,
описанные в предыдущем разделе. Временная диаграмма на рисунке 4
показывает временные отношения в типичном клиент-серверном взаимодействии для клиента, повторно использующего ранее выделенный сетевой адрес.

  1. Клиент передает сообщение DHCPREQUEST в своей локальной подсети. Сообщение включает в себя сетевой адрес клиента в опции «запрошенный IP-адрес». Поскольку клиент не получил свой сетевой адрес, он НЕ ДОЛЖЕН заполнять поле 'ciaddr'. Агенты ретрансляции BOOTP передают сообщение на DHCP-серверы не в той же подсети. Если клиент использовал «идентификатор клиента» для получения своего адреса, клиент ДОЛЖЕН использовать тот же «идентификатор клиента» в сообщении DHCPREQUEST.

  2. Серверы со знанием параметров конфигурации клиента отправляют клиенту сообщение DHCPACK. Серверы НЕ ДОЛЖНЫ проверять, что сетевой адрес клиента уже используется; на этом этапе клиент может ответить на сообщения эхо-запроса ICMP.

Таким образом, DHCP-сервер с активной арендой получает приоритет с помощью ярлыка в протоколе.

  1. Клиент: DHCREQUEST (MAC-адрес, широковещательный, будет передаваться в локальном широковещательном домене - здесь локальная VLAN и через IP-помощника на Windows-DHCP-сервер)
  2. Ноутбук-DHCP-сервер: DHCPOFFER
  3. Windows-DHCP-сервер: эй - я тебя уже знаю - DHCPACK
  4. Клиент: О, я получил два ответа. Тот, который уже знает меня. Круто я возьму что

С этого момента ноутбук-DHCP-сервер игнорируется клиентом.

Таким образом, решение в нашем случае, вероятно, будет (я обновлю это, когда мы действительно протестируем это):

  1. Убедитесь, что клиент выключен
  2. Отключить DHCP-сервер на ноутбуке, поддельный клиент-MAC на ноутбуке, DHCP-запрос
  3. Выпуск IP
  4. Восстановить оригинальный IP и MAC, включить DHCP-сервер
  5. Включите клиент и выполните PXE-загрузку ...
Nils
источник
3

Новый вопрос, вероятно, должен быть в другом вопросе - название вопроса совсем не соответствует большей части вопроса.

В любом случае, в отношении того, как клиент выбирает, какое предложение использовать, в случае, когда у него нет текущей аренды: это зависит от клиента, но в каждой реализации DHCP-клиента, о которой я знаю, это простая гонка. ,

RFC 2131 охватывает это:

Клиенты DHCP могут использовать любую стратегию при выборе сервера DHCP среди тех, от которых клиент получает сообщение DHCPOFFER.

Есть черновик IETF , который кажется мертвым, который бы добавил настраиваемость в процесс выбора, а также упоминает слабые реализации клиента (более десяти лет назад, но мало что изменилось):

На практике реализация политики большинства поставщиков здесь очень проста (например, получено первое предложение или получено первое приемлемое предложение) и является «жестко закодированным» (т. Е. Не конфигурируемым).

Наличие двух серверов DHCP, предоставляющих услуги одной и той же сети с разной конфигурацией, приводит к гонкам, что нежелательно с точки зрения надежности или предсказуемости. На самом деле нет причин, по которым вы не можете заставить свой единственный DHCP-сервер предоставлять то, что вам нужно.

Шейн Мэдден
источник
Вы думаете, что «приемлемое» предложение зависит от поставщика на стороне клиента dhcp? Поскольку в нашем случае это не «первое» предложение, оно должно быть чем-то другим - хотя поведение довольно детерминированное, поэтому я все же думаю, что за этим стоит общий стандарт.
Нильс
@ Nils Вы абсолютно уверены, что сервер Windows не получает свой ответ клиенту до того, как ноутбук находится в той же комнате? Интуитивно кажется, что ноутбук должен победить в этой гонке, но это может быть не то, что происходит.
Шейн Мэдден
Думаю, мне придется проследить это на сетевом уровне (с помощью wireshark), чтобы реально увидеть, что там происходит. Вероятно, на зеркальном порту этого клиента ...
Nils