Вопрос или проблема
Я пытаюсь загрузить EFI PXE с помощью GRUB2, используя прокси DHCP сервер… Все работало отлично с этой конфигурацией, где DHCP сервер был просто заменен:
interface=enp3s0
dhcp-range=192.168.1.10,192.168.1.90,255.255.255.0,12h
dhcp-option=option:router,192.168.1.1
pxe-prompt="Going to network boot", 4
enable-tftp
tftp-root=/var/ftpd
dhcp-boot=grubnetx64.efi
Клиент загружается без проблем. Однако это не то, что мне нужно. Я хочу, чтобы распределение IP продолжало контролироваться DHCP сервером маршрутизатора. Поэтому я изменил это на:
interface=enp3s0
dhcp-range=192.168.1.1,proxy
enable-tftp
tftp-root=/var/ftpd
pxe-prompt="Going to network boot", 4
pxe-service=x86-64_EFI,"Network boot",grubnetx64.efi
dhcp-boot=grubnetx64.efi
Как Intel UNDI (или как это называется), так и iPXE могут запустить GRUB2, однако дальше баннера “Welcome to GRUB!” ничего не происходит, после чего все просто зависает и вся сетевая активность прекращается. Через долгое время я попадаю в оболочку grub (не в аварийную оболочку) без каких-либо сообщений об ошибках. Конфигурация вообще не загружена.
Интересно, что iPXE не показывает мне никаких IP-адресов при запуске dhcp
или ifstat
, как будто он не получил IP-адрес, но при этом может автоматически получать файл grubnetx64.efi
с сервера.
Wireshark показывает, что клиент полностью загрузил файл grubnetx64.efi
, но затем вся связь прекращается, включая DHCP.
Это сетевой дамп загрузки, до момента, когда началась загрузка файла.
No. Time Source Destination Protocol Length Info
19 25.842147691 0.0.0.0 255.255.255.255 DHCP 389 DHCP Discover - Transaction ID 0x2ac0b917
20 25.842958215 192.168.1.124 255.255.255.255 DHCP 342 DHCP Offer - Transaction ID 0x2ac0b917
21 25.844230209 192.168.1.1 255.255.255.255 DHCP 342 DHCP Offer - Transaction ID 0x2ac0b917
24 29.480009427 0.0.0.0 255.255.255.255 DHCP 401 DHCP Request - Transaction ID 0x2ac0b917
25 29.483931744 192.168.1.1 255.255.255.255 DHCP 342 DHCP ACK - Transaction ID 0x2ac0b917
28 29.484919255 192.168.1.137 192.168.1.124 DHCP 389 proxyDHCP Request - Transaction ID 0xfe4617c6
29 29.485937159 192.168.1.124 192.168.1.137 DHCP 342 proxyDHCP ACK - Transaction ID 0xfe4617c6
33 30.485321160 192.168.1.137 192.168.1.124 TFTP 86 Request Read, File: grubnetx64.efi, Type transfer: octet, tsize=0, blksize=1468
34 30.486167149 192.168.1.124 192.168.1.137 TFTP 71 Option Acknowledgement, blksize=1468, tsize=3864000
35 30.486335275 192.168.1.137 192.168.1.124 TFTP 72 Error Code, Code: Option negotiation failed, Message: User aborted the transfer
36 30.511880616 192.168.1.137 192.168.1.124 TFTP 78 Request Read, File: grubnetx64.efi, Type transfer: octet, blksize=1468
37 30.512618251 192.168.1.124 192.168.1.137 TFTP 57 Option Acknowledgement, blksize=1468
38 30.512763523 192.168.1.137 192.168.1.124 TFTP 60 Acknowledgement, Block: 0
39 30.513057030 192.168.1.124 192.168.1.137 TFTP 1514 Data Packet, Block: 1
40 30.513471667 192.168.1.137 192.168.1.124 TFTP 60 Acknowledgement, Block: 1
41 30.513903970 192.168.1.124 192.168.1.137 TFTP 1514 Data Packet, Block: 2
42 30.514401757 192.168.1.137 192.168.1.124 TFTP 60 Acknowledgement, Block: 2
У вас есть какие-то идеи, почему это может происходить? Я совершенно озадачен. И не совсем разбираюсь во внутренностях DHCP и PXE.
Спасибо заранее
Tuxifan
Хорошая новость в том, что debian 12 (trixie/unstable для amd64, 12.8 для arm64) уже добавил поддержку прокси DHCP. Я проверил это на обоих VMs amd64 и arm64. Имя патча ‘efinet-add-dhcp-proxy-support.patch’ находится в http://deb.debian.org/debian/pool/main/g/grub2/grub2_2.12-5.debian.tar.xz.
Проблема в основном была связана с grub, который также не обрабатывал пакет DHCP proxy ACK в своей инициализации и не проверял пакет DHCP proxy offer от PXE сервера.
iPXE тоже не на 100% безупречен – похоже, что он еще не полностью поддерживает DHCP proxy. В последней версии (1.21.1) кажется, что он не сохраняет пакет DHCP offer от прокси сервера (просто хранит ACK запроса DHCP от DHCP сервера), так что grub с патчем DHCP proxy не сможет найти информацию о прокси сервере.
Ответ или решение
Конфигурация прокси-DHCP с использованием dnsmasq и загружаемым следующим образом: GRUB2 может быть сложной задачей, особенно когда клиентский компьютер застревает на экране "Welcome to GRUB!". С точки зрения логики процесса и технологий, которые участвуют, прокси-DHCP отличается от стандартного DHCP тем, что он только предоставляет информацию о загрузке, в то время как сам IP-адрес предоставляется другим DHCP-сервером. Разберем шаги для решения проблемы и укажем на конкретные нюансы, на которые стоит обратить внимание в такой ситуации.
Анализ проблемы
-
Конфигурация прокси-DHCP:
- Основной момент заключается в том, чтобы убедиться, что конфигурация вашего dnsmasq действительна. Параметры
dhcp-range
иpxe-service
в вашем файле конфигурации установлены правильно. Указание192.168.1.1,proxy
для прокси позволяет маршрутизатору управления раздачей IP-адресов.
- Основной момент заключается в том, чтобы убедиться, что конфигурация вашего dnsmasq действительна. Параметры
-
Проблемы при начальной загрузке GRUB2:
- GRUB застревает после вывода приветствия, что может быть связано с отсутствием правильной настройки DHCP. Программы PXE могут неправильно обрабатывать ответ DHCP proxy.
-
Анализ TCPDUMP:
- Log показывает, что устройство получает файл
grubnetx64.efi
с TFTP без проблем, однако дальнейшая сетьвая активность прекращается. Это свидетельствует о вероятных проблемах с отсутствием IP-адреса на поздних этапах загрузки.
- Log показывает, что устройство получает файл
Решение
-
Патчи для GRUB:
- Патч
efinet-add-dhcp-proxy-support.patch
, доступный для Debian 12, может быть решением, поскольку он исправляет проблему обработки DHCP proxy в GRUB. Это критически важно для корректного функционирования GRUB в настройке PXE с Proxy DHCP.
- Патч
-
Соответствующая конфигурация iPXE:
- Проверьте, что версия iPXE supports proxy-DHCP корректно. Как указывается, iPXE вашей версии может не сохранять DHCP-пакеты от прокси-сервера должным образом, что приводит к отсутствию правильной информации о загрузке типа PXE.
Рекомендации
-
Обновите GRUB:
Скачать последние версии GRUB для вашей ОС, которые уже включают необходимые изменения и поддержку прокси-DHCP. -
Проверьте настройки маршрутизатора:
- Убедитесь, что маршрутизатор корректно отвечает на DHCP-запросы и не блокирует пакеты от proxy-DHCP.
-
Используйте дополнительные инструменты мониторинга:
- Wireshark может помочь в детализированном анализе сетевого трафика, давая понимание, на каком именно этапе процесс может застревать.
-
Documentation and Testing:
- Всегда документируйте изменения конфигурации и проводите тесты на отдельных узлах, чтобы в случае необходимости вернуться к предыдущим стабильным настройкам.
Такая настройка требует тщательного внимания и тестирования, чтобы убедиться, что все компоненты работают корректно. Ваша конечная цель — достичь стабильной сетевой загрузки, которая предотвращает потенциальные сбои GRUB и позволяет системе успешно запускаться через Proxy DHCP.