PXE – Загрузка по сети: сетевая загрузочная флешка

Нужна сетевая установка ОС: DHCP раздаёт PXE, TFTP отдаёт загрузчик, машина стартует без флешки. В проде — отдельный VLAN, TFTP не в пользовательскую сеть. TFTP не шифрует трафик.
Что нужно заранее
- Сервер в PXE-VLAN с адресом вроде 192.0.2.10.
- DHCP (isc-dhcp, dnsmasq или DHCP на MikroTik) и TFTP. Linux-TFTP — tftpd-hpa.
- Образ загрузчика (pxelinux / grub netboot / дистрибутивный netboot). Не раздавайте ISO целиком через TFTP — медленно и не для того протокол.
1. DHCP: куда идти за загрузчиком
Пример dnsmasq на Debian (один файл, DHCP+TFTP). Подставьте свою сеть.
interface=eth1
bind-interfaces
dhcp-range=192.0.2.100,192.0.2.200,12h
dhcp-option=3,192.0.2.1
dhcp-option=6,192.0.2.53
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/srv/tftp
sudo systemctl restart dnsmasq
ss -lnup | grep -E ':67|:69'
Ожидание: UDP/67 и UDP/69 на интерфейсе PXE, не на WAN. На отдельном isc-dhcp те же next-server и filename. На MikroTik — DHCP option 66/67 плюс TFTP из статьи про TFTP.
2. Файлы загрузчика
sudo mkdir -p /srv/tftp/pxelinux.cfg
# положите pxelinux.0, ldlinux.c32 и меню своей сборки в /srv/tftp
echo 'DEFAULT local
LABEL local
LOCALBOOT 0' | sudo tee /srv/tftp/pxelinux.cfg/default
Дальше — меню дистрибутива (Debian installer, Rocky boot.ipxe). Пути и имена файлов берите из документации образа, не из статьи 2021 года.
3. Изолировать
Файрвол сервера: UDP/67,68,69 и порты HTTP, если ядро/initrd качаете по http, только из PXE-VLAN. Коммутатор: клиенты PXE не ходят в офисную VLAN без нужды. Не ставьте PXE на тот же DHCP, что раздаёт адреса гостям Wi‑Fi.
BIOS и UEFI
Старые компьютеры загружаются в режиме BIOS (pxelinux.0), новые — по UEFI, и им нужен другой загрузчик. Сервер должен выдавать файл в зависимости от типа клиента. Пример для dnsmasq:
dhcp-match=set:efi64,option:client-arch,7
dhcp-match=set:efi64,option:client-arch,9
dhcp-boot=tag:efi64,grubnetx64.efi.signed
dhcp-boot=tag:!efi64,pxelinux.0
Имена файлов зависят от дистрибутива (grubnetx64.efi.signed в Debian/Ubuntu, shimx64.efi в RHEL-семействе). При включённом Secure Boot загрузчик должен быть подписан, возьмите его из netboot-архива вашего дистрибутива.
Автоматическая установка
Чтобы машина ставилась без вопросов, укажите файл ответов в параметрах ядра:
| Система | Механизм |
|---|---|
| Debian | preseed: auto url=http://192.0.2.10/preseed.cfg |
| RHEL, Rocky, РЕД ОС | kickstart: inst.ks=http://192.0.2.10/ks.cfg |
| Ubuntu Server | autoinstall (cloud-init): autoinstall ds=nocloud-net;s=http://192.0.2.10/ |
В файлах ответов не храните пароли в открытом виде: используйте хеши. Сами файлы раздавайте только внутри сегмента установки.
HTTP вместо TFTP для больших файлов
Ядро и образ initrd весят десятки мегабайт, а TFTP работает медленно. Современные загрузчики (iPXE, GRUB) умеют загружать их по HTTP: настройте TFTP только для первого загрузчика, остальное — через nginx. Это ускоряет установку и упрощает сетевой доступ: nginx.
Безопасность
- Сеть PXE должна быть изолирована: любой, кто подключился к ней, может подсунуть свой DHCP и загрузить машину с чужого образа.
- Оставляйте автоматическую установку включённой только на время массового развёртывания, потому что она может стереть диск машины.
- Разделяйте DHCP установки и пользовательские сети. Сервер приведите в порядок: hardening Linux.
Как проверить
Тестовая ВМ в PXE-VLAN получает адрес, качает загрузчик, видит меню. ss -lnup на сервере не слушает 69/udp на публичном IP. С пользовательской сети TFTP не отвечает.
Источники
- Syslinux PXELINUX. URL: https://wiki.syslinux.org/wiki/index.php?title=PXELINUX.
- man tftpd-hpa. URL: https://manpages.debian.org/bookworm/tftpd-hpa/tftpd.8.en.html.





















