[Dnsmasq-discuss] Portable PXE boot appliance
Simon Kelley
simon at thekelleys.org.uk
Fri Dec 19 09:56:36 UTC 2025
On 19/12/2025 09:32, Steve Cook via Dnsmasq-discuss wrote:
> Hi,
>
> We're a charity that supports education in sub-Saharan Africa by
> refurbishing IT equipment for use in schools. At our distribution hubs
> in Malawi, customised OS images are installed using bootable USBs but
> we'd like to do this using PXE boot for performance reasons.
>
> Our goal is to create a bunch of PXE boot appliances to be sent to sites
> where we don't necessarily know the subnets in advance. We'd want these
> servers to be 'plug-and-play' capable of serving images via PXE loading
> on whatever network they're connected to, and which already have a DHCP
> server (e.g. on their broadband router).
>
> We've attempted this using Samba, Nginx, grub, pxelinux and ipxe, all of
> which have no fixed IP addresses in any of the configs so it can get its
> address from DHCP. It will boot clients into PXE or WinPE for OS
> installation. The appliance can be attached to any subnet and provide
> network boot services with no reconfiguration nor interference with
> existing network facilities (DHCP). It uses <next-server> and netbios
> naming instead. The only place where there is an IP address is DNSmasq's
> config. Could the dhcp-range use the computer’s IP address or subnet as
> a default? In other words, could we just specify the network
> interface(s) and have it detect the subnet automatically?
>
I don't think there's a way to do this, currently. The obvious way to
add it is to implement the "constructor:eth0" syntax which exists in the
dnsmasq DHCPv6 implementation to DHCPv4 as well.
Simon.
> # DNSmasq config for proxy PXE boot
> # Disable DNS
> port=0
> log-dhcp
> # dhcp-range=interface:eno1,,proxy # default to interface's
> subnet - doesn't work
> dhcp-range=interface:eno1,192.168.10.0,proxy # currently
> necessary to specify the subnet
> dhcp-range=interface:wlp3s0,192.168.20.0,proxy
> no-dhcpv6-interface=eno1
> dhcp-no-override
> enable-tftp
> tftp-root=/srv/boot
>
> dhcp-userclass=set:IPXE,iPXE
> pxe-service=tag:IPXE,X86-64_EFI,"ipxe",ipxe/bootuefi.ipxe
> pxe-service=tag:!IPXE,X86-64_EFI,"UEFI",grub/grubnetx64.efi
> pxe-service=X86PC,"Legacy",pxelinux/lpxelinux.0
>
>
> Alternatively we could script something that detects the subnet(s) at
> boot time and configures DNSmasq before starting it, but it seems neater
> to incorporate this feature into DNSmasq itself.
>
> Any guidance or advice on how best to achieve this, is much appreciated!
>
> --
> Steve Cook
> Head of IT
>
>
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss
More information about the Dnsmasq-discuss
mailing list