18 Configurando um servidor de boot HTTP UEFI #
Este capítulo descreve como instalar e configurar um servidor de boot HTTP UEFI.
18.1 Introdução #
O Boot HTTP combina DHCP, DNS e HTTP para possibilitar a inicialização e a implantação de sistemas na rede. O Boot HTTP pode ser usado como um substituto de alto desempenho do PXE. O Boot HTTP permite inicializar um servidor de um URI por HTTP, transferindo rapidamente arquivos grandes, como o kernel do Linux e o sistema de arquivos raiz de servidores fora da rede local.
18.1.1 Configurando a máquina cliente #
A habilitação do Boot HTTP em uma máquina cliente física depende do seu hardware específico. Consulte a documentação para obter mais informações sobre como habilitar o Boot HTTP em sua máquina específica.
18.1.2 Preparação #
A configuração descrita aqui usa sub-redes com IP 192.168.111.0/24 (IPv4) e 2001:db8:f00f:cafe::/64 (IPv6), e os endereços IP de servidor são 192.168.111.1 (IPv4) e 2001:db8:f00f:cafe::1/64 (IPv6), como exemplos. Ajuste esses valores para corresponder à sua configuração específica.
Instale os seguintes pacotes na máquina que planeja usar como servidor de Boot HTTP: dhcp-server, apache2 (ou lighttpd) e dnsmasq.
18.2 Configurando o servidor #
18.2.1 Servidor DNS #
Embora a configuração do servidor DNS seja opcional, ela permite que você atribua um nome amigável ao servidor de Boot HTTP. Para configurar o servidor DNS, adicione o seguinte ao arquivo /etc/dnsmasq.conf
:
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
Atribua um nome de domínio aos endereços IP no arquivo /etc/dnsmasq.d/hosts.conf
:
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
Inicie o servidor DNS.
systemctl start dnsmasq
Devido a uma mudança no UEFI 2.7, recomendamos o uso de um carregador de boot shim do SLE 15 ou versão mais recente para evitar possíveis erros causados pelo nó DNS adicional.
18.2.1.1 Configurando o servidor DHCPv4 #
Antes de configurar os servidores DHCP, especifique a interface de rede para eles em /etc/sysconfig/dhcpd
:
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
Dessa forma, os servidores DHCP fornecem o serviço apenas na interface eth0
.
Para configurar um servidor DHCPv4 para Boot PXE e Boot HTTP, adicione a seguinte configuração ao arquivo /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; }
Observe que o servidor DHCPv4 deve usar o parâmetro HTTPClient
para o ID da classe do fornecedor, pois o cliente o utiliza para identificar uma oferta de Boot HTTP.
Inicie o daemon DHCP:
systemctl start dhcpd
18.2.1.2 Configurando o servidor DHCPv6 #
Para configurar o servidor DHCPv6, adicione a seguinte configuração 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"; }
Essa configuração define o tipo de URL de boot, a classe do fornecedor e outras opções necessárias. Semelhante às configurações do DHCPv4, é necessário informar o URL de boot, que deve ter um endereço IPv6. Também é necessário especificar a opção de classe do fornecedor. No DHCPv6, ela consiste no número da empresa e nos dados da classe do fornecedor (tamanho e conteúdo). Como o driver de Boot HTTP ignora o número da empresa, você pode defini-lo como 0
. O conteúdo dos dados da classe do fornecedor precisa ser HTTPClient
; do contrário, o cliente ignorará a oferta.
A implementação do Boot HTTP mais antiga, que não segue o RFC 3315, requer uma configuração 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 o daemon dhcpv6
.
systemctl start dhcpd6
18.2.1.2.1 Configurando o servidor DHCPv6 para boot PXE e HTTP #
Usando a seguinte configuração, é possível definir o servidor DHCPv6 para Boot PXE e Boot 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"; } }
Também é possível corresponder a classe do fornecedor a uma arquitetura específica, conforme mostrado a seguir:
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"; }
Nesse exemplo, HTTPClient:Arch:00016
refere-se a um cliente de Boot HTTP AMD64/Intel 64. Essa configuração permite que o servidor atenda a diferentes arquiteturas simultaneamente.
18.2.1.2.2 Configurando o firewall #
Se os pacotes DHCPv6 forem descartados pelo filtro RP no firewall, verifique o registro dele. Se ele incluir a entrada rpfilter_DROP
, desabilite o filtro usando a seguinte configuração em /etc/firewalld/firewalld.conf
:
IPv6_rpfilter=no
18.2.1.3 Implantando um servidor TFTP (opcional) #
Para oferecer suporte a Boot PXE e Boot HTTP, implante um servidor TFTP. Instale o tftp e inicie o serviço:
systemctl start tftp.socket systemctl start tftp.service
Também é necessário instalar um pacote tftpboot-installation específico para uso com Boot PXE. Execute o comando zypper se tftpboot
para listar os pacotes tftp-installation disponíveis e, em seguida, instale o pacote para a versão e a arquitetura desejadas do sistema, por exemplo, tftpboot-installation-SLE-15-SP3-x86_64. Por exemplo, tftpboot-installation-SLE-VERSION-x86_64 (substitua VERSION pela versão real). Copie o conteúdo do diretório SLE-VERSION-x86_64
para o diretório raiz do servidor TFTP:
Para obter mais informações, consulte a /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
18.2.1.4 Configurando o servidor HTTP #
Copie todo o conteúdo da imagem ISO do primeiro sistema para o diretório /srv/www/htdocs/sle/
. Edite o arquivo /srv/www/htdocs/sle/grub.cfg
. Use o exemplo a seguir como referência:
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 Configurando o lighttpd #
Para habilitar o suporte a IPv4 e IPv6 no lighttpd, modifique /etc/lighttpd/lighttpd.conf
da seguinte maneira:
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
Inicie o daemon lighttpd
:
systemctl start lighttpd
18.2.1.4.2 Configurando o apache2 #
O Apache não requer configuração adicional. Inicie o daemon apache2
:
systemctl start apache2
18.2.1.5 Habilitando o suporte SSL para o servidor HTTP (opcional) #
Para usar o Boot HTTPS, você precisa converter uma certificação do servidor existente no formato DER
e registrá-la no firmware do cliente.
Supondo que você já tenha um certificado instalado no servidor, converta-o no formato DER
para usá-lo com o cliente executando o seguinte comando:
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 Registrar a certificação do servidor no firmware do cliente #
O procedimento exato de registro do certificado convertido depende da implementação específica do firmware do cliente. Para determinados hardwares, você precisa registrar o certificado manualmente pela IU do firmware usando um dispositivo de armazenamento externo que tenha o certificado. As máquinas com suporte ao Redfish podem registrar o certificado remotamente. Consulte a documentação do seu hardware específico para obter mais informações sobre o registro de certificados.
18.2.1.5.2 Habilitando o suporte a SSL no lighttpd #
Como o lighttpd precisa da chave privada e do certificado no mesmo arquivo, unifique-os usando o seguinte comando:
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
Copie CERTIFICATE.pem
para o diretório /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
Verifique se mod_openssl
está listado na seção server.modules
do arquivo /etc/lighttpd/modules.conf
, por exemplo:
server.modules = ( "mod_access", "mod_openssl", )
Adicione as seguintes linhas à seção SSL Support
em /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 o lighttpd para ativar o suporte a SSL:
systemctl restart lighttpd
18.2.1.5.3 Habilitando o suporte a SSL no Apache #
Abra o arquivo /etc/sysconfig/apache2
e adicione o flag SSL da seguinte maneira:
APACHE_SERVER_FLAGS="SSL"
Verifique se o módulo ssl
está listado em APACHE_MODULES
, por exemplo:
Em seguida, copie a chave privada e o certificado para o diretório /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/
Crie a configuração ssl vhost.
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
Edite /etc/apache2/vhosts.d/vhost-ssl.conf
para mudar a chave privada e o certificado:
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
Reinicie o apache para ativar o suporte a SSL:
systemctl restart apache2
18.2.1.5.4 Modificar a configuração do DHCP #
Substitua o prefixo http://
por https://
no dhcpd.conf/dhcpd6.conf
e reinicie o servidor DHCP.
systemctl restart dhcpd systemctl restart dhcpd6
18.3 Inicializando o cliente por boot HTTP #
Se o firmware já suporta o boot HTTP, conecte o cabo e escolha a opção de boot correta.