📒 리눅스·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) 리뷰로 작성 되었습니다.