{% set tftpIp = config.dhcp.tftpIp -%} enable-tftp tftp-root=/tftproot tftp-single-port dhcp-vendorclass=BIOS,PXEClient:Arch:00000 dhcp-vendorclass=UEFI,PXEClient:Arch:00007 dhcp-vendorclass=UEFI64,PXEClient:Arch:00009 # 1st stage: pxe rom boot on ipxe dhcp-boot=net:BIOS,ipxe.pxe,{{ tftpIp }},{{ tftpIp }} dhcp-boot=net:UEFI,ipxe.efi,{{ tftpIp }},{{ tftpIp }} dhcp-boot=net:UEFI64,ipxe.efi,{{ tftpIp }},{{ tftpIp }} # Based on logic in https://gist.github.com/robinsmidsrod/4008017 # iPXE sends a 175 option, checking suboptions dhcp-match=set:ipxe-http,175,19 dhcp-match=set:ipxe-https,175,20 dhcp-match=set:ipxe-menu,175,39 dhcp-match=set:ipxe-pxe,175,33 dhcp-match=set:ipxe-bzimage,175,24 dhcp-match=set:ipxe-iscsi,175,17 dhcp-match=set:ipxe-efi,175,36 # set ipxe-ok tag if we have correct combination tag-if=set:ipxe-ok,tag:ipxe-http,tag:ipxe-https # these create option 43 cruft, which is required in proxy mode # TFTP IP is required on all dhcp-boot lines (unless dnsmasq itself acts as tftp server?) pxe-service=tag:!ipxe-ok,X86PC,PXE,undionly.kpxe,{{ tftpIp }} pxe-service=tag:!ipxe-ok,IA32_EFI,PXE,snponlyx32.efi,{{ tftpIp }} pxe-service=tag:!ipxe-ok,BC_EFI,PXE,snponly.efi,{{ tftpIp }} pxe-service=tag:!ipxe-ok,X86-64_EFI,PXE,snponly.efi,{{ tftpIp }} # later match overrides previous, keep ipxe script last # server address must be non zero, but can be anything as long as iPXE script is not fetched over TFTP dhcp-boot=tag:ipxe-ok,boot.ipxe,,{{ tftpIp }}