PXE Boot - 네트워크를 통한 원격 OS 설치

PXE Boot - 네트워크를 통한 원격 OS 설치
PXE(Preboot Execution Environment) Boot는 네트워크를 통해 서버를 부팅하고 운영체제를 설치하는 기술입니다. 물리 서버를 대량으로 관리해야 할 때 특히 유용합니다.
PXE Boot란?
PXE Boot는 네트워크 서버에서 클라이언트 컴퓨터를 부팅시키고 OS를 설치하는 기술입니다.
주요 특징
- 베어메탈 서버 전용: 물리 서버를 위해 설계됨 (가상화나 클라우드 환경에는 비적합)
- 네트워크 기반: USB나 CD 없이 네트워크만으로 OS 설치 가능
- 대량 배포: 수십~수백 대의 서버에 동시 OS 설치 가능
- 자동화: Kickstart/Preseed와 결합하여 완전 자동 설치 가능
사용 시나리오
- 데이터센터의 베어메탈 서버 프로비저닝
- 대규모 서버 팜 구축
- 재설치가 빈번한 테스트 환경
- 디스크리스 워크스테이션 운영
PXE Boot 아키텍처
PXE Boot를 위해서는 서버에 다음 구성 요소가 필요합니다:
+----------------+
| PXE Server |
+----------------+
| Apache/Nginx | <- OS 이미지 호스팅
| DHCP | <- IP 할당 및 PXE 정보 제공
| TFTP | <- 부트로더 전송
+----------------+
|
| Network
|
+----------------+
| Client Server | <- PXE 부팅 요청
+----------------+
필수 서비스
- DHCP (Dynamic Host Configuration Protocol) Server
- 클라이언트에 IP 주소 할당
- PXE 부팅에 필요한 정보 제공 (TFTP 서버 주소, 부트 파일 이름)
- TFTP (Trivial File Transfer Protocol) Server
- 부트로더(pxelinux.0, grub) 전송
- 커널 및 initrd 파일 전송
- HTTP/FTP Server (Apache, Nginx 등)
- OS 설치 이미지 및 패키지 호스팅
- Kickstart/Preseed 설정 파일 제공
PXE Boot 동작 과정
1. 클라이언트 전원 ON, PXE 부팅 선택
|
v
2. DHCP 요청 (IP 주소 + PXE 정보)
|
v
3. DHCP 응답 (IP, TFTP 서버, 부트파일명)
|
v
4. TFTP로 부트로더 다운로드 (pxelinux.0)
|
v
5. 부트로더가 커널과 initrd 다운로드
|
v
6. 커널 부팅, 설치 프로그램 시작
|
v
7. HTTP/FTP에서 설치 이미지 다운로드
|
v
8. OS 설치 완료
서버 구성
1. DHCP 서버 설정
# dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8;
# PXE 설정
next-server 192.168.1.10; # TFTP 서버 IP
filename "pxelinux.0"; # 부트 파일
# UEFI 지원
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
if option architecture-type = 00:07 {
filename "grubx64.efi"; # UEFI 부팅
} else {
filename "pxelinux.0"; # BIOS 부팅
}
}
}
2. TFTP 서버 설정
# Ubuntu/Debian에서 TFTP 설치
sudo apt-get install tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
# 서비스 시작
sudo systemctl start tftpd-hpa
sudo systemctl enable tftpd-hpa
3. TFTP 디렉토리 구성
/var/lib/tftpboot/
├── pxelinux.0 # BIOS 부트로더
├── grubx64.efi # UEFI 부트로더
├── ldlinux.c32
├── menu.c32
├── pxelinux.cfg/
│ └── default # 기본 메뉴 설정
├── images/
│ └── centos8/
│ ├── vmlinuz # 커널
│ └── initrd.img # 초기 램디스크
4. PXE 메뉴 설정
# /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
PROMPT 0
TIMEOUT 300
ONTIMEOUT local
MENU TITLE PXE Boot Menu
LABEL centos8
MENU LABEL Install CentOS 8
KERNEL images/centos8/vmlinuz
APPEND initrd=images/centos8/initrd.img inst.repo=http://192.168.1.10/centos8 inst.ks=http://192.168.1.10/ks/centos8.cfg
LABEL local
MENU LABEL Boot from local disk
LOCALBOOT 0
5. HTTP 서버 설정 (Apache)
# Apache 설치
sudo apt-get install apache2
# OS 이미지 마운트
sudo mkdir -p /var/www/html/centos8
sudo mount -o loop CentOS-8-x86_64-DVD.iso /var/www/html/centos8
# Apache 시작
sudo systemctl start apache2
sudo systemctl enable apache2
Kickstart 자동 설치 (CentOS/RHEL)
완전 자동 설치를 위한 Kickstart 설정:
# /var/www/html/ks/centos8.cfg
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
clearpart --all --initlabel
# 언어 및 키보드
lang en_US.UTF-8
keyboard us
timezone Asia/Seoul --isUtc
# 네트워크
network --bootproto=dhcp --device=eth0 --onboot=on
network --hostname=server01
# 루트 비밀번호 (암호화됨)
rootpw --iscrypted $6$xxxx...
# 설치 완료 후 재부팅
reboot
# 패키지 선택
%packages
@^minimal-environment
vim
wget
curl
%end
# 설치 후 스크립트
%post
# SSH 키 설정
mkdir -p /root/.ssh
echo "ssh-rsa AAAA..." >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
# 기본 설정
systemctl enable sshd
%end
Preseed 자동 설치 (Ubuntu/Debian)
Ubuntu/Debian용 자동 설치 설정:
# preseed.cfg
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us
# 네트워크
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string ubuntu-server
# 미러
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
# 파티션
d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
# 사용자
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password $6$xxxx...
# 패키지
tasksel tasksel/first multiselect standard, ssh-server
# 설치 완료 후
d-i finish-install/reboot_in_progress note
클라이언트 설정
BIOS에서 PXE 부팅 활성화
- BIOS/UEFI 설정 진입 (F2, DEL, F12 등)
- Boot Order에서 Network Boot / PXE Boot 활성화
- Network Boot를 첫 번째 부팅 순서로 설정
일회성 PXE 부팅
대부분의 서버는 F12 키로 일회성 부팅 메뉴에 진입:
- Network Boot / PXE 선택
- OS 설치 후 자동으로 로컬 디스크로 부팅
고급 기능
MAC 주소 기반 개별 설정
특정 서버에 다른 설정을 적용:
# /var/lib/tftpboot/pxelinux.cfg/01-aa-bb-cc-dd-ee-ff
# MAC 주소가 AA:BB:CC:DD:EE:FF인 서버 전용 설정
DEFAULT centos8-custom
LABEL centos8-custom
KERNEL images/centos8/vmlinuz
APPEND initrd=images/centos8/initrd.img inst.ks=http://192.168.1.10/ks/server-special.cfg
iPXE로 기능 확장
iPXE는 PXE의 확장 버전으로 더 많은 기능 제공:
#!ipxe
dhcp
chain http://boot.example.com/menu.ipxe
트러블슈팅
일반적인 문제
- DHCP 응답 없음
- DHCP 서버 상태 확인
- 방화벽에서 UDP 67, 68 포트 허용
- TFTP 파일 다운로드 실패
- TFTP 서버 상태 확인
- 방화벽에서 UDP 69 포트 허용
- 파일 권한 확인
- 부트로더 로드 후 멈춤
- pxelinux.cfg/default 설정 확인
- 커널/initrd 경로 확인
로그 확인
# DHCP 로그
tail -f /var/log/syslog | grep dhcp
# TFTP 로그
tail -f /var/log/syslog | grep tftp
# Apache 로그
tail -f /var/log/apache2/access.log
결론
PXE Boot는 대규모 베어메탈 서버 환경에서 OS 설치를 자동화하는 강력한 도구입니다:
- 효율성: USB나 CD 없이 네트워크만으로 설치
- 확장성: 수백 대의 서버에 동시 설치 가능
- 자동화: Kickstart/Preseed와 결합하여 무인 설치
- 일관성: 모든 서버에 동일한 설정 적용
클라우드 환경에서는 AMI나 이미지 기반 프로비저닝이 일반적이지만, 온프레미스 데이터센터나 베어메탈 서버 환경에서는 여전히 PXE Boot가 중요한 역할을 합니다.
Comments