AWS Cloud School 8기
PxE(Preboot eXecution Environment) + 실습 with FTP, TFTP, DHCP, HTTP
rainhyeon
2025. 1. 27. 09:05
✅ PxE
- 다수의 Bare-metal 서버에 OS 설치하는 메커니즘
- Bare-metal 서버: OS가 설치되지 않은 서버
- Bare-metal 서버는 free boot 상태(IP가 없다)
→ IP를 땡겨 오기: DHCP로 IP를 임시로 할당해줘야 한다
- 계속 dhcp discover 메세지를 보낸다
- 원래는 내가 속한 네트워크에만 discover 메세지가 전송되지만,
help-address를 통해 다른 대역에도 discover 메세지를 전송할 수 있다.
🧪 PxE 실습
✅ 문제
1. pxe-ftp 10.10.3.21 (OS설치파일)
2. pxe-http 10.10.4.80 (킥스타트 파일)
3. pxe-tftp 10.10.3.69 (부팅에 필요한 파일 전송)
4. pxe-dhcp 10.10.1.67 (client에게 ip 부여)
5. pxe-client 10.10.3.0 /24 대역에서 150~160 아이피가 할당됐으면 좋겠다.
6. pxe 클라이언트들이 적절하게 OS가 설치되도록 한번 해보세요!
7. pxe 서버는 전부 미니멀로 해도 됩니다!
1️⃣ VM 생성
1. DHCP Server
- host-name: pxe-dhcp
- Network: VMnet1
- IP: 10.10.1.67 /24
- GW: 10.10.1.250
2. TFTP Server
- host-name: pxe-tftp
- Network: VMnet3
- IP: 10.10.3.69 /24
- GW: 10.10.3.250
3. FTP Server
- host-name: pxe-ftp
- Network: VMnet3
- IP: 10.10.3.21 /24
- GW: 10.10.3.250
4. HTTP Server
- host-name: pxe-http
- Network: VMnet4
- IP: 10.10.4.80 /24
- GW: 10.10.4.250
2️⃣ 토폴로지 생성
1. Router Interface 설정
R1(config)#int f0/0
R1(config-if)#ip add 10.10.1.250 255.255.255.0
R1(config-if)#no shu
R1(config-if)#int f0/1
R1(config-if)#ip add 10.10.3.250 255.255.255.0
R1(config-if)#no shu
R1(config-if)#int f1/0
R1(config-if)#ip add 10.10.4.250 255.255.255.0
R1(config-if)#no shut
R1(config-if)#int f2/0
R1(config-if)#ip add 211.183.3.250 255.255.255.0
R1(config-if)#no shut
- 통신 테스트
2. Routing Table 추가
R1(config-if)#ip route 0.0.0.0 0.0.0.0 211.183.3.2
- 외부 통신 테스트
3. PAT 설정
R1(config)#int f0/0
R1(config-if)#ip nat inside
R1(config-if)#int f0/1
R1(config-if)#ip nat inside
R1(config-if)#int f1/0
R1(config-if)#ip nat inside
R1(config-if)#int f2/0
R1(config-if)#ip nat outside
R1(config)#access-list 1 permit 10.10.0.0 0.0.7.255
R1(config)#ip nat inside source list 1 int f2/0 over
4. helper-address 설정
- Client와 DHCP 서버가 다른 네트워크 대역에 존재하기 때문에
R1(config)#int f0/1
R1(config-if)#ip helper-address 10.10.1.67
- Client(10.10.3.0 /24) → int f0/1
- DHCP Server → 10.10.1.67
Client(int f0/1)야 DHCP 서버 10.10.1.67에 있어!! → helper-address
3️⃣ DHCP 서버 설정
1. dhcp 관련 패키지 설치
yum install -y dhcp
2. dhcp 설정 파일 변경
vi /etc/dhcp/dhcpd.conf
subnet 10.10.1.0 netmask 255.255.255.0 {
}
subnet 10.10.3.0 netmask 255.255.255.0 {
# 서브넷(풀) 정의. 부여받는 client입장을 고려.
range 10.10.3.150 10.10.3.160;
# IP 할당 범위
option routers 10.10.3.250;
# client의 GW
option domain-name-servers 8.8.8.8;
# DNS 서버 지정
default-lease-time 600;
# IP 대여 시간 600초
allow booting;
#부팅 허용.
next-server 10.10.3.69;
#PxE 서버의 주소
filename "pxelinux.0";
}
- subnet 10.10.1.0 netmask 255.255.255.0 { } : DHCP 서버가 존재하는 네트워크 대역의 껍데기를 만들어줘야함
- subnet 10.10.3.0 netmask 255.255.255.0 : 실질적으로 Client가 받고 싶은 IP의 대역
- range: IP 대역의 범위
- option routers: GW
- domain-name: DNS 서버
- PxE 설정
- allow booting: 부팅 허용
- next-server: TFTP 서버 IP
- filename: TFTP 서버의 어떤파일 찾아갈건지
3. dhcp 서버 재시작
systemctl restart dhcpd
▶️ Client(Bare-metal Server)
1. VM 생성
- ISO 이미지 없이 설치
- Network: VMnet3
2. 할당 받은 IP 확인
4️⃣ TFTP 서버 설정
1. TFTP 관련 패키지 설치
yum install -y tftp-server
2. cdrom 삽입 확인
- 이 과정은 윈도우로치면 설치 usb를 삽입한 것과 같음
- cdrom 확인하기
ls /dev/cdrom
3. cdrom mount 하기
- cdrom: 운영체제 설치 관련 파일 존재
- cdrom은 마운트 하기 전에 사용 불가능 → /media로 마운트 하기
mount /dev/cdrom /media
4. 3개 파일 tftp 경로로 복사
- syslinux 설치: pxelinux.0 파일을 얻기 위해서
cp /media/images/pxeboot/vmlinuz /var/lib/tftpboot/
cp /media/images/pxeboot/initrd.img /var/lib/tftpboot/
yum install -y syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
5. default 파일 만들기
- /var/lib/tftpboot/pxelinux.cfg 디렉토리 만들기 + default 파일 생성
mkdir /var/lib/tftpboot/pxelinux.cfg
vi /var/lib/tftpboot/pxelinux.cfg/default
- default 파일
- 운영체제: centos7_pxe
- 커널: vmlinuz
- 램디스크: initrd.img
- os관련 패키지 다운: ftp 프로토콜 활용
- repo={프로토콜}//{해당 서버IP}/{경로}
DEFAULT centos7_pxe
LABEL centos7_pxe
kernel vmlinuz
APPEND initrd=initrd.img repo=ftp://10.10.3.21/pub
6. tftp 서버 재시작
systemctl restart tftp
▶️ Client
- TFTP에서 관련 파일(pxelinux.cfg/default) 받아옴
- FTP 서버를 통해 repo 파일을 받아와야함!!
⚠️ default 파일 오타 발생 오류
5️⃣ FTP 서버 설정
1. FTP 관련 패키지 설치
yum install -y vsftpd
2. cdrom 마운트
mount /dev/cdrom /media
3. media의 모든 파일 복사
- ftp로 os 설치 관련 파일들을 전송 → 더 신뢰성 있음
- ftp의 루트 디렉토리: /var/ftp/pub
cp -R /media/* /var/ftp/pub
▶️ Client
- 부팅 완료
bare-metal 서버는 아직 OS가 설치는 되지 않은 상태!
그냥 부팅 화면만 뜬것임
6️⃣ HTTP 서버 설정
1. HTTP 관련 패키지 설치
yum install -y httpd
2. httpd 서버 재시작
systemctl restart httpd
systemctl enable httpd
3. kickstart 파일 생성
- http의 루트 디렉토리: /var/www/html
vi /var/www/html/kick.cfg
- 운영체제 설치시 세부 내용
- url --url="ftp://10.10.3.21/pub" → bios를 클릭클릭하면서 설치할 파일들의 경로
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$swIw1250$8gcFzcZDQA36DR1S3cJlI.
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --enforcing
# Firewall configuration
firewall --disabled
# Reboot after installation
reboot
# System timezone
timezone Africa/Abidjan
# Use network installation
url --url="ftp://10.10.3.21/pub"
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1
%packages
@^minimal
@core
chrony
kexec-tools
%end
▶️ TFTP 서버
1. default 파일 변경
- kickstart 경로 작성하기
- ks=http://10.10.4.0/kick.cfg
- ks={프로토콜}//{해당 서버IP}/{경로}
DEFAULT centos7_pxe
LABEL centos7_pxe
kernel vmlinuz
APPEND initrd=initrd.img repo=ftp://10.10.3.21/pub ks=http://10.10.4.80/kick.cfg
2. TFTP 서버 재시작
systemctl restart tftp
▶️ Client
⚠️ /var/www/html/kick.cfg 파일 생성하지 않고, default 파일만 수정하면
🔥 성공 !!!!
- 가만히 두면 알아서 설치됨!!!
📍 전체 과정
1. DHCP로 IP 할당받음
2. tftp로부터 3개의 파일을 받아오라고함
→ vmlinuz: 압축된 리눅스 커널 파일
→ initrd.img: 램 디스크 파일(임시저장소)
→ pxelinux.0: 부팅을 위한 파일
(pxelinux.cfg/default 파일을 읽어라는 규칙이 지정됨)
2. pxelinux.cfg/default 파일 내부 명령대로 실행
- 부팅 방식: centos7_px로 해라
- 커널은 vmlinuz로 해라
- initrd.img를 램디스크로 사용해라
- repo=ftp://211.183.3.44/pub ftp 프로토콜을 활용하여 iso 파일을 받아와라
여기까지는 부팅 화면만 뜬것임!!
아직 OS가 설치되지 않은 상태!!
3. http를 통해 kickstart 파일 받아와라
- kickstart 파일: 실질적으로 운영체제를 설치하기 위한 내용
- CPU, RAM, 메모리 등.. 작성되어있는 파일
❓왜 FTP와 TFTP 두가지 프로토콜을 사용할까?
FTP
대용량 파일, 확실하게 보내고 싶을 때
TFTP
FTP를 사용할 수 없는 상황
- 운영체제가 설치되지 않은 상황 → TFTP 밖에 쓸 수 없는 상황이다
- TFTP로 필수적인 파일을 받아온 이후에 FTP로 실제적인 파일 가져옴