Super Kawaii Cute Cat Kaoani
본문 바로가기
{Bootcamp}/KT Cloud Tech up 클라우드 인프라

[kt cloud] 리눅스 관리자 실습 (6)

by wonee1 2026. 9. 11.
728x90

 

 

 

 

1. Teaming 

 

Teaming이란

여러 네트워크 카드를 하나로 묶는 기술이다. 앞서 본 Bonding의 후속/개선 버전이다. 목적은 같다: 성능 향상 + 이중화(무중단).

  • 묶은 결과물을 team 인터페이스(예: team0)라고 부른다
  • 실제 카드들(ens37, ens38 등)은 team0에 소속됨
  • 카드 하나 죽어도 team0은 계속 살아있음 → 무중단

Bonding(bond0)의 요즘 버전이 Teaming(team0)이다. 더 유연하고 관리가 편하다. 개념은 똑같이 카드 여러 개 = 하나처럼

 

구조

 
team0 (묶음)
 ├─ ens37 (실제 카드1)
 └─ ens38 (실제 카드2)
  • team0에 IP를 주고
  • ens37, ens38은 team0의 구성원(port)으로
  • 하나 끊겨도 다른 하나가 이어받음

 

주요 모드 (runner)

 

Teaming은 모드를 runner라고 부른다.


activebackup 하나 쓰고 나머지 대기 (이중화)
roundrobin 번갈아 전송 (성능)
loadbalance 부하 분산
lacp 스위치 협상 표준

앞서 본딩 모드랑 같다. 제일 흔한 건 activebackup(이중화)

 

설정 흐름 (nmcli)

# 1. team 인터페이스 생성 (activebackup 모드)
nmcli con add type team con-name team0 ifname team0 \
  config '{"runner":{"name":"activebackup"}}'

# 2. team0에 IP 설정
nmcli con mod team0 ipv4.addresses 192.168.120.150/24
nmcli con mod team0 ipv4.method manual

# 3. 실제 카드들을 team0에 소속시키기
nmcli con add type ethernet con-name team0-p1 ifname ens37 master team0
nmcli con add type ethernet con-name team0-p2 ifname ens38 master team0

# 4. 활성화
nmcli con up team0
  • type team : team 인터페이스 생성
  • runner: activebackup : 이중화 모드
  • master team0 : 이 카드를 team0에 소속

 

 


 

2. NFS (Network File System)

 

NFS란

 

네트워크를 통해 다른 컴퓨터의 디렉토리를 내 것처럼 마운트해서 쓰는 기술이다. 리눅스/유닉스 서버끼리 파일을 공유하는 표준 방식이다. 서버의 폴더를 → 네트워크 너머 클라이언트가 → 자기 폴더처럼 마운트해서 사용.

앞서 배운 마운트는 디스크를 폴더에 연결했다. NFS는 그걸 네트워크로 확장한 거다. 네트워크 건너편 폴더를 내 폴더에 연결한다.

구조

 

NFS 서버 (파일 제공)          NFS 클라이언트 (파일 사용)
/share 폴더 공개    ──네트워크──→   /mnt/nfs에 마운트
                                    → /mnt/nfs 열면 서버의 /share가 보임
  • 서버: 폴더를 네트워크에 공개(export)
  • 클라이언트: 그 폴더를 마운트해서 사용
  • 클라이언트가 /mnt/nfs에 파일을 쓰면 → 실제론 서버에 저장됨

 

장점

  • 여러 서버가 같은 파일을 공유 (예: 공용 문서, 소스코드)
  • 중앙 서버에 데이터를 모아 일괄 관리/백업
  • 각 서버에 데이터를 복사할 필요 없음

.

NFS 서버 구축

1) NFS 설치

yum install -y nfs-utils

nfs-utils 패키지를 설치하면 관련 도구들(rpcbind, gssproxy 등)이 의존성으로 함께 깔린다. 앞서 배운 dnf/yum의 의존성 자동 처리다.

 

 2) /etc/exports 설정 

vi /etc/exports

 

공유 규칙을 적는다:

/share    *(rw)

 

/share 공유할 폴더
* 모든 클라이언트 허용
(rw) 읽기·쓰기 권한

*는 "누구나 접근 가능"이다. 실무에선 보안상 특정 IP/대역으로 제한하지만, 실습에선 *로 열어두는 경우가 많다.

 

설정 완료

 

 

/etc/exports 작성법 (man exports 예시)

 

누구에게 어떤 권한을 줄지 다양하게 지정하는 법이다.

공유폴더    클라이언트(옵션)

 

/              master(rw,no_root_squash)
/projects      proj*.local.domain(rw)
/usr           *.local.domain(ro) @trusted(rw)
/home/joe      pc001(rw,all_squash,anonuid=150,anongid=100)
/pub           *(ro,insecure,all_squash)

 

클라이언트 지정 방법

master 특정 호스트 이름
proj*.local.domain 와일드카드 (proj로 시작하는 호스트들)
*.local.domain 그 도메인 전체
@trusted 넷그룹 (그룹으로 묶은 것)
192.0.2.0/24 IP 대역
* 전부

 

주요 옵션

rw 읽기·쓰기
ro 읽기 전용
sync 즉시 디스크 기록 (안전)
no_root_squash 클라이언트 root를 서버 root로 인정
all_squash 모든 사용자를 익명으로 강등
anonuid/anongid 익명 사용자의 UID/GID 지정

 

 

3) 공유 폴더 생성

mkdir -m 1777 /share
  • -m 1777 : 권한을 1777로 설정하며 폴더 생성
  • 1777 = 앞 1은 sticky bit, 777은 모두 읽기·쓰기·실행

sticky bit(맨 앞 1)가 중요하다. 여러 사람이 쓰는 공유 폴더에서 자기가 만든 파일만 지울 수 있게 막는다. /tmp가 이 권한을 쓴다. 공유 폴더라 아무나 남의 파일 못 지우게 하는 거다.

 

이후  systemctl enable --now nfs-server 명령어를 실행해준다. 

 

4) 설정 적용

exportfs -ra
  • -r : /etc/exports 다시 읽기 (reload)
  • -a : 전부 적용 (all)

설정 파일 바꾼 뒤 반영하는 명령이다.

 

 

5) 공유 확인

exportfs
/share    <world>

<world>가 나오는 건 *로 설정해서 전 세계 누구나 접근 가능하다는 뜻이다. (world = 모두)

+ root_squash 

 

이게 NFS 보안의 핵심이라 짚어둔다.

  • root_squash (기본값) : 클라이언트의 root를 익명(nobody)으로 강등한다. 클라이언트 root가 서버 파일을 맘대로 못 건드리게 막는 보안 장치
  • no_root_squash : root를 그대로 인정 (위험, 신뢰하는 곳에만)
  • all_squash : root뿐 아니라 모든 사용자를 익명으로 강등

"squash"는 짓누른다는 뜻이다. root 권한을 짓눌러서(강등해서) 보안을 지킨다. 함부로 no_root_squash를 주면 클라이언트에서 서버를 장악할 수 있어서 위험하다.

 

 

한 폴더에 여러 규칙

 

/usr    *.local.domain(ro) @trusted(rw)

한 줄에 여러 대상을 공백으로 구분해서 다른 권한을 줄 수 있다.

  • *.local.domain에겐 읽기전용(ro)
  • @trusted 그룹에겐 읽기쓰기(rw)

 

 

 

전체 서버 구축 흐름

# 1. 설치
yum install -y nfs-utils

# 2. 공유 규칙 작성
vi /etc/exports
#   /share *(rw)

# 3. 공유 폴더 생성 (sticky bit)
mkdir -m 1777 /share

# 4. 설정 적용
exportfs -ra

# 5. 확인
exportfs

# 6. 서비스 시작
systemctl start nfs-server
systemctl enable nfs-server

 

NFS Client 구축

1) 설치 (클라이언트도 nfs-utils)

yum install -y nfs-utils

서버와 같은 패키지다. 클라이언트도 이게 있어야 NFS를 마운트할 수 있다.

 

2) 서버가 뭘 공유하나 확인 (showmount)

showmount -e localhost
Export list for localhost:
/share *
  • showmount -e 서버 : 그 서버가 공유(export)하는 목록 확인
  • /share * : /share를 모두(*)에게 공유 중이라는 뜻

여기선 localhost로 확인했는데(서버=클라이언트가 같은 머신인 실습), 실제로는 showmount -e 서버IP로 원격 서버를 확인한다. 마운트 전에 "서버가 진짜 공유하나" 먼저 보는 습관.

 

3) 마운트

mkdir /nfs
mount -t nfs localhost:/share /nfs
  • mkdir /nfs : 마운트할 빈 폴더 생성
  • mount -t nfs 서버:/share /nfs : 서버의 /share를 /nfs에 연결

앞서 배운 마운트 과정 그대로다. 차이는 -t nfs(NFS 타입)와 서버:/폴더(원격 지정).

 

4) 확인 (df)

df -h /nfs
Filesystem          Size  Used  Avail  Use%  Mounted on
localhost:/share    17G   2.2G  15G    13%   /nfs

localhost:/share가 /nfs에 마운트된 게 보인다. 성공이다. 이제 /nfs에 파일을 쓰면 서버의 /share에 저장된다.

 

⚠️ 방화벽 열어주기 

 

(mount s1:/ /mnt 후 ^C로 중단). 이게 바로 방화벽 문제다. NFS는 여러 포트를 쓴다. 서버 방화벽이 이 포트들을 막으면, 클라이언트가 접속을 시도해도 응답이 없어서 멈춘다(hang). Image 2처럼 마운트 명령이 안 끝나고 대기하는 게 그 증상이다.

 

서버에서 방화벽 열기

# NFS 서버(로키/s1)에서
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --reload

 

NFS는 3개 서비스(nfs, rpc-bind, mountd)를 함께 열어야 한다. 이 셋이 세트다.

nfs 파일 전송 (2049 포트)
rpc-bind 포트 연결 중개
mountd 마운트 요청 처리

 

firewall-cmd --list-services
# → nfs rpc-bind mountd 나오면 OK

 

서버
클라이언트

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90