fix(pxe-boot): use pxe-service for proxy DHCP initial boot offers

dnsmasq 2.93 does not send proxy DHCP offers from dhcp-boot alone in proxy
mode — pxe-service is required to trigger proxy offers for the initial boot.

Replace the dhcp-boot-based arch detection with pxe-service entries for
arch 0 (BIOS), 7 (EFI BC / OVMF), and 9 (EFI x86-64), then use dhcp-boot
only for the iPXE second-boot HTTP chain (tag:ipxe clients). Add log-dhcp
for post-deploy verification.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 15:03:01 +10:00
co-authored by Claude Sonnet 4.6
parent c770feebc9
commit f0e76f8aff
+14 -11
View File
@@ -427,18 +427,21 @@ in
# Without this dnsmasq tries to bind port 53 which systemd-resolved
# already owns, causing startup failure.
port = 0;
dhcp-range = [ "192.168.2.0,proxy" ];
dhcp-match = [
"set:ipxe,175"
"set:efi64,option:client-arch,7"
"set:efi64,option:client-arch,9"
];
log-dhcp = true;
dhcp-range = "192.168.2.0,proxy";
# Detect iPXE clients on the second DHCP round (after loading the
# iPXE binary) so we can serve the HTTP menu instead of TFTP.
dhcp-match = "set:ipxe,175";
dhcp-userclass = "set:ipxe,iPXE";
dhcp-boot = [
"tag:ipxe,tag:efi64,http://${vars.pxeServerIp}/boot.ipxe"
"tag:ipxe,http://${vars.pxeServerIp}/boot.ipxe"
"tag:efi64,ipxe.efi,,${vars.pxeServerIp}"
"undionly.kpxe,,${vars.pxeServerIp}"
# iPXE second boot: chain to HTTP boot menu.
dhcp-boot = "tag:ipxe,http://${vars.pxeServerIp}/boot.ipxe";
# Initial boot: use pxe-service so dnsmasq sends proxy DHCP offers.
# dhcp-boot alone does not trigger proxy offers in dnsmasq 2.93.
# Arch 0 = BIOS, 7 = EFI BC (OVMF), 9 = EFI x86-64.
pxe-service = [
"0,\"Network Boot\",undionly.kpxe,${vars.pxeServerIp}"
"7,\"Network Boot\",ipxe.efi,${vars.pxeServerIp}"
"9,\"Network Boot\",ipxe.efi,${vars.pxeServerIp}"
];
};
};