Как настроить PXE-сервер для сетевой загрузки

Если компьютер при загрузке по сети выдаёт ошибку 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

Выполнено: 0 / 5

Также заранее решите, какие клиенты будут загружаться. Режимы 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-сервера, так как синтаксис политик различается.

📊 В каком режиме загружаются ваши клиенты?
Только Legacy BIOS
Только UEFI
Смешанный парк
Ещё не определился

Типичные ошибки и их диагностика

Большинство проблем PXE видны уже по сообщению на экране клиента. Ниже таблица частых сбоев и направления проверки.

СимптомВероятная причинаЧто проверить
Клиент не получает IPDHCP недоступен или VLAN не проброшенРаботу DHCP, настройки свитча, firewall
PXE-E53: No boot filenameНе заданы опции 66/67Конфигурацию DHCP и proxyDHCP
PXE-E32: TFTP open timeoutTFTP не отвечает или закрыт портСлужбу 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.