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!

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

  1. Ich habe ein Problem mit dem DHCP-Server, wenn ich diesen einrichten möchte auf der Synology kommt die Meldung das sich die DHCP-Bereiche der Schnittstellen eth0 und ovs_eth0 überschneiden würden. Allerdings ist der DHCP meiner FritzBox bei …200 zuende und ich habe 201 bis 210 für den PXE-Boot DHCP verteilt.
    Auch wenn ich den FritzBox DHCP gänzlich abschalte kommt diese Meldung.

    1. Hallo Kay.

      Die Meldung bezieht sich nicht auf die IP Adressbereiche der Fritzbox. Diese IP Adressbereiche der Fritzbox sind der Synology DS nämlich völlig unbekannt und die DS hätte auch nicht die Möglichkeit das zu erkennen.

      Wenn du unter Systemsteuerung => DHCP Server nach guckst. Wie viele Einträge stehen dann in der Liste unter Netzwerkschnittstelle?

      Hast du ein VLAN eingerichtet?
      Was ist alles unter Systemsteuerung => Netzwerk => Netzwerkschnittstelle aktiv?

      Irgendwo hast du bereits einen Adressbereich festgelegt. Entweder findest du heraus, welcher Eintrag das ist, oder du probierst einfach einen Bereich zu finden, der noch nicht benutzt wird. Da 201 – 210 ja scheinbar nicht gehen, wie wäre es dann mit 211-220? Woran es nun genau liegt kannst nur du herausfinden, da du der einzige bist der sich das auch wirklich genau angucken kann.

    2. Ich hatte das Problem auch. Man muss zuerst unter “Netzwerk >> Schnitstelle >> Verwalten >> Open vSwitch Einstellungen” die Option “open vSwitch aktivieren” abwählen (Kreuzchen weg) – danach kann man die gewünschten Änderungen vornehmen und bei Bedarf die Option wieder aktivieren. DSM kopiert nämlich die IP-Einstellungen, und diese werden eben für open vSwitch bei Änderungen nicht mitakutalisiert, das geschieht nur beim Aus- und wieder Einschalten der Option. Hoffe, die Erklärung kommt nicht zu spät …

  2. Hallo Stefan,

    Danke für dein tolles Tutorial. Es war sehr hilfreich für meine Experimente.

    Jeder Vorschlag, wie der Synology Router RT2600ac so auf seinen DHCP-Server eingestellt werden kann, kann PXE-Anfragen verarbeiten.

    1. Das kommt darauf an, was du bei dem Router alles ändern darfst. Bei den meisten kann man nur das Range bestimmen mit DNS, Gateway und Subnetzmaske. Vielleicht noch reservierte IP Adressen für bestimmte Clients, aber dann hört es auch schon auf. Das was ich zu deinem Router gefunden habe, ist auch genau das, was ich schon beschrieben habe. Insofern da nicht noch irgendwelche „Manipulationen“ möglich sind, sehe ich schwarz.

      Hast du die Möglichkeit einen NEXT-Server (TFTP Server => Option 66) anzugeben? Wenn das dort nicht zu finden ist, geht das wohl nicht.

  3. Hi,

    Danke für dein tolles Tutorial. habe es heute mal nachgebaut.
    Ich wollte allerdings statt dem Synology DHCP einen Windows DHCP
    der bereits vorhanden ist, nutzen.

    Leider hänge ich da bei den Vendor-Class.

    dhcp-boot=tag:pxe,pxelinux.0
    dhcp-vendorclass=set:pxe,PXEClient
    dhcp-match=set:bios,60,PXEClient:Arch:00000
    dhcp-boot=tag:bios,pxelinux.0,192.168.1.5
    dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS
    dhcp-match=set:efi32,60,PXEClient:Arch:00006
    dhcp-boot=tag:efi32,pxelinuxEFI32.efi,192.168.1.5
    dhcp-option-force=tag:efi32,209,pxelinux.cfg/default_EFI32
    dhcp-match=set:efi64bc,60,PXEClient:Arch:00007
    dhcp-boot=tag:efi64bc,pxelinuxEFI64.efi,192.168.1.5
    dhcp-option-force=tag:efi64bc,209,pxelinux.cfg/default_EFI64
    dhcp-match=set:efi64,60,PXEClient:Arch:00009
    dhcp-boot=tag:efi64,pxelinuxEFI64.efi,192.168.1.5
    dhcp-option-force=tag:efi64,209,pxelinux.cfg/default_EFI64

    hast du das schon mal an einem Windows DHCP gemacht, wenn ja wäre klasse wenn du das weitergeben könntest
    Thx vorab.

      1. Hi Stefan,

        habe das selbe Problem wie Thorsten. Grundsätzlich habe ich den MS DHCP wie auch in dem Artikel beschrieben konfiguriert. Allerdings bleibt das Problem, dass das Konfigurationsfile (default_*) nicht gefunden wird.

        Ich habe nun mal probiert über eine Custom Scope Option “209” den Namen des Files mitzugeben. Allerdings bisher ohne Erfolg. Habe ebenfalls probiert mal die Option “210” noch dazu zu nehmen da ich vermutet hatte, dass der Client einfach an einer falschen Stelle nach dem Config File sucht.

        Hat vielleicht noch jemand eine Idee dazu oder konnte das mit nem MS DHCP zum laufen bringen?

        Gruß,
        Bene

        1. Ich habe deinen Kommentar komplett übersehen 🙂 Ups.

          Ich hatte nur mal privat damit herum gespielt. Live umgesetzt in einer Windows Server Umgebung habe ich das selbst noch nicht, bis auf die ein oder anderen Versuche im Zusammenspiel mit einem WDS und Syslinux (Das klappte damals). Das war aber zu einer Zeit, da war UEFI noch gar kein großes Thema. Und damals war das separieren der Konfigurationsdateien auch nicht nötig, da meistens nur eine vorhanden war. Da hat man dann einfach den default Eintrag erstellt und alles lief. Mir persönlich fehlt einfach die Erfahrung bei dem Windows DHCP, wie der nun genau mit optionalen DHCP Optionen umgeht. Das wird wahrscheinlich einfach nur ein simples Pfad Problem sein. Vermutlich!

          Soweit ich weiß, erstellt Windows für jede Architektur einen eigenen Ordner in dem TFTP/PXE ROOT Verzeichnis. Somit müsstest du da mindestens 2 Einträge finden:

          x86
          amd64

          und eventuell noch

          arm64
          ia64
          ia32

          Es kann natürlich sein, das er die Konfigurationsdatei in den jeweiligen Architektur Ordnern sucht. Also

          x86\pxelinux.cfg\default_BIOS
          x86\pxelinux.cfg\default_EFI32
          x86\pxelinux.cfg\default_EFI64
          x64\pxelinux.cfg\default_BIOS
          x64\pxelinux.cfg\default_EFI32
          x64\pxelinux.cfg\default_EFI64
          

          Das ist aber auch nur alles Spekulation, da ich das momentan nicht selber testen kann.

          Wie sieht die genaue TFTP/PXE ROOT Ordnerstruktur bei dir aus?
          Und wie hast du die DHCP Optionen 209 genau eingetragen? Was hast du dort als Pfad hinterlegt?

  4. Hallo,

    erstmal vielen Dank für das übersichtliche Tutorial. Ich habe die Schritte befolgt, allerdings zeigt mir mein client, nachdem dieser eine IP per DHCP erhalten hat, die Fehlermeldung “Cant find configuration file”. Hast du vielleicht eine Idee?

    Viele Grüße

    1. Hallo,

      dann wird Ihre dhcpd-pxe.conf entweder Fehler enthalten oder aber der Pfad zu den Konfigurationsdateien ist falsch.

      Möglichkeiten:

      1. IP ist falsch
      2. Pfad ist falsch.
      3. Konfigurationsdatei existiert schlicht nicht.

      Gruß

  5. Hallo Stefan,

    kannst du kurz beschreiben welche Files für den Windows Bootloader benötigt werden bzw. wie dieser auf dem TFTP einzurichten ist?
    Kämpfe noch etwas damit. Ich bekomme immer eine Fehlermeldung, dass das Boot\BCD File nicht gefunden wird obwohl es vorhanden ist.

    Gruß

    1. Here’s the part u need:

      EFI32 Bootloader!

      Syslinux6.04/efi32/efi/syslinux.efi (Copy the file to the TFTP ROOT directory and rename the file to: pxelinuxEFI32.efi)
      Syslinux6.04/efi32/com32/elflink/ldllinux/ldlinux.e32

      EFI64 Bootloader!

      Syslinux6.04/efi64/efi/syslinux.efi (Copy the file to the TFTP ROOT directory and rename the file to: pxelinuxEFI64.efi)
      Syslinux6.04/efi64/com32/elflink/ldllinux/ldlinux.e64
    1. Sorry man, please read the tutorial or translate it by yourself into the english language. Maybe through the google translater. All your questions will be answered.

      1. Thanks for replay.. finally after many attempt its worked now but only in legacy bios.
        in uefi (secure mode disable) hang on –

        Getting cached packed
        my ip address is xxx.xxx.xxx.xxx

        any help is appreciate.

        Thanks

        1. Do u get a real IP? Something like 192.168.0.1 or do u get 0.0.0.0?
          If u get 0.0.0.0, the DHCP Server has maybe an misconfiguration. Many things are possible.
          Or the path is wrong, IP is wrong, or something else.

          How looks your dhcp-pxe.conf?

          Do u have the error on other PCs too?
          If not, check if a new version of the firmware for the pc is available.

  6. Hallo Stefan,

    habe jetzt nach deiner Anleitung “Syslinux 6.04 PXE&TFTP&DHCP Server einrichten” alles so ausgeführt. Bin jetzt bei “Erweitern Sie jetzt nach belieben Ihre Konfigurationsdateien” angekommen. Hier bin ich jetzt etwas überfordert… mit Syslinux 4.06 mussten im Ordner “images”Unterordner erstellt werden in welche man iso-Images einfügte. In der default-Datei gabe es immer die Struktur: (Beispiel AOMEI WinPE.iso-Datei)
    LABEL aomei
    MENU LABEL aomei Backupper Win PE
    KERNEL memdisk
    APPEND iso raw
    INITRD images/aomei/ampe.iso

    die drei verschiedenen default-Dateien schauen ganz anders aus….sind nur in der System-Sektion Änderungen durchzuführen? Gibt da vielleicht noch eine Anleitung?

    Grüße Rainer

    1. Grundlegend sind die Angaben identisch wie du diese bereits auch schon in der alten Version hinterlegen musstest. Dich irritiert wahrscheinlich eher der Fakt, dass mein Beispiel eine Menüstruktur verwendet.

      Füge einfach unter:

      KBDMAP german.kbd

      Folgendes hinzu und ändere die Pfade zu deinem ISO ab. Dann hast du ein Beispiel.

      ##############################################################
      #Windows Section
      ##############################################################
      LABEL WindowsSysteme
      	MENU LABEL Windows Installation:
      	MENU DISABLE
      	
      	MENU BEGIN
      
      		MENU TITLE + Windows Installations Service
      		
      		LABEL Original
      		MENU LABEL Microsoft Windows PE Images:
      		MENU DISABLE
      					
      		LABEL WinPE50X32ISO	
      		MENU LABEL 1. WinPE 10.0 Build 1809 x32 Bit - MemDisk ISO
      		MENU INDENT 2		
              COM32 linux.c32 memdisk
      		APPEND iso raw
      		INITRD images/WinPE10.0/WinPE_x86.iso
      	TEXT HELP
      Es wird die Windows Vorinstallations Umgebung 10.0 im 
      32 Bit Modus geladen mit allen Netzwerktreibern.
      
      Die WinPE Versionen sind abwaertskompatibel. Es ist Ihnen moeglich 
      mit der WinPE 10.0 Version auch aeltere Windows Versionen zu installieren.
      
      Es wird automatisch das Netzwerkshare zu den Windows Images aufgebaut.
      	ENDTEXT	
      		
      		MENU SEPARATOR
      	
      		LABEL return_main
      
      		MENU LABEL - ^Zum Hauptmenu
      		MENU INDENT 1
      		MENU EXIT
      
      MENU END

      Wenn du einen weiteren Eintrag zu dem Hauptmenü “Win-PE Images” hinzufügen möchtest müsste der nächste Eintrag beispielsweise unter ENDTEXT erfolgen:

      		LABEL WinPE50X64ISO
      		MENU LABEL 2. WinPE 10.0 Build 1809 x64 Bit - MemDisk ISO
      		MENU INDENT 2
              COM32 linux.c32 memdisk
      		APPEND iso raw
      		INITRD images/WinPE10.0/WinPE_x64.iso
      	TEXT HELP
      Es wird die Windows Vorinstallations Umgebung 10.0 im
      64 Bit Modus geladen mit allen Netzwerktreibern.
      
      Die WinPE Versionen sind abwaertskompatibel. Es ist Ihnen moeglich 
      mit der WinPE 10.0 Version auch aeltere Windows Versionen zu installieren.
      
      Es wird automatisch das Netzwerkshare zu den Windows Images aufgebaut.
      	ENDTEXT	

      Wie gesagt ist das nur ein Beispiel meinerseits. Das kannst du natürlich machen wie du willst.

      Das sind jetzt auch mehr Dateien, da du auf neuen Systemen das Problem bekommen wirst, dass der alte BIOS Legacy Modus dort gar nicht mehr unterstützt wird. In Zukunft wird es nämlich so sein, dass es nur noch UEFI geben wird. Deshalb hast du auch mehrere Dateien für deine Einträge. Für jeden Modus eine.

      1. Danke für die ausführlichen Infos.

        Ich hatte jetzt erstmal nix verändert (hab also deine Beispiel-Datei hergenommen) und wollte einfach nur mal schauen ob nach dem Booten das Menu erscheint. Hat nicht funktioniert…

        Der Rechner hat auf den DHCP-Server gewartet … der hat aber offensichtlich nicht richtig funktionert,,,nach dem Timeout hat er dann von der Festplatte gebootet.

        Ich bin dann nochmal auf der DS ins DMS zu “DHCP-Server”…da war er zwar aktiviert ….als ich dann auf “Bearbeiten” klickte kam “der Dienst kann nicht geladen werden”. Ich dachte mit wahrscheinlich habe ich mit der Putty-Aktion von zuvor den DHCP-Server zerschossen. Hab daraufhin die DS auf RESET gesetzt.

        Meine Frage: Ich hab im Netzwerk ausschließlich BIOS-Rechner. Kann man nicht einfach wie bei der alten Version die Daten in den PXE-Ordner kopieren , die Unterordner in “images” anlegen und die default-Datei konfigurieren?

        Ich meine wenn es funktioniert dann hat sich der ganze Aufwand ja gelohnt …aber da ich ja eh nur den BIOS-Boot brauche könnte man sich doch viele Arbeitsschritte sparen (z.B. die Putty-Aktion und all die Daten kopieren)…

  7. Ich hab jetzt (analog zur alten Version) aus dem Unterordner “bios” (von “syslinux6.04”) folgende Daten in den PXE Ordner auf der DS kopiert:
    chain.c32
    mboot.c32
    memdisk
    menu.c32
    pxelinux.0

    Dann habe ich wieder die beiden Ordner “images” und “pxelinux.cfg” erstellt. In “images” ist ein Unterordner “aomei” und in diesem liegt die ISO-Datei (“ampe.iso). Im Ordner “pxelinux.cfg” liegt folgende default-datei:

    default menu.c32

    prompt 0

    timeout 100

    ONTIMEOUT chainlocal

    MENU TITLE PXE Boot Menu DS231+

    LABEL chainlocal
    MENU LABEL Booten von lokaler Festplatte
    KERNEL chain.c32
    APPEND hd0

    LABEL aomei
    MENU LABEL aomei Backupper Win PE
    KERNEL memdisk
    APPEND iso raw
    INITRD images/aomei/ampe.iso

    Kann das so funktionieren?

    Grüße Rainer

    1. Theoretisch ja, in deinem Fall aber nicht. Denn da fehlen noch ein paar Dateien.

      Im TFTP Root Verzeichnis müssen alle Dateien liegen, die auch laut der Anleitung in den BIOS Ordner müssten.

      Du bräuchtest also mindestens folgende Dateien im TFTP Root Verzeichnis:

      chain.c32
      mboot.c32
      memdisk
      pxelinux.0
      libmenu.c32 
      libgpl.c32 
      libcom32.c32 
      libutil.c32 
      menu.c32
      

      Zudem müsstest du die default_BIOS nach default umbenennen. Dann funktioniert das Ganze auch bei Dir, aber wie gesagt auch nur im BIOS Modus. Wenn Dir das reicht ist das ja in Ordnung. Als Starter im DSM bei PXE die pxelinux.0 auswählen und dann müsste das funktionieren. Vorausgesetzt das dein DHCP Problem beseitigt wurde. Denn wenn der nicht richtig läuft, kann es ja auch nicht funktionieren.

      Was ich jetzt persönlich nicht mit Sicherheit weiß ist, ob man auch Menü-Standardwerte mitgeben müsste. Ich weiß nämlich nicht, ob Syslinux auch ohne diese Angaben funktioniert. Das habe ich nie getestet, da ich diese immer mit angegeben habe. Selbst das Syslinux Wiki führt das in Ihrer Beispieldatei mit auf.

      Beispielsweise so etwas hier in der default Datei:

      # Menu Configuration
        MENU WIDTH 80
        MENU MARGIN 10
        MENU PASSWORDMARGIN 3
        MENU ROWS 12
        MENU TABMSGROW 18
        MENU CMDLINEROW 18
        MENU ENDROW 24
        MENU PASSWORDROW 11
        MENU TIMEOUTROW 20
        MENU TITLE Syslinux 6.04
  8. Hallo Stefan,

    muss die “Syslinux6.04/bios/com32/elflink/ldllinux/ldlinux.c32”
    nicht auch noch in den TFTP Root Ordner?

    Damit es funktioniert brauch ich also deine default_BIOS (die dann in default umbenannt werden muss)? Es geht also nicht mit der alten default-Datei (so wie ich sie oben gepostet habe)? Weil in deiner default_BIOS ja Bezüge hergestellt werden zu Dateien, die ja gar nicht in meinem TFTP-root Ordner sind…z.B. der Eintrag “DEFAULT vesamenu.c32″….die Datei vesamenu.c32 hab ich ja gar nicht in den PXE-Ordner kopiert….

    1. Ja, die ldlinux.c32 muss auch noch da hin. Nein, du brauchst nicht meine default_BIOS Datei. Ich hatte mich in meinen Kommentar auf das von Dir gepostete Beispiel bezogen. Das kannst du verwenden, wenn die Dateien alle im ROOT Verzeichnis liegen.

Schreibe einen Kommentar

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