Alroha

[스나이퍼팩토리] 카카오클라우드 - 클라우드 개발자 교육 8주차(클라우드를 위한 리눅스 - DNS/Nginx) 본문

IT/Kakao cloud 부트캠프

[스나이퍼팩토리] 카카오클라우드 - 클라우드 개발자 교육 8주차(클라우드를 위한 리눅스 - DNS/Nginx)

헤이로하 2025. 9. 24. 09:30

📒 리눅스·DNS·Nginx 

  • 리눅스 기본 조작(파일/권한/사용자/패키지/네트워크)
  • DNS(BIND): Caching/Authoritative 설정, Zone 파일 작성, 방화벽 연동, 테스트
  • Nginx: 리버스 프록시, 로드밸런싱(라운드로빈/가중치) 구성 및 검증

1) 리눅스 소개 & 환경

1-1. CLI vs GUI 

  CLI GUI
특징 초기 낯설지만 규칙적 직관적, 쉬운 시작
속도/자동화 빠름, 스크립트로 자동화 수동 조작 위주
원격/서버 표준 (SSH) 제한적
반복 작업 매우 강함 상대적으로 약함

1-2. 파일시스템·경로

/ 루트(최상위)
/home 사용자 홈
/etc 설정 파일
/var 가변 데이터(로그 등)
/usr/bin 일반 실행 파일
/bin, /sbin 기본 실행 파일
  • 절대 경로: /home/user/file
  • 상대 경로: ../file, ./script.sh

1-3. 기본 실습 

echo "hello"; date; cal
whoami; pwd; cd ~; mkdir -p test/dir; touch test/a.txt
ls -la

2) 파일/디렉토리 기본

2-1. 조작 명령어

디렉터리 생성/이동 mkdir, cd mkdir -p proj/src && cd proj
파일 생성/복사/이동 touch, cp, mv touch a; cp a b; mv b dir/
삭제 rm, rm -r rm a; rm -r dir/
리스트/상세 ls, ls -la ls -la
권한 chmod chmod 644 file

2-2. 내용 확인·편집

내용 보기 cat, more, less, head, tail 긴 문서는 less 추천
검색 grep, grep -n/-i/-v 정규표현식 가능
편집 nano, vi(Vim) :wq 저장종료

3) 사용자·그룹·권한

3-1. 계정/그룹/권한 요약

사용자 추가·비번 useradd, passwd useradd bob && passwd bob
그룹 추가·할당 groupadd, usermod -aG groupadd dev; usermod -aG dev bob
소유권/권한 chown, chmod chown bob:dev file; chmod 640 file
sudo /etc/sudoers usermod -aG wheel bob (RHEL계열)

4) 패키지 & 서비스

4-1. 패키지 관리자

(해당 수업에서는 Rocky-dnf사용)

Debian/Ubuntu APT apt update && apt install nginx -y
RHEL/Rocky DNF/YUM dnf install nginx -y

4-2. 서비스 관리(systemd)

시작/중지 systemctl start/stop <svc>
재시작/상태(파일 수정시 꼭 재시작 해줘야함) systemctl restart/status <svc>
부팅시 시작 systemctl enable <svc>

5) 네트워크 & 방화벽

5-1. 네트워크 확인

IP확인 ip addr, ip r ip addr
통신점검 ping, curl -I URL ping 8.8.8.8
포트확인 ss -lntup `ss -lntup

5-2. 방화벽(Firewalld)

서비스 허용 firewall-cmd --permanent --add-service=dns
포트 허용 firewall-cmd --permanent --add-port=8081/tcp
적용 firewall-cmd --reload

6) DNS(BIND) 실습

6-1. 개요

  • 역할: FQDN ⇄ IP(정방향/역방향) 변환
  • 서버 데몬: named (패키지명 bind), 보안강화 bind-chroot
  • 프로토콜/포트: UDP 53(질의), TCP 53(존 전송/대응)

6-2. 설정 파일

/etc/named.conf 기본 옵션, listen/allow-query 등
/etc/named.rfc1912.zones zone 선언(Master/Slave/Hint)
/var/named/<zone파일> 실제 zone 레코드(A/NS/CNAME 등)

6-3. 설치 & 사용(Rocky)

dnf install bind-chroot -y
systemctl enable --now named
# (chroot 사용 시)
# systemctl enable --now named-chroot

6-4. named.conf 옵션

options {
    listen-on port 53 { 192.168.100.236; };
    allow-query { any; };
    recursion yes;            // 캐싱 DNS 시
};

include "/etc/named.rfc1912.zones";

6-5. Zone 선언(/etc/named.rfc1912.zones)

zone "kyt.com" IN {
    type master;
    file "kyt.zone";
};

6-6. Zone 파일(/var/named/kyt.zone) 

$TTL 86400
@   IN SOA ns.kyt.com. admin.kyt.com. (
        20250518  ; serial
        1D        ; refresh
        1H        ; retry
        1W        ; expire
        1D )      ; minimum
    IN NS  ns
ns  IN A   192.168.100.236
www IN A   192.168.100.129
ftp IN A   192.168.100.129
www1 IN CNAME www.a.b.cloudai.com.

6-7. 레코드 타입 요약

SOA 존 권한 시작 관리 메일·시리얼 등
NS 네임서버 지정 IN NS ns.kyt.com.
A/AAAA 이름→IP www IN A 192.168.0.10
CNAME 별칭 www1 IN CNAME www.target.com.
PTR IP→이름(역방향) 10 IN PTR host.kyt.com.

6-8. 방화벽 & 재시작

firewall-cmd --permanent --add-service=dns
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --reload
systemctl restart named

6-9. 테스트

nslookup
> server 192.168.100.236
> www.kyt.com

6-10. Caching vs Authoritative

 

  Caching DNS  Authoritative DNS
관리 도메인 없음 있음(Zone 보유)
응답 방식 재귀 질의, 캐시 응답 권한 있는 정답 제공
용도 속도/트래픽 절감 서비스 도메인 운영

6-11. chroot 

목적 루트 경로 격리로 보안 강화
경로 /var/named/chroot/...
유의 일반 named와 병행하지 않음

7) Nginx 프록시 & 로드밸런서

7-1. 프록시 개념 비교

     
  항목 포워드 프록시 리버스 프록시
위치 클라이언트 앞 서버 앞
목적 접근통제/캐시/익명성 백엔드 분산, SSL 종료, 캐시
클라이언트 인식 프록시 인지함 프록시 = 서버처럼 보임

7-2. 설치

  • Ubuntu
  • apt update && apt install nginx -y systemctl enable --now nginx
  • Rocky
  • dnf install epel-release -y dnf install nginx -y systemctl enable --now nginx

7-3. 리버스 프록시 (80 → 8081 전달)

/etc/nginx/conf.d/reverse_proxy.conf

server {
    listen 80;

    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • 백엔드 준비 (Apache):
  • dnf install httpd -y sed -i 's/^Listen .*/Listen 8081/' /etc/httpd/conf/httpd.conf systemctl enable --now httpd firewall-cmd --permanent --add-port=8081/tcp && firewall-cmd --reload

7-4. 로드밸런싱(라운드로빈/가중치)

/etc/nginx/conf.d/load_balancer.conf

upstream backend {
    server rocky2_IP:8081 weight=3;   # 가중치(선택)
    server rocky3_IP:8082;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

nginx.conf의 기본 server 블록을 주석하고
include /etc/nginx/conf.d/*.conf; 로 위 파일을 포함시킴.

7-5. 테스트

nginx -t && systemctl reload nginx
curl -I http://프록시IP/
# 여러 번 호출하여 백엔드 응답 번갈아 나오는지 확인

7-6. 유용 헤더 

Host 원 요청의 호스트 유지
X-Real-IP 실제 클라이언트 IP 전달
X-Forwarded-For 프록시 체인상의 IP 리스트

8) 명령어 모음

8-1. 주요 명령어

파일/편집 ls, cd, mkdir, rm -r, cat/less/head/tail, grep, nano/vi
권한/소유 chmod, chown, usermod -aG, passwd
패키지 apt/dnf install/remove, dnf info
서비스 systemctl start/enable/status
네트워크 ip addr, ping, ss -lntup, curl -I
방화벽 firewall-cmd --add-service/--add-port --permanent, --reload
DNS dnf install bind-chroot, systemctl start named, nslookup
 Nginx dnf/apt install nginx, nginx -t, systemctl reload nginx

8-2. DNS 포트·프로토콜

일반 질의 UDP 53
권한 응답/대형응답/Zone 전송 TCP 53

8-3. 정방향 vs 역방향

정방향 이름 → IP www.kyt.com → 192.168.100.129
역방향 IP → 이름 129.100.168.192.in-addr.arpa → www.kyt.com

9) 문제해결(트러블슈팅) 체크

DNS 응답 없음 서비스/방화벽/리스닝IP systemctl status named; `ss -lntup
도메인만 특정 실패 zone 파일/시리얼/문법 named-checkconf; named-checkzone kyt.com /var/named/kyt.zone; 시리얼 증가 후 재시작
chroot 혼동 경로 다름 설정·존 파일이 /var/named/chroot 하위인지 확인
Nginx 502/504 백엔드 다운/포트 차단 백엔드 systemctl status; curl http://127.0.0.1:8081; 방화벽 포트
헤더/원 IP 누락 헤더 미전달 proxy_set_header 확인, X-Forwarded-For 추가
설정 반영 안됨 테스트·리로드 누락 nginx -t && systemctl reload nginx

 


본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 2기(B-log) 리뷰로 작성 되었습니다.