18 Configurazione di un UEFI HTTP Boot server #
In questo capitolo viene descritto come configurare un UEFI HTTP Boot server.
18.1 Introduzione #
L'avvio HTTP combina DHCP, DNS e HTTP per consentire l'avvio e la distribuzione di sistemi nella rete. È possibile utilizzare l'avvio HTTP come meccanismo sostitutivo a prestazioni elevate di PXE. L'avvio HTTP consente l'avvio di un server da un URI su HTTP, per il trasferimento rapido di file di grandi dimensioni come il kernel Linux e il file system root dai server esterni alla rete locale.
18.1.1 Configurazione del computer client #
L'abilitazione dell'avvio HTTP su un computer client fisico varia in base all'hardware specifico. Consultare la documentazione per ulteriori informazioni su come abilitare l'avvio HTTP sul proprio computer.
18.1.2 Preparazione #
Per la configurazione descritta in questo documento vengono utilizzate come esempio le sottoreti IP 192.168.111.0/24 (IPv4) e 2001:db8:f00f:cafe::/64 (IPv6) e gli indirizzi IP del server sono 192.168.111.1(IPv4) e 2001:db8:f00f:cafe::1/64 (IPv6). Modificare questi valori in base alla configurazione specifica.
Installare i seguenti pacchetti sul computer che si intende utilizzare come server di avvio HTTP: dhcp-server, apache2 (o lighttpd) e dnsmasq.
18.2 Configurazione del server #
18.2.1 Server DNS #
La configurazione del server DNS è facoltativa, ma consente di assegnare un nome intuitivo al server di avvio HTTP. Per configurare il server DNS, aggiungere quanto riportato di seguito al file /etc/dnsmasq.conf
:
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
Assegnare un nome di dominio agli indirizzi IP nel file /etc/dnsmasq.d/hosts.conf
:
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
Avviare il server DNS.
systemctl start dnsmasq
Per via di una modifica in UEFI 2.7, è consigliabile utilizzare un boot loader shim di SLE 15 o versione successiva per evitare potenziali errori causati dal nodo DNS aggiuntivo.
18.2.1.1 Configurazione del server DHCPv4 #
Prima di configurare i server DHCP, specificarne l'interfaccia di rete in /etc/sysconfig/dhcpd
:
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
In questo modo i server DHCP forniscono il servizio solo sull'interfaccia eth0
.
Per configurare un server DHCPv4 per l'avvio PXE e l'avvio HTTP, aggiungere la seguente configurazione al file /etc/dhcpd.conf
:
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; }
Il server DHCPv4 deve utilizzare il parametro HTTPClient
per l'ID classe fornitore, poiché il client lo utilizza per identificare un'offerta di avvio HTTP.
Avviare il daemon DHCP:
systemctl start dhcpd
18.2.1.2 Configurazione del server DHCPv6 #
Per configurare il server DHCPv6, aggiungere la seguente configurazione al file /etc/dhcpd6.conf
:
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"; }
Questa configurazione definisce il tipo di URL di avvio, la classe fornitore e altre opzioni necessarie. In modo analogo alle impostazioni DHCPv4, è necessario fornire l'URL di avvio, che deve includere un indirizzo IPv6. È inoltre necessario specificare l'opzione di classe fornitore. In DHCPv6 è costituita dal numero dell'azienda e dai dati della classe fornitore (lunghezza e contenuto). Poiché il driver di avvio HTTP ignora il numero dell'azienda, è possibile impostarlo su 0
. Il contenuto dei dati della classe fornitore deve essere HTTPClient
; in caso contrario, il client ignora l'offerta.
L'implementazione di avvio HTTP precedente, che non segue l'RFC 3315, richiede una configurazione diversa:
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"; }
Avviare il daemon dhcpv6
.
systemctl start dhcpd6
18.2.1.2.1 Configurazione del server DHCPv6 per l'avvio PXE e HTTP #
Utilizzando la seguente configurazione, è possibile configurare il server DHCPv6 per l'avvio PXE e HTTP:
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"; } }
È inoltre possibile abbinare la classe fornitore a una specifica architettura, come indicato di seguito:
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 questo esempio, HTTPClient:Arch:00016
fa riferimento a un client di avvio HTTP AMD64/Intel 64. Questa configurazione consente al server di gestire contemporaneamente varie architetture.
18.2.1.2.2 Configurazione del firewall #
Se nel firewall vengono rilasciati pacchetti DHCPv6 dal filtro RP, controllare il relativo registro. Se contiene la voce rpfilter_DROP
, disabilitare il filtro mediante la seguente configurazione in /etc/firewalld/firewalld.conf
:
IPv6_rpfilter=no
18.2.1.3 Distribuzione di un server TFTP (facoltativa) #
Per fornire supporto per l'avvio PXE e HTTP, distribuire un server TFTP. Installare il tftp e avviare il servizio:
systemctl start tftp.socket systemctl start tftp.service
È inoltre necessario installare un pacchetto tftpboot-installation specifico da usare con l'avvio PXE. Eseguire il comando zypper se tftpboot
per visualizzare un elenco dei pacchetti tftp-installation disponibili, quindi installare il pacchetto della versione di sistema e dell’architettura desiderata, ad esempio tftpboot-installation-SLE-15-SP3-x86_64 o tftpboot-installation-SLE-VERSION-x86_64 (sostituire VERSION con la versione effettiva). Copiare il contenuto della directory SLE-VERSION-x86_64
nella directory radice del server TFTP:
Per ulteriori informazioni, fare riferimento alla /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
18.2.1.4 Configurazione del server HTTP #
Copiare l'intero contenuto della prima immagine ISO del sistema nella directory /srv/www/htdocs/sle/
. Quindi, modificare il file /srv/www/htdocs/sle/grub.cfg
. Utilizzare il seguente esempio come riferimento:
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 Configurazione di lighttpd #
Per abilitare il supporto per IPv4 e IPv6 in lighttpd, modificare /etc/lighttpd/lighttpd.conf
nel modo seguente:
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
Avviare il daemon lighttpd
:
systemctl start lighttpd
18.2.1.4.2 Configurazione di apache2 #
Apache non richiede configurazioni aggiuntive. Avviare il daemon apache2
:
systemctl start apache2
18.2.1.5 Abilitazione del supporto SSL per il server HTTP (facoltativa) #
Per utilizzare l'avvio HTTPS, è necessario convertire un certificato server esistente nel formato DER
ed eseguirne la registrazione nel firmware del client.
Presupponendo che si disponga di un certificato installato nel server, convertirlo nel formato DER
per l'utilizzo con il client mediante il seguente comando:
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 Registrazione del certificato server nel firmware del client #
La procedura esatta per registrare il certificato convertito varia in base all'implementazione specifica del firmware del client. Per alcuni componenti hardware è necessario registrare il certificato manualmente nell'interfaccia utente del firmware mediante un dispositivo di memorizzazione esterno contenente il certificato. I computer con supporto Redfish possono registrare il certificato in remoto. Per ulteriori informazioni sulla registrazione dei certificati, consultare la documentazione dei componenti hardware specifici.
18.2.1.5.2 Abilitazione del supporto SSL in lighttpd #
Poiché per lighttpd è necessario che la chiave privata e il certificato si trovino nello stesso file, unificarli mediante il seguente comando:
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
Copiare CERTIFICATE.pem
nella directory /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
Accertarsi che mod_openssl
sia elencato nella sezione server.modules
del file /etc/lighttpd/modules.conf
, ad esempio:
server.modules = ( "mod_access", "mod_openssl", )
Aggiungere le seguenti righe alla sezione SSL Support
nel file /etc/lighttpd/lighttpd.conf
:
# 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" }
Riavviare lighttpd per attivare il supporto SSL:
systemctl restart lighttpd
18.2.1.5.3 Abilitazione del supporto SSL in Apache #
Aprire il file /etc/sysconfig/apache2
e aggiungere il flag SSL come indicato di seguito:
APACHE_SERVER_FLAGS="SSL"
Accertarsi che il modulo ssl
sia elencato in APACHE_MODULES
, ad esempio:
Copiare quindi la chiave privata e il certificato nella directory /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/
Creare la configurazione vhost ssl.
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
Modificare /etc/apache2/vhosts.d/vhost-ssl.conf
per cambiare la chiave privata e il certificato:
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
Riavviare apache per attivare il supporto SSL:
systemctl restart apache2
18.2.1.5.4 Modifica della configurazione DHCP #
Sostituire il prefisso http://
con https://
in dhcpd.conf/dhcpd6.conf
e riavviare il server DHCP.
systemctl restart dhcpd systemctl restart dhcpd6
18.3 Avvio del client tramite avvio HTTP #
Se il firmware supporta già l'avvio HTTP, collegare il cavo e scegliere l'opzione di avvio corretta.