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 서버로부터 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. DHCPIP 할당받음

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로 실제적인 파일 가져옴