Подробный гайд: IPv4 PXE Support и IPv6 PXE Support
Максимально подробное руководство по PXE-загрузке поверх IPv4 и IPv6: принципы работы, DHCP-опции, различия BIOS/UEFI, примеры конфигураций и диагностика.
1. Что такое PXE
PXE (Preboot eXecution Environment) — стандарт (изначально Intel, спецификация PXE v2.1, для UEFI — UEFI Specification) сетевой загрузки ОС до обращения к локальным дискам.
Типичные сценарии:
- Установка ОС по сети (Kickstart, AutoYaST, Preseed, Windows Deployment Services)
- Загрузка Live-образов / аварийных утилит
- Без дисковые станции (diskless)
- Массовое развёртывание серверов (Provisioning)
Ключевые компоненты:
| Компонент | Назначение |
|---|---|
| DHCP / DHCPv6 | Выдача IP-адреса и указание, откуда грузиться |
| TFTP / HTTP | Доставка загрузчика (NBP — Network Bootstrap Program) |
| Загрузчик | pxelinux.0, ipxe, bootx64.efi, grub и т.п. |
| ОС-образ | Ядро + initramfs, передаются по TFTP/HTTP/NFS |
2. Общая схема работы PXE
Упрощённо процесс:
Клиент (BIOS/UEFI PXE-стек)
│
├─ 1. Отправляет DHCP-запрос (Discover / Solicit)
│
├─ 2. Получает IP + параметры загрузки (адрес сервера, имя файла)
│
├─ 3. Скачивает загрузчик (NBP) по TFTP или HTTP
│
├─ 4. Загрузчик забирает ядро/initramfs и конфиг
│
└─ 5. Передаёт управление ядру ОС → старт установки/системы
Главное отличие между IPv4 и IPv6 PXE — тип DHCP и номера опций.
3. IPv4 PXE Support
3.1. Как работает
Классический PXE поверх IPv4 использует DHCPv4. Клиент в DHCP Discover помечает себя как PXE-устройство.
Критически важные DHCPv4-опции:
| Опция | Имя | Назначение |
|---|---|---|
| 60 | Class Identifier | PXEClient — определяет, что клиент PXE |
| 66 | TFTP Server Name | Имя/IP TFTP-сервера |
| 67 | Bootfile Name | Имя загрузчика (pxelinux.0, bootx64.efi) |
| 43 | Vendor Specific Info | Альтернативный способ передачи boot-сервера (внутри PXE-подопций) |
| 93 | Client System Architecture | Тип архитектуры (BIOS/UEFI) — для выбора правильного загрузчика |
| 94 | Client Network Interface Identifier | Доп. информация о NIC |
| 97 | Client Machine Identifier | UUID машины |
3.2. Архитектура клиента (опция 93)
Чтобы один DHCP-сервер обслуживал и Legacy BIOS, и UEFI, используют опцию 93 (Client System Architecture):
| Значение | Архитектура | Загрузчик |
|---|---|---|
| 0 | Intel x86 PC (Legacy BIOS) | pxelinux.0 / undionly.kpxe |
| 6 | EFI IA32 | bootia32.efi |
| 7 | EFI x86-64 | bootx64.efi |
| 9 | EFI x86-64 (альтернатива) | bootx64.efi |
| 11 | EFI ARM64 | bootaa64.efi |
Пример логики в конфиге DHCP:
if option arch = 00:07 or option arch = 00:09 {
filename "efi/bootx64.efi";
} elsif option arch = 00:06 {
filename "efi/bootia32.efi";
} else {
filename "bios/pxelinux.0";
}
3.3. Пример: dnsmasq (простой вариант)
# /etc/dnsmasq.conf
interface=eth0
dhcp-range=192.168.10.50,192.168.10.150,255.255.255.0,12h
# Включаем TFTP
enable-tftp
tftp-root=/srv/tftp
# Для Legacy BIOS
dhcp-boot=pxelinux.0
# Или с учётом архитектуры:
dhcp-match=set:efi-x86,option:client-arch,7
dhcp-match=set:efi-x86,option:client-arch,9
dhcp-boot=tag:efi-x86,bootx64.efi
3.4. Пример: ISC DHCP Server
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.50 192.168.10.150;
option routers 192.168.10.1;
option domain-name-servers 192.168.10.1;
# PXE-опции
if option arch = 00:07 or option arch = 00:09 {
filename "bootx64.efi";
} else {
filename "pxelinux.0";
}
next-server 192.168.10.2; # адрес TFTP
}
3.5. TFTP-сервер
Структура каталога /srv/tftp:
/srv/tftp
├── pxelinux.0 # Legacy BIOS загрузчик
├── ldlinux.c32
├── pxelinux.cfg/
│ └── default # меню загрузки
├── bootx64.efi # UEFI x86-64
├── vmlinuz
└── initrd.img
Пример pxelinux.cfg/default:
DEFAULT install
LABEL install
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://192.168.10.2/repo
TIMEOUT 50
3.6. Особенности IPv4 PXE
- Работает только при наличии DHCPv4 в сегменте (или настроенного DHCP relay / IP helper)
- Опции 66/67 могут конфликтовать, если в сети уже есть «обычный» DHCP (роутер, Windows DHCP) — PXE-опции нужно добавлять в существующий сервер, а не поднимать второй
- Опция 60 (
PXEClient) иногда конфликтует с Windows WDS, если DHCP и WDS на одном сервере — там есть отдельные нюансы сDoNotListenOnDhcpPort
4. IPv6 PXE Support
4.1. Принципиальные отличия
IPv6 PXE не использует DHCPv4. Загрузка идёт через DHCPv6 (порт 546/547 UDP), а сетевая конфигурация может также опираться на Router Advertisement (RA).
Два режима адресации в IPv6:
| Режим | Описание | Пригодность для PXE |
|---|---|---|
| SLAAC (Stateless) | Адрес из RA без DHCP | Сам по себе PXE не даёт — нет механизма передать boot-файл |
| Stateful DHCPv6 | Адрес выдаёт DHCPv6 | Основной рабочий вариант |
| Stateless DHCPv6 | Адрес из RA, DHCPv6 только для опций | Работает не на всех реализациях PXE |
Важно:
Для надёжной IPv6 PXE нужен Stateful DHCPv6, а RA-флаги должны быть согласованы (M=1 — managed address, O=1 — other config).
4.2. DHCPv6-опции для PXE
В IPv6 номера опций другие, чем в IPv4:
| Опция | Имя | Назначение |
|---|---|---|
| 59 | BOOTFILE-URL |
URL загрузчика: tftp://[2001:db8::2]/bootx64.efi |
| 60 | BOOTFILE-PARAM |
Параметры загрузчика |
| 61 | CLIENT_ARCH_TYPE |
Архитектура клиента (аналог опции 93 в IPv4) |
| 16 | Vendor Class | Идентификация PXE-клиента |
| 17 | Vendor-specific | Дополнительные данные |
Ключевая разница с IPv4:
- В IPv4 сервер и файл — две отдельные опции (66 и 67)
- В IPv6 всё задаётся одним URL в опции 59
4.3. Значения Client Architecture (опция 61)
| Значение | Архитектура | Загрузчик |
|---|---|---|
| 6 | EFI IA32 | bootia32.efi |
| 7 | EFI x86-64 | bootx64.efi |
| 9 | EFI x86-64 | bootx64.efi |
| 11 | EFI ARM64 | bootaa64.efi |
| 15 | EFI RISC-V | — |
4.4. Пример: dnsmasq для IPv6 PXE
# /etc/dnsmasq.conf
interface=eth0
# Включаем DHCPv6
enable-ra
dhcp-range=2001:db8:10::50,2001:db8:10::150,64,12h
# TFTP
enable-tftp
tftp-root=/srv/tftp
# PXE: выдаём bootfile URL в зависимости от архитектуры
dhcp-match=set:efi6,option6:client-arch,7
dhcp-match=set:efi6,option6:client-arch,9
dhcp-boot=tag:efi6,tftp://[2001:db8:10::2]/bootx64.efi
4.5. Пример: ISC DHCPv6
subnet6 2001:db8:10::/64 {
range6 2001:db8:10::50 2001:db8:10::150;
if option dhcp6.client-arch = 00:07 or option dhcp6.client-arch = 00:09 {
option dhcp6.bootfile-url "tftp://[2001:db8:10::2]/bootx64.efi";
}
}
4.6. Пример: Kea DHCPv6
{
"Dhcp6": {
"interfaces-config": { "interfaces": ["eth0"] },
"subnet6": [{
"subnet": "2001:db8:10::/64",
"pools": [{ "pool": "2001:db8:10::50 - 2001:db8:10::150" }],
"option-data": [{
"name": "bootfile-url",
"data": "tftp://[2001:db8:10::2]/bootx64.efi"
}]
}]
}
}
4.7. Особенности IPv6 PXE
- Обязателен UEFI — Legacy BIOS PXE через IPv6 практически не встречается (BIOS-стек PXE исторически IPv4-only).
- Multicast: DHCPv6-клиент отправляет Solicit на
ff02::1:2(All_DHCP_Relay_Agents_and_Servers). Для работы через сегменты нужен DHCPv6 Relay. - Согласованность RA и DHCPv6: если роутер шлёт RA с
M=0(SLAAC), клиент может даже не обращаться к DHCPv6 за адресом, и PXE-опции не дойдут. Для Stateful ставьтеM=1. - Формат bootfile-url — полный URL со схемой:
tftp://[адрес]/файл,http://.... Некоторые реализации UEFI PXE лучше работают с HTTP, чем TFTP. - Поддержка в оборудовании: IPv6 PXE есть не во всех NIC/UEFI. Проверяйте опции «IPv6 PXE Support», «UEFI Network Stack», «IPv6 Network Stack» в настройках прошивки.
5. Настройка на стороне клиента (UEFI/BIOS)
Для работы PXE на клиенте обычно нужно включить:
| Параметр | Значение |
|---|---|
| Network Stack / PXE Support | Enabled |
| IPv4 PXE Support | Enabled (по умолчанию) |
| IPv6 PXE Support | Enabled (если нужна загрузка по IPv6) |
| Boot Mode | UEFI (для IPv6 PXE — обязательно) |
| Secure Boot | Может блокировать неподписанные загрузчики |
| NIC ROM / Option ROM | UEFI driver, не Legacy |
Часто встречаются отдельные пункты:
Ipv4 PXE Support— загрузка по IPv4Ipv6 PXE Support— загрузка по IPv6- Порядок загрузки:
PXE IPv4/PXE IPv6в Boot Priority
Если в UEFI включён только IPv6 PXE, клиент будет слать DHCPv6 Solicit и игнорировать IPv4 DHCP. И наоборот. Для совместимости часто включают оба.
6. Сравнение IPv4 и IPv6 PXE
| Критерий | IPv4 PXE | IPv6 PXE |
|---|---|---|
| Протокол конфигурации | DHCPv4 | DHCPv6 (+ RA) |
| Адрес загрузчика | Опции 66 + 67 отдельно | Опция 59 — один URL |
| Архитектура клиента | Опция 93 | Опция 61 |
| Идентификация PXE | Опция 60 PXEClient |
Vendor Class / опция 16 |
| Требования к клиенту | BIOS или UEFI | Практически только UEFI |
| Broadcast/Multicast | Broadcast 255.255.255.255 | Multicast ff02::1:2 |
| Работа без DHCP | Нет | SLAAC без DHCP не даст boot-файл |
| Зрелость поддержки | Отличная, повсеместно | Зависит от NIC/UEFI |
| Релей | DHCP Relay / IP Helper | DHCPv6 Relay |
7. Диагностика
7.1. Перехват трафика на сервере/шлюзе
IPv4:
tcpdump -i eth0 -n -s0 port 67 or port 68 or tftp
IPv6:
tcpdump -i eth0 -n -s0 port 546 or port 547 or tftp
7.2. Что смотреть в Wireshark
- IPv4 PXE: DHCP Discover → проверить наличие опций 60, 66, 67 в Offer/ACK
- IPv6 PXE: DHCPv6 Solicit → Advertise → Request → Reply; проверить опции 59, 61
- TFTP: виден ли запрос
RRQна boot-файл, нет ли ошибок (Error: file not found)
7.3. Типовые проблемы
| Симптом | Вероятная причина | Решение |
|---|---|---|
| «PXE-E53: No boot filename received» | Не приходят опции 66/67 | Проверить DHCP, не конфликтует ли второй DHCP |
| «TFTP file not found» | Неверный путь/имя файла | Проверить tftp-root и права |
| IPv6 PXE не стартует | RA в режиме SLAAC, клиент не идёт в DHCPv6 | Поставить M=1 / Stateful DHCPv6 |
| Загрузка висит после получения файла | Secure Boot блокирует .efi |
Подписать загрузчик или отключить Secure Boot |
| PXE работает только в одном VLAN | Нет DHCP relay | Настроить relay / IP helper на L3-устройстве |
| Нет опции arch в ответе | DHCP не распознаёт клиента | Проверить dhcp-match по опциям 93/61 |
7.4. Быстрая проверка TFTP вручную
# IPv4
tftp 192.168.10.2 -c get pxelinux.0
# IPv6
tftp -6 2001:db8:10::2 -c get bootx64.efi
8. Рекомендации на практике
- Начинайте с IPv4 PXE, если нет жёсткой необходимости в IPv6 — поддержка стабильнее и шире.
- Используйте один DHCP-сервер на сегмент: два DHCP (например, роутер + PXE-сервер) конфликтуют.
- Разделяйте загрузчики по архитектуре: отдельный каталог
bios/иefi/, выбор по опции 93 (IPv4) или 61 (IPv6). - Для IPv6 согласуйте RA и DHCPv6: stateful DHCPv6 + корректные флаги M/O.
- Проверяйте поддержку IPv6 PXE в прошивке NIC/UEFI до массового внедрения — на старых серверах её может не быть или она работает нестабильно.
- HTTP вместо TFTP для крупных инфраструктур: TFTP не любит большие файлы и не имеет аутентификации; современные UEFI (HTTP Boot) и iPXE поддерживают HTTP.
- Логируйте: включите подробный лог dnsmasq (
log-dhcp,log-queries) или Kea — сразу видно, какие опции запросил клиент и что получил.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.