Syslinux 6.04 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, was Sie suchen.

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önnten man in solchen Umgebungen Backupsoftware starten, um den geliebten PC und dessen persönliche Dateien zu sichern oder diese wiederherzustellen.

Bevor wir anfangen, möchte ich Ihnen die untere Grafik näher bringen. Dadurch bekommen Sie einen Eindruck, wie genau unser Vorhaben funktioniert. Jeder einzelne Schritt wurde dort erklärt. Auch gibt es in diesen Szenarien die ein oder anderen Fallstricke, die es zu beachten gilt.

PXE Bootvorgang
PXE Bootvorgang

Diese Anleitung bezieht sich nur auf die Konfiguration des TFTP&DHCP&PXE Servers und das Aufspielen und Konfigurieren der Syslinux 6.04 Version auf diesem.

Schritt: Neuen gemeinsamen Ordner erstellen

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

Schritt: NFS Berechtigung erstellen für den gemeinsamen Ordner

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.

Bei Hostname und IP kommt die Netzwerk-ID Ihres Netzwerkes hinein. Wie genau nun Ihre Netzwerk-ID lautet, kann ich nicht sagen. Schauen Sie einfach selbst nach. Die Subnetz Präfix darf natürlich nicht fehlen! Hiermit ist das /24 gemeint und besagt, das der Netzanteil 24Bit 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 die IP natürlich, dann sollte das Ganze so aussehen:

Schritt: NFS Mount-Pfad merken!

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

In meinem Beispiel: /volume1/NAS412Plus

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 Ordner befindet. Lassen Sie sich nicht durch den Ordnernamen in meinem Beispiel irritieren, denn das ist mein TFTP-ROOT Ordner. Oben hatte ich erwähnt, das Sie diesen auch PXEServer oder ähnlich nennen könnten.

Schritt: 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. Die TFTP-Rechte sollten auf auf das Lesen beschränkt werden. Wir wollen ja auch nicht mehr. Lesen reicht vollkommen aus.

Schritt: 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 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. Und ja, nach der Umstellung bekommen Ihre Handy’s auch noch DHCP Leases, eben nur nicht mehr über den Router, sondern der Synology. Manche kamen auch mit der Ausrede, das ginge nicht, weil man Portweiterleitungen habe.Wenn sie den Clients/Servern eine feste IP zuweisen, dann können sie das trotzdem noch, auch wenn der DHCP Server nicht der Router ist.

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:

Meine Netzwerk-ID ist 192.168.1.0/24
Mein Router (Speedport) ist 192.168.1.4
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.5.

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 auf Bearbeiten.

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.

Schritt: 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 dem Gemeinsamen Ordner zujubeln erstellt folgende Verzeichnisse in Eurem gemeinsamen Ordner, den Ihr ganz am Anfang erstellt hattet. Der gemeinsame Ordner ist zugleich auch Euer TFTP-Root – nicht vergessen.

TFTP-ROOT

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

 

Kopiert nun folgende Dateien ALLE in den 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

 

Kopiert nun folgende Dateien ALLE in den EFI32 Ordner:

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

 

Kopiert nun folgende Dateien ALLE in den EFI64 Ordner:

Syslinux6.04/efi64/com32/chain/chain.c32
Syslinux6.04/efi64/com32/cmenu/libmenu/libmenu.c32
Syslinux6.04/efi64/com32/gpllib/libgpl.c32
Syslinux6.04/efi64/com32/hdt/hdt.c32
Syslinux6.04/efi64/com32/lib/libcom32.c32
Syslinux6.04/efi64/com32/libutil/libutil.c32
Syslinux6.04/efi64/com32/menu/menu.c32
Syslinux6.04/efi64/com32/menu/vesamenu.c32
Syslinux6.04/efi64/com32/modules/ifcpu64.c32
Syslinux6.04/efi64/com32/modules/linux.c32
Syslinux6.04/efi64/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

EFI32 Bootloader!

Syslinux6.04/efi32/efi/syslinux.efi (Diese Datei bitte nach dem Kopieren in das TFTP Root Verzeichnis wie folgt umbenennen: pxelinuxEFI32.efi)
Syslinux6.04/efi32/com32/elflink/ldlinux/ldlinux.e32

EFI64 Bootloader!

Syslinux6.04/efi64/efi/syslinux.efi (Diese Datei bitte nach dem Kopieren in das TFTP Root Verzeichnis wie folgt umbenennen: pxelinuxEFI64.efi)
Syslinux6.04/efi64/com32/elflink/ldlinux/ldlinux.e64

 

So, wenn dann der Kopier- und Suchmarathon vorbei ist, sollte das Ganze so aussehen:

Warum haben wir jetzt den ganzen Zirkus veranstaltet? Unser Ziel ist es, das BIOS, als auch UEFI Rechner unser Syslinux starten können und dies auch automatisch erkannt wird. Deshalb brauchen wir 3 verschiedene Bootloader!

Wir sind aber noch lange nicht fertig liebe Leute, denn noch würde nichts funktionieren. Es fehlen noch die default Einträge, eine Grafikkonfigurationsdatei und das allerwichtigste die DHCP Server Anpassung! Dazu später!

Laden Sie sich nun meine kleinen Konfigdateien herunter. Diese dienen nur als Beispiel und sollten von Ihnen dann später verändert oder erweitert werden.

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, das Sie das ganze starten könnten! Wenn dann alles funktioniert, können Sie diese Dateien nach Ihrem belieben editieren!

Entpacken Sie mein Archiv und kopieren Sie davon folgende Dateien in das pxelinux.cfg Verzeichnis:

default_BIOS
default_EFI32
default_EFI64
f1.txt
f2.txt
GFX_BIOS.conf
GFX_EFI32.conf
GFX_EFI64.conf

 

Außerdem kopieren sie folgende Dateien direkt in das TFTP-Root Verzeichnis:

german.kbd (Deutsches Tastaturlayout in der Syslinux Oberfläche!)
Installer640.jpg (Hintergrungbild Bios Modus)
Installer1024.png (Hintergrungbild EFI32 & EFI64 Modus)

 

Wichtige Anmerkung zum ändern der Hintergrundbilder:

Die Hintergrundbilder könnt Ihr natürlich gegen Eure austauschen. Aber, es 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.
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!

Verwenden Sie keine Bilder, die einer folgenden Auflösung vorlägen:
1024×760 oder ähnlich, denn das führt unter Umständen zu sehr extremen Grafik- und Menüfehlern.

Sollten Sie JPG Bilder nehmen, werden Sie feststellen, das Syslinux in Bezug auf dieses Format im EFI Modus einen unansehnlichen BUG hat. Das Bild wird dann mehrmals gekachelt.

Wichtige Anmerkung zum Syslinux EFI32 & EFI64 Modus:

Das Syslinux EFI Menü funktioniert prinzipiell. Leider gibt es noch so einige Einschränkungen im Vergleich zu dem alten BIOS Legacy Modus. Es ist in der aktuellsten Syslinux Version nicht möglich andere EFI Bootloader quer zu laden. Das heißt im Klartext, das sie aus einer EFI Syslinux Umgebung nicht den Windows Boot Manager starten könnten. Dieser Umstand ist mir bewusst gewesen, als ich diese Anleitung verfasst habe. Es sei aber dazu gesagt, das der Entwickler an diesem Umstand arbeitet. Es ist nur eine Frage der Zeit, bis dies dann auch im EFI Modus funktioniert. Das bedeutet, das Sie im Syslinux EFI Modus Windows nicht installieren können! Es gibt den Umweg, statt dem Syslinux Bootloader einfach den bootx64.efi Loader von Microsoft zu nehmen. Das funktioniert wunderbar, allerdings haben Sie dann kein schönes Menü mehr. Momentan ist das bei mir im EFI Modus auch mit dem EFI Bootloader von MS eingerichtet, eben damit ich Windows auch im EFI Modus installieren kann, aber dennoch ist das nur eine temporäre Lösung des Problems. Ich hoffe, dass der Entwickler bald in die Puschen kommt.

Zu dem Syslinux EFI kommen noch weitere Probleme auf Sie zu. Memdisk zum Beispiel ist ein reines BIOS Tool. Dieses funktioniert im EFI Modus nicht und noch viele weitere Funktionen gehen auch nicht mehr. Das soll Sie jetzt nicht traurig stimmen, denn denken Sie einfach daran, das Sie das Gerüst dafür schon geschaffen haben und später dann weniger Arbeit haben.

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

Schritt: 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

Schritt: DHCP via SSH 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 eingeschaltet sein unter Systemsteuerung => Terminal => SSH Dienst aktivieren und Sie müssen ein fähiges SSH Programm besitzen. Laden Sie sich einfach Putty aus dem Internet herunter.

Melden Sie sich mit Putty über SSH auf Ihrer Synology an. Der Benutzername ist admin und nicht root liebe Leute. Ich wollte es nur gesagt haben. Wenn Ihr eingeloggt seid, dann tippt folgendes ein:

cd /etc/dhcpd/
sudo vi 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. Allerdings müssen Sie die IP Adresse noch ändern. In meinem Beispiel steht überall 192.168.1.5. Dort gehört die NAS IP rein.

dhcp-boot=tag:pxe,pxelinux.0
dhcp-vendorclass=set:pxe,PXEClient

#Beispiel Eintrag und Erklärung
#Tag vergeben, DHCP-Option 60, Suche String (Match)
#dhcp-match=set:bios,60,PXEClient:Arch:00000
#Boot-Tag, Boot-Dateiname, Server Name (DNS), Server IP Addresse
#dhcp-boot=tag:bios,pxelinux.0,192.168.1.5,192.168.1.5
#Boot-Tag, DHCP-Option 209, Pfad zur Syslinux-Konfigurationsdatei
#dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS

dhcp-match=set:bios,60,PXEClient:Arch:00000
dhcp-boot=tag:bios,pxelinux.0,192.168.1.5,192.168.1.5
dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS

dhcp-match=set:efi32-1,60,PXEClient:Arch:00002
dhcp-boot=tag:efi32-1,pxelinuxEFI32.efi,192.168.1.5,192.168.1.5
dhcp-option-force=tag:efi32-1,209,pxelinux.cfg/default_EFI32

dhcp-match=set:efi32-2,60,PXEClient:Arch:00006
dhcp-boot=tag:efi32-2,pxelinuxEFI32.efi,192.168.1.5,192.168.1.5
dhcp-option-force=tag:efi32-2,209,pxelinux.cfg/default_EFI32

#Standard für UEFI Rechner
#Die meisten UEFI Rechner benutzen diesen Eintrag. Je nach Hersteller kann es
#jedoch sein, das statt 00007 mal 00009 verwendet wird.
dhcp-match=set:efi64-1,60,PXEClient:Arch:00007
dhcp-boot=tag:efi64-1,pxelinuxEFI64.efi,192.168.1.5,192.168.1.5
dhcp-option-force=tag:efi64-1,209,pxelinux.cfg/default_EFI64

dhcp-match=set:efi64-2,60,PXEClient:Arch:00008
dhcp-boot=tag:efi64-2,pxelinuxEFI64.efi,192.168.1.5,192.168.1.5
dhcp-option-force=tag:efi64-2,209,pxelinux.cfg/default_EFI64

dhcp-match=set:efi64-3,60,PXEClient:Arch:00009
dhcp-boot=tag:efi64-3,pxelinuxEFI64.efi,192.168.1.5,192.168.1.5
dhcp-option-force=tag:efi64-3,209,pxelinux.cfg/default_EFI64

Wenn Sie das getan haben, dann 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!

Anmerkung bei Verwendung eines anderen DHCP Servers!

Wenn sie den DHCP Server der Synology verwenden, können sie diesen Abschnitt komplett überspringen bis zum nächsten Schritt.

Dieser Schritt bezieht sich nur auf den DHCP Server der Synology. Es wird also vorausgesetzt, dass der DHCP Server der Synology die IP-Adressen vergibt und alle notwendigen Konfigurationsdateien.

Der entscheidende Punkt dabei ist:

Dadurch das der DHCP Server der Synology das macht, 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önnen, dass er anhand der PXEClient Codes automatisch die verschiedenen Bootloader sendet. Ich persönlich habe bis jetzt noch bei KEINEM Router gesehen, wo 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“.

Das ist natürlich logisch, da wir keine normale default Datei verwenden, sondern 3 verschiedene nutzen je nach erkanntem Client-System! Sie müssen dem Client eine Abweichung vom Standard aber auch mitteilen denn sonst kann das nicht funktionieren. Im Standardfall wird natürlich eine Datei namens default erwartet und nicht wie bei uns die default_BIOS oder default_EFI32 oder default_EFI64. Deshalb ist es auch so wichtig, dass sie einen DHCP Server verwenden, bei dem sie solche Modifikationen vornehmen können.

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

Diese können alle so eingestellt werden, dass sie das selbe erreichen können wie hier in der Anleitung beschrieben ist.

Der letzte Schritt: 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.

Schritt: Der Test!

EFI32 & EFI64 Boot Test:
Der EFI64 Boot kann fehlschlagen, wenn Sie auf Ihrem System Secure Boot aktiviert haben. Die Syslinux 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. Spätestens dann, wenn Sie sowohl Windows, als auch Linux auf Ihrem System betreiben möchten kämen Sie eh nicht daran vorbei Secure Boot zu deaktivieren.

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 Rechner oder UEFI Rechner machen. Es funktioniert beides durch unsere Tatkräftige Arbeit. Wenn alles funktioniert gratuliere Ich ihnen, das 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/

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

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

Ein voll gepacktes Menü mit etlichen Submenüs:

Den Windows Boot Manager aus Syslinux heraus starten:

Das besondere hierbei ist, das aus dem Syslinux heraus der Windows Boot Manager gestartet werden kann. Somit ist es auch ein leichtes WIM Images zu starten.

Linux Live Systeme aus dem Netzwerk starten:

Backup&Recovery Software starten:

Hardwaretools zum prüfen auf Fehler wie memtest:

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

Das Auswahlmenü lebe hoch:

Zum Anfang!

111 Antworten auf „Syslinux 6.04 PXE&TFTP&DHCP Server einrichten“

  1. Vielen Dank, für die schnelle Antwort, und Entschuldigung für die unqualifizierte Beschreibung. Ja es war wohl ein ziemliches durcheinander mit den Dateien.
    Nun habe ich nochmal komplett begonnen und direkt die vmlinuz und die initrd.lz Files aus dem jeweiligen (32/64) casper-Verzeichnis gestartet, wie du geschrieben hast. Im bios-Mode funktionieren beide Versionen. Wenn ich den Client auf efi umschalte, kommt noch das Menü,
    Loading …vmlinuz….ok
    Loading …initrd.lz…
    aber nach langer Zeit bootet der Client neu ohne desinfect zu starten

    1. Entschuldige die späte Antwort.

      Ich habe dies bei mir selbst getestet und die sind definitiv im UEFI Modus lauffähig (Die X64 Versionen!). Da er beim Laden der Datei allerdings vor Beendigung des Ladens neu startet, legt nahe, dass der TFTP-Datentransfer im UEFI Modus sehr langsam bei Dir sein muss, da scheinbar der Syslinux Timeout von 15 Minuten greift und er die Kiste dann einfach neu startet.

      War diese Zeitspanne erreicht als er den Client neu startete?

      Ich wüsste sonst auch nicht woran es liegt. Wenn der Datentransfer im UEFI Modus bei deinem Client generell sehr schleppend sein sollte empfehle ich Dir ein BIOS Update insofern alle anderen UEFI Clients bei Dir im Netzwerk damit keine Probleme haben sollten. Denn dann liegt das Problem definitiv beim Client selbst und daher wäre ein Update – falls verfügbar – schon sinnvoll.

    1. Kleiner Nachtrag: Ich erhalte die folgende Fehlermeldung:

      Failed to load libcom32.c32
      Failed to load COM32 file vesamenu.c32

      Beide Dateien sind im efi64 vorhanden.

      1. Hallo,

        das war mir auch schon aufgefallen und deshalb hatte ich die Anleitung auch nicht aktualisiert. Die pre3 funktioniert bei mir auch nicht.

        Da bekomme ich auch den Fehler mit der:
        Failed to load libcom32.c32
        Failed to load COM32 file vesamenu.c32

        Die Pre2 dagegen so halbwegs. Da sind allerdings auch ein paar Fehler drin, die nicht wirklich schön sind. Ich kann Ihnen daher nur raten die pre1 weiterhin zu nutzen. Die läuft jedenfalls normalerweise anstandslos. Ansonsten kann ich Ihnen bei dem von Ihnen genannten Fehler, der sich auf meine News bezieht nicht helfen. Wie in der News beschrieben löste sich das Problem in Luft auf, als Microsoft eine neue Hyper-V Version veröffentlichte.

        Da Sie ja scheinbar keine virtuelle Maschine benutzen und dies beim Booten von Ihrem Notebook angezeigt bekommen, weiß ich leider auch keinen Rat.

        Wenn Sie jedoch über PXE im UEFI Modus sowieso später einmal Windows Images verteilen wollen ist das nicht so dramatisch, denn dann gehen sie einfach die Windows ADK Anleitung durch, wodurch dann nachher sowieso der Windows-Boot-Manager verwendet wird anstatt der Syslinux Oberfläche. Sollten Sie zwingend Syslinux im UEFI Modus verwenden wollen, dann wenden Sie sich bitte an den Hersteller von Syslinux und schildern Ihr Problem.

  2. Hi, ich setze die PXE Umgebung schon lange und erfolgreich ein.
    Ich möchte eine PXE Thinclient Lösung (openthinclient.org) im gleichen LAN betreiben. Der Server von openthinclient kommt mit TFTP und PXE DHCP Proxy. Wie kann ich in der dhcpd-pxe.conf auf der Synology den openthinclient TFTP Server für bestimmte PCs angeben?

    1. Du kannst aus einer Syslinux Umgebung heraus mittels:

      https://wiki.syslinux.org/wiki/index.php?title=Pxechn.c32

      auf einen anderen TFTP Server verweisen.

      Beispiele werden dort auch gemacht. Die Datei Pxechn.c32 muss natürlich noch aus dem Syslinux Paket in den BIOS Ordner kopiert werden. Jedoch ist dies keine Lösung für UEFI-Clients, denn das Tool gibt es dort nicht. Bei dieser Variante kommst du immer in das Menü und könntest es zur Not noch abbrechen oder sonstige Diagnose Tools starten. Wenn du allerdings direkt bei diesen bestimmten Rechnern die Funktionalität des Syslinux Menüs nicht beibehalten willst, dann könnte man auch via MAC-Adressen bestimmte TFTP-Server für deine Clients in der Konfiguration festlegen. Da müsstest du allerdings selber mal recherchieren, da ich dies selbst noch nicht gemacht habe und mich auch erst schlau lesen müsste. Ich weiß nur das es geht. Habe das schon mehrmals gesehen.

      1. Vielen Dank für die schnelle Antwort, ich habe in der Zwischenzeit herausgefunden das ich das openthinclient Image auch Lokal auf den Rechnern installieren kann. Da es sich nur um 3 PCs handelt, werde ich es wahrscheinlich erstmal so lösen.

  3. Hallo Stefan,

    erstmal vielen Dank für die super Anleitung/Infos.

    In deiner Anleitung steht das die Einträge der dhcpd-pxe.conf auch auf einen Windows DHCP Server funktionieren.
    Stehe hier wohl ein wenig auf den Schlauch, wo diese einzutragen sind?
    Kann ich da ein Hilfe bekommen. Benutzen einen Server 2016.

  4. Guten Abend,

    Ich habe diesen PXE Server genau nach Anleitung bei mir nachgebaut.
    und bekomme nun bei einer Virtuellen Maschine aber auch Baremetal folgenden fehler “Unable to locate configuration file”

    Fehlerbild: https://prnt.sc/s2ynnx

    Könnt ihr da unterstützen?
    Vielen Dank im voraus

    1. Welcher DHCP Server wird denn eingesetzt? Wurde die dhcp-pxe.conf auch editiert?

      So wie das aussieht wurde entweder die Datei nicht editiert oder schlicht nicht gefunden. Eventuell haben Sie auch vergessen den DHCP Server neu zu starten.

      Haben Sie auch sichergestellt, dass wirklich nur ein DHCP Server in Ihrer Testumgebung läuft? Betreiben Sie nie mehrere DHCP Server im selben Subnetz! Das führt zu Chaos.

      Bedenken Sie, dass je nachdem welchen DHCP Server sie verwenden, ich nur bedingt helfen kann. Ich kenne leider auch nicht alle.

      1. Ich Benutze eine RS814 welche über 2 LAN Ports verfügt der LAN 1 ist für die Normale Kommunikation und der LAN 2 ist der PXE Port auf welchem auch der DHCP Läuft über einen Extra Switch es gibt also keine Berührungspunkte der beiden DHCP Server da diese auf Layer 1 & 2 Ebene Getrennt sind ich habe auch die DHCP Datei angepasst.

        1. Also laut dem Bild haben Sie versucht einen Rechner im Bios Modus über PXE zu booten.

          Versuchen Sie mal folgendes:

          Versuchen Sie mal den UEFI Netzwerkboot. Denn dann müsste er auch die Datei “pxelinuxEFI64.efi” verteilen. Macht er dies nicht – und verteilt immer noch die pxelinux.0 – , liegt ein Fehler in der Datei dhcpd-pxe.conf vor. Es reicht ein simples Zeichen das diese Datei ihren Dienst einstellt. Gehen Sie Zeile für Zeile durch, ob auch alles haargenau wie in der Anleitung beschrieben steht (Bis auf die IPs natürlich), aussieht. Meistens schleicht sich beim kopieren ein ungewolltes Zeichen ein, das dort nicht hingehört. Nach der Korrektur den Server neu starten. Dann sollte es gehen.

          1. Ich habe geschaut beim ersten mal hat die Datei den Inhalt nicht gespeichert jedoch wird jetzt der PXE Server per DHCP nicht mehr gefunden nach dem die Datei richtig ist.

        2. Welche IPs haben denn alle Server bei Dir? Ist die TFTP&PXE Server IP identisch mit der des DHCP Servers?

          Das sollte sie normalerweise sein, wenn der DHCP Server und der TFTP auf deiner RS814 läuft.

          Welche IP hast du in der dhcpd-pxe.conf eingetragen?

          Wie lautet die genaue Fehlermeldung?

          1. Der DHCP Server (RS814) Hat die IP 192.168.19.100 Denke das der TFTP Server die Selbe IP Hat
            in der dhcpd-pxe.conf habe ich die 192.168.19.100 Eingetragen.

            Fehlermeldung ist zu hoch gegriffen der Server bekommt scheinbar keine IP vom DHCP Server weshalb der PXE Boot übersprungen wird.

        3. Sie haben zwei LAN Ports an dem Gerät. Sie schrieben, sie haben diese voneinander getrennt und diese hängen auch nicht an denselben Switches. Welche IPs haben die einzelnen Ports? Für beide Ports laufen jeweils ein DHCP Server mit verschiedenen Subnetzen? Wie genau testen sie das? Sie stecken Ihren Testrechner an das Testswitch mit dem konfigurierten Synology LAN Port? Wie groß ist der IP Adresspool? Ist dieser bereits ausgereizt? Schauen Sie dafür in dem Unterpunkt DHCP Clients mal nach. Eventuell die Leases resetten. Ein zu kleiner Adresspool kann unter Umständen bei Testszenarien dazu führen, dass eben zu wenig Adressen vorhanden sind. Wäre jedenfalls eine Möglichkeit.

          Es wäre allerdings auch denkbar, das der DHCP Server gar nicht läuft. Können Sie den DHCP Server deaktivieren und aktivieren ohne das eine Fehlermeldung erscheint? Im schlimmsten Fall wäre es immer noch denkbar, dass sich immer noch ein Fehler in der dhcpd-pxe.conf befindet, der die Funktion des DHCP Servers stört.

          Um sicherzustellen, das dies kein Editierungsproblem ist, machen Sie einfach mal folgendes:

          Gehen Sie im DSM auf den Reiter PXE und deaktivieren Sie diesen Eintrag und im Anschluss aktivieren Sie diesen nochmals. Dadurch wird der Urzustand der Dateien wiederhergestellt. Prüfen Sie bitte im Anschluss dann die DHCP Funktionalität. Der Netzwerkboot klappt natürlich dann nicht richtig, aber darum geht es erst mal nicht. Bezieht der Client beim Netzwerkboot nun wieder eine IP? Wenn ja, war die Datei fehlerhaft.

          1. Guten Abend,

            Mein Netzwerk schaut wie folgt aus

            Firewall
            SW 1 = 192.168.23. 1 – 254 (DHCP über Firewall)
            SW 2 = 192.168.22. 1 – 254 (LAN Port 1 der RS DHCP über Firewall)
            SW 3 = 192.168.19.100 (PXE) an diesem Hängt die RS mit dem 2ten LAN Port auf welchem der DHCP läuft.

            Der PXE Server bedient dabei nur die Server über dem SW 3 so das die DHCP Server sich nicht gegenseitig stören können.

            Wenn ich DHCP in der Syno Aktiviere oder Deaktiviere geht es nicht da sich die Datei nicht in den Uhr zustand setzt 🙁 . wenn ich das alles Manuel richte und einen PXE Server von einer nicht mehr Existenten Zeit benutze geht es Zwar aber ich kann eine ISOs Booten weshalb ich gerne Ihren verwenden möchte. 😀

        4. Da haben Sie mich falsch verstanden. Das Deaktivieren und Aktivieren des DHCP Servers setzt auch nicht die Datei in den Urzustand zurück.

          Das machen Sie, indem Sie im DSM auf Systemsteuerung klicken => DHCP-Server => Reiter PXE und dort den haken bei PXE aktivieren entfernen => übernehmen klicken und wieder setzen und nochmals übernehmen. Dadurch wird die dhcpd-pxe.conf überschrieben und somit zurückgesetzt.

          Das Deaktivieren und Aktivieren des DHCP Servers hatte ich nur angeführt, weil dieses Vorhaben bei Problemen manchmal mit einer Fehlermeldung quittiert wird. Wir sind ja schließlich immer noch bei der Fehlersuche. Deshalb nannte ich auch mehrere Möglichkeiten das genaue Problem einzugrenzen oder woran es überhaupt hakt.

          Als kleine Randbemerkung möchte ich anmerken, dass Sie im UEFI Modus auch mit meiner Lösung keine ISO Images direkt laden können. Das geht nur im BIOS Modus mit beispielsweise dem memdisk Tool oder ähnlichen Programmen wie wimboot. Im UEFI Modus müssten Sie den Kernel und die Ramdisk aus dem ISO laden, damit dies auch in diesem Modus funktioniert. Dafür müssten Sie das entpackte ISO bereitstellen.

          1. Guten Abend,

            Sry mein Fehler, So nach dem ich die Datei zurückgesetzt habe wird der PXE Server gefunden jedoch die Config Datei nicht. Fehler: https://prnt.sc/s69ouj

            Die dhcpd-pxe schaute bei mir so aus

            dhcp-boot=tag:pxe,pxelinux.0
            dhcp-vendorclass=set:pxe,PXEClient

            #Beispiel Eintrag und Erklärung
            #Tag vergeben, DHCP-Option 60, Suche String (Match)
            #dhcp-match=set:bios,60,PXEClient:Arch:00000
            #Boot-Tag, Boot-Dateiname, Server Name (DNS), Server IP Addresse
            #dhcp-boot=tag:bios,pxelinux.0,192.168.19.100,192.168.19.100
            #Boot-Tag, DHCP-Option 209, Pfad zur Syslinux-Konfigurationsdatei
            #dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS

            dhcp-match=set:bios,60,PXEClient:Arch:00000
            dhcp-boot=tag:bios,pxelinux.0,192.168.19.100,192.168.19.100
            dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS

            dhcp-match=set:efi32-1,60,PXEClient:Arch:00002
            dhcp-boot=tag:efi32-1,pxelinuxEFI32.efi,192.168.19.100,192.168.19.100
            dhcp-option-force=tag:efi32-1,209,pxelinux.cfg/default_EFI32

            dhcp-match=set:efi32-2,60,PXEClient:Arch:00006
            dhcp-boot=tag:efi32-2,pxelinuxEFI32.efi,192.168.19.100,192.168.19.100
            dhcp-option-force=tag:efi32-2,209,pxelinux.cfg/default_EFI32

            #Standard für UEFI Rechner
            #Die meisten UEFI Rechner benutzen diesen Eintrag. Je nach Hersteller kann es
            #jedoch sein, das statt 00007 mal 00009 verwendet wird.
            dhcp-match=set:efi64-1,60,PXEClient:Arch:00007
            dhcp-boot=tag:efi64-1,pxelinuxEFI64.efi,192.168.19.100,192.168.19.100
            dhcp-option-force=tag:efi64-1,209,pxelinux.cfg/default_EFI64

            dhcp-match=set:efi64-2,60,PXEClient:Arch:00008
            dhcp-boot=tag:efi64-2,pxelinuxEFI64.efi,192.168.19.100,192.168.19.100
            dhcp-option-force=tag:efi64-2,209,pxelinux.cfg/default_EFI64

            dhcp-match=set:efi64-3,60,PXEClient:Arch:00009
            dhcp-boot=tag:efi64-3,pxelinuxEFI64.efi,192.168.19.100,192.168.19.100
            dhcp-option-force=tag:efi64-3,209,pxelinux.cfg/default_EFI64

        5. Ich kann nun nicht wirklich sagen woran es liegt. Die Datei sieht ok aus. Wenn die besagten Dateien also wirklich im pxelinux.cfg/ Ordner liegen und somit auch existieren, dann kann ich mir das nicht erklären. Der pxelinux.cfg Ordner liegt auch im TFTP Rootverzeichnis?

          Was mir natürlich auffiel ist, dass Sie IPXE verwenden. Ich muss ehrlich sagen, ich habe das mit dieser Opensource Firmware noch nie getestet. Benutzen Sie Virtualbox? VMWare?

          Habe sie keine Möglichkeit das mal ohne das IPXE zu testen? Vielleicht muss man für die IPXE Geschichte noch etwas modifizieren, wovon ich nichts weiß. Alle bei mir verwendeten Geräte nutzen kein IPXE. Erhalten Sie diese Meldung denn auch bei Rechnern, die kein IPXE verwenden? Das ist halt das einzige was mir auffiel und ich selbst noch nie getestet habe. Kannst das ja mal testen. Ansonsten tut es mir leid.

  5. Auch von mir zuerst einmal ein “Vielen Dank” für dieses Tutorial. Da steckt einiges an Arbeit drin.

    Mein Ziel ist eine PXE Umgebung um diverse Linux-Installer und ein Live-System bereitzustellen. Leider wird beim booten der Server anscheinend nicht gefunden und ich bekomme auch keine Fehlermeldung. PXE ist im BIOS (kein EFI) als erstes Bootdevice angegeben.

    Das DHCP in der Fritzbox habe ich deaktiviert und bekomme auch die IP von der Synology.

    $ sudo nmap –script broadcast-dhcp-discover
    Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-22 09:33 CEST
    Pre-scan script results:
    | broadcast-dhcp-discover:
    | Response 1 of 1:
    | IP Offered: 192.x.y.241
    | DHCP Message Type: DHCPOFFER
    | Server Identifier: 192.x.y.201
    | IP Address Lease Time: 2m00s
    | Renewal Time Value: 1m00s
    | Rebinding Time Value: 1m45s
    | Subnet Mask: 255.255.255.0
    | Broadcast Address: 192.x.y.255
    | Domain Name Server: 192.x.y.1
    |_ Router: 192.x.y.1
    WARNING: No targets were specified, so 0 hosts scanned.
    Nmap done: 0 IP addresses (0 hosts up) scanned in 4.17 seconds

    Auch der TFTP wird gefunden

    $ sudo nmap -sU -p 69 –script tftp-enum.nse loki
    Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-22 09:40 CEST
    Nmap scan report for loki (192.x.y.201) <— das ist die Synology auf LAN2
    Host is up (0.0032s latency).
    rDNS record for 192.x.y.201: loki.fritz.box

    PORT STATE SERVICE
    69/udp open tftp
    | tftp-enum:
    |_ pxelinux.0
    MAC Address: 00:11:32:8D:18:46 (Synology Incorporated)

    Sollte ich einen Fehler beim kopieren der Dateien gemacht haben, hätte ich irgendeine üble Fehlermeldung erwartet. Bekomme aber etwas in der Art "no bootable device found" (wenn ich außer PXE alles deaktiviere)

    1. Sie sehen also den PXE Bootvorgang mit dem Text “DHCP……./” und dort passiert nichts? Er findet den DHCP Server beim Netzwerkboot nicht? Oder er findet den DHCP, der Rechner bezieht auch eine IP, aber findet die pxelinux.0 nicht? Irgendeine Fehlermeldung müssten sie aber dann angezeigt bekommen. Sie sehen nur keine, wenn der DHCP Server nicht läuft oder aus irgendwelchen Gründen nicht erreichbar ist! Nach ein paar Sekunden des nicht antwortens des DHCP Servers wird der normale Bootvorgang fortgesetzt. Wenn Sie sonst alles deaktiviert haben, dann bekommen sie halt die Meldung “No bootable device found.”

      Prüfen Sie mal bitte die Funktionalität Ihres DHCP Servers. Vielleicht läuft der, vergibt aber keine Adressen mehr.

      1. Danke für die schnelle Antwort. Habe es geschafft and die Fehlermeldung beim Booten zu kommen (musste es per Video aufnehmen und den Frame erwischen). Die mit * markierten Felder waren im Video nicht lesbar.

        Start PXE over IPv4
        Station IP address is 192.x.y.50
        Server IP address is 192.x.y.201
        *** pxelinux.0
        *** pxelinuxEFI64.elf
        *** filesize is 0 bytes
        *** received error from TFTP server

        Also DHCP und PXE per se funktioniert, aber die Dateien werden anscheinend nicht sauber übermittelt. Die Dateien auf der Synology sind vorhanden und haben mehr wie 0 bytes.

        1. Er dürfte auch nicht die pxelinux.0 verteilen, wenn du im EFI Modus über Netzwerk bootest. Warum will er überhaupt eine pxelinuxEFI64.elf? Die heißt pxelinuxEFI64.efi! Natürlich ist die Dateigröße auch 0, da die nicht existiert. Hast du die umbenannt? Halte dich bitte vor jeglichen Änderungen erst mal an die Anleitung. Erst dann, wenn alles funktioniert daran Änderungen vornehmen.

          1. In der Anleitung unter “EFI64 Bootloader” zeigt doch die Ordnerstruktur mit den Dateien. Da liegt auch die pxelinuxEFI64.elf. Habe mich an die Anleitung gehalten, nur im Menu noch einen Eintrag für ein raw-image ergänzt wie es hier unter den Kommentaren vorgeschlagen ist.

            Mein Ordner hat den Inhalt vom Bild + die kbd, jpg, png.

            Ich werde die Anleitung wohl nochmal durchmachen müssen. Vielleicht ist beim kopieren der syslinux Dateien was schief gegangen.

          2. Sorry. Habe übersehen dass ich die Datei nicht umbenannt hatte (die 32er war korrekt). Nachdem ich den Fehler elf -> efi korrigiert habe sieht es besser aus, aber noch nicht gut.

            Downloading MDP file…
            Succeed to download MDP file.

            Und dann wirds wieder schwarz und er geht zurück ins BIOS

        2. Er geht nach dem Laden direkt ins Bios?

          Da kommt also keine Fehlermeldung mehr?

          Ich vermute mal stark, das der Secure Boot aktiviert ist, nach dem herunterladen die Fehlermeldung bezüglich eines nicht signiertem Bootloader kommt, aber der Fehler wieder zu schnell vorbei ist. Schalte den Secure Boot einfach mal aus. Sollte es das nicht sein bin ich ehrlich gesagt überfragt. Wenn er die Datei geladen hat und sonst keine Meldung mehr erscheint, müsste auch das Syslinux Menü zu sehen sein.

          1. Ok. Ich musste im BIOS PXE nochmal bei “Window 8 Features” aktivieren. Dadurch taucht bei meinen Boot-Optionen neben “PXE Ipv4” dann noch ein “Atheros Boot Agent” auf und dieser bootet dann in den PXE Loader.
            Die Anleitung funktioniert also und ich muss schauen wie ich meine verschiedenen BIOSe einstellen muss.
            Vielen Dank nochmal.

Schreibe einen Kommentar

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