I'm trying to setup a PXE server with dnsmasq as a dhcp-proxy.

It works well with client-arch=0 (x86 legacy clients) but UEFI client doesn't even terminate the DHCP packets exchange with the PXE server, and not even a pxe-prompt (setted with dnsmasq) appears on those newer clients.

I have made dumps of the DHCP dialog between PXE server and clients with Wireshark, I see some differences but I can't figure why only legacy clients connect successfully with my server.

Dump of DHCP messages between PXE server and legacy BIOS client (Works!)

Dump of DHCP messages between PXE server and UEFI client (Don't work :( )

I couldn't find a working configuration online: following a lot of examples, all I get is that UEFI systems don't exchange final REQUEST/ACK with PXE server.

Dnsmasq config:



pxe-prompt="Press any key for boot menu", 5

dhcp-match=set:x86PC, option:client-arch, 0
dhcp-match=set:BC_EFI, option:client-arch, 7

pxe-service=tag:x86PC,x86PC, "Legacy BIOS PXE", bios/pxelinux
pxe-service=tag:BC_EFI,BC_EFI, "UEFI PXE", efi64/syslinux.efi

dhcp-boot=tag:x86PC, bios/pxelinux.0
dhcp-boot=tag:BC_EFI, efi64/syslinux.efi

Is out there a solution?

EDIT: I'm using version 2.76, with UEFI support (see changelog on official site).

EDIT2: My UEFI client is classified as PXEClient:Arch:00007 (so, BC_EFI is the correct dnsmasq arch tag).

1 Answer 1


DnsMasq proxyDHCP does not work on UEFI environments:


EDIT_1 if you are using the new DnsMasq with UEFI suport then try adding the missing architecture 9

 dhcp-match=set:EFI_ x86-64, option:client-arch, 9

UEFI 64 clients also use 9 as architecture.


please base your config on this one

# Don't function as a DNS server:

# Log lots of extra information about DHCP transactions.

# Set the root directory for files available via FTP.

# Disable re-use of the DHCP servername and filename fields as extra
# option space. That's to avoid confusing some old or broken DHCP clients.

# The boot filename, Server name, Server Ip Address

# PXE menu.  The first part is the text displayed to the user.  The second is the timeout, in seconds.
# pxe-prompt="Booting PXE Client", 1

# The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
# Intel_Lean_Client, IA32_EFI, ARM_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
# This option is first and will be the default if there is no input from the user.

# PXEClient:Arch:00000
pxe-service=X86PC, "Boot BIOS PXE", bios/pxelinux

# PXEClient:Arch:00007
pxe-service=BC_EFI, "Boot UEFI PXE-BC", efi64/syslinux.efi

# PXEClient:Arch:00009
pxe-service=X86-64_EFI, "Boot UEFI PXE-64", efi64/syslinux.efi


Source https://wiki.fogproject.org/wiki/index.php?title=ProxyDHCP_with_dnsmasq (Adding UEFI support to the basic script)

  • thekelleys.org.uk/dnsmasq/CHANGELOG , version 2.76 actually supports EFI. You linked an old devs discussion (2015). Jan 27, 2017 at 20:42
  • see my edited answer
    – Pat
    Jan 28, 2017 at 10:56
  • My client is class 7, dnsqmask detects it correctly Jan 28, 2017 at 10:58
  • then I would try configuring a plain PXE boot w/o menu; just the load of the NBP and run. Probably your UEFI client is not implementing PXE menu capabilities.
    – Pat
    Jan 29, 2017 at 12:18
  • Yesterday, tried to remove pxe prompt message, still no good. Jan 29, 2017 at 12:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.