19 UEFI HTTP 부팅 서버 설정 #
이 장에서는 UEFI HTTP 부팅 서버를 설정하고 구성하는 방법에 대해 설명합니다.
19.1 소개 #
HTTP Boot는 네트워크를 통해 시스템을 부팅하고 배포할 수 있도록 DHCP, DNS 및 HTTP를 결합합니다. HTTP Boot는 PXE에 대한 고성능 대체 수단으로 사용할 수 있습니다. HTTP Boot를 사용하면 HTTP를 통해 URI에서 서버를 부팅할 수 있습니다. 따라서 로컬 네트워크 밖에 있는 서버에서 Linux 커널, 루트 파일 시스템과 같은 대규모 파일을 빠르게 전송할 수 있습니다.
19.1.1 클라이언트 시스템 구성 #
물리적 클라이언트 시스템에서 HTTP Boot를 활성화할지 여부는 하드웨어에 따라 달라집니다. 특정 시스템에서 HTTP Boot를 활성화하는 방법에 관한 자세한 내용은 문서를 참조하십시오.
19.1.2 준비 #
여기에서 설명한 설정은 192.168.111.0/24(IPv4) 및 2001:db8:f00f:cafe::/64 (IPv6) IP 서브넷을 사용하고, 서버 IP 주소는 예시 주소인 192.168.111.1(IPv4) 및 2001:db8:f00f:cafe::1/64(IPv6)입니다. 이 값이 특정 설정에 부합하도록 조정하십시오.
HTTP Boot 서버로 사용하려는 시스템에 dhcp-server, apache2(또는 lighttpd) 및 dnsmasq 패키지를 설치합니다.
19.2 서버 구성 #
19.2.1 DNS 서버 #
DNS 서버 구성은 옵션이지만 이를 통해 HTTP Boot 서버에 사용자에게 친숙한 이름을 할당할 수 있습니다. DNS 서버를 설정하려면 /etc/dnsmasq.conf
파일에 다음을 추가합니다.
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
/etc/dnsmasq.d/hosts.conf
파일에서 다음과 같이 IP 주소에 도메인 이름을 할당합니다.
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
DNS 서버를 시작하십시오.
systemctl start dnsmasq
UEFI 2.7이 변경되었으므로 SLE 15 이상 버전에서 shim 부트 로더를 사용해 추가 DNS 노드로 인해 발생할 수 있는 오류를 피하는 것이 좋습니다.
19.2.1.1 DHCPv4 서버 구성 #
DHCP 서버를 설정하기 전에 다음과 같이 /etc/sysconfig/dhcpd
에서 DHCP 서버에 대한 네트워크 인터페이스를 지정합니다.
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
이렇게 하면 DHCP 서버가 eth0
인터페이스에서만 서비스를 제공합니다.
PXE Boot와 HTTP Boot에 대해 모두 DHCPv4 서버를 설정하려면 다음 구성을 /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; }
DHCPv4 서버는 벤더 클래스 ID에 대해 HTTPClient
파라미터를 사용해야 합니다. 클라이언트가 이 파라미터를 사용해 HTTP Boot 오퍼를 식별하기 때문입니다.
다음과 같이 DHCP 데몬을 시작하십시오.
systemctl start dhcpd
19.2.1.2 DHCPv6 서버 구성 #
DHCPv6 서버를 설정하려면 /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"; }
이 구성은 부팅 URL의 형식, 벤더 클래스, 기타 필수 옵션을 정의합니다. DHCPv4 설정과 유사하게 부팅 URL을 제공해야 하며, 이 URL에는 IPv6 주소가 있어야 합니다. 벤더 클래스 옵션도 지정해야 합니다. DHCPv6의 경우 엔터프라이즈 번호 및 벤더 클래스 데이터(길이 및 내용)로 구성됩니다. HTTP Boot 드라이버는 엔터프라이즈 번호를 무시하므로 0
으로 설정할 수 있습니다. 벤더 클래스 데이터의 내용은 HTTPClient
여야 합니다. 그렇지 않으면 클라이언트가 오퍼를 무시합니다.
RFC 3315를 따르지 않는 이전의 HTTP Boot 구현에는 다음과 같이 다른 구성이 필요합니다.
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"; }
dhcpv6
데몬을 시작하십시오.
systemctl start dhcpd6
19.2.1.2.1 PXE 및 HTTP Boot에 모두 DHCPv6 서버 설정 #
다음 구성을 사용하면 PXE Boot 및 HTTP Boot에 모두 DHCPv6 서버를 구성할 수 있습니다.
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"; } }
다음과 같이 벤더 클래스를 특정 아키텍처에 일치시킬 수도 있습니다.
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"; }
이 예에서 HTTPClient:Arch:00016
은 AMD64/Intel 64 HTTP Boot 클라이언트를 가리킵니다. 이 구성을 통해 서버는 다양한 아키텍처를 동시에 제공할 수 있습니다.
19.2.1.2.2 방화벽 구성 #
DHCPv6 패킷이 방화벽의 RP 필터로 삭제되는 경우 로그를 확인하십시오. rpfilter_DROP
항목이 포함되어 있는 경우 /etc/firewalld/firewalld.conf
에서 다음 구성을 사용해 필터를 비활성화합니다.
IPv6_rpfilter=no
19.2.1.3 TFTP 서버 배포(옵션) #
PXE Boot 및 HTTP Boot에 대해 모두 지원을 제공하려면 TFTP 서버를 배포하십시오. tftp를 설치하고 해당 서비스를 시작합니다.
systemctl start tftp.socket systemctl start tftp.service
PXE Boot와 함께 사용할 특정 tftpboot-installation 패키지도 설치해야 합니다. zypper se tftpboot
명령어를 실행하여 사용 가능한 tftp-installation 패키지 목록을 표시한 다음 원하는 시스템 버전 및 아키텍처의 패키지를 설치합니다(예: tftpboot-installation-SLE-15-SP3-x86_64). 예: tftpboot-installation-SLE-VERSION-x86_64(VERSION을 실제 버전으로 대체). 다음과 같이 SLE-VERSION-x86_64
디렉토리의 내용을 TFTP 서버의 루트 디렉토리에 복사하십시오.
자세한 내용은 /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
를 참조하십시오.
19.2.1.4 HTTP 서버 설정 #
/srv/www/htdocs/
디렉토리 아래에 sle/
디렉토리를 만들고 첫 번째 시스템 ISO 이미지의 전체 컨텐트를 /srv/www/htdocs/sle/
디렉토리로 복사합니다. 그런 다음 /srv/www/htdocs/sle/EFI/BOOT/grub.cfg
파일을 편집합니다. 다음 예를 참조로 사용하십시오.
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 }
19.2.1.4.1 lighttpd 구성 #
Lighttpd에서 IPv4 및 IPv6 모두에 대한 지원을 활성화하려면 /etc/lighttpd/lighttpd.conf
를 다음과 같이 수정합니다.
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
다음과 같이 lighttpd
데몬을 시작하십시오.
systemctl start lighttpd
19.2.1.4.2 apache2 구성 #
Apache에는 추가 구성이 필요 없습니다. 다음과 같이 apache2
데몬을 시작하십시오.
systemctl start apache2
19.2.1.5 HTTP 서버에 대한 SSL 지원 활성화(옵션) #
HTTPS Boot를 사용하려면 기존 서버 인증서를 DER
형식으로 변환하여 클라이언트의 펌웨어에 등록해야 합니다.
서버에 이미 인증서가 설치되어 있다고 가정하고 다음 명령을 사용해 인증서를 클라이언트에서 사용할 수 있도록 DER
형식으로 변환하십시오.
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
19.2.1.5.1 서버 인증서를 클라이언트 펌웨어에 등록 #
변환한 인증서를 등록하는 정확한 절차는 클라이언트 펌웨어 구현에 따라 달라집니다. 어떤 하드웨어의 경우 외부 저장소 장치를 이 장치에 있는 인증서와 함께 사용하여 펌웨어 UI를 통해 인증서를 수동으로 등록해야 합니다. Redfish를 지원하는 시스템은 인증서를 원격으로 등록할 수 있습니다. 인증서 등록에 관한 자세한 내용은 해당 하드웨어의 설명서를 참조하십시오.
19.2.1.5.2 lighttpd에서 SSL 지원 활성화 #
lighttpd의 경우 개인 키와 인증서가 동일한 파일에 있어야 하므로 다음 명령을 사용해 두 가지를 통합하십시오.
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
CERTIFICATE.pem
을 /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
예를 들어 다음과 같이 mod_openssl
이 /etc/lighttpd/modules.conf
파일의 server.modules
섹션에 나열되어 있는지 확인합니다.
server.modules = ( "mod_access", "mod_openssl", )
SSL Support
의 /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" }
다음과 같이 lighttpd를 재시작하여 SSL 지원을 활성화하십시오.
systemctl restart lighttpd
19.2.1.5.3 Apache에서 SSL 지원 활성화 #
/etc/sysconfig/apache2
파일을 열고 다음과 같이 SSL 플래그를 추가합니다.
APACHE_SERVER_FLAGS="SSL"
예를 들어 ssl
모듈이 APACHE_MODULES
에 나열되어 있는지 확인하십시오.
그런 다음 개인 키 및 인증서를 /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/
ssl vhost 구성을 생성하십시오.
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
다음과 같이 /etc/apache2/vhosts.d/vhost-ssl.conf
를 편집하여 개인 키 및 인증서를 변경합니다.
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
다음과 같이 Apache를 재시작하여 SSL 지원을 활성화합니다.
systemctl restart apache2
19.2.1.5.4 DHCP 구성 수정 #
dhcpd.conf/dhcpd6.conf
에서 http://
접두사를 https://
로 변경하고 DHCP 서버를 다시 시작합니다.
systemctl restart dhcpd systemctl restart dhcpd6
19.3 HTTP Boot를 통한 클라이언트 부팅 #
펌웨어가 이미 HTTP Boot를 지원하는 경우 케이블을 연결하고 올바른 부팅 옵션을 선택하십시오.