18 Einrichten eines UEFI HTTP-Boot-Servers #
In diesem Kapitel wird beschrieben, wie Sie einen UEFI HTTP-Boot-Server einrichten und konfigurieren.
18.1 Einführung #
HTTP-Boot kombiniert DHCP, DNS und HTTP, um das Booten und Bereitstellen von Systemen über das Netzwerk zu ermöglichen. HTTP-Boot kann als leistungsstarker Ersatz für PXE verwendet werden. HTTP-Boot ermöglicht das Booten eines Servers von einem URI über HTTP und damit die schnelle Übertragung großer Dateien, wie zum Beispiel des Linux-Kernels und des Root-Dateisystems, von Servern außerhalb Ihres lokalen Netzwerks.
18.1.1 Konfigurieren des Client-Rechners #
Die Aktivierung von HTTP-Boot auf einem physischen Client-Rechner hängt von Ihrer spezifischen Hardware ab. In der Dokumentation finden Sie weitere Informationen zur Aktivierung von HTTP-Boot auf Ihrem Rechner.
18.1.2 Vorbereitung #
Bei der hier beschriebenen Einrichtung werden die IP-Teilnetze 192.168.111.0/24 (IPv4) und 2001:db8:f00f:cafe::/64 (IPv6) verwendet. Die Server-IP-Adressen lauten beispielsweise 192.168.111.1(IPv4) und 2001:db8:f00f:cafe::1/64 (IPv6). Passen Sie diese Werte an Ihre spezifische Einrichtung an.
Installieren Sie die folgenden Pakete auf dem Rechner, den Sie als HTTP-Boot-Server verwenden möchten: dhcp-server, apache2 (oder lighttpd) und dnsmasq.
18.2 Konfigurieren des Servers #
18.2.1 DNS-Server #
Die Konfiguration des DNS-Servers ist zwar optional, ermöglicht aber die Vergabe eines benutzerfreundlichen Namens für den HTTP-Boot-Server. Fügen Sie zum Einrichten des DNS-Servers Folgendes zur Datei /etc/dnsmasq.conf
hinzu:
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
Weisen Sie den IP-Adressen in der Datei /etc/dnsmasq.d/hosts.conf
einen Domänennamen zu:
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
Starten Sie den DNS-Server.
systemctl start dnsmasq
Aufgrund einer Änderung in UEFI 2.7 empfehlen wir die Verwendung eines Schnittstellenmodul-Bootloaders von SLE 15 oder neuer, um mögliche Fehler durch den zusätzlichen DNS-Knoten zu vermeiden.
18.2.1.1 Konfigurieren des DHCP-Servers #
Geben Sie die Netzwerkschnittstelle für die DHCP-Server in /etc/sysconfig/dhcpd
an, bevor Sie sie einrichten:
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
Auf diese Weise stellen die DHCP-Server den Dienst nur auf der eth0
-Schnittstelle zur Verfügung.
Fügen Sie die folgende Konfiguration zur Datei /etc/dhcpd.conf
hinzu, um einen DHCPv4-Server sowohl für PXE-Boot als auch für HTTP-Boot einzurichten:
option domain-name-servers 192.168.111.1; option routers 192.168.111.1; default-lease-time 14400; ddns-update-style none; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; option vendor-class-identifier "PXEClient"; next-server 192.168.111.1; filename "/bootx64.efi"; } class "httpclients" { match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient"; option vendor-class-identifier "HTTPClient"; filename "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi"; } subnet 192.168.111.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.111.100 192.168.111.120; default-lease-time 14400; max-lease-time 172800; }
Beachten Sie, dass der DHCPv4-Server den HTTPClient
-Parameter für die ID der Herstellerklasse verwenden muss, da der Client diesen zur Identifizierung eines HTTP-Boot-Angebots verwendet.
Starten Sie den DHCP-Daemon:
systemctl start dhcpd
18.2.1.2 Konfigurieren des DHCPv6-Servers #
Fügen Sie zum Einrichten des DHCPv6-Servers Folgendes zur Datei /etc/dhcpd6.conf
hinzu:
option dhcp6.bootfile-url code 59 = string; option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; subnet6 2001:db8:f00f:cafe::/64 { range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99; option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi"; option dhcp6.name-servers 2001:db8:f00f:cafe::1; option dhcp6.vendor-class 0 10 "HTTPClient"; }
Diese Konfiguration definiert den Typ der Boot-URL, die Herstellerklasse und andere erforderliche Optionen. Ähnlich wie bei den DHCPv4-Einstellungen ist es erforderlich, die Boot-URL anzugeben, die eine IPv6-Adresse enthalten muss. Es ist auch notwendig, die Option der Herstellerklasse anzugeben. Bei DHCPv6 besteht sie aus der Unternehmensnummer und den Daten der Herstellerklasse (Länge und Inhalt). Da der HTTP-Boot-Treiber die Unternehmensnummer ignoriert, können Sie sie auf 0
festlegen. Der Inhalt der Herstellerklassedaten muss HTTPClient
lauten, da ansonsten der Client das Angebot ignoriert.
Für die ältere HTTP-Boot-Implementierung, die nicht RFC 3315 folgt, ist eine andere Konfiguration erforderlich:
option dhcp6.bootfile-url code 59 = string; option dhcp6.vendor-class code 16 = string; subnet6 2001:db8:f00f:cafe::/64 { range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99; option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi; option dhcp6.name-servers 2001:db8:f00f:cafe::1; option dhcp6.vendor-class "HTTPClient"; }
Starten Sie den dhcpv6
-Daemon.
systemctl start dhcpd6
18.2.1.2.1 Einrichten des DHCPv6-Servers für PXE- und HTTP-Boot #
Mit der folgenden Konfiguration ist es möglich, den DHCPv6-Server sowohl für PXE-Boot als auch für HTTP-Boot zu konfigurieren:
option dhcp6.bootfile-url code 59 = string; option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; subnet6 2001:db8:f00f:cafe::/64 { range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99; class "PXEClient" { match substring (option dhcp6.vendor-class, 6, 9); } subclass "PXEClient" "PXEClient" { option dhcp6.bootfile-url "tftp://[2001:db8:f00f:cafe::1]/bootloader.efi"; } class "HTTPClient" { match substring (option dhcp6.vendor-class, 6, 10); } subclass "HTTPClient" "HTTPClient" { option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi"; option dhcp6.name-servers 2001:db8:f00f:cafe::1; option dhcp6.vendor-class 0 10 "HTTPClient"; } }
Es ist auch möglich, die Herstellerklasse einer bestimmten Architektur zuzuordnen, und zwar wie folgt:
class "HTTPClient" { match substring (option dhcp6.vendor-class, 6, 21); } subclass "HTTPClient" "HTTPClient:Arch:00016" { option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi"; option dhcp6.name-servers 2001:db8:f00f:cafe::1; option dhcp6.vendor-class 0 10 "HTTPClient"; }
In diesem Beispiel bezieht sich HTTPClient:Arch:00016
auf einen AMD64/Intel 64 HTTP-Boot-Client. Mit dieser Konfiguration kann der Server verschiedene Architekturen gleichzeitig bedienen.
18.2.1.2.2 Konfigurieren der Firewall #
Falls DHCPv6-Pakete vom RP-Filter in der Firewall verworfen werden, überprüfen Sie das Protokoll. Sollte es den Eintrag rpfilter_DROP
enthalten, deaktivieren Sie den Filter mit der folgenden Konfiguration in /etc/firewalld/firewalld.conf
:
IPv6_rpfilter=no
18.2.1.3 Bereitstellen eines TFTP-Servers (optional) #
Stellen Sie einen TFTP-Server bereit, wenn sowohl PXE-Boot als auch HTTP-Boot unterstützt werden soll. Installieren Sie tftp und starten Sie den Dienst:
systemctl start tftp.socket systemctl start tftp.service
Außerdem muss ein spezielles tftpboot-installation-Paket für die Verwendung mit PXE-Boot installiert werden. Führen Sie den Befehl zypper se tftpboot
aus, um eine Liste der verfügbaren tftp-installation-Pakete zu erhalten, und installieren Sie dann ein Paket für die gewünschte Systemversion und -architektur, wie tftpboot-installation-SLE-15-SP3-x86_64. Verwenden Sie beispielsweise tftpboot-installation-SLE-VERSION-x86_64 (ersetzen Sie VERSION durch die jeweilige Version). Kopieren Sie den Inhalt des Verzeichnisses SLE-VERSION-x86_64
in das Root-Verzeichnis des TFTP-Servers:
Weitere Informationen hierzu finden Sie im /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
18.2.1.4 Einrichten des HTTP-Servers #
Kopieren Sie den gesamten Inhalt des ersten System-ISO-Image in das Verzeichnis /srv/www/htdocs/sle/
. Bearbeiten Sie dann die Datei /srv/www/htdocs/sle/grub.cfg
. Verwenden Sie das folgende Beispiel als Referenz:
timeout=60 default=1 menuentry 'Installation IPv4' --class opensuse --class gnu-linux --class gnu --class os { set gfxpayload=keep echo 'Loading kernel ...' linux /sle/boot/x86_64/loader/linux install=http://www.httpboot.local/sle echo 'Loading initial ramdisk ...' initrd /sle/boot/x86_64/loader/initrd } menuentry 'Installation IPv6' --class opensuse --class gnu-linux --class gnu --class os { set gfxpayload=keep echo 'Loading kernel ...' linux /sle/boot/x86_64/loader/linux install=install=http://www.httpboot.local/sle ipv6only=1 ifcfg=*=dhcp6,DHCLIENT6_MODE=managed echo 'Loading initial ramdisk ...' initrd /sle/boot/x86_64/loader/initrd }
18.2.1.4.1 Konfigurieren von lighttpd #
Ändern Sie /etc/lighttpd/lighttpd.conf
wie folgt, um die Unterstützung sowohl für IPv4 als auch für IPv6 in lighttpd zu aktivieren:
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
Starten Sie den lighttpd
-Daemon:
systemctl start lighttpd
18.2.1.4.2 Konfigurieren von apache2 #
Für Apache ist keine zusätzliche Konfiguration erforderlich. Starten Sie den apache2
-Daemon:
systemctl start apache2
18.2.1.5 Aktivieren der SSL-Unterstützung für den HTTP-Server (optional) #
Zur Verwendung des HTTPS-Boot müssen Sie ein vorhandenes Serverzertifikat in das DER
-Format konvertieren und in die Firmware des Clients eintragen.
Falls auf Ihrem Server bereits ein Zertifikat installiert ist, konvertieren Sie es mit folgendem Kommando in das DER
-Format, damit es vom Client verwendet werden kann:
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 Tragen Sie das Serverzertifikat in der Client-Firmware ein #
Die genaue Vorgehensweise zum Eintragen des konvertierten Zertifikats hängt von der spezifischen Implementierung der Firmware des Clients ab. Bei bestimmter Hardware müssen Sie das Zertifikat manuell über die Firmware-Benutzeroberfläche eintragen. Verwenden Sie dazu ein externes Speichermedium, auf dem sich das Zertifikat befindet. Rechner mit Redfish-Unterstützung können das Zertifikat im Fernverfahren eintragen. Weitere Informationen zum Eintragen von Zertifikaten finden Sie in der Dokumentation zu Ihrer spezifischen Hardware.
18.2.1.5.2 Aktivieren der SSL-Unterstützung in lighttpd #
Da lighttpd den privaten Schlüssel und das Zertifikat in derselben Datei benötigt, vereinheitlichen Sie sie mit folgendem Kommando:
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
Kopieren Sie CERTIFICATE.pem
in das Verzeichnis /etc/ssl/private/
.
cp server-almighty.pem /etc/ssl/private/ chown -R root:lighttpd /etc/ssl/private/server-almighty.pem chmod 640 /etc/ssl/private/server-almighty.pem
Vergewissern Sie sich, dass mod_openssl
in der Datei server.modules
im Abschnitt /etc/lighttpd/modules.conf
aufgelistet ist, wie zum Beispiel:
server.modules = ( "mod_access", "mod_openssl", )
Fügen Sie die folgenden Zeilen unter SSL Support
im Abschnitt /etc/lighttpd/lighttpd.conf
hinzu:
# IPv4 $SERVER["socket"] == ":443" { ssl.engine = "enable" ssl.pemfile = "/etc/ssl/private/server-almighty.pem" } # IPv6 $SERVER["socket"] == "[::]:443" { ssl.engine = "enable" ssl.pemfile = "/etc/ssl/private/server-almighty.pem" }
Starten Sie lighttpd neu, um die SSL-Unterstützung zu aktivieren:
systemctl restart lighttpd
18.2.1.5.3 Aktivieren der SSL-Unterstützung in Apache #
Öffnen Sie die Datei /etc/sysconfig/apache2
und fügen Sie das SSL-Flag wie folgt hinzu:
APACHE_SERVER_FLAGS="SSL"
Vergewissern Sie sich, dass das ssl
-Modul in APACHE_MODULES
aufgeführt ist, wie zum Beispiel:
Als Nächstes kopieren Sie den privaten Schlüssel und das Zertifikat in das Verzeichnis /etc/apache2/
.
cp server.key /etc/apache2/ssl.key/ chown wwwrun /etc/apache2/ssl.key/server.key chmod 600 /etc/apache2/ssl.key/server.key cp server.crt /etc/apache2/ssl.crt/
Erstellen Sie die ssl vhost-Konfiguration.
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
Bearbeiten Sie /etc/apache2/vhosts.d/vhost-ssl.conf
, um den privaten Schlüssel und das Zertifikat zu ändern:
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
Starten Sie Apache neu, um die SSL-Unterstützung zu aktivieren:
systemctl restart apache2
18.2.1.5.4 Ändern der DHCP-Konfiguration #
Ersetzen Sie in http://
das Präfix https://
durch dhcpd.conf/dhcpd6.conf
und starten Sie den DHCP-Server neu.
systemctl restart dhcpd systemctl restart dhcpd6
18.3 Booten des Client über HTTP-Boot #
Wenn die Firmware bereits HTTP-Boot unterstützt, stecken Sie das Kabel ein und wählen Sie die richtige Boot-Option.