# 외부 접속의 정석: DDNS와 포트포워딩 완벽 가이드
Table of Contents
“집에서는 잘 되는데, 밖에서 접속이 안 돼요.”
홈서버 입문자가 가장 많이 하는 질문입니다.
Jellyfin을 설치하고, 대시보드도 만들었는데, 정작 회사나 카페에서 접속하려면 막막합니다.
192.168.0.10:8096을 브라우저에 입력해도 당연히 안 됩니다.
그건 집 안에서만 통하는 주소이기 때문입니다.
외부에서 홈서버에 접속하려면 두 가지가 필요합니다:
- 공인 IP 주소 (또는 그것을 대신할 도메인)
- 포트포워딩 (외부 요청을 내부 서버로 연결)
오늘은 이 두 가지를 완벽하게 이해하고 설정하는 방법을 다루겠습니다. 더불어 네트워크의 핵심 장비인 공유기(라우터)에 대해서도 깊이 있게 알아보겠습니다.
1. 먼저 알아야 할 네트워크 기초
공인 IP vs 사설 IP
인터넷에서 사용되는 IP 주소에는 두 종류가 있습니다.
공인 IP (Public IP)
- 전 세계에서 유일한 주소
- 인터넷에서 직접 접근 가능
- ISP(인터넷 서비스 제공자)가 할당
- 예:
121.134.xxx.xxx,211.234.xxx.xxx
사설 IP (Private IP)
- 내부 네트워크에서만 사용하는 주소
- 인터넷에서 직접 접근 불가
- 공유기가 할당
- 예:
192.168.0.x,192.168.1.x,10.0.0.x,172.16.x.x
인터넷
│
│ 공인 IP: 121.134.56.78
│
┌──────┴──────┐
│ 공유기 │
│ (Router) │
└──────┬──────┘
│ 사설 IP 대역: 192.168.0.x
┌────────────────┼────────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ 서버 │ │ PC │ │ 스마트폰 │
│192.168.0.10│ │192.168.0.11│ │192.168.0.12│
└───────────┘ └───────────┘ └───────────┘
집에 있는 모든 기기는 사설 IP를 사용합니다. 하지만 외부 인터넷과 통신할 때는 공유기의 공인 IP를 통해 나갑니다. 이 과정을 **NAT(Network Address Translation)**라고 합니다.
NAT의 원리
NAT는 “주소 변환”입니다. 내부 기기가 외부로 나갈 때, 공유기가 출발지 주소를 공인 IP로 바꿔줍니다.
[1] 내부에서 외부로 요청 (나가는 트래픽)
서버(192.168.0.10) ──→ 공유기 ──→ 인터넷(구글)
출발: 192.168.0.10 출발: 121.134.56.78
도착: 142.250.x.x 도착: 142.250.x.x
공유기가 출발지를 공인 IP로 변환
응답이 돌아오면 다시 192.168.0.10으로 변환
[2] 외부에서 내부로 요청 (들어오는 트래픽) - 문제 발생!
인터넷(친구) ──→ 공유기 ──→ ???
출발: xxx.xxx.xxx.xxx
도착: 121.134.56.78:8096
공유기: "8096 포트로 온 요청인데, 이걸 내부의 누구에게 전달하지?"
→ 포트포워딩이 없으면 버려짐
외부에서 집으로 들어오는 요청은 공유기에서 막힙니다. 공유기 입장에서는 이 요청을 내부의 어떤 기기로 보내야 할지 모르기 때문입니다.
이 문제를 해결하는 것이 포트포워딩입니다.
유동 IP vs 고정 IP
유동 IP (Dynamic IP)
- 대부분의 가정용 인터넷
- ISP가 주기적으로 IP를 변경할 수 있음
- 공유기를 재부팅하면 IP가 바뀔 수 있음
- 문제: IP가 바뀌면 외부 접속 주소도 바뀜
고정 IP (Static IP)
- 기업용 인터넷에서 주로 제공
- IP가 절대 바뀌지 않음
- 추가 비용 발생 (월 1~5만원)
대부분의 가정에서는 유동 IP를 사용합니다. 그래서 DDNS가 필요합니다.
2. DDNS: 변하는 IP에 고정된 이름을
DDNS란?
**DDNS(Dynamic DNS)**는 유동 IP 주소에 고정된 도메인 이름을 연결해주는 서비스입니다.
원리는 간단합니다:
- DDNS 서비스에서 도메인을 받습니다 (예:
myhome.duckdns.org) - 집에서 주기적으로 “내 현재 IP는 이거야”라고 알려줍니다
- DDNS 서비스가 도메인의 IP를 업데이트합니다
- IP가 바뀌어도 도메인 주소는 그대로
┌─────────────────────────────────────────────────────────────┐
│ DDNS 동작 원리 │
├─────────────────────────────────────────────────────────────┤
│ │
│ [1] IP 변경 감지 │
│ 홈서버: "내 공인 IP가 121.134.56.78에서 │
│ 121.134.99.123으로 바뀌었네?" │
│ │ │
│ ▼ │
│ [2] DDNS 서버에 알림 │
│ 홈서버 → DuckDNS: "myhome.duckdns.org의 IP를 │
│ 121.134.99.123으로 업데이트해줘" │
│ │ │
│ ▼ │
│ [3] DNS 레코드 업데이트 │
│ DuckDNS: "myhome.duckdns.org = 121.134.99.123" │
│ (즉시 반영) │
│ │ │
│ ▼ │
│ [4] 외부에서 접속 │
│ 친구: "myhome.duckdns.org로 접속할게" │
│ → DNS 조회 → 121.134.99.123 → 내 집 도착! │
│ │
└─────────────────────────────────────────────────────────────┘
무료 DDNS 서비스 비교
| 서비스 | 무료 도메인 | 갱신 주기 | 특징 |
|---|---|---|---|
| DuckDNS | xxx.duckdns.org | 무제한 유지 | 가장 인기, 설정 간단 |
| No-IP | xxx.ddns.net 등 | 30일마다 확인 필요 | 상업적 목적 불가 |
| Dynu | xxx.dynu.net | 무제한 유지 | 서브도메인 지원 |
| FreeDNS | 다양한 도메인 | 6개월마다 확인 | 도메인 선택폭 넓음 |
| Cloudflare | 본인 도메인 필요 | 무제한 | API로 DDNS 구현 가능 |
홈서버 입문자에게는 DuckDNS를 추천합니다. 설정이 가장 간단하고, 무료로 영구 사용 가능합니다.
DuckDNS 설정 가이드
Step 1: 계정 생성 및 도메인 등록
- https://www.duckdns.org 접속
- GitHub, Google, Reddit 등으로 로그인
- 원하는 서브도메인 입력 (예:
myhomelab) - “add domain” 클릭
- 토큰(Token) 확인 및 저장
Step 2: Docker로 자동 갱신 설정
# docker-compose.yml
services:
duckdns:
container_name: duckdns
image: lscr.io/linuxserver/duckdns:latest
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Seoul
- SUBDOMAINS=myhomelab # 본인 서브도메인
- TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # DuckDNS 토큰
- LOG_FILE=true
volumes:
- /srv/duckdns/config:/config
mkdir -p /srv/duckdns/config
docker compose up -d
Step 3: 갱신 확인
# 로그 확인
docker logs duckdns
# 정상이면 이런 메시지가 보입니다:
# Your IP was updated at [시간] to [IP주소]
Step 4: 테스트
# DNS 조회로 확인
nslookup myhomelab.duckdns.org
# 또는
ping myhomelab.duckdns.org
3. 공유기(라우터) 이해하기
포트포워딩을 설정하기 전에, 공유기가 무엇인지 제대로 이해해야 합니다.
공유기 vs 라우터
공유기는 한국에서 통용되는 명칭이고, 정확한 용어는 **라우터(Router)**입니다. 가정용 공유기는 사실 여러 장비의 기능을 하나에 합친 것입니다:
- 라우터: 네트워크 간 트래픽을 전달 (NAT 포함)
- 스위치: 여러 기기를 유선으로 연결
- 무선 AP: Wi-Fi 제공
- 방화벽: 기본적인 보안 기능
┌──────────────────────────────────────────────────────────────┐
│ 가정용 공유기의 구성 │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 공유기 (All-in-One) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 라우터 │ │ 스위치 │ │ 무선 AP │ │ 방화벽 │ │ │
│ │ │ (NAT) │ │ (4포트) │ │ (Wi-Fi) │ │(기초수준)│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ VS │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 기업/전문가 환경 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 라우터 │ │ 스위치 │ │ 무선 AP │ │ 방화벽 │ │ │
│ │ │ (별도장비)│ │(관리형) │ │ (별도) │ │(전문장비)│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ 각각 독립된 전문 장비로 구성 │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
공유기 등급별 비교
1) 통신사 기본 제공 공유기
- 가격: 무료 (임대)
- 성능: 기본적인 인터넷 사용에 충분
- 단점: 기능 제한, 설정 옵션 부족, 펌웨어 업데이트 느림
- 포트포워딩: 대부분 지원하지만 제한적
2) 가정용 프리미엄 공유기 (10~30만원)
- 대표 제품: ASUS RT-AX86U, Netgear Nighthawk, ipTIME AX8004
- 장점: 빠른 Wi-Fi, 더 많은 설정 옵션, VPN 서버 내장
- 단점: 여전히 GUI 기반, 고급 기능 제한
3) 소규모 비즈니스/홈랩용 라우터 (10~50만원)
- 대표 제품: MikroTik, Ubiquiti EdgeRouter, pfSense/OPNsense 장비
- 장점: 전문가급 기능, CLI 제어, VLAN, 고급 방화벽
- 단점: 학습 곡선 있음
MikroTik: 홈랩의 숨은 강자
홈서버를 진지하게 운영하려면 MikroTik 장비를 고려해볼 만합니다.
MikroTik 장점
- 가격 대비 기능이 압도적 (10만원대에 엔터프라이즈급 기능)
- RouterOS: 강력한 운영체제, 지속적인 업데이트
- VLAN, 다중 WAN, 고급 방화벽, QoS 모두 지원
- 학습하면 네트워크 실력이 크게 향상됨
MikroTik 단점
- 초보자에게 어려움 (GUI가 직관적이지 않음)
- Wi-Fi 기능이 별도 (AP 추가 구매 필요한 모델 있음)
- 초기 설정에 시간 투자 필요
추천 모델
| 모델 | 가격대 | 특징 | 추천 대상 |
|---|---|---|---|
| hAP ax2 | 10만원 | Wi-Fi 6, 기가비트, 소형 | 입문자, 소규모 홈랩 |
| hAP ax3 | 15만원 | Wi-Fi 6, 2.5G WAN | 중급자, 빠른 인터넷 |
| RB5009UG+S+IN | 25만원 | 2.5G x8, 10G SFP+, 팬리스 | 파워유저, 서버 전용 |
| CCR2004-16G-2S+ | 50만원+ | 16x 기가비트, 10G SFP+ x2 | 프로슈머, 소규모 기업 |
참고: 처음에는 통신사 공유기나 가정용 공유기로 시작해도 충분합니다. 나중에 네트워크 지식이 쌓이면 MikroTik이나 OPNsense로 업그레이드를 고려하세요.
4. 포트포워딩 설정하기
포트포워딩의 원리
포트포워딩은 “이 포트로 들어오는 요청은 이 기기로 보내라”라고 공유기에게 알려주는 것입니다.
외부에서 접속
│
│ 목적지: 121.134.56.78:8096
│
┌──────┴──────┐
│ 공유기 │
│ │
│ 포트포워딩 │
│ 규칙: │
│ 8096 → 192.168.0.10:8096
└──────┬──────┘
│
│ 목적지: 192.168.0.10:8096
│
┌──────┴──────┐
│ 홈서버 │
│ (Jellyfin) │
└─────────────┘
일반 공유기에서 포트포워딩 설정
공유기마다 메뉴 위치가 다르지만, 대체로 비슷합니다.
공통 절차:
- 공유기 관리 페이지 접속 (보통
192.168.0.1또는192.168.1.1) - 관리자 로그인
- “고급 설정” → “NAT/포트포워딩” 또는 “가상 서버” 메뉴 찾기
- 규칙 추가
ipTIME 공유기 예시:
192.168.0.1접속 → 관리자 로그인- 관리도구 → 고급 설정 → NAT/라우터 관리 → 포트포워드 설정
- 새 규칙 추가:
- 규칙 이름: Jellyfin
- 내부 IP 주소: 192.168.0.10
- 프로토콜: TCP
- 외부 포트: 8096
- 내부 포트: 8096
- 적용
ASUS 공유기 예시:
router.asus.com또는192.168.1.1접속- WAN → 가상 서버/포트 포워딩
- 포트 포워딩 목록에서 추가:
- 서비스 이름: Jellyfin
- 포트 범위: 8096
- 로컬 IP: 192.168.0.10
- 로컬 포트: 8096
- 프로토콜: TCP
- 적용
자주 사용하는 포트 목록
| 서비스 | 기본 포트 | 프로토콜 |
|---|---|---|
| Jellyfin | 8096 | TCP |
| Plex | 32400 | TCP |
| Nextcloud | 443 (또는 커스텀) | TCP |
| Home Assistant | 8123 | TCP |
| SSH | 22 | TCP |
| Nginx Proxy Manager | 80, 443 | TCP |
| Pi-hole Admin | 80 | TCP |
| WireGuard VPN | 51820 | UDP |
| Tailscale | 자동 (포트포워딩 불필요) | - |
외부 접속 테스트
포트포워딩 설정 후, 실제로 외부에서 접속되는지 테스트해야 합니다.
방법 1: 온라인 포트 체커
https://www.yougetsignal.com/tools/open-ports/
- Remote Address: 본인 공인 IP (또는 DDNS 도메인)
- Port Number: 테스트할 포트
- Check 클릭
방법 2: 스마트폰으로 테스트
- 스마트폰의 Wi-Fi를 끕니다 (모바일 데이터 사용)
- 브라우저에서
http://myhomelab.duckdns.org:8096접속 - 서비스 페이지가 뜨면 성공
방법 3: 원격 서버에서 테스트
# 클라우드 서버나 VPS가 있다면
curl -I http://myhomelab.duckdns.org:8096
# 또는 nc(netcat)으로 포트 확인
nc -zv myhomelab.duckdns.org 8096
5. 보안 위험과 대안
포트포워딩의 위험성
포트포워딩은 편리하지만, 보안 위험이 있습니다.
1) 공격 표면 증가
- 인터넷에 포트를 열면, 전 세계 누구나 그 포트를 스캔할 수 있습니다.
- 봇이 24시간 취약점을 찾아 돌아다닙니다.
# 실제로 서버 로그를 보면 이런 공격 시도가 넘쳐납니다
# SSH 포트(22)를 열어두면 분당 수십 건의 로그인 시도가 발생
Failed password for invalid user admin from 185.xxx.xxx.xxx
Failed password for invalid user root from 91.xxx.xxx.xxx
Failed password for invalid user test from 45.xxx.xxx.xxx
2) 서비스 취약점 노출
- Jellyfin, Nextcloud 등에 보안 취약점이 발견되면 즉시 공격당할 수 있습니다.
- 업데이트를 늦추면 위험합니다.
3) 비밀번호 무차별 대입 공격
- 약한 비밀번호를 사용하면 뚫릴 수 있습니다.
포트포워딩 시 반드시 지켜야 할 수칙
1) 꼭 필요한 포트만 열기
- 불필요한 포트는 절대 열지 않습니다.
- 테스트 후에는 사용하지 않는 포트포워딩 규칙을 삭제합니다.
2) 기본 포트 변경
- SSH 22 → 다른 포트로 변경
- 관리자 페이지는 가능하면 포트포워딩하지 않기
3) 강력한 비밀번호 + 2단계 인증
- 모든 서비스에 복잡한 비밀번호 사용
- 가능하면 2FA(OTP) 활성화
4) Fail2ban 또는 Crowdsec 설치
- 무차별 대입 공격 시 자동으로 IP 차단
5) 정기적인 업데이트
- 서비스와 OS를 항상 최신 버전으로 유지
포트포워딩의 대안들
사실 2025년 현재, 포트포워딩 없이도 외부 접속이 가능한 방법들이 있습니다.
1) Cloudflare Tunnel
- 무료
- 포트포워딩 없이 안전하게 서비스 공개
- CGNAT 환경에서도 동작
- 이 시리즈의 이후 포스팅에서 다룹니다
2) Tailscale
- 무료 (개인 사용)
- 메시 VPN으로 어디서든 내부 IP처럼 접속
- 포트포워딩 완전 불필요
- 이 시리즈의 이후 포스팅에서 다룹니다
3) ZeroTier
- Tailscale과 유사한 메시 VPN
- 셀프 호스팅 가능
4) WireGuard VPN
- 포트 하나만 열어서 VPN 서버 구축
- VPN 연결 후 모든 서비스에 내부 IP로 접근
- 가장 안전한 방법 중 하나
┌─────────────────────────────────────────────────────────────┐
│ 외부 접속 방법 비교 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 방법 보안성 설정 난이도 속도 비용 │
│ ────────────────────────────────────────────────────── │
│ 포트포워딩 낮음 쉬움 빠름 무료 │
│ VPN (WireGuard) 높음 중간 빠름 무료 │
│ Tailscale 높음 매우 쉬움 중간 무료 │
│ Cloudflare Tunnel 중~높음 쉬움 중간 무료 │
│ │
│ 추천: VPN > Tailscale > Cloudflare Tunnel > 포트포워딩 │
│ │
└─────────────────────────────────────────────────────────────┘
6. 실전 예제: Jellyfin 외부 접속
모든 내용을 종합해서 Jellyfin을 외부에서 접속 가능하게 만들어봅시다.
구성도
┌─────────────────────────────────────────────────────────────┐
│ │
│ 인터넷 ──→ myhomelab.duckdns.org ──→ 121.134.56.78 │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ 공유기 │ │
│ │ │ │
│ │ 8096 → │ │
│ │192.168. │ │
│ │ 0.10:8096│ │
│ └────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ Jellyfin │ │
│ │ 서버 │ │
│ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Step-by-Step
Step 1: 서버 IP 고정
서버의 사설 IP가 바뀌면 포트포워딩이 깨집니다. 서버 IP를 고정하세요.
옵션 A: 공유기에서 DHCP 예약
- 공유기 설정 → DHCP → 주소 예약
- 서버 MAC 주소에 192.168.0.10 할당
옵션 B: 서버에서 고정 IP 설정 (Ubuntu)
# /etc/netplan/00-installer-config.yaml
network:
ethernets:
eth0: # 네트워크 인터페이스 이름
addresses:
- 192.168.0.10/24
routes:
- to: default
via: 192.168.0.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
version: 2
sudo netplan apply
Step 2: DuckDNS 설정
위의 DuckDNS 설정 가이드를 따라 Docker 컨테이너를 실행합니다.
Step 3: 포트포워딩 설정
공유기 관리 페이지에서:
- 외부 포트: 8096
- 내부 IP: 192.168.0.10
- 내부 포트: 8096
- 프로토콜: TCP
Step 4: 방화벽 확인
서버에 방화벽이 설정되어 있다면 포트를 열어야 합니다.
# UFW 사용 시
sudo ufw allow 8096/tcp
sudo ufw status
Step 5: 테스트
스마트폰에서 Wi-Fi를 끄고 모바일 데이터로:
http://myhomelab.duckdns.org:8096
Jellyfin 로그인 페이지가 나오면 성공입니다.
7. 트러블슈팅
문제 1: 외부에서 접속이 안 됨
체크리스트:
- DDNS가 올바른 IP를 가리키는지 확인
nslookup myhomelab.duckdns.org - 본인 공인 IP 확인
curl ifconfig.me - 두 IP가 일치하는지 확인
- 포트포워딩 규칙이 제대로 설정되었는지 확인
- 서버 방화벽이 포트를 막고 있지 않은지 확인
- ISP가 해당 포트를 차단하지 않았는지 확인
문제 2: 집에서 DDNS 주소로 접속이 안 됨
일부 공유기는 **NAT Loopback(Hairpin NAT)**을 지원하지 않습니다. 집 안에서 외부 IP나 DDNS로 접속하면 안 되는 경우입니다.
해결책:
- 집에서는 내부 IP(192.168.0.10)로 접속
- 또는 공유기 설정에서 “NAT Loopback” 또는 “NAT 반향” 활성화
- 또는 Pi-hole 같은 로컬 DNS에서 해당 도메인을 내부 IP로 지정
문제 3: CGNAT 환경
일부 ISP(특히 LTE 인터넷, 일부 아파트 단지)는 CGNAT를 사용합니다. 이 경우 공유기에 할당된 IP도 사설 IP입니다.
확인 방법:
# 공유기의 WAN IP 확인
# 공유기 관리 페이지에서 외부 IP 확인
# 실제 공인 IP 확인
curl ifconfig.me
두 IP가 다르면 CGNAT 환경입니다.
해결책:
- ISP에 공인 IP 요청 (추가 비용 발생 가능)
- Cloudflare Tunnel 사용 (무료, 추천)
- Tailscale 사용 (무료, 추천)
8. 정리
외부 접속을 위해 알아야 할 핵심을 정리합니다.
┌─────────────────────────────────────────────────────────────┐
│ 외부 접속 체크리스트 │
├─────────────────────────────────────────────────────────────┤
│ │
│ [1] 네트워크 환경 파악 │
│ [ ] 공인 IP vs CGNAT 환경 확인 │
│ [ ] 유동 IP vs 고정 IP 확인 │
│ │
│ [2] DDNS 설정 │
│ [ ] DuckDNS 계정 생성 및 도메인 등록 │
│ [ ] 자동 갱신 Docker 컨테이너 실행 │
│ [ ] IP 갱신 확인 │
│ │
│ [3] 서버 준비 │
│ [ ] 서버 IP 고정 │
│ [ ] 서버 방화벽에서 포트 허용 │
│ │
│ [4] 포트포워딩 │
│ [ ] 공유기에서 포트포워딩 규칙 추가 │
│ [ ] 필요한 포트만 최소한으로 개방 │
│ │
│ [5] 테스트 │
│ [ ] 외부 네트워크에서 접속 확인 │
│ │
│ [6] 보안 강화 │
│ [ ] 강력한 비밀번호 설정 │
│ [ ] 2단계 인증 활성화 │
│ [ ] Fail2ban/Crowdsec 설치 고려 │
│ │
└─────────────────────────────────────────────────────────────┘
9. 다음 단계
포트포워딩으로 기본적인 외부 접속은 가능해졌습니다. 하지만 보안을 위해서는 HTTPS가 필수입니다.
다음 포스팅 **“보안의 시작: Let’s Encrypt SSL 인증서 발급”**에서는 무료로 HTTPS를 적용하는 방법을 다룹니다.
그 이후에는 리버스 프록시를 설정해서 여러 서비스를 하나의 도메인으로 깔끔하게 관리하고, 궁극적으로는 Cloudflare Tunnel이나 Tailscale로 포트포워딩 없이 안전하게 접속하는 방법도 배워보겠습니다.
:::tip[포트포워딩이 불안하다면?] 처음부터 Tailscale을 사용하는 것도 좋은 선택입니다. 포트포워딩 없이, 공인 IP 없이도 어디서든 홈서버에 접속할 수 있습니다. 설정도 5분이면 끝납니다. 이 시리즈의 이후 포스팅에서 자세히 다루겠습니다. :::