PXElinux 6.04-pre1/iPXE 1.21.1+ – PXE&TFTP&DHCP Server einrichten

Möchten Sie von Ihrem Synology NAS, über das Netzwerk, Linux-Live-Systeme oder sogar Windows Installationen starten können? Dann ist diese Anleitung genau das Richtige für Sie.

Das ganze Thema ist sehr vielfältig. Die Möglichkeiten sind es auch. Man kann so ziemlich alles in einer solchen Umgebung durchführen. Häufige Fälle wären zum Beispiel das Zurücksetzen des Passworts mit der DaRT Software von Microsoft oder ein Virenscan des Rechners ohne diesen überhaupt ins Hauptsystem gebootet zu haben. Auch könnte man in solchen Umgebungen Backupsoftware starten, um den geliebten PC und dessen persönliche Dateien zu sichern oder diese wiederherzustellen.

Aktualisiert – 16.06.2024:

Download: TFTP-Root-Paket (Erstellt von Stefan Saft)

 

Diese Anleitung bezieht sich nur auf die Konfiguration des TFTP&DHCP&PXE Servers und das Aufspielen und Konfigurieren der PXElinux 6.04-pre1 Version und iPXE 1.21.1 Version auf diesem.

Verwendete Programme/Server:

DHCP Server = Dnsmasq
TFTP Server = Open TFTP Server
DSM = 6.2-Serie

Die Anleitung wurde zur damaligen DSM 6.2.3 Version erstellt. Die Anleitung ist insofern noch gültig, da die meisten Bereiche nur leicht anders heißen oder eben als Paket ausgelagert wurden.

Die Änderungen auf einen Blick zwischen den Versionen:

  • Der DHCP-Server ist nun ein eigenständiges Paket, welches nicht mehr in der Systemsteuerung im DSM 7.0+ angezeigt wird.
  • Die TFTP-Einstellungen finden Sie immer noch unter Dateidienste, aber im erweiterten Register! Somit können Sie diese Anleitung auch auf neuere DSM Versionen anwenden.
  • Gemeinsame Ordner heißen nun Freigegebene Ordner

PXE-Umgebung:

BIOS Clients = Laden den PXELinux Bootloader
UEFI32 Clients = Laden das iPXE 32 Skript
UEFI64 Clients = Laden das iPXE 64 Skript

Den i386 und i386-efi Modus konnte ich nicht testen. Ich habe nämlich keine uralt Hardware mehr und auch keine spezielleren i386-efi Geräte.

Neuen gemeinsamen Ordner erstellen

Zuallererst melden Sie sich auf Ihrer Synology NAS an. Dort erstellen Sie einen neuen Gemeinsamen Ordner mit beispielsweise dem Namen: „PXE-Umgebung„. Wie Sie diesen nennen ist natürlich Ihnen überlassen.

NFS-Berechtigung für den gemeinsamen Ordner erstellen

Wenn Sie später einmal vorhaben sollten Linux-Live-Images laden zu können, so klicken Sie bei dem eben erstellten gemeinsamen Ordner bitte auf Bearbeiten und klicken dann auf das Register NFS-Berechtigungen und erstellen eine Neue Regel.

Synology Gemeinsamer Ordner NFS-Regel
Synology Gemeinsamer Ordner NFS-Regel

Bei Hostname oder IP kommt die Netzwerk-ID Ihres Netzwerkes hinein.

Wie genau nun Ihre Netzwerk-ID lautet, kann ich nicht sagen. Schauen Sie einfach selbst nach.

Wenn Sie allerdings im /24 Netz sind = Subnetzmaske: 255.255.255.0, dann können Sie wie ich die 0 am Ende der Adresse benutzen!

Die Subnetz Präfix darf natürlich nicht fehlen! Hiermit ist das /24 gemeint und besagt, das der Netzanteil 24 Bit lang ist.

Bringen Sie bitte in Erfahrung, welches Netz Sie verwenden. Sollten Sie diesem Punkt falsch eintragen, so wird es Ihnen später nicht möglich sein, Linux-Live-Systeme zu starten!

Wenn Sie dann alles wie auf dem Bild eingetragen haben – außer der IP natürlich -, dann sollte das Ganze so aussehen:

Synology Gemeinsamer Ordner NFS-Berechtigungen
Synology Gemeinsamer Ordner NFS-Berechtigungen

NFS Mount-Pfad merken!

Auf diesem Bild sehen Sie unten noch den Mount-Pfad.

In meinem Beispiel: /volume1/PXE-Umgebung

Diese Angabe ist äußerst wichtig, da Sie diese später noch einmal brauchen werden. Also nicht vergessen. Bei Ihnen kann es durchaus der Fall sein, dass dort eventuell nicht volume1 steht, sondern vielleicht volume2 oder ähnlich. Das ist nicht schlimm und sagt lediglich nur aus, auf welchem Volume sich der gemeinsame Ordner befindet.

TFTP Server konfigurieren

Klicken Sie im DSM auf Systemsteuerung und dann Dateidienste. Sie werden dort das Register TFTP finden. Aktivieren Sie dort den TFTP-Dienst und wählen den gemeinsamen Ordner aus, den Sie gerade eben erstellt haben. Anschließend klicken Sie auf Erweiterte Einstellungen. Dort können Sie noch, wenn Sie das wünschen, die Protokollierung aktivieren oder einen erlaubten IP-Bereich wählen. Die TFTP-Rechte sollten auf auf das Lesen beschränkt werden. Wir wollen ja auch nicht mehr. Lesen reicht vollkommen aus.

Synology TFTP-Servereinstellungen
Synology TFTP-Servereinstellungen

DHCP Server einrichten

Vorwort
Es ist nicht ratsam mehrere DHCP Server in einem Subnetz zu betreiben. Da die Mehrheit meiner Erfahrung nach allerdings den DHCP Server des Routers verwendet, muss ich dazu sagen, dass dieser bei dem Router deaktiviert werden muss. Ja, dass muss und sollte auch. Es kann zwar sein, dass es auch mit 2 DHCP Servern funktioniert, aber es ist dennoch davon abzuraten. Es gibt auch keine Gründe sich zu sträuben den DHCP Server des Routers zu deaktivieren, denn diese sind meistens total vereinfacht und so gut wie nicht konfigurierbar. Sie tun Ihrer Netzwerkumgebung einen Gefallen damit den DHCP Server der Synology zu verwenden. Natürlich bekommen Ihre Handys nach der Umstellung auch noch DHCP Leases, eben nur nicht mehr über den Router selbst, sondern der Synology.

Als kleine Randinformation für alle FritzBox-Nutzer:

Auch wenn der DHCP Server im Router für das Heim-Netz deaktiviert wurde, so läuft dennoch einer weiterhin für das LAN&WLAN Gast-Netz! Vorausgesetzt natürlich dass Sie die Gastfunktionen der FritzBox auch aktiviert haben. Da dieser DHCP Server in einem völlig anderen Subnetz agiert, ist dieser kein Problem für diese Anleitung!

ProxyDHCP Server:

Es gibt zwar noch sogenannte ProxyDHCP Server, aber das müsste auch wieder eine ganze Ecke anders eingestellt werden. Daher verzichte ich in dieser Anleitung auch komplett darauf. Eventuell werde ich noch eine für solche Fälle verfassen.

Weiter im Text:

In der Systemsteuerung klicken Sie nun auf DHCP Server und wählen als Erstes mal den LAN Port aus, den Sie dafür verwenden wollen. Manche Synology Geräte besitzen mehr als einen LAN Port und daher muss das angesprochen werden. Markieren Sie diesen und klicken auf Bearbeiten. Fertig eingerichtet sieht das in meiner Umgebung dann so aus:

Synology DHCP-Servereinstellungen
Synology DHCP-Servereinstellungen

Meine Netzwerk-ID ist 192.168.1.0/24
Mein Router (FritzBox) ist 192.168.1.254
Das DHCP Range geht von 192.168.1.100-192.168.1.200

So, ganz wichtig, Ihr solltet nach Möglichkeit der Diskstation eine feste IP zuweisen! In meinem Fall ist die feste IP: 192.168.1.2.

Sollte das bei Euch nicht der Fall sein, so navigiert in der Systemsteuerung zu Netzwerk und dann Netzwerkschnittstelle und wählt die aktive Verbindung der DS aus und klickt dann auf Bearbeiten.

Synology LAN Port IP-Einstellungen
Synology LAN Port IP-Einstellungen

DNS und Gateway ist für gewöhnlich Eure Router IP. Solltet Ihr keinen eigenen DNS Server erstellt haben, so könnt Ihr die Eures Routers eintragen. So, bevor wir später dann auch noch den PXE-Dienst einschalten werden, werden wir erst einmal das Grundgerüst des PXE-Servers schaffen.

Syslinux 6.04 herunterladen und Ordner und Konfigurationsdateien erstellen

Laden Sie sich die aktuellste Syslinux Version herunter.

https://www.kernel.org/pub/linux/utils/boot/syslinux/Testing/6.04/syslinux-6.04-pre1.zip

Entpacken Sie diese danach an einem beliebigen Ort auf Ihrem Rechner.

Bevor wir nun hingehen und die Dateien in den Gemeinsamen Ordner kopieren, ladet mein TFTP Root Paket herunter und entpackt dieses in euren gemeinsamen Ordner, den Ihr ganz am Anfang erstellt hattet. Der gemeinsame Ordner ist zugleich auch Euer TFTP Root – nicht vergessen.

Ich gebe euch ein ansehnliches Menü für jeden Eintrag! Natürlich sind dort keine Einträge vorhanden um Windows oder Linux Systeme zu starten. Die Datei würde einfach zu groß um das hier im Artikel halbwegs ansehnlich zu demonstrieren. Es geht schlichtweg erst einmal darum, dass Sie das Ganze starten könnten! Wenn dann alles funktioniert, können Sie diese Dateien nach Ihrem Belieben editieren!

TFTP Root

TFTP Root Verzeichnisse
TFTP Root Verzeichnisse

Jetzt wird es etwas kniffelig! Jetzt muss Euer extrahiertes Syslinux herhalten. 🙂

Kopiert nun folgende Dateien ALLE in den PC-BIOS Ordner:

Syslinux6.04/bios/com32/chain/chain.c32
Syslinux6.04/bios/com32/cmenu/libmenu/libmenu.c32
Syslinux6.04/bios/com32/gpllib/libgpl.c32
Syslinux6.04/bios/com32/hdt/hdt.c32
Syslinux6.04/bios/com32/lib/libcom32.c32
Syslinux6.04/bios/com32/libutil/libutil.c32
Syslinux6.04/bios/com32/menu/menu.c32
Syslinux6.04/bios/com32/menu/vesamenu.c32
Syslinux6.04/bios/com32/modules/ifcpu64.c32
Syslinux6.04/bios/com32/modules/kbdmap.c32
Syslinux6.04/bios/com32/modules/linux.c32
Syslinux6.04/bios/com32/modules/poweroff.c32
Syslinux6.04/bios/com32/modules/reboot.c32

Des Weiteren werden wir nun noch folgende Dateien direkt in das TFTP Root Verzeichnis kopieren:

Syslinux6.04/bios/memdisk/memdisk

BIOS Bootloader!

Syslinux6.04/bios/core/pxelinux.0
Syslinux6.04/bios/com32/elflink/ldlinux/ldlinux.c32

Anpassen der iPXE Konfiguration

Suchen Sie nun folgende Dinge in der pxeEFI32.ipxe.cfg und  pxeEFI64.ipxe.cfg:

set nfs-server SERVER_IP
set nfs-root /YOUR_PATH/

Tragen Sie bei nfs-server die Synology-DS IP ein. Bei nfs-root kommt der komplette Mount-Pfad hin.

In dem von mir veröffentlichten Beispiel wäre der Pfad: /volume1/PXE-Umgebung/

Falls Sie bereits einen HTTP Server eingerichtet haben, der ebenso ins TFTP Root Verzeichnis zeigt, dann tragen Sie bei

set http-server SERVER_IP

die IP ein.

Wichtige Anmerkung zum Ändern der Hintergrundbilder

Die Hintergrundbilder könnt Ihr natürlich gegen Eure austauschen.

BIOS Modus Hintergrundbild:

Hier ist darauf zu achten, dass im BIOS Modus nur Bilder verwendet werden, die in einer 640×480 Pixel Auflösung vorhanden sind und als JPG-Datei vorliegen.

EFI32 & EFI64 Modus Hintergrundbild:

Für den EFI32 & EFI64 Modus ist es ratsam, PNG Bilder in einer maximalen Auflösung von 1024×768 Pixel zu verwenden. Halten Sie sich unbedingt an das 4:3 Format! Außerdem darf die Farbtiefe nicht mehr als 24 BPP (Bits Per Pixel) betragen. In solchen Fällen bleibt der Hintergrund nämlich schwarz! Wenn Sie nicht wissen, wie Sie die Farbtiefe reduzieren können; hier ein In­si­der­tipp:

Öffnen Sie das Bild einfach mit mspaint und lassen es erneut speichern. Et voila. Schon passt’s.

Verwenden Sie keine Bilder, die kein richtiges 4:3 Format darstellen.
Das führt unter Umständen zu sehr extremen Grafik- und Menüfehlern.

Wichtige Anmerkung zum iPXE EFI32 & EFI64 Modus

Das iPXE EFI Menü funktioniert prinzipiell. Leider gibt es noch so einige Einschränkungen im Vergleich zu dem alten BIOS/Legacy Modus.

Memdisk ist zum Beispiel ein reines BIOS Tool. Dieses funktioniert im iPXE EFI Modus natürlich nicht und noch viele weitere Funktionen gehen auch nicht mehr. In einer UEFI Umgebung müssen Sie dann das Programm wimboot verwenden oder von da aus einfach den Windows-Boot-Manager aufrufen, um WIM-Dateien oder ähnlich laden zu können. ISO-Dateien könnten Sie damit aber nicht laden!

So sollte das dann nachher im BIOS Legacy Modus aussehen (Nur ein Beispiel, damit es motivierend bleibt):

PXELinux Legacy Menü
PXELinux Legacy Menü

Hier das gleiche nochmal für den UEFI Modus:

iPXE UEFI Menü

PXE Dienst aktivieren

Melden Sie sich erneut bei Ihrer Synology an und gehen Sie wieder in die Systemsteuerung, dann auf DHCP Server und nun im Reiter PXE aktivieren Sie den PXE Dienst. Wählen Sie außerdem bei Bootloader die Datei: pxelinux.0

DHCP Server (Dnsmasq) via SSH-Verbindung editieren um die Multi-Arch Erkennung zu aktivieren

Kommen wir nun zu einem der wichtigsten Schritte überhaupt.

Damit Sie die nötigen Änderungen vornehmen können, muss der SSH Dienst auf der Synology eingeschaltet sein unter:

Systemsteuerung => Terminal => SSH Dienst aktivieren und Sie müssen ein fähiges SSH Programm besitzen.

Unter Windows 10 können Sie auch einfach die PowerShell dafür verwenden und geben dort folgendes ein:

PS C:\> ssh user@192.168.178.2 -p 22

Damit starten Sie auch eine SSH Verbindung über die PowerShell.

User ist gegen ihren Adminnutzernamen zu tauschen, ebenso die IP. Das -p 22 können Sie auch weglassen, wenn Sie den Standardport verwenden! Wer nicht den Standardport verwendet, muss den Port ebenso abändern.

Alternativ können Sie sich auch einfach Putty aus dem Internet herunter laden.

Melden Sie sich mit Putty über SSH auf Ihrer Synology an.

Der zu verwendende Benutzername ist admin und nicht root. Sie können sich nämlich nicht direkt als root Nutzer einloggen! Über sudo -i könnten Sie dann nachher wechseln. Müssen Sie aber nicht!

Wenn Ihr eingeloggt seid, dann tippt folgendes ein:

sudo vi /etc/dhcpd/dhcpd-pxe.conf

Sie werden nun erneut nach dem Passwort gefragt! Nach dem eingeben erscheint der Inhalt der Datei!

Es sollten dort 2 Zeilen existieren. Diese löschen wir erst einmal.

Tippen Sie dafür folgendes ein:
:0,2d und mit ENTER bestätigen. Danach ist die Datei leer!

Der unten stehende Code muss in diese Datei eingefügt werden.

log-dhcp

# PXEClient Codes
dhcp-vendorclass=x86-BIOS,PXEClient:Arch:00000 # BIOS/Legacy Modus
dhcp-vendorclass=x86-UEFI32,PXEClient:Arch:00006 # x86 32-Bit EFI
dhcp-vendorclass=x86-UEFI,PXEClient:Arch:00007 # x86_64 64-Bit EFI
dhcp-vendorclass=x86-UEFI64,PXEClient:Arch:00009 # x86_64 64-Bit EFI veraltet!
dhcp-vendorclass=ARM-UEFI32,PXEClient:Arch:00010 # ARM 32-Bit EFI
dhcp-vendorclass=ARM-UEFI64,PXEClient:Arch:00011 # ARM 64-Bit EFI

# In der Standardkonfiguration wird PXELinux für BIOS/Legacy Clients verteilt!
# Für UEFI & UEFI64 Clients wird die iPXE Firmware verwendet!
# Sie können auch alles über iPXE laufen lassen, müssen aber stets darauf achten,
# dass immer nur ein Eintrag pro Modus aktiv ist!
# Durch das setzen der Raute vor den Zeilen können Sie die Zeilen deaktivieren.

# PXE Boot Abschnitt

# Beispiel Eintrag und Erklärung
# Boot-Tag, Boot-Dateiname, Server Name (DNS), Server IP Addresse
# dhcp-boot=tag:x86-BIOS,pxelinux.0,0.0.0.0,0.0.0.0
# Boot-Tag, DHCP-Option 209, Pfad zur Syslinux-Konfigurationsdatei
# dhcp-option-force=tag:x86-BIOS,209,pxelinux.cfg/default_BIOS

# BIOS/Legacy Modus
# PXELinux / Syslinux
dhcp-boot=tag:x86-BIOS,pxelinux.0,0.0.0.0,0.0.0.0
dhcp-option-force=tag:x86-BIOS,209,pxelinux.cfg/default_BIOS

# x86 32-Bit EFI Windows-Boot-Manager Eintrag
# dhcp-boot=tag:x86-UEFI32,bootia32.efi,0.0.0.0,0.0.0.0

# x86_64 64-Bit EFI Windows-Boot-Manager Eintrag
# Standard für die meisten UEFI Rechner
# dhcp-boot=tag:x86-UEFI,bootx64.efi,0.0.0.0,0.0.0.0

# x86_64 64-Bit EFI Veraltet! Windows-Boot-Manager Eintrag
# dhcp-boot=tag:x86-UEFI64,bootx64.efi,0.0.0.0,0.0.0.0

# iPXE Abschnitt
# Alle aktivierten Einträge verwenden die iPXE Firmware

dhcp-match=set:iPXE,175 # iPXE sends a 175 option.

# Die erste Zeile ist stets die Firmware!
# Die zweite Zeile ist der eigentliche Bootloader!

# BIOS/Legacy Modus
# dhcp-boot=tag:!iPXE,tag:x86-BIOS,undionly.kpxe,0.0.0.0,0.0.0.0
# dhcp-boot=tag:x86-BIOS,tag:iPXE,pxelinux.kpxe,0.0.0.0,0.0.0.0

# x86 32-Bit EFI
dhcp-boot=tag:!iPXE,tag:x86-UEFI32,iPXE32.efi,0.0.0.0,0.0.0.0
dhcp-boot=tag:x86-UEFI32,tag:iPXE,pxeEFI32.ipxe,0.0.0.0,0.0.0.0

# x86_64 64-Bit EFI
# Standard für die meisten UEFI Rechner
dhcp-boot=tag:!iPXE,tag:x86-UEFI,iPXE64.efi,0.0.0.0,0.0.0.0
dhcp-boot=tag:x86-UEFI,tag:iPXE,pxeEFI64.ipxe,0.0.0.0,0.0.0.0

# x86_64 64-Bit EFI Veraltet! Manche VMs benötigen diesen Eintrag noch!
dhcp-boot=tag:!iPXE,tag:x86-UEFI64,iPXE64.efi,0.0.0.0,0.0.0.0
dhcp-boot=tag:x86-UEFI64,tag:iPXE,pxeEFI64.ipxe,0.0.0.0,0.0.0.0

# Diese erforderlichen Dateien liegen meinem Paket nicht bei!
# Diese müssen, wer diese benötigt, selbst erstellt/kompiliert werden!
# ARM 32-Bit EFI
# dhcp-boot=tag:!iPXE,tag:ARM-UEFI32,iPXE-ARM-32.efi,0.0.0.0,0.0.0.0
# dhcp-boot=tag:ARM-UEFI32,tag:iPXE,pxe-ARM-EFI32.ipxe,0.0.0.0,0.0.0.0

# ARM 64-Bit EFI
# dhcp-boot=tag:!iPXE,tag:ARM-UEFI64,iPXE-ARM-64.efi,0.0.0.0,0.0.0.0
# dhcp-boot=tag:ARM-UEFI64,tag:iPXE,pxe-ARM-EFI64.ipxe,0.0.0.0,0.0.0.0

Kopieren Sie den ganzen Code in den Zwischenspeicher und widmen sich wieder Putty. Immer noch im Editor drücken Sie nun EINMAL die Einfügen Taste auf Ihrer Tastatur. Vergewissern Sie sich, dass der Cursor ganz oben links ist. Drücken Sie nun einmal die rechte Maustaste. Der ganze Code sollte nun in der Datei stehen. Als Nächstes müssen wir die Änderung noch speichern.

Drücken Sie dafür einmal die ESC Taste. Danach schreiben Sie folgendes:

:w und mit ENTER bestätigen. Die Meldung erscheint, dass der Inhalt gespeichert wurde!
:q und mit ENTER bestätigen. Sie verlassen den Editor!

DHCP Server neu starten

Damit unsere Änderungen auch angenommen werden, muss der DHCP Server einmal neu gestartet werden. Gehen Sie dafür im DSM auf Systemsteuerung und dann DHCP Server und klicken dort einmal auf DHCP deaktivieren und im Anschluss nochmals auf aktivieren.

Windows Server 2016+ DHCP/WDS Server Anpassungen (Optional)

Sollten Sie den Windows DHCP Server verwenden, dann schauen Sie sich dafür diese Anleitung an:

Windows Server 2016+ DHCP/WDS Server anpassen

Anmerkung bei Verwendung eines anderen DHCP Servers!

Wenn Sie den DHCP Server der Synology verwenden, können sie diesen Abschnitt komplett bis zum Punkt: „DHCP Server neu starten“, überspringen!

Dadurch das der DHCP Server der Synology die IP-Adressen vergibt, ist dieser auch der Entscheidungsträger welche Dateien und Konfigurationen übermittelt werden. Dadurch können Sie sowohl Legacy, als auch UEFI Systeme problemlos starten ohne vorher die Server umstellen zu müssen (Bootloader o.ä.).

DHCP Konfiguration Optimal
DHCP Konfiguration Optimal

Wenn Sie natürlich einen anderen DHCP Server verwenden (Einen des Routers beispielsweise), dann müssen Sie natürlich auch dafür sorge tragen, dass dem Client auch die notwendigen Konfigurationsdateien übermittelt werden! Bei den normalen Routern haben Sie aber das Problem, dass Sie so tief in das System gar nicht eintauchen können, um solche Modifikationen zu tätigen. Bei einer Fritzbox 7490 zum Beispiel, können Sie ja nicht einmal DHCP Optionen angeben…. Ähnlich düster sieht es da auch bei den Speedports der Telekom aus.

Selbst wenn Sie einen Router besitzen der die Angabe eines TFTP / PXE Servers zulässt haben Sie immer noch das Problem, dass Sie diesen nicht so einstellen könnten, dass er anhand der PXEClient Codes automatisch die verschiedenen Bootloader sendet. Ich habe bis jetzt noch bei KEINEM Router gesehen, dass ich je nach Client Architektur, 3 verschiedene Angaben machen konnte.

Genau das wäre aber äußerst sinnvoll. Denn dadurch würde man sich das Editieren in der Shell nämlich sparen können.

Das Resultat wäre also immer das:

DHCP Konfiguration Suboptimal
DHCP Konfiguration Suboptimal

Sie müssen sich also hier entscheiden: Welchen Bootloader will ich denn angeben?

Dieser ist statisch! Denn automatisch kann hier nicht ermittelt werden in welchem Modus der Client gebootet ist. Das hat dann zur Folge, dass Sie entweder im falschen Modus sind, wenn beispielsweise der Legacy Bootloader im Netz übermittelt wird, aber der Client im UEFI Modus gestartet ist oder beide Teile übereinstimmen (Bootloader und Clientsystem), aber die default Datei nicht gefunden werden kann, da eben der Konfigurationspart nicht beim DHCP Server eingestellt wurde.

Dann erhalten Sie die Meldung: „Cant locate configuration file„.

Außerdem müssten Sie hier auch immer manuell umschalten, welcher Bootloader denn gestartet werden soll. Dazu müssen Sie natürlich jedes Mal die Einstellungen beim TFTP Server ändern.

Von mir erfolgreich getestete andere DHCP/TFTP/PXE Server:

  • Tiny PXE Server
  • Windows DHCP Server 2016+

Diese können alle so eingestellt werden, dass Sie dasselbe erreichen können wie hier in der Anleitung beschrieben ist. Womöglich kann das auch noch bei anderen DHCP Servern eingestellt werden, ich habe aber logischerweise nicht alle auf der Welt erhältlichen ausprobiert! Klar! 😀

Der Test!

iPXE EFI32 & EFI64 Boot Test:
Der EFI64 Boot kann fehlschlagen, wenn Sie auf Ihrem System Secure Boot aktiviert haben. Die iPXE EFI Loader sind nicht signiert und somit verweigert der Secure Boot den Start dieser Dateien. Dieses Problem gibt es auch bei sehr vielen Linux-Live-Systemen. Um diesem Umstand entgegen zu wirken deaktivieren Sie einfach den Secure Boot.

Booten Sie nun Ihren Rechner über Netzwerk und überzeugen Sie sich davon, ob alles soweit geklappt hat. Es ist dabei egal, ob Sie das mit einem BIOS- oder UEFI Rechner machen. Es funktioniert beides durch unsere tatkräftige Arbeit. Wenn alles funktioniert gratuliere Ich ihnen, dass Sie solange durchgehalten haben!

Nun sollte der nächste Schritt, vor Veränderungen, ein kleines Backup sein, damit Sie durch Anpassungen nichts zerstören.

Erweitern Sie jetzt nach belieben Ihre Konfigurationsdateien.

Problembewältigung / langsame Datenübertragung

https://www.german-syslinux-blog.de/pxe-boot-langsame-datenuebertragung/

Schlusswort

Ich werde noch Anleitungen verfassen wie man WinPEs bootet, um Windows zu installieren oder Linux-Live-Systeme aus dieser Umgebung heraus zu starten.

So könnte das, wenn Sie das erweitert haben, aussehen:

Ein voll gepacktes Menü mit etlichen Submenüs:

PXELinux Legacy Menü

Den Windows-Boot-Manager aus Syslinux heraus starten:

PXELinux Legacy Menü

Das Besondere hierbei ist, dass aus dem PXElinux heraus der Windows-Boot-Manager gestartet werden kann. Somit ist es auch ein leichtes WIM oder VHDX Images zu laden. Im UEFI Modus können Sie dies mittels iPXE erreichen.

Windows-Boot-Manager Auswahlmenü
Windows-Boot-Manager Auswahlmenü

Linux-Live-Systeme aus dem Netzwerk starten:

PXELinux Legacy Menü

Backup&Recovery Software starten:

PXELinux Legacy Menü

Hardwaretools zur Fehlerüberprüfung wie beispielsweise Memtest86+:

PXELinux Legacy Menü

Ein einziges WinPE starten, um alle Windows Versionen installieren zu können:

WinPE Bootscreen mit Auswahlmenü

iPXE UEFI Umgebung:

iPXE UEFI Menü

Aufgrund der neuen veränderten Anleitung und der Verwendung von iPXE im UEFI Modus, habe ich alle alten Kommentare gelöscht, die sich auf die Syslinux EFI Versionen bezogen haben oder auf alte Konfigurationen, die so gar nicht mehr in der Anleitung stehen. Ich will die Leute nicht unnötig verwirren. Stehengeblieben sind also nur noch gültige Einträge, die auch einen Bezug zu der jetzigen Anleitung haben. Nicht traurig sein, sollte eines Ihrer Kommentare der radikalen Schere zum Opfer gefallen sein 🙂

Zum Anfang!

94 Antworten auf „PXElinux 6.04-pre1/iPXE 1.21.1+ – PXE&TFTP&DHCP Server einrichten“

  1. Hallo Stefan,

    erstmal vielen Dank für die ausführliche Anleitung! Leider ist es in unserem Netzwerk nicht möglich den DHCP der Synology zu benutzen. Jedoch kann ich für unseren Usecase zu 100% sagen, dass alle Clients immer UEFI64 sein werden. Daher müsste es ja eigentlich möglich sein immer fest auf den dafür richtigen Bootloader zu verweisen. Anscheinend mache ich hier jedoch was grundlegend falsch. Im DHCP habe ich die Network-Boot Option anstelle von „pxelinux.0“ nun auf „iPXE64.efi“ verwiesen – das klappt leider jedoch nicht. Testweise erstellte VM Legacy/Bios Clients booten problemlos über PXE, aber die UEFI Clients jedoch nicht. Wie müsste meine Konfiguration denn aussehen, wenn ich immer hardcoded den UEFI64-Bootloader haben will?
    Wäre über jede Hilfe dankbar!
    Beste Grüße
    Christian

  2. Hallo Stefan,
    Danke für den Super Artikel.

    Was mir zum Teil unverständlich ist wo ich welche Menü abändere? (PXE Boot UEFI Boot…)
    Habe mehrmals versucht ESXi7 einzubinden über die DSM PXE Boot.
    Nur leider funkt das bei mir überhaupt nicht.

    Könntest du da eventuell kurz erklären wie ich esxi7 hier einbinden könnte???

    Herzlichen Dank.

    LG
    Walter

    1. iPXE:
      /pxeEFI64.ipxe.menu = UEFI Menü
      /pxelinux.kpxe.menu = BIOS Menü

      Syslinux:
      /pxelinux.cfg/default_BIOS = BIOS Menü

      Deine virtuelle Maschine muss natürlich auf Netzwerkboot eingestellt/eingerichtet sein. Die Synology NAS muss ebenso von der virtuellen Maschine über das Netz erreichbar sein.

      1. Die virt. Test VM ist erreichbar bzw. alles im selben Netz.

        witzigerweise kann ich per Browser nicht auf die Files zugreifen. Ich hab alles genau nach deiner Anleitung gemacht. Wen ich über http://IP:7777 gehe bekomme ich 403 Error… Auch wenn ich direkt in der Webstation auf den Link klicke beim neu erstellen virtuellen Host kommt der gleiche Fehler.

        1. Dieses Verhalten ist durchaus normal, wenn keine index.htm oder index.php gefunden werden kann. Die brauchen wir ja auch nicht! Dann gibt es halt eine 403 Meldung, wenn diese Dateien fehlen. Den Ordnerinhalt sieht man im Normalfall auch nicht. Dein Webserver funktioniert also wie er soll! Der ist nicht kaputt!

          Du rufst die Dateien nicht selber über einen Browser auf, sondern startest einen Rechner über den Netzwerkboot von der Synology mit der iPXE Firmware. iPXE kann die Dateien aber auch von einem HTTP Server laden, was deutlich schneller geht.

          Aber so kommen wir nicht weiter. Ich weiß weder, was bis jetzt bei dir funktioniert, noch wo er hängen bleibt oder wie das überhaupt bei dir beim Versuch über Netzwerk zu starten aussieht. Du wirst da also schon deutlich ausführlicher beschreiben müssen.

  3. Ok ich dachte man kann trotzdem die files über http browsen.
    Hier die genauen Infos von meiner Config:

    pxeEFI32.ipxe.cfg:
    set nfs-server 192.168.1.108
    set nfs-root /volume1/PXE
    set http-server SERVER_IP
    set boot-url tftp://${next-server} –> soll ja weiterhin PXE booten over bios

    pxeEFI64.ipxe.cfg:
    set nfs-server 192.168.1.108
    set nfs-root /volume1/PXE
    http-server 192.168.1.108:7777
    set boot-url http://${http-server}/
    set boot-url tftp://${next-server}/

    default_BIOS:

    LABEL Esxi7
    MENU LABEL Esxi7-Install
    MENU INDENT 2
    KERNEL http://192.168.1.108:7777/images/Esxi7/EFI/BOOT/MBOOT.EFI
    APPEND http://192.168.1.108:7777/images/Esxi7/EFI/BOOT/BOOT.CFG
    TEXT HELP
    Esxi7 Install
    ENDTEXT

    Folder images liegt im Folder PXE/images…

    Wie kann ich dieses Menü jetzt in pxeEFI64.ipxe.menu einfügen??

    BOOT.CFG:
    bootstate=0
    title=Loading ESXi installer
    timeout=5
    prefix=images/Esxi7
    kernel=B.B00
    kernelopt=KS=nfs://192.168.1.108/images/Esxi7/ks/esx01/esx01.lab.local.cfg
    modules=JUMPSTRT.GZ — USEROPTS.GZ — FEATURES.GZ — K.B00 — UC_INTEL.B00 — UC_AMD.B00 — UC_HYGON.B00 — PROCFS.B00 — VMX.V00 — VIM.V00 — TPM.V00 — SB.V00 — S.V00 — ATLANTIC.V00 — BNXTNET.V00 — BNXTROCE.V00 — BRCMFCOE.V00 — ELXISCSI.V00 — ELXNET.V00 — I40EN.V00 — IAVMD.V00 — ICEN.V00 — IGBN.V00 — IONIC_EN.V00 — IRDMAN.V00 — ISER.V00 — IXGBEN.V00 — LPFC.V00 — LPNIC.V00 — LSI_MR3.V00 — LSI_MSGP.V00 — LSI_MSGP.V01 — LSI_MSGP.V02 — MTIP32XX.V00 — NE1000.V00 — NENIC.V00 — NFNIC.V00 — NHPSA.V00 — NMLX4_CO.V00 — NMLX4_EN.V00 — NMLX4_RD.V00 — NMLX5_CO.V00 — NMLX5_RD.V00 — NTG3.V00 — NVME_PCI.V00 — NVMERDMA.V00 — NVMETCP.V00 — NVMXNET3.V00 — NVMXNET3.V01 — PVSCSI.V00 — QCNIC.V00 — QEDENTV.V00 — QEDRNTV.V00 — QFLE3.V00 — QFLE3F.V00 — QFLE3I.V00 — QFLGE.V00 — RSTE.V00 — SFVMK.V00 — SMARTPQI.V00 — VMKATA.V00 — VMKFCOE.V00 — VMKUSB.V00 — VMW_AHCI.V00 — BMCAL.V00 — CRX.V00 — ELX_ESX_.V00 — BTLDR.V00 — ESX_DVFI.V00 — ESX_UI.V00 — ESXUPDT.V00 — TPMESXUP.V00 — WEASELIN.V00 — ESXIO_CO.V00 — LOADESX.V00 — LSUV2_HP.V00 — LSUV2_IN.V00 — LSUV2_LS.V00 — LSUV2_NV.V00 — LSUV2_OE.V00 — LSUV2_OE.V01 — LSUV2_OE.V02 — LSUV2_SM.V00 — NATIVE_M.V00 — QLNATIVE.V00 — TRX.V00 — VDFS.V00 — VMWARE_E.V00 — VSAN.V00 — VSANHEAL.V00 — VSANMGMT.V00 — TOOLS.T00 — XORG.V00 — GC.V00 — IMGDB.TGZ — BASEMISC.TGZ — RESVIBS.TGZ — IMGPAYLD.TGZ
    build=7.0.3-0.35.19482537
    updated=0

    Wenn ich den Server starte bekomme ich nicht einmal das iPXE Std. Menü wie auf deinem Tutorial ersichtlich.
    Ich habe auch das Tutorial durchgemacht –> Lightweight IP HTTP/FTP Support einrichten

    Der DSM DHCP TFTP Server Local zeigt auf die lpxelinux.0 im Root Folder PXE.

    Wenn ich den Client über PXE boote bekomme ich folgende Meldung zurück:
    >>Checking Media Presence….
    >>Media Present…..
    Downloading NBP file….
    NBP file downloaded successfully.

    Und da steht er dann…

    1. ah ok mir ist aufgefallen dass die dhcp-pxe.conf wieder leer war. Habe sie wieder lt deiner Anleitung eingetragen:

      log-dhcp

      # PXEClient Codes
      dhcp-vendorclass=x86-BIOS,PXEClient:Arch:00000 # BIOS/Legacy Modus
      dhcp-vendorclass=x86-UEFI32,PXEClient:Arch:00006 # x86 32-Bit EFI
      dhcp-vendorclass=x86-UEFI,PXEClient:Arch:00007 # x86_64 64-Bit EFI
      dhcp-vendorclass=x86-UEFI64,PXEClient:Arch:00009 # x86_64 64-Bit EFI veraltet!
      dhcp-vendorclass=ARM-UEFI32,PXEClient:Arch:00010 # ARM 32-Bit EFI
      dhcp-vendorclass=ARM-UEFI64,PXEClient:Arch:00011 # ARM 64-Bit EFI

      # In der Standardkonfiguration wird PXELinux für BIOS/Legacy Clients verteilt!
      # Für UEFI & UEFI64 Clients wird die iPXE Firmware verwendet!
      # Sie können auch alles über iPXE laufen lassen, müssen aber stets darauf achten,
      # dass immer nur ein Eintrag pro Modus aktiv ist!
      # Durch das setzen der Raute vor den Zeilen können Sie die Zeilen deaktivieren.

      # PXE Boot Abschnitt

      # Beispiel Eintrag und Erklärung
      # Boot-Tag, Boot-Dateiname, Server Name (DNS), Server IP Addresse
      # dhcp-boot=tag:x86-BIOS,lpxelinux.0,0.0.0.0,0.0.0.0
      # Boot-Tag, DHCP-Option 209, Pfad zur Syslinux-Konfigurationsdatei
      # dhcp-option-force=tag:x86-BIOS,209,pxelinux.cfg/default_BIOS

      # BIOS/Legacy Modus
      # PXELinux / Syslinux
      dhcp-boot=tag:x86-BIOS,lpxelinux.0,0.0.0.0,0.0.0.0
      dhcp-option-force=tag:x86-BIOS,209,pxelinux.cfg/default_BIOS

      # x86 32-Bit EFI Windows-Boot-Manager Eintrag
      # dhcp-boot=tag:x86-UEFI32,bootia32.efi,0.0.0.0,0.0.0.0

      # x86_64 64-Bit EFI Windows-Boot-Manager Eintrag
      # Standard für die meisten UEFI Rechner
      # dhcp-boot=tag:x86-UEFI,bootx64.efi,0.0.0.0,0.0.0.0

      # x86_64 64-Bit EFI Veraltet! Windows-Boot-Manager Eintrag
      # dhcp-boot=tag:x86-UEFI64,bootx64.efi,0.0.0.0,0.0.0.0

      # iPXE Abschnitt
      # Alle aktivierten Einträge verwenden die iPXE Firmware

      dhcp-match=set:iPXE,175 # iPXE sends a 175 option.

      # Die erste Zeile ist stets die Firmware!
      # Die zweite Zeile ist der eigentliche Bootloader!

      # BIOS/Legacy Modus
      # dhcp-boot=tag:!iPXE,tag:x86-BIOS,undionly.kpxe,0.0.0.0,0.0.0.0
      # dhcp-boot=tag:x86-BIOS,tag:iPXE,pxelinux.kpxe,0.0.0.0,0.0.0.0

      # x86 32-Bit EFI
      dhcp-boot=tag:!iPXE,tag:x86-UEFI32,iPXE32.efi,0.0.0.0,0.0.0.0
      dhcp-boot=tag:x86-UEFI32,tag:iPXE,pxeEFI32.ipxe,0.0.0.0,0.0.0.0

      # x86_64 64-Bit EFI
      # Standard für die meisten UEFI Rechner
      dhcp-boot=tag:!iPXE,tag:x86-UEFI,iPXE64.efi,0.0.0.0,0.0.0.0
      dhcp-boot=tag:x86-UEFI,tag:iPXE,pxeEFI64.ipxe,0.0.0.0,0.0.0.0

      # x86_64 64-Bit EFI Veraltet! Manche VMs benötigen diesen Eintrag noch!
      dhcp-boot=tag:!iPXE,tag:x86-UEFI64,iPXE64.efi,0.0.0.0,0.0.0.0
      dhcp-boot=tag:x86-UEFI64,tag:iPXE,pxeEFI64.ipxe,0.0.0.0,0.0.0.0

      # Diese erforderlichen Dateien liegen meinem Paket nicht bei!
      # Diese müssen, wer diese benötigt, selbst erstellt/kompiliert werden!
      # ARM 32-Bit EFI
      # dhcp-boot=tag:!iPXE,tag:ARM-UEFI32,iPXE-ARM-32.efi,0.0.0.0,0.0.0.0
      # dhcp-boot=tag:ARM-UEFI32,tag:iPXE,pxe-ARM-EFI32.ipxe,0.0.0.0,0.0.0.0

      # ARM 64-Bit EFI
      # dhcp-boot=tag:!iPXE,tag:ARM-UEFI64,iPXE-ARM-64.efi,0.0.0.0,0.0.0.0
      # dhcp-boot=tag:ARM-UEFI64,tag:iPXE,pxe-ARM-EFI64.ipxe,0.0.0.0,0.0.0.0

      Jetzt sehe ich den PXE over Ipv4.. siehe upload link Bild.
      Danach bleibt er bei >> Checking Media Presence …..

      1. Kurze Info für die Zukunft:

        Die Datei wird immer wieder überschrieben, wenn du über das DSM einen anderen Bootloader definierst. Das solltest du also in Zukunft vermeiden. Die Struktur in der veränderten Datei ist ja dafür da, alle Systeme zu unterstützen. Zukünftige Änderungen, nimmst du bitte in der Datei selbst vor und damit die Änderungen übernommen werden, einfach den DHCP Server neu starten.

    2. Kurz:

      Mach es bitte nochmal komplett neu. Ändere erst einmal nichts an den Menüs oder ähnliches und gehe auch keine zusätzlichen Anleitungen durch, bis das nicht mit der Hauptanleitung ordentlich funktioniert und er dort das iPXE Menü auch anzeigt. Das wäre jetzt das einfachste. Hattest du das denn nicht getestet gehabt, bevor du weitere Anleitungen durchgegangen bist?!?

      Egal, mach es nochmal neu.

      1. Hi Stefan,

        ohja ich habs probiert bevor ich irgendwas geändert habe… Mich hats auch gewundert warum der Bootloader nicht gleich beim ersten mal geladen hat.. sondern nach mehrmaligen reboot….

        ich habs gefunden… 😉

        Wie lange ich gesucht habe und dann ist die Lösung doch so einfach 🙁

        Das Problem ist mein Asus Router pfuscht mir mit dem DHCP rein..
        D.h. ich müsste die DHCP Config auf meinen Asus Router laufen lassen.
        Dazu müsste ich erst einmal Asuswrt-Merlin rauspielen damit ich die Config ändern kann und dort dann auf den DSM zeige und dann der Bootloader geladen wird.

        Danke für deine Hilfe und Sorry für die verwirrung

  4. Hallo,

    danke für das bereitstellen des kompilierten iPXE. Im Gegensatz zum Standard bringt es ja schon die Console mit. Es sieht so aus, als wäre es sinnvoll das ganze noch mal selbst zu kompilieren, da so https://github.com/ipxe/ipxe/pull/612 implementiert werden könnte für EFI-basierte Systeme.

    Könntest du deinen Source bereitstellen oder deine Änderungen hier noch mit erläutern? Das wäre extrem Hilfreich.

    Viele Grüße

  5. Hallo Stefan,

    meinen herzlichsten Dank und mein voller Respekt für deine Seiten und deine Mühen, die du dir mit deinen Anleitungen machst. Schließlich ist es schon ein gewisser Aufwand, bis man mal all die Code-Schnipsel, Texte und Grafiken in einem Tutorial vereint hat. Um dann anschließend das Ganze noch einmal testen lassen von jemanden, dem die Thematik ja nicht völlig klar ist. Man selbst weiß ja natürlich, wo genau was hin kommt. Echt super gemacht, gerne ein ‚WeiterSo !‘ 🙂

  6. Supper erklärt, danke!

    UEFI bekomme ich einfach nichts ans laufen. Der DELL Rechner beendet die Kommunikation.
    Es erscheint auch kein Menu. Aber das ist zu wenig Info, daher:
    Ich stecke fest.
    Gibt es ein Download oder so?
    Woher bekomme ich die config Dateien, wie zB pxeEFI64.ipxe.cfg oder pxeEFI32.ipxe.cfg

  7. Vielen Dank für die ausführliche Anleitung!

    Soweit klappt alles bei mir, aber leider nur über den 2.5Gbit Anschlüsse meines Rechners. Der 10Gbit (interner Anschluss) läuft leider nicht (Marvell Adapter).
    Meine Vermutung ist, dass der Treiber in der .efi Datei fehlt? Besitze leider nur gefährliches Halbwissen.

    Nach etwas Recherche habe ich versucht unter Berücksichtigung der Änderungen (https://www.german-syslinux-blog.de/kleine-experimente-mit-ipxe-durchgefuehrt/#comment-651) mir die Firmware selbst zu builden. Dort soll nun mittlerweile der Treiber für den Adapter dabei sein?
    Das builden klappt auch soweit ohne Fehler.

    Beim booten wird wie gewohnt über den DHCP Server die iPXE64.efi gezogen. Leider läd er im Anschluss nie die .ipxe Datei (laut logs). Ich vermute er „startet“ die Firmware überhaupt nicht, da er keine zweite DHCP Anfrage stellt?

    Der Knockout ist also bei:

    NBP file downloaded successfully.
    iPXE initialising devices…
    autoexec.ipex… Not found (…)

    Ab hier geht es dann nicht mehr weiter. Nach ca. 1min startet der PC durch/neu.

    1. Das klappt mit der Anleitung nur über IPv4. Versuchst du zufällig den PXE Boot über IPv6 mit dem 10G Adapter? Da ich die IPs nicht sehen kann muss ich da mal nachfragen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert