본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

FTP(신뢰성 y 파일 전송 y),DHCP(IP부여) ,TFTP(신뢰성 n 파일 전송 y), PxE(OS 설치 환경 -> 네트워크 -> 제공) 응용 문제/ 이론

by YUNZEE 2025. 1. 24.
728x90

FTP(File Transfer Protocol)

- 파일 전송 프로토콜

- tcp, 21(세션 수립), 20(데이터 전송)

- TCP(신뢰성 높음)

 

ftp랑 client서버 둘 다

vm 만들어주고(ftp랑 client서버)

공용 IP설정

국룰 해주고

 

[root@ftp ~]# yum install -y vsftpd

 

[root@ftp ~]# systemctl restart vsftpd

[root@ftp ~]# systemctl enable vsftpd

 

- ftp 사용자가 접속 시 기본디렉토리

[root@ftp ~]# touch /var/ftp/ftp-test.txt
[root@ftp ~]# echo 'ftp-test file' > /var/ftp/ftp-test.txt
[root@ftp ~]# cat /var/ftp/ftp-test.txt
ftp-test file

- 클라이언트에서 ftp로 접속 시 저 파일이 보이는지 확인해 보기 위해 테스트 파일을 만들어두자

 

client서버

[root@web ~]# yum install -y ftp
- 클라이언트에서 ftp클라이언트 역할을 할 명령어를 설치

 

[root@web ~]# ftp 211.183.3.21 => 여기 ip주소로 들어가
Connected to 211.183.3.21 (211.183.3.21). => 서버 접속 성공
220 (vsFTPd 3.0.2) => FTP 서버 프로그램 이름
Name (211.183.3.21:root): anonymous (입력) => 사용자 계정 입력 단계/ anonymous 계정을 사용한다는 건 공개적으로 접근 가능한 FTP서버에서 사용할 수 있다는 것
331 Please specify the password.
Password: (Enter 해주면 됨)
230 Login successful.

 

-> FTP 서버에 접속하는 과정임

 

-> FTP 기본 명령어

-> help 하면 많은 정보를 볼 수 있음

-> 이런 느낌

-> 아까 서버에서 만든 파일도 잘 보임

-> 아까 만든 파일이 잘 전송되는지 확인

- 받은 파일 확인할 수 있음

 

client 서버

[root@web ~]# ftp 211.183.3.21
Connected to 211.183.3.21 (211.183.3.21).
220 (vsFTPd 3.0.2)
Name (211.183.3.21:root): user
331 Please specify the password.
Password: user
530 Login incorrect.
Login failed.
ftp> dir
530 Please login with USER and PASS.

-> 없는 게 당연함 아까랑 다른 루트로 갔기 때문임

-> vm 만들 때 설정한 user 아이디랑 비번 입력 해야 됨

-> 이번에는 ftp서버의 사용자인 user로 ftp로그인을 해보면, 어디론가 접속은 가능한데 어딘지 모르겠음

 

FTP서버

[root@ftp ~]# echo 'user-home' > /home/user/test.txt

-> 내가 만들었던 user에 파일을 만들어주기 

-> user의 홈디렉토리인 /home/user에 테스트 파일을 만들자 

다시 client에 가서 확인해 보면 dir 했을 때 test파일이 생긴 걸 알 수 있음

TFTP(Trivial FTP)

trivial - 사소한

- UDP(빠름), 69번 포트 사용.

- 간단한 파일을 신뢰성 없이, 일방적으로 전송할 때

- FTP보다 기능이 제한되지만 빠르고 가볍게 파일을 전송 가능(보안 없음)

 

[root@ftp ~]# yum install tftp-server

 

[root@ftp ~]# systemctl restart tftp
[root@ftp ~]# systemctl enable tftp

 

[root@ftp ~]# vi /etc/xinetd.d/tftp

- tftp 설정파일 편집

[root@ftp ~]# systemctl restart tftp

[root@ftp ~]# systemctl enable tftp

- 설정 변경 반영 (필수는 아니지만 해주자)

 

[root@ftp ~]# echo 'tftp test file' > /var/lib/tftpboot/ttest.txt

- tftp 루트디렉토리에 테스트 파일 생성

 

client 서버

[root@web ~]# yum install -y tftp

->클라이언트에서 명령어 설치 후 접속

-> 만약에 내가 의도한 대로 됐다면, 현재 있는 곳이 tftp서버의 /var/lib/tftpboot경로일 것이고, 그곳에 파일이 하나 있을 것임

-> 신뢰성을 높이기 위해 꼭 파일 내용을 확인해야 됨.

 

만약에 여기서 tftp서버의 방화벽을  활성화한 후, client의 ttest.txt를 삭제한 다음 다시 get을 해보자

-> 그러면 파일은 있지만 안에 내용물이 없음

-> 방화벽 때문에 그런 거임

-> 이것처럼 내용물이 없는 걸 확인할 수 있음

PxE(픽시, Preboot eXecution Environment) 서버

-> 다수의 Bare-metal 서버: 서버가 옷을 안 입고 있는 상태 = OS가 설치되지 않은 상태 그래서 서버에 OS를 설치하는 환경을 네트워크를 통해 제공하는 서버

-> USB 없이 여러 대 동시에 OS를 설치 가능

-> Bare-metal 서버가 IP가 없는 상태라면 OS가 없는 상태라는 것

-> 일반적으로 DHCP + TFTP + HTTP/NFS 서버와 함께 동작함

 -> 나한테 IP 부여할 친구가 있나? 찾아보는 상태

-> 운영체제가 설치되지 않은 Bare-matal 서버들은 혹시라도 누군가 자신에게 아이피를 부여하지 않을까 하는 마음에 계속

dhcp  discover 메시지를 보냄(짝사랑 같... 은...)

실습해 보기
1. DHCP server 구성

 

- pxe 서버 구현에 필요한 3가지 패키지를 설치.

[root@PxE ~]# yum install -y dhcp tftp-server vsftpd

 

[root@pxe ~]# vi /etc/dhcp/dhcpd.conf

 

subnet 211.183.3.0 netmask 255.255.255.0

{

option routers 211.183.3.2;

#GW

option subnet-mask 255.255.255.0;

#SM

range dynamic-bootp 211.183.3.220 211.183.3.240;

# 부여받는 서버 ip 범위

 

option domain-name-servers 8.8.8.8;

#DNS

 

allow booting;

#부팅 허용.

next-server 211.183.3.67; 

#내 pxe ip주소를 넣어줘야 됨

#PxE 서버의 주소/ 정확하게 얘기하자면 tftp주소

filename "pxelinux.0";

# next-server에 가서 받아올 파일.

}

 

[root@PxE ~]# systemctl restart dhcpd
[root@PxE ~]# systemctl enable dhcpd

 

- 새로 만든 os 안 넣어준 파일 재시작을 클릭하면 ip는 잘 부여받은 걸 확인할 수 있음

- 그리고 TFTP 시도 중(next server) 없음

- dhcp서버로부터 아이피를 잘 부여받는 걸 확인 가능

 

2. tftp server 구성

- dhcp를 통해 IP를 부여받은 pxe.client가 tftp서버를 부팅 및 파일 전송에 필요한 환경이 구성되도록 해당 파일들을 복사해 오자

- iso 파일의 위치

 

우리는 아래의 3가지 파일이 필요하다.

pxelinux.0 = pxe 부팅에 필요한 파일. iso 파일에 없으므로 다운로드 해야 됨

initrd.img = 램디스크 파일(램을 마치 디스크처럼 사용 가능). 우리는 현재 사용할 준비가 되어있는 보조기억장치(디스크)가 없으므로 이 파일을 통해 램을 디스크처럼 사용할 예정

vmlinuz = 압축된 리눅스 커널 파일

 

[root@PxE ~]# cp /media/images/pxeboot/vmlinuz /var/lib/tftpboot
[root@PxE ~]# cp /media/images/pxeboot/initrd.img /var/lib/tftpboot
[root@PxE ~]# yum install -y syslinux

 

[root@PxE ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
[root@PxE ~]# ls /var/lib/tftpboot

 

[root@PxE ~]# systemctl restart tftp
[root@PxE ~]# systemctl enable tftp

3. ftp 서버를 구성

- OS 설치에 필요한 파일들을 ftp를 통해 보내줄 예정

 

[root@PxE ~]# cp -r /media/* /var/ftp/pub

- -r 하위 파일, 폴더 전부

- iso파일 내용 전부를 ftp 디렉토리에 복사해 주자

- 적용되는데 조금 오래 걸림

 

여기서 다시 tftp 서버

[root@PxE ~]# mkdir /var/lib/tftpboot/pxelinux.cfg

- 파일 확장자처럼 보이지만 경로임

 

[root@PxE ~]# cd /var/lib/tftpboot/pxelinux.cfg
[root@PxE pxelinux.cfg]# pwd
/var/lib/tftpboot/pxelinux.cfg

- 해당 경로로 이동된 상태


[root@PxE pxelinux.cfg]# vi default

- PxE pxelinux.cfg에 파일 만들어주기

[root@PxE pxelinux.cfg]# vi default

- default라는 파일을 통해 어떤 방식으로 부팅을 할지 결정 

-> 부팅 시 사용할 커널과 초기 랩디스크를 설정하는 파일

- 파일 만들어주기 

- 빈 공간 나오는 게 맞음

 

DEFAULT centos7_pxe
LABEL centos7_pxe 

 kernel vmlinuz
 APPEND initrd=initrd.img repo=ftp://211.183.3.44/pub

 

DEFAULT centos7_pxe
LABEL centos7_pxe  -> 부팅 방식

 kernel vmlinuz
 APPEND initrd=initrd.img repo=ftp://211.183.3.44/pub

- 사용할 프로토콜

- 램디스크: RAM의 일부를 가상 디스크처럼 사용하는 것을 말함(휘발성임)

- 운영체제 설치파일이 있는 저장소

 

[root@PxE pxelinux.cfg]# systemctl restart vsftpd
[root@PxE pxelinux.cfg]# systemctl enable vsftpd

 

- os를 등록 안 하고 vm을 돌렸을 때 이런 식으로 파일을 찾다가

- 정상적으로 다음페이지가 들어옴

 

3번을 http 변경해서 해보기(FTP 대신 사용 가능)(출처: 올라프)

[root@ftpOS ~]# systemctl stop vsftpd
[root@ftpOS ~]# systemctl disable vsftpd

- 저 경로에 pxe파일이 없기 때문에

- mkdir 해서 파일 만들어줌 -> pxe 

mkdir /pxe

 

cp -r /media/* /var/www/html/pxe # -r 옵션은 하위 파일과 폴더 전부 복사하는 옵션


cp -r /media/* /var/www/html/pxe
# -r 옵션은 하위 파일과 폴더 전부 복사하는 옵션

# 디렉터리 생성
# 파일처럼 보이지만 경로이다.
mkdir /var/lib/tftpboot/prelinux.cfg

# 위에서 생성한 prelinux.cfg 디렉터리로 이동
cd /var/lib/tftpboot/prelinux.cfg

# default 파일을 통해 어떤 방식으로 부팅할지 결정한다.
vi default

#################################################################################

# default 파일
DEFAULT centos7_pxe
LABEL centos7_pxe
kernel vmlinuz
APPEND initrd=initrd.img repo=http://211.183.3.44/pxe

#################################################################################

systemctl restart httpd
systemctl enable httpd

오류/ 해결방안

Xshell이랑 연결이 안 된다면?

ONBOOT가 no인지 확인해 보세요 -> yes로 바꿔줘야 됨

728x90