Schlussfolgerungen

Schlussfolgerungen

PXE (Vorabführungsumgebung) ist eine Kunden-Server. Die Kernidee ist recht einfach: In einer sehr frühen Phase erhält ein Client eine IP -Adresse von einem DHCP -Server und lädt die Dateien herunter TFTP Protokoll (triviale FTP). In diesem Tutorial werden wir das verwenden dnsmasq Anwendung: Es kann als primärer DHCP -Server oder in verwendet werden Proxy DHCP Modus, wenn ein weiterer DHCP -Server im Netzwerk vorhanden ist. Es bietet auch den TFTP -Dienst zur Übertragung von Dateien.

In diesem Tutorial lernen Sie:

  • So konfigurieren Sie Pxelinux und erstellen Sie ein Boot -Menü
  • So extrahieren Sie Dateien aus einer ISO und richten Sie die entsprechende Dateistruktur ein
  • So konfigurieren Sie DNSMASQ als Standard- oder Proxy -DHCP -Server
  • So konfigurieren Sie den TFTP -Server, der in DNSMASQ eingebettet ist
  • So lassen Sie den Datenverkehr über die erforderlichen Ports mit UFW zu
Raspberry Pi als PXE -Startserver

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Raspberry Pi OS (zuvor als Raspbian bekannt)
Software DNSMASQ, PXELINUX, SYSLINUX-EFI
Andere Wurzelberechtigungen
Konventionen # - Erfordert, dass gegebene Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden können sudo Befehl
US

Pakete installieren

Das erste, was wir tun müssen, ist, einige wichtige Pakete zu installieren:

  • dnsmasq
  • pxelinux
  • syslinux-efi

DNSMASQ liefert sowohl den DHCP als auch die TFTP Dienstleistungen; pxelinux ist ein Bootloadermitglied der syslinux Familie und ist speziell für die PXE -Umgebung entwickelt; Das Syslinux-efi_-Paket enthält Bibliotheken, die zur Unterstützung erforderlich sind Efi Kunden. Um die Pakete auf dem Raspberry Pi -Betriebssystem zu installieren, können wir ausführen:

$ sudo APT-Get Update && sudo apt-Get Installieren Sie DNSMASQ Pxelinux Syslinux-efi 

Dateistruktur

Sobald die benötigten Pakete installiert sind, können wir die Dateistruktur fortsetzen und einrichten. Für dieses Tutorial wird die Wurzel des gesamten Setups das sein /mnt/data/netboot Verzeichnis, das auch als das verwendet wird TFTP root (in der DNSMASQ -Konfigurationsdatei definiert); Alle benötigten Dateien werden darin gespeichert.

Syslinux -Dateien und Module

Wir möchten in der Lage sein, den Kofferraum der Kunden zu unterstützen BIOS Und Efi Modus, daher müssen wir als erstes zwei Verzeichnisse erstellen, die nach diesen Architekturen benannt sind /mnt/data/netboot:

$ mkdir/mnt/data/netboot/bios, efi64 


Jede Architektur benötigt einige spezifische Syslinux -Bibliotheken, um zu arbeiten. Wir kopieren sie in den entsprechenden Verzeichnissen:

$ cp \/usr/lib/syslinux/modules/bios/ldlinux, vesamenu, libcom32, libutil.C32 \/usr/lib/pxelinux/pxelinux.0 \/mnt/data/netboot/bios $ cp \/usr/lib/syslinux/modules/efi64/ldlinux.e64 \/usr/lib/syslinux/modules/efi64/vesamenu, libcom32, libutil.C32 \/usr/lib/syslinux.EFI/EFI64/SYSLINUX.efi \/mnt/data/netboot/efi64 

Verteilungsdateien

Zu diesem Zeitpunkt müssen wir das Verzeichnis erstellen, in dem die Verteilungen, die wir in unserem Startmenü zur Verfügung stellen möchten. Nennen wir es Stiefel:

$ mkdir/mnt/data/netboot/boot 

In diesem Tutorial werden wir als Beispiel mit einem Debian -Netinstall -Bild zusammenarbeiten. Für den Einfachheit halben ich eine zuvor verifizierte ISO (schauen Sie sich unseren Artikel über die Überprüfung der Integrität und die Signatur eines Verteilungsbildes mit GPG an, wenn Sie wissen möchten, wie Sie die Integrität und Signatur eines Verteilungsbildes überprüfen möchten), um verfügbar zu sein) Auf dem RPI -Dateisystem in der /mnt/data/isos Verzeichnis.

Wir erstellen den entsprechenden Weg im Inneren /mnt/data/netboot/boot, Benennung von Verzeichnissen nach der Architektur, dem Namen und der Version des Systems, das wir in unserem Menü bereitstellen möchten (in diesem Fall AMD64 - Debian 10):

$ mkdir -p/mnt/data/netboot/boot/amd64/debian/10 

Diese Pfadauswahl ist willkürlich. Daher können Sie Ihre eigenen erstellen. Zu diesem Zeitpunkt müssen wir die Verteilungs -ISO montieren und die Dateien in das Zielverzeichnis kopieren. Um die ISO zu montieren, die wir rennen:

$ sudo Mount -o Loop -t ISO9660/mnt/data/isos/debian -10.4.0-AMD64-Netinst.ISO /Medien 

Sobald die ISO montiert ist, sind die Dateien unter zugegriffen /Medien. Ich benutze gerne rsync um sie zu kopieren:

$ sudo rsync -av/media//mnt/data/netboot/boot/amd64/debian/10 

Sobald die Dateien kopiert sind, können wir die ISO entlarven:

$ sudo Umount /Medien 

Im nächsten Schritt sehen wir, wie Sie ein Boot -Menü mit der Syslinux -Syntax erstellen.

Erstellen des Boot -Menüs

Nachdem wir die Verteilungsdateien haben, können wir das Boot -Menü erstellen. in unserem TFTP -Wurzel, (/mnt/data/netboot in unserem Fall) erstellen wir die pxelinux.CFG Verzeichnis:

$ mkdir/mnt/data/netboot/pxelinux.CFG 

In der pxelinux.CFG Verzeichnis Wir erstellen eine Datei mit dem Namen Standard und fügen Sie die folgende Konfiguration darin ein:

Menütitel PXE Boot Menü Standard Vesamenu.C32 LABEL LACE MENU Label -Label Boot aus dem lokalen Laufwerk LocalBoot 0xffff -Menü Start Amd64 Menü Titel AMD64 Menü Start Debian -Menü Debian Label Installgui -Menü Label ^Graphical Install Kernel :: Boot/AMD64/Debian/10/Installation.AMD/vmlinuz append vga = 788 initrd = :: boot/amd64/debian/10/install.AMD/GTK/INITRD.GZ --- Quiet Etikett Installieren Sie Menü Beschriftung ^Kernel :: Boot/AMD64/Debian/10/Installation.AMD/vmlinuz append vga = 788 initrd = :: boot/amd64/debian/10/install.AMD/initrd.GZ --- Ruhiges Menüendmenüendend 

Die obige Konfiguration erzeugt ein verschachteltes Menü, das nach dem in der erstellten Verzeichnispfad erstellt wurde Stiefel Verzeichnis. Auch hier ist der oben nur ein Beispiel. Sie können das Menü so erstellen und strukturieren, wie Sie möchten. Sie müssen lediglich die entsprechende Syntax verwenden, wie auf der dedizierten Syslinux Wiki -Seite erläutert.

Das Menü enthält einen Eintrag, in dem der Benutzer von der lokalen Festplatte auf dem Untermenü mit dem starten kann AMD64 Etikett und zwei Einträge für die Debianverteilung, Installgui Und Installieren. Der erstere startet das Verteilungsinstallationsprogramm im grafischen Modus, der in einem Textmodus zu verwenden scheint Ncurses Bibliotheken.

Wie können wir die genauen Parameter kennen, die in der verwendet werden sollen? Kernel Und Anhängen Linien? Wir können einen Blick auf die Menükonfiguration werfen, die innerhalb des Verteilungsinhalts vorhanden ist, den wir aus der ISO extrahiert haben. In unserem Fall zum Beispiel, /mnt/data/netboot/boot/amd64/debian/10/isolinux/Menü.CFG. Leider verwenden nicht alle Verteilungen dieselbe Syntax. Daher müssen wir die Konfiguration nach Bedarf achten und anpassen.

Eine Sache, die wir uns an die ursprüngliche Konfiguration anpassen mussten, ist der Weg der vmlinuz Und initrd.gz Dateien. Denken Sie daran, dass wir über diese Dateien zugreifen TFTP!

Normalerweise werden der Dateienpfad als interpretiert als relativ Für das TFTP -Root -Verzeichnis, aber in der obigen Konfiguration, wie Sie beobachten können, haben wir die verwendet :: Syntax (zum Beispiel haben wir geschrieben :: boot/amd64/debian/10/installieren.AMD/Vmlinuz auf das Kernelbild verweisen). Warum haben wir das gemacht?

Seit wir zwei Verzeichnisse erstellt haben, in denen die Bibliotheken unterstützt werden BIOS Und EFI64 Modus und wir möchten dieselbe Menükonfiguration für beide verwenden. Wir müssen die verknüpfen pxelinux.CFG Verzeichnis in beiden, daher müssen wir uns auf die verweisen TFTP Wurzel auf „absolute“ Weise. Der :: Das Symbol ermöglicht es uns, genau Folgendes zu tun: Es ist eine Möglichkeit, den absoluten Pfad zur TFTP -Wurzel zu verweisen.

Angenommen, unser aktuelles Arbeitsverzeichnis ist /mnt/data/netboot, Um die Menükonfiguration in den oben genannten Verzeichnissen zu verknüpfen, können wir den folgenden Befehl ausgeben:

$ ln -rs pxelinux.CFG BIOS && ln -rs pxelinux.CFG EFI64 


Hier haben wir die benutzt -R Option der ln Befehl zum Erstellen relativ Symbolische Links. Zu diesem Zeitpunkt sollte unser Verzeichnisbaum so aussehen:

/mnt/data/netboot ├── bios │ ├── ldlinux.C32 │ ├── libcom32.C32 │ ├── Libutil.C32 │ ├── pxelinux.0 │ ├── pxelinux.cfg ->… /pxelinux.cfg │ └── vesamenu.C32 ├── Stiefel │ └── AMD64 │ └── Debian │ └── 10 ├── EFI64 │ ├wort Ldlinux.e64 │ ├── libcom32.C32 │ ├── Libutil.C32 │ ├── pxelinux.cfg ->… /pxelinux.cfg │ ├── Syslinux.efi │ └── vesamenu.C32 └── Pxelinux.CFG └── Standard 

Wir können jetzt DNSMasq konfigurieren.

Konfigurieren Sie DNSMASQ

Die DNSMASQ -Konfigurationsdatei lautet /etc/dnsmasq.Conf. Einige der Parameter, die innerhalb davon eingestellt werden können, werden kommentiert. Weitere Informationen zu ihnen finden Sie in der Beratung der dnsmasq Handbuch. Wir werden nur die für unser Setup notwendigen betrachten.

Deaktivierung der DNS -Funktionalität

Das erste, was wir tun möchten, ist, den in DNSMASQ eingebetteten DNS -Dienst zu deaktivieren: Wir benötigen nur die von der Anwendung angebotenen DHCP- und TFTP -Funktionen. Um unser Ziel zu erreichen, können wir die nutzen Hafen Option: Es wird verwendet, um zu bestimmen, welcher Port für DNS verwendet werden soll. Setzen Sie seinen Wert auf 0 deaktiviert den Dienst. Wir können die Anweisung am Ende der Konfigurationsdatei anhängen.

Port = 0 

Geben Sie die Netzwerkschnittstelle für DHCP -Anforderungen an

Das zweite, was wir tun möchten, ist, die Netzwerkschnittstelle anzugeben, mit der Sie auf DHCP -Anfragen anhören können. In unserem Fall ist diese Schnittstelle Eth0, Also schreiben wir:

Schnittstelle = Eth0 

Wenn wir keine bestimmte Schnittstelle verwenden möchten, können wir eine IP -Adresse angeben, indem wir die Listene Option stattdessen.

Angeben des IP -Bereichs/des Proxy -Modus

Dieser Konfigurationsschritt ist sehr wichtig und ändert sich je nach unserer Netzwerkkonfiguration.

Wenn der von DNSMASQ bereitgestellte DHCP -Dienst ist der Einzige Im Netzwerk müssen wir in diesem Schritt einfach den Bereich der IP -Adressen konfigurieren, die Clients zugewiesen werden, und optional a Mietzeit Zum Beispiel:

DHCP-Range = 192.168.0.100,192.168.0.200,12H 

In der obigen Zeile wird der Bereich der verfügbaren IP -Adressen definiert, indem die niedrigeren und höheren Grenzen durch ein Komma getrennt werden. In diesem Fall haben wir einen Bereich definiert, aus dem ausgeht 192.168.0.100 Zu 192.168.200; Wir setzen auch a Mietzeit von 12h.

Der zweite Fall ist wahrscheinlich der häufigste in einem Standard-/Heimat -Setup, bei dem normalerweise der DHCP -Service von einem Router bereitgestellt wird. Wenn dies der Fall ist, sollte DNSMASQ so eingestellt werden, dass sie im Proxy -Modus ausgeführt werden, um Konflikte zu vermeiden. In diesen Fällen können wir schreiben:

DHCP-Range = 192.168.0.0, Proxy 

Wir haben zwei von einem Komma getrennte Elemente eingetreten: Der erste ist der Adresse des Subnetzes (192.168.0.0) Das zweite ist das Schlüsselwort "Proxy".

Aktivieren des TFTP -Servers

Zu diesem Zeitpunkt müssen wir das aktivieren dnsmasq Eingebetteter TFTP -Server: Wir werden damit die Dateien bereitgestellt, die die Clients benötigen, um zu starten. Alles, was wir tun müssen, um diese Aufgabe zu erfüllen, ist, die folgende Zeile an die Konfigurationsdatei anzuhängen:

Aktivieren Sie-TFTP 

Wir müssen auch das Verzeichnis festlegen, das als das verwendet werden sollte TFTP -Wurzel. In diesem Verzeichnis wird, wie wir bereits diskutiert haben, die freigegebenen Dateien hosten. In unserem Fall ist wir dieses Verzeichnis /mnt/data/netboot (Die Standardeinstellung ist /var/ftpd):

tftp-root =/mnt/data/netboot 

Stellen Sie die Startdatei basierend auf der Clientarchitektur fest

Der pxelinux Der Bootloader kann sowohl im EFI- als auch im BIOS -Modus arbeiten. Daher müssen wir einen Weg finden, um die entsprechende Datei je nach Modus zu bedienen, die vom Client verwendet werden. Die Frage ist, wie der Kunde solche Informationen kommuniziert?

DHCP verwendet eine Reihe von Optionen zum Informationsaustausch: Option 93 (Client-Arch) wird verwendet, um Informationen über die Client-Architektur zu übergeben. Die folgende Tabelle zeigt die Option Numeric- und String -Werte und die Architekturen, auf die sie verweisen:

Optionswert Stringwert Die Architektur
0 x86pc Intel x86PC
1 PC98 NEC/PC98
2 Ia64_efi Efi Itanium
3 Alpha Dec Alpha
4 ARC_X86 Bogen x86
5 Intel_lean_client Intel Lean Client
6 Ia32_efi Efi ia32
7 BC_EFI EFI BC
8 Xscale_efi Efi xscale
9 X86-64_efi EFI X86-64

Um anzugeben, welche Datei für den entsprechenden Modus des Clients bereitgestellt werden soll, können wir die verwenden PXE-Service Möglichkeit. Für x86pc Wir können die folgende Zeile eingeben:

pxe-service = x86pc, "pxelinux (bios)", bios/pxelinux 


Wir haben drei Werte zur Verfügung gestellt, die von einem Komma auf die Option getrennt sind: Der erste ist der Client -Systemtyp (x86pc), der zweite ist das Menütext und die dritte ist die Datei, die vom Client heruntergeladen wird, um den Start auszuführen. Der Pfad der Datei ist relativ zur TFTP -Wurzel. In diesem Fall befindet es sich in der BIOS Verzeichnis, das wir zuvor erstellt haben und heißt pxelinux.0: Der Name muss ohne die gemeldet werden .0 Erweiterung, wie Sie oben sehen können.

Für die EFI X86-64 Modus fügen wir stattdessen hinzu:

pxe-service = x86-64_efi, "pxelinux (efi)", efi64/syslinux.efi 

Einrichten von Protokollierung

Eine andere Sache, die nützlich zu aktivieren ist, ist dnsmasq Protokollierung, um die DHCP- und TFTP -Aktivität im Auge zu behalten. Um diese Aufgabe zu erfüllen, fügen wir das hinzu Protokoll-Querien Anweisungen zu unserer Konfiguration und setzen Sie die Datei fest, mit der die Nachrichten mit dem gespeichert werden sollten Log-Facility Anweisung:

Log-Querien log-facility =/var/log/dnsmasq.Protokoll 

Speichern Sie die Konfiguration und den Neustart des Dienstes

Zu diesem Zeitpunkt sollte unsere Konfiguration so aussehen:

Port = 0 Schnittstelle = Eth0 DHCP-Range = 192.168.0.0, proxy enable-tftp tftp-root =/mnt/data/netboot pxe-service = x86pc, "pxelinux (bios)", bios/pxelinux pxe-service = x86-64_efi, "pxelinux (efi)", efi64/syslinux.efi log-queries log-facility =/var/log/dnsmasq.Protokoll 

Wir können die Änderungen speichern, die wir an der vorgenommen haben /etc/dnsmasq.Conf Datei und schließlich neu starten dnsmasq Service:

$ sudo systemctl starten Sie dnsmasq neu starten 

Firewall -Setup

Damit unser Setup korrekt funktioniert. In diesem Tutorial werde ich die Verwendung des UFW Frontend. Die Ports, durch die wir eingehender Verkehr zulassen müssen, sind:

  • 67/UDP
  • 69/UDP
  • 4011/UDP

Um den Verkehr zuzulassen, können wir den folgenden Befehl ausführen:

$ sudo ufw erlauben 67/udp $ sudo ufw zulassen 69/udp $ sudo ufw zulassen 4011/uDp 

Booten

An diesem Punkt, wenn der Client -Computer über Ethernet mit dem Netzwerk verbunden ist und die PXE -Startoption als Boot „Quelle“ ausgewählt wird (stellen Sie sicher, dass die Funktionalität aktiviert ist!), wir sollten in der Lage sein, das PXE -Startmenü zu sehen:

Das PXE -Startmenü

Sobald wir auswählen AMD64 -> Debian -> Grafische Installation Die entsprechenden Dateien werden heruntergeladen und der Debian -Installateur sollte angezeigt werden:

Debian Graphical Installer

Es ist jetzt möglich, mit der Installation fortzufahren.

Schlussfolgerungen

In diesem Tutorial haben wir gesehen, wie die Schritte ausgeführt werden, die erforderlich sind, um einen Raspberry PI in einem PXE -Bootserver zu drehen: Wir haben gesehen, wie DNSMASQ und PXELINUX -Bootloader installiert und konfiguriert werden. Wir haben auch gelernt, wie man ein Syslinux -Menü und die entsprechende Dateistruktur erstellt. Schließlich sahen wir, welche Ports wir öffnen sollten, damit das Setup funktioniert. Zweifel? Fragen? Fühlen Sie sich frei zu kommentieren und um Hilfe zu bitten!

Verwandte Linux -Tutorials:

  • Mit Python können Sie eine Verbindung zu einem FTP -Server herstellen
  • Setup FTP Server unter Linux einrichten
  • FTP -Clientliste und -installation auf Ubuntu 22.04 Linux…
  • FTP -Clientliste und -installation auf Ubuntu 20.04 Linux…
  • So richten Sie FTP/SFTP -Server und Client auf Almalinux ein
  • OpenLiteSespeed als Reverse Proxy
  • Tintenfisch -Proxy -Konfigurations -Tutorial unter Linux
  • So führen Sie das Raspberry Pi OS in einer virtuellen Maschine mit…
  • Dinge zu installieren auf Ubuntu 20.04
  • Installieren Sie den TOR -Proxy auf Ubuntu 20.04 Linux