18 Configuración de un servidor de arranque HTTP UEFI #
En este capítulo se describe cómo instalar y configurar un servidor de arranque HTTP UEFI.
18.1 Introducción #
El arranque HTTP combina DHCP, DNS y HTTP para permitir el arranque y la distribución de sistemas a través de la red. El arranque HTTP se puede utilizar como sustituto de alto rendimiento de PXE. El arranque HTTP permite arrancar un servidor desde un URI a través de HTTP, transfiriendo rápidamente archivos grandes, como el núcleo de Linux y el sistema de archivos raíz, desde servidores fuera de la red local.
18.1.1 Configuración del equipo cliente #
La habilitación del arranque HTTP en un equipo cliente físico depende del hardware específico. Consulte en la documentación cómo habilitar el arranque HTTP en su equipo concreto.
18.1.2 Preparación #
La configuración descrita aquí utiliza las subredes IP 192.168.111.0/24 (IPv4) y 2001:db8:f00f:cafe::/64 (IPv6) y las direcciones IP del servidor son 192.168.111.1 (IPv4) y 2001:db8:f00f:cafe::1/64 (IPv6) como ejemplos. Ajuste estos valores para que coincidan con su configuración específica.
Instale los siguientes paquetes en el equipo que tiene previsto utilizar como servidor de arranque HTTP: dhcp-server, apache2 (o lighttpd) y dnsmasq.
18.2 Configuración del servidor #
18.2.1 Servidor DNS #
Aunque la configuración del servidor DNS es opcional, permite asignar un nombre fácil de usar al servidor de arranque HTTP. Para configurar el servidor DNS, añada lo siguiente al archivo /etc/dnsmasq.conf
:
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
Asigne un nombre de dominio a las direcciones IP del archivo /etc/dnsmasq.d/hosts.conf
:
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
Inicie el servidor DNS.
systemctl start dnsmasq
Debido a un cambio en UEFI 2.7, se recomienda utilizar un cargador de arranque suplementario de SLE 15 o posterior para evitar posibles errores causados por el nodo DNS adicional.
18.2.1.1 Configuración del servidor DHCPv4 #
Antes de configurar los servidores DHCP, especifique la interfaz de red para ellos en /etc/sysconfig/dhcpd
:
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
De esta forma, los servidores DHCP proporcionan el servicio solo en la interfaz eth0
.
Para configurar un servidor DHCPv4 para el arranque PXE y el arranque HTTP, añada la siguiente configuración al archivo /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; }
Tenga en cuenta que el servidor DHCPv4 debe utilizar el parámetro HTTPClient
para el ID de clase de proveedor, ya que el cliente lo utiliza para identificar una oferta de arranque HTTP.
Inicie el daemon DHCP:
systemctl start dhcpd
18.2.1.2 Configuración del servidor DHCPv6 #
Para configurar el servidor DHCPv6, añada la siguiente configuración a /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"; }
Esta configuración define el tipo de URL de arranque, la clase de proveedor y otras opciones necesarias. De forma similar a la configuración de DHCPv4, es necesario proporcionar la URL de arranque, que debe tener una dirección IPv6. También es necesario especificar la opción de clase de proveedor. En DHCPv6, está formada por el número de empresa y los datos de la clase de proveedor (longitud y contenido). Dado que el controlador de arranque HTTP ignora el número de empresa, puede definirlo en 0
. El contenido de los datos de la clase de proveedor debe ser HTTPClient
; de lo contrario, el cliente ignorará la oferta.
La implementación de arranque HTTP anterior, que no sigue la especificación RFC 3315, requiere una configuración diferente:
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"; }
Inicie el daemon dhcpv6
.
systemctl start dhcpd6
18.2.1.2.1 Configuración del servidor DHCPv6 para el arranque PXE y HTTP #
Con la siguiente configuración, es posible configurar el servidor DHCPv6 para el arranque PXE y el arranque 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"; } }
También es posible hacer coincidir la clase de proveedor con una arquitectura específica, como se indica a continuación:
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"; }
En este ejemplo, HTTPClient:Arch:00016
hace referencia a un cliente de arranque HTTP AMD64/Intel 64. Esta configuración permite que el servidor sirva a diferentes arquitecturas simultáneamente.
18.2.1.2.2 Configuración del cortafuegos #
Si el filtro RP del cortafuegos descarta paquetes DHCPv6, compruebe su registro. En caso de que contenga la entrada rpfilter_DROP
, inhabilite el filtro utilizando la siguiente configuración en /etc/firewalld/firewalld.conf
:
IPv6_rpfilter=no
18.2.1.3 Distribución de un servidor TFTP (opcional) #
Para proporcionar compatibilidad tanto con el arranque PXE como con el arranque HTTP, distribuya un servidor TFTP. Instale tftp e inicie el servicio:
systemctl start tftp.socket systemctl start tftp.service
También es necesario instalar un paquete tftpboot-installation específico para utilizarlo con PXE Boot. Ejecute el comando zypper se tftpboot
para obtener una lista de los paquetes tftp-installation disponibles y, a continuación, instale el paquete para la versión y la arquitectura del sistema deseadas; por ejemplo, tftpboot-installation-SLE-15-SP3-x86_64. En tftpboot-installation-SLE-VERSION-x86_64 sustituya VERSION por la versión real. Copie el contenido del directorio SLE-VERSION-x86_64
en el directorio raíz del servidor TFTP:
Para obtener más información, consulte /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
18.2.1.4 Configuración del servidor HTTP #
Copie todo el contenido de la primera imagen ISO del sistema en el directorio /srv/www/htdocs/sle/
. Edite el archivo /srv/www/htdocs/sle/grub.cfg
. Utilice el siguiente ejemplo como referencia:
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 Configuración de lighttpd #
Para habilitar la compatibilidad con IPv4 e IPv6 en lighttpd, modifique /etc/lighttpd/lighttpd.conf
de la siguiente manera:
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
Inicie el daemon lighttpd
:
systemctl start lighttpd
18.2.1.4.2 Configuración de apache2 #
Apache no requiere configuración adicional. Inicie el daemon apache2
:
systemctl start apache2
18.2.1.5 Habilitación de la compatibilidad con SSL para el servidor HTTP (opcional) #
Para utilizar el arranque HTTPS, debe convertir un certificado de servidor existente al formato DER
e inscribirlo en el firmware del cliente.
Suponiendo que ya tenga un certificado instalado en el servidor, conviértalo al formato DER
para utilizarlo con el cliente mediante el siguiente comando:
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 Inscripción del certificado del servidor en el firmware del cliente #
El procedimiento exacto para inscribir el certificado convertido depende de la implementación específica del firmware del cliente. Para cierto hardware, debe inscribir el certificado manualmente a través de la interfaz de usuario del firmware mediante un dispositivo de almacenamiento externo con el certificado. Los equipos compatibles con Redfish pueden inscribir el certificado de forma remota. Consulte la documentación de su hardware específico para obtener más información sobre cómo inscribir certificados.
18.2.1.5.2 Habilitación de la compatibilidad con SSL en lighttpd #
Dado que lighttpd necesita la clave privada y el certificado en el mismo archivo, unifíquelos mediante el siguiente comando:
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
Copie CERTIFICATE.pem
en el directorio /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
Asegúrese de que mod_openssl
aparece en la sección server.modules
del archivo /etc/lighttpd/modules.conf
, por ejemplo:
server.modules = ( "mod_access", "mod_openssl", )
Añada las siguientes líneas a la sección SSL Support
de /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" }
Reinicie lighttpd para activar la compatibilidad con SSL:
systemctl restart lighttpd
18.2.1.5.3 Habilitación de la compatibilidad con SSL en Apache #
Abra el archivo /etc/sysconfig/apache2
y añada el indicador SSL de la siguiente manera:
APACHE_SERVER_FLAGS="SSL"
Asegúrese de que el módulo ssl
aparece en APACHE_MODULES
, por ejemplo:
A continuación, copie la clave privada y el certificado en el directorio /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/
Cree la configuración de ssl vhost.
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
Edite /etc/apache2/vhosts.d/vhost-ssl.conf
para cambiar la clave privada y el certificado:
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
Reinicie apache para activar la compatibilidad con SSL:
systemctl restart apache2
18.2.1.5.4 Modificación de la configuración de DHCP #
Sustituya el prefijo http://
por https://
en dhcpd.conf/dhcpd6.conf
y reinicie el servidor DHCP.
systemctl restart dhcpd systemctl restart dhcpd6
18.3 Arranque del cliente mediante arranque HTTP #
Si el firmware ya admite el arranque HTTP, conecte el cable y elija la opción de arranque correcta.