PXE Boot Issues with initrd timeout (BIOS) and grubx64.efi error "E18" (UEFI)

Hi,

I'm running into PXE boot issues this year, using dnsmasq's built-in TFTP server.

Setup:

  • Debian 12 server
  • Core [v6.1.2]
  • FTL [v6.2.3]
  • Web interface [v6.2.1]
  • PXE configuration in dnsmasq
  • TFTP root is /srv/tftp serving debian installer
  • BIOS clients use pxelinux.0
  • UEFI clients use grubx64.efi or bootnetx64.efi

Issue 1: BIOS PXE clients

  • The pxelinux.0 is loaded successfully, and I get the menu.
  • However, during the initrd transfer, I get a timeout everytime.
  • This issue was resolved by disabling the built-in TFTP in dnsmasq and using an external TFTP server (tftpd-hpa). With tftpd-hpa, initrd loads fully and the installation proceeds.
    Last year built in TFTP server was working fine for legacy BIOS, but I must say it was way slower than tftp-hpa.

Issue 2: UEFI PXE clients

  • The UEFI firmware requests grubx64.efi (I see the TFTP request in the logs).
  • The file exists and is accessible (confirmed with manual TFTP download from another host).
  • I can see the choice of PXE server, still when I press enter the UEFI clients fail with a "PXE-E18: Server response timeout" error before anything is shown on screen.
  • I’ve tried several UEFI .efi loaders (grubx64.efi, bootnetx64.efi), all give the same result.
  • I've tried different host (old and pretty new motherboard), all give the same result.

Here how I build my TFTP content :

wget http://ftp.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar -xzvf netboot.tar.gz
rm netboot.tar.gz
ln -s debian-installer/amd64/grubx64.efi .
ln -s debian-installer/amd64/grub .

My specific dnsmasq conf :

nano /etc/dnsmasq.d/99-pxe.conf

#disabled since using tftp-hpa 
#enable-tftp  

tftp-root=/srv/tftp
 
pxe-service=X86-64_EFI,"PXE (UEFI)","grubx64.efi"
pxe-service=x86PC, "PXELINUX (BIOS)", "pxelinux.0"

pxe-service=0, "PXELINUX (0000-BIOS)", "pxelinux.0"
pxe-service=1, "PXELINUX (0001-EFI)", "grubx64.efi"
pxe-service=2, "PXELINUX (0002-EFI)", "grubx64.efi"
pxe-service=3, "PXELINUX (0003-EFI)", "grubx64.efi"
pxe-service=4, "PXELINUX (0004-EFI)", "grubx64.efi"
pxe-service=5, "PXELINUX (0005-EFI)", "grubx64.efi"
pxe-service=6, "PXELINUX (0006-EFI)", "grubx64.efi"
pxe-service=7, "PXELINUX (0007-EFI)", "grubx64.efi"
pxe-service=8, "PXELINUX (0008-EFI)", "grubx64.efi"
pxe-service=9, "PXELINUX (0009-EFI)", "grubx64.efi"

I'm pretty sure last year or so I did not had thoses issues for EFI either.

Thanks in advance for any help or insight.

Best regards,

I reinstalled the latest version 5 using the patch from this repository.
With this setup, the built-in TFTP server works fine — no issues with either BIOS or UEFI clients.

While pihole-FTL is a fork of dnsmasq, its changes are limited to DNS functionality.
Since it doesn't apply any customisation to PXE, you'd improve chances for getting your observation analysed and fixed if you'd report it to dnsmasq maintainers, e.g. via The Dnsmasq-discuss Archives.

I did, thank you: [Dnsmasq-discuss] PXE Boot Issues with initrd timeout (BIOS) and grubx64.efi error "E18" (UEFI)

Is there a way to know what is the base version of dnsmasq in Pi-Hole ?
v2.92test13 ?

Use pihole-FTL -vv.

The -vv option shows verbose version information about FTL and all embedded components.

Note:
pihole-FTL -h will show a complete list of FTL commands and arguments.