Настраиваем сетевую загрузку с помощью dnsmasq, ipxe, bios, uefi

Дополнение к статье Настраиваем сетевую загрузку с помощью mikrotik, ipxe, bios, uefi.

Решил добавить примеры dnsmasq для сетевой загрузки.

mikrotik не может одновременно определить bios или uefi, сетевая карта может выполнить сетевую загрузку в bios legacy режиме, а может выполнить в uefi режими, также здесь в uefi могут быть варианты такие как uefi 32 bit, uefi 64 bit, uefi secure boot. Dnsmasq умеет с таким справляться.

Недавно купил себе материнскую плату D1581Q3A. Обнаружил, что материнская плата поддерживает сетевую загрузку UEFI, но у меня не заработала сетевая загрузка. Начал разбираться, как никак написал же отдельный пост об этом, выяснил что нужно использовать файлы snponly.efi вместо ipxe.efi. Внес изменения в оригинальный пост, исправил ошибки. Теперь можно сказать, что сетевая загрузка у меня работает в BIOS, UEFI 64 bit режимах.

Также купил себе старый ноутбук Lenovo Thinkpad T61, нужно на этом ноутбуке проверить загрузку по UEFI 32 bit.

Dnsmasq

В нашей настройке dnsmasq выполняет только функции dhcp-сервера, tftp-сервера. DNS-сервером у нас занимаются другие. Установка выполняется на TV-приставке H96Max Armbian, X96Max Debian.


sudo apt update

sudo apt install -y dnsmasq

sudo mkdir -p /etc/dnsmasq.d
sudo mkdir -p /var/lib/tftpboot

cat<<EOF | sudo tee /etc/dnsmasq.d/10-main.conf
interface=eth0
port=0

dhcp-range=192.168.1.128,192.168.1.254,255.255.255.0,1h
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.4
dhcp-authoritative
EOF

cat<<EOF | sudo tee /etc/dnsmasq.d/20-tftp.conf
enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-no-override

# Enable only when need some debug information.
#log-dhcp

dhcp-userclass=set:ipxe,iPXE

dhcp-match=set:bios,option:client-arch,0
dhcp-match=set:efi32,option:client-arch,6
dhcp-match=set:efi64,option:client-arch,7
dhcp-match=set:efibc,option:client-arch,9

dhcp-boot=tag:efibc,snponly64.efi
dhcp-boot=tag:efi64,snponly64.efi
dhcp-boot=tag:efi32,snponly32.efi
dhcp-boot=tag:bios,undionly.kpxe

dhcp-boot=tag:ipxe,http://boot.nurm.lan/ipxe/boot.ipxe
EOF

cat<<EOF | sudo tee /var/lib/tftpboot/autoexec.ipxe
#!ipxe

dhcp

chain --autofree http://boot.nurm.lan/ipxe/boot.ipxe
EOF

cd /tmp
wget https://github.com/ipxe/ipxe/releases/latest/download/ipxeboot.tar.gz
tar zxvf ipxeboot.tar.gz

sudo cp ipxeboot/x86_64/undionly.kpxe /var/lib/tftpboot/undionly.kpxe
sudo cp ipxeboot/x86_64/snponly.efi /var/lib/tftpboot/snponly64.efi
sudo cp ipxeboot/i386/snponly.efi /var/lib/tftpboot/snponly32.efi
sudo chown 0644 \ 
     /var/lib/tftpboot/undionly.kpxe \
     /var/lib/tftpboot/snponly64.efi \
     /var/lib/tftpboot/snponly32.efi

rm -rf /tmp/ipxeboot*

sudo systemctl enable --now dnsmasq

sudo journalctl -u dnsmasq