NFS(Network File System)

2025. 1. 21. 14:24Network 공부

네트워크를 통해 파일을 공유할 수 있도록 설계된 분산 파일 시스템 프로토콜

- 기본 포트 2049 포트 추가적으로 RPC 111번 포트

추가적으로 데이터를 송수신할 때 랜덤하게 포트번호를 부여한다.

 

** 주요 특징 **

1) 분산 파일 공유

네트워크 상의 서버에 저장된 파일을 마치 로컬 시스크에 있는 파일처럼 사용할 수 있다. 이를 통해 여러 사용자가 동일한 데이터를 공유하고 접근 할 수 있다.

 

2) 클라이언트 < - > 서버 모델

클라이언트 - 서버 모델을 기반으로 동장하며, 서버는 파일 시스템을 공유하고, 클라이언트는 이를 마운하여 사용한다

 

** 마운트

마운트는 서버에 있는 파일 시스템(ex: 특정 디렉토리)를 클라이언트의 파일 시스템에 부착하여, 로컬 디스크의 일부처럼 사용할 수 있게 하는 작업 

 

3) 무상태 설계 (Stateless Design)

NFS v4 이전버전은   Stateless 프로토콜로 설계 되었으며, 클라이언트와 서버 간 연결 상태를 유지하지 않습니다. 

부터는 상태 정보를 일부 유지하도록 변경됨 

 

4) 보안

초기에는 보안이 취약했지만 , Kerberos 인증, 암호화, 접근 제어 목록(ACL) 등으로 보안을 강화함

 

 

주요 버전?

NFS v2 - UDP 프로토콜 기반

 

NFS v3 - TCP 및 UDP 지원

 

NFS v4 - TCP 프로토콜 전용

보안 및 성능 개선

상태 기반 프로토콜로 변경

 

 

** NFS 작동방식 **

1) 파일 공유

서버는 특정 디렉토리를 네트워크를 통해 공유하도록 설정한다.

이를 export 라고 한다

 

2) Mount

 

3) 파일전송

클라이언트가 요청한 파일을 서버가 네트워크를 통해 전송하며, 읽기 / 쓰기작업이 이루어진다.  

 

 

장점 !!!

- 유연한 파일 공유

다수의 클라이언트와 서버가 네트워크를 통해 쉽게 파일을 공유할 수 있다. 

 

- 중앙 집중화

데이터를 중앙에서 관리하기 때문에 유지보수가 편함

 

- 운영 체제 독립성

다양한 운영 체제에서 지원된다.

 

 

단점 !!!

- 네트워크 의존성

 

- 보안 취약점

적절한 보안 설정이 필요

 

- 속도 제한

대규모 환경에서 성능이 제한

 

 


**** NFS 동작 시 주의사항

- 방화벽 설정

NFS는 2049 포트와 RPC에 의해 동작하므로, 클라이언트와 서버 간 통신을 위해 방화벽 설정이 필요

 

- SELinux 설정 

SELinux가 활성화된 경우, NFS를 올바르게 동작시키기 위해 설정을 추가로 변경이 필요할 수 있음

 

 

 

ex) 설정 예제 ( Linux 기준)

서버 설정

/etc/exports 파일에 공유 디렉토리와 접근 권한을 설정

/shared_directory 192.168.1.0/24(rw,sync,no_subtree_check)

 

- NFS 서비스 시작

sudo exportfs -a
# exportfs: NFS 서버에서 공유할 디렉토리를 관리하는 명령어

sudo systemctl start nfs-server
# NFS 서버 프로세스를 시작하여 클라이언트 요청을 처리할 수 있도록 활성화

 

 

 

클라이언트 설정

- 서버의 디렉토리를 마운트

sudo mount -t nfs 192.168.1.100:/shared_directory /mnt

 

sudo : 관리자 권한 (superuser privileges)으로 명령 실행

- t : 사용할 파일 유형

nfs : 시스템 프로토콜

192.168.1.100:/shared_data :

마운트하는 원격 파일 시스템의 주소

NFS 서버의 IP 주소 와 서버에서 공유하고 있는 디렉토리 경로

/mnt/server_data : 

클라이언트에서 원격 파일 시스템을 마운트할 위치

 

자동 마운트 (예: /etc/fstab 설정)

192.168.1.100:/shared_directory /mnt nfs defaults 0 0

 

위와 같이 설정하면

 

사진과 같이 구현되며,


클라이언트가 /mnt/server_data/file1.txt를 열어 내용을 수정하거나, /mnt/server_data/docs/report.pdf를 읽으면, 이 작업은 실제로 서버의 /shared_data 디렉토리에 저장된 파일을 대상으로 이루진다.