У нас есть Windows 2016 Server с ролью WDS. Мы хотим, чтобы этот WDS загружался только с UEFI (или с устаревшей загрузкой) для развертывания Windows 10 x64 с MDT. Наша служба DHCP находится на аппаратном маршрутизаторе (Clavister).
Когда опция DHCP next-server = ip_of_wds_server и опция 60 = PXEClient выглядит следующим образом:
- Сетевой стек UEFI получает IP и другие параметры от DHCP.
- UEFI пытается соединиться с WDS через порт 4011 (proxyDHCP).
- proxyDHCP на WDS ответил с именем загрузочного файла.
- UEFI делает TFTP-запрос, скачивает загрузочный файл и все хорошо.
Но через некоторое время я обнаружил, что загрузка PXE перестала работать без какой-либо причины. Я проверил с помощью Wireshark и увидел, что proxyDHCP отвечает очень медленно - UEFI отправил 4 запроса, завершился по таймауту и только после этого WDS сделал ответ (4 раза :-).
Хорошо, я начал гуглить, изменил некоторые настройки и нашел это:
когда опция DHCP 60 НЕ установлена и опция 67 = boot\x64\wdsmgfw.efi - тогда UEFI НЕ пытается подключиться к WDS через порт 4011. Вместо этого UEFI прямо пытается сделать TFTP-запрос на загрузочный файл напрямую, но с неверным именем
boot\x64\wdsmgfw.efi*\here_some\_random/_digits_and_\symbols
Получен "файл не найден" и процесс остановлен.
В Wireshark я увидел, что символ звездочки (*) действительно присутствует сразу после «.efi» в RAW DHCP-ответе. Может быть, UEFI нужен какой-нибудь символ конца строки?
Кто-нибудь может объяснить это поведение UEFI? Я попробовал настоящий аппаратный ПК и Vmware VM - все то же самое.