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.
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.
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.
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.
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; 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; class "pxeclients"{ match if substring (option vendor-class-identifier, 0, 9) = "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"; } }
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
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
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.
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
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 finden Sie unter /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
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 ...' linuxefi /sle/boot/x86_64/loader/linux install=http://www.httpboot.local/sle echo 'Loading initial ramdisk ...' initrdefi /sle/boot/x86_64/loader/initrd } menuentry 'Installation IPv6' --class opensuse --class gnu-linux --class gnu --class os { set gfxpayload=keep echo 'Loading kernel ...' linuxefi /sle/boot/x86_64/loader/linux install=install=http://www.httpboot.local/sle ipv6only=1 ifcfg=*=dhcp6,DHCLIENT6_MODE=managed echo 'Loading initial ramdisk ...' initrdefi /sle/boot/x86_64/loader/initrd }
Ä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
Für Apache ist keine zusätzliche Konfiguration erforderlich. Starten Sie den apache2
-Daemon:
systemctl start apache2
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
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.
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 /etc/lighttpd/modules.conf
im Abschnitt server.modules
aufgelistet ist, wie zum Beispiel:
server.modules = ( "mod_access", "mod_openssl", )
Fügen Sie die folgenden Zeilen in der Datei /etc/lighttpd/lighttpd.conf
zum Abschnitt SSL-Unterstützung
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
Ö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
Ersetzen Sie in dhcpd.conf/dhcpd6.conf
das Präfix http://
durch https://
und starten Sie den DHCP-Server neu.
systemctl restart dhcpd systemctl restart dhcpd6
Wenn die Firmware bereits HTTP-Boot unterstützt, stecken Sie das Kabel ein und wählen Sie die richtige Boot-Option.