Если компьютер при загрузке по сети выдаёт ошибку PXE-E53: No boot filename received или бесконечно крутит строку DHCP..., причина почти всегда в неправильной связке DHCP и TFTP — либо сервер не отдаёт имя загрузочного файла, либо клиент вообще не получает IP-адрес. Настройка PXE-сервера сводится к трём компонентам: DHCP с опциями 66/67 (или proxyDHCP), TFTP-сервер с загрузчиком и общий ресурс с установочными файлами ОС.
В этой инструкции разберём, как поднять PXE-сервер на Linux (на примере dnsmasq и ISC DHCP) и на Windows Server, какие файлы нужны для загрузки в режимах BIOS и UEFI, и как диагностировать типичные сбои. Материал ориентирован на системных администраторов и энтузиастов, разворачивающих сетевую установку ОС в локальной сети.
Как работает PXE-загрузка: кратко о механизме
PXE (Preboot eXecution Environment) — технология, позволяющая компьютеру загрузиться по сети без локального диска. Клиент при старте отправляет широковещательный DHCP-запрос, получает IP-адрес, адрес TFTP-сервера и имя загрузочного файла. Затем скачивает загрузчик (например, pxelinux.0 или bootmgfw.efi) по протоколу TFTP и запускает его.
Дальше всё зависит от сценария: загрузчик может показать меню, подтянуть ядро Linux и initrd для сетевой установки, либо запустить Windows PE для развёртывания через WDS. Критично понимать: DHCP и TFTP могут находиться на разных машинах, но DHCP обязан сообщить клиенту, где искать загрузочный файл. Если это условие не выполнено, клиент зависнет на этапе получения сетевой конфигурации.
- 🖥️ DHCP-сервер — выдаёт IP-адрес и параметры загрузки (опции 66 и 67, либо опции для UEFI).
- 📡 TFTP-сервер — отдаёт загрузчик и конфигурационные файлы по UDP-порту 69.
- 💾 Хранилище образов — NFS, HTTP или SMB-ресурс с дистрибутивом ОС.
- 🔧 Загрузчик — pxelinux/syslinux для BIOS, grub-efi или bootmgfw.efi для UEFI.
Подготовка: что понадобится перед настройкой
Перед началом определитесь с топологией сети. Если в сети уже работает DHCP-сервер (например, на роутере), у вас два пути: перенастроить его для выдачи PXE-параметров или использовать режим proxyDHCP, при котором PXE-сервер отвечает только на загрузочные запросы, не раздавая адреса. Второй вариант безопаснее и не ломает существующую адресацию.
Проверьте, что клиентские машины поддерживают сетевую загрузку: в BIOS/UEFI должна быть включена опция вроде Network Boot или PXE Boot, а сетевая карта должна стоять в списке загрузочных устройств. Точные названия пунктов меню зависят от производителя материнской платы — сверьтесь с документацией конкретной модели.
☑️ Подготовка к настройке PXE
Также заранее решите, какие клиенты будут загружаться. Режимы Legacy BIOS и UEFI требуют разных загрузочных файлов, и DHCP-сервер должен различать тип клиента, чтобы отдать правильный. Об этом подробнее в разделе про UEFI.
Настройка PXE-сервера на Linux через dnsmasq
Самый быстрый способ поднять PXE на Linux — dnsmasq: он объединяет DHCP, proxyDHCP и TFTP в одном демоне. Установите пакет из репозитория вашего дистрибутива, например на Debian/Ubuntu:
sudo apt install dnsmasq
Откройте конфигурационный файл /etc/dnsmasq.conf и добавьте базовые параметры. Ниже пример для режима proxyDHCP, когда основной DHCP уже работает в сети:
port=0
dhcp-range=192.168.1.0,proxy
enable-tftp
tftp-root=/srv/tftp
dhcp-boot=pxelinux.0
pxe-service=x86PC,"Network Boot",pxelinux
Здесь port=0 отключает DNS-функцию, dhcp-range=...,proxy включает режим proxyDHCP, а tftp-root задаёт каталог с загрузочными файлами. После сохранения перезапустите службу командой sudo systemctl restart dnsmasq и проверьте её статус.
Теперь положите в /srv/tftp загрузчик pxelinux.0 и сопутствующие модули из пакета syslinux, а также создайте каталог pxelinux.cfg с файлом default — в нём описывается меню загрузки. Минимальный пример меню для сетевой установки Debian:
DEFAULT install
LABEL install
KERNEL debian/linux
APPEND initrd=debian/initrd.gz
Вариант для Windows Server: роль WDS
В инфраструктуре Windows стандартное решение — Windows Deployment Services (WDS). Роль устанавливается через Диспетчер сервера → «Добавить роли и компоненты» → «Службы развёртывания Windows». После установки запустите начальную настройку сервера из консоли WDS.
При настройке укажите каталог RemoteInstall на отдельном диске и выберите режим ответа клиентам (всем или только известным). Если DHCP работает на том же сервере, мастер предложит снять конфликт порта 67 — WDS начнёт использовать proxyDHCP и добавит нужные опции автоматически. Если DHCP на другом сервере, на нём вручную пропишите опции 066 (IP сервера WDS) и 067 (имя загрузочного файла, например boot\x64\wdsnbp.com для BIOS).
Затем добавьте в консоль WDS загрузочный образ (boot.wim) и установочный образ (install.wim) из ISO дистрибутива Windows. После этого клиенты, загрузившись по сети, увидят стандартный установщик Windows.
⚠️ Внимание: не запускайте два полноценных DHCP-сервера в одном сегменте сети — клиенты начнут получать адреса от случайного из них. Если основной DHCP менять нельзя, используйте только режим proxyDHCP.
Настройка загрузки в режиме UEFI
Современные ПК чаще работают в режиме UEFI, и файл pxelinux.0 им не подходит — нужен EFI-загрузчик. Для Linux-варианта это может быть grubx64.efi или snponly.efi из проекта iPXE, для WDS — bootmgfw.efi.
Сложность в том, что DHCP-сервер должен определить архитектуру клиента по опции 93 (Client System Architecture) и отдать соответствующее имя файла. В dnsmasq это решается тегами:
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-boot=tag:efi-x86_64,grubx64.efi
dhcp-boot=tag:!efi-x86_64,pxelinux.0
В Windows DHCP подобное делается через политики с условием по классу поставщика и архитектуре. Значения кодов архитектур (0 для BIOS, 7 для x64 UEFI и др.) описаны в RFC 4578 — опирайтесь на официальную документацию вашего DHCP-сервера, так как синтаксис политик различается.
Типичные ошибки и их диагностика
Большинство проблем PXE видны уже по сообщению на экране клиента. Ниже таблица частых сбоев и направления проверки.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Клиент не получает IP | DHCP недоступен или VLAN не проброшен | Работу DHCP, настройки свитча, firewall |
| PXE-E53: No boot filename | Не заданы опции 66/67 | Конфигурацию DHCP и proxyDHCP |
| PXE-E32: TFTP open timeout | TFTP не отвечает или закрыт порт | Службу TFTP, UDP 69 в firewall |
| Загрузчик скачан, но ошибка дальше | Неправильный путь в меню или нет файлов | Содержимое tftp-root и pxelinux.cfg |
| UEFI-клиент не грузится | Отдан BIOS-загрузчик | Политики по архитектуре клиента |
Универсальный инструмент диагностики — анализатор трафика Wireshark или tcpdump на сервере. Запустите захват на интерфейсе и посмотрите обмен пакетами: увидите ли вы DHCP Discover от клиента, отвечает ли сервер Offer с опциями загрузки, идёт ли запрос к TFTP. Это сразу локализует этап, на котором происходит сбой.
sudo tcpdump -i eth0 port 67 or port 68 or port 69 -n
⚠️ Внимание: некоторые управляемые коммутаторы с функциями DHCP Snooping или защитой портов блокируют ответы «чужого» DHCP-сервера. Если клиент молчит, проверьте настройки безопасности на свитче и разрешите порт сервера как доверенный.
Почему TFTP считается медленным и что с этим делать
TFTP передаёт данные маленькими блоками с подтверждением каждого, поэтому большие образы грузятся долго. Решение — загрузчик iPXE, который после старта переключается на HTTP: по TFTP скачивается только сам iPXE, а всё остальное тянется по HTTP значительно быстрее.
Ускорение и расширение: iPXE и загрузка по HTTP
Когда базовый PXE заработал, логичный шаг — переход на iPXE. Это расширенный загрузчик с поддержкой HTTP, скриптов и меню. По TFTP отдаётся только небольшой файл undionly.kpxe (BIOS) или snponly.efi (UEFI), а дальше iPXE скачивает ядра и образы по HTTP с обычного веб-сервера — например, nginx или встроенного в Windows IIS.
Скрипт iPXE — это текстовый файл с командами вида chain http://server/boot/menu.ipxe. В нём можно строить многоуровневые меню, запрашивать параметры и даже аутентификацию. Такой подход заметно ускоряет загрузку больших образов WinPE и Linux live-систем.
Частые вопросы о настройке PXE
Можно ли настроить PXE без отдельного сервера?
Да, подойдёт любая постоянно включённая машина в сети — даже старый ПК или виртуальная машина. Главное требование — статический IP-адрес и возможность запустить службы DHCP/proxyDHCP и TFTP. Существуют и готовые комплексные решения с веб-интерфейсом, объединяющие все компоненты.
Работает ли PXE через Wi-Fi?
Классический PXE работает только по проводному Ethernet — прошивка сетевой карты инициализируется до загрузки ОС, а стандартных механизмов PXE для Wi-Fi нет. Для беспроводных сценариев используют другие подходы, например загрузку с USB-носителя с последующей установкой по сети.
Нужно ли отключать Secure Boot?
Зависит от загрузчика. Подписанные Microsoft загрузчики (WDS, shim для Linux) работают с включённым Secure Boot. Самосборные варианты iPXE или grub без подписи потребуют отключения Secure Boot в настройках UEFI клиента. Проверяйте поведение на конкретной модели устройства.
Как загрузить по сети машину в другой подсети?
Нужно настроить на маршрутизаторе или L3-коммутаторе функцию DHCP Relay (IP Helper), которая пересылает широковещательные DHCP-запросы на сервер в другой подсети. Без неё broadcast-пакеты не выйдут за пределы сегмента, и клиент не получит ответ.
Можно ли разворачивать Linux и Windows с одного PXE-сервера?
Да. Через меню pxelinux или iPXE можно предложить выбор: сетевая установка Linux, загрузка WinPE, запуск утилит вроде memtest. Один сервер обслуживает все сценарии — достаточно добавить соответствующие пункты в конфигурацию меню и разложить файлы по каталогам TFTP и HTTP.