PXE-bootserver opzetten met iPXE en Secure Boot

Facet Wiki

PXE-bootserver opzetten met iPXE en Secure Boot

Deze stappen beschrijven in het kort hoe je een PXE-server opzet om een BCLD ISO te starten via een netwerk. Dit werkt met Secure Boot, dankzij iPXE en een correct ondertekende bootloader.
We maken gebruiken van een Ubuntu Server 22.04 (of 24.04).

 

Benodigdheden

Een server of VM (bijv. Ubuntu Server 22.04 of 24.04)
Een client-pc die PXE ondersteunt (controleer in BIOS/UEFI)
Een netwerk met een DHCP-server (bijv. pfSense of een Linux-server)
De BCLD ISO

 

Installeren van PXE/TFTP-server

Log in op je Ubuntu-server en installeer de benodigde pakketten:

sudo apt update && sudo apt install isc-dhcp-server tftpd-hpa nginx -y

DHCP-server configureren voor PXE (we gebruiken IP-reeks 192.168.1.x in dit voorbeeld)

Bewerk het DHCP-configuratiebestand:

sudo nano /etc/dhcp/dhcpd.conf

 

Voeg de volgende regels toe (pas subnet aan op basis van je netwerk):

subnet 192.168.1.0 netmask 255.255.255.0 {

    range 192.168.1.100 192.168.1.200;

    option routers 192.168.1.1;

    option domain-name-servers 8.8.8.8;

   

    # PXE instellingen

    next-server 192.168.1.10;

    filename "ipxe.efi";  # Gebruik iPXE als PXE-loader

}

Sla op en start DHCP opnieuw:

sudo systemctl restart isc-dhcp-server


Controleer of DHCP werkt:
sudo systemctl status isc-dhcp-server

 

iPXE installeren en configureren

Download de iPXE EFI-binaries:
cd /srv/tftp

wget https://boot.ipxe.org/ipxe.efi

wget https://boot.ipxe.org/undionly.kpxe


Maak een iPXE-bootmenu:

sudo nano /srv/tftp/boot.ipxe


Voeg het volgende toe:
#!ipxe
set timeout 5000
set base-url http://192.168.1.10/pxe



menu PXE Boot Menu
item bcld Boot BCLD ISO
choose --default bcld --timeout 5000 selected


:bcld
kernel ${base-url}/bcld/vmlinuz
initrd ${base-url}/bcld/initrd
boot

 

 

Webserver instellen voor iPXE bestanden

PXE kan geen grote bestanden over TFTP laden, dus we gebruiken Nginx om de ISO-bestanden te serveren.

Bewerk de Nginx-configuratie:

sudo nano /etc/nginx/sites-available/pxe

Voeg toe:
server {
   listen 80;
    server_name 192.168.1.10;

    location /pxe/ {
        root /var/www/html;
        autoindex on;
    }
}


Activeer de configuratie:

sudo ln -s /etc/nginx/sites-available/pxe /etc/nginx/sites-enabled/
sudo systemctl restart nginx


Plaats de BCLD ISO en kernel + initrd in /var/www/html/pxe/.

mkdir -p /var/www/html/pxe/{bcld}
cp /path/to/bcld/kernel /var/www/html/pxe/bcld/vmlinuz
cp /path/to/bcld/initrd /var/www/html/pxe/bcld/initrd


Secure Boot ondersteunen met een ondertekende bootloader

Download een ondertekende GRUB2-EFI voor Secure Boot:

sudo apt install grub-efi-amd64-signed shim-signed
cp /usr/lib/shim/shimx64.efi /srv/tftp/
cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftp/grubx64.efi

 

Pas de DHCP-configuratie aan zodat shimx64.efi wordt geladen in Secure Boot-modus:

if option architecture = 00:07 {
    filename "shimx64.efi";
} else {
    filename "ipxe.efi";
}

 

Start de DHCP-server opnieuw:

sudo systemctl restart isc-dhcp-server

 

Testen van PXE Boot

  1. Start een client-pc op en ga naar de BIOS/UEFI

  2. Schakel PXE-boot in (en Secure Boot indien nodig)

  3. Kies “Network Boot” in het bootmenu

  4. iPXE start op en toont het menu

Kies "Boot BCLD"

 

Samenvatting

✅ DHCP-server met PXE-ondersteuning ingesteld
✅ TFTP-server geconfigureerd met iPXE
✅ Webserver ingesteld voor snellere bestandsoverdracht
✅ Secure Boot-ondersteuning met shim en ondertekende GRUB

Je PXE-netwerk is nu klaar voor BCLD via iPXE!