Cloudflare Tunnel로 로컬 서버 외부 노출 — 포트포워딩 없이
집 PC에서 돌아가는 FastAPI 대시보드를 외부에서 접속하고 싶었다. Cloudflare Tunnel로 포트포워딩 없이 HTTPS 접속 가능하게 만든 과정.
왜 필요했나
JARVIS Dashboard (localhost:8902)를 외부에서 보고 싶었습니다. 외출 중에도 봇 상태를 확인하려면.
옵션들:
- 포트포워딩: 공유기 설정 + 고정 IP 필요. 번거롭고 보안 위험.
- ngrok: 무료 티어에서 URL이 매번 바뀜.
- Cloudflare Tunnel: 무료, HTTPS 자동, URL 고정. 선택.
Cloudflare Tunnel 구조
외부 브라우저
↓ HTTPS 요청
Cloudflare Edge
↓ (터널)
집 PC의 cloudflared 데몬
↓
localhost:8902 (JARVIS Dashboard)
집 PC에서 Cloudflare로 아웃바운드 연결만 합니다. 인바운드 포트를 열 필요가 없습니다.
설치
# cloudflared 설치 (Windows)
winget install Cloudflare.cloudflared
# 또는 GitHub Releases에서 직접 다운로드
# https://github.com/cloudflare/cloudflared/releases
로그인 및 터널 생성
# Cloudflare 로그인 (브라우저 열림)
cloudflared tunnel login
# 터널 생성
cloudflared tunnel create jarvis-dashboard
# 터널 ID 확인
cloudflared tunnel list
설정 파일
C:\Users\[사용자]\.cloudflared\config.yml:
tunnel: [터널-ID]
credentials-file: C:\Users\[사용자]\.cloudflared\[터널-ID].json
ingress:
- hostname: dashboard.yourdomain.com
service: http://localhost:8902
- service: http_status:404
hostname은 Cloudflare에서 관리하는 도메인이어야 합니다.
DNS 레코드 등록
cloudflared tunnel route dns jarvis-dashboard dashboard.yourdomain.com
Cloudflare DNS에 자동으로 CNAME 레코드가 추가됩니다.
실행
# 직접 실행 (테스트)
cloudflared tunnel run jarvis-dashboard
# 서비스로 등록 (Windows 서비스 = 자동 시작)
cloudflared service install
서비스 등록하면 Windows 시작 시 자동으로 터널이 열립니다.
겪었던 문제
문제 1: 도메인 없이는 안 됨
Cloudflare Tunnel의 Named Tunnel은 Cloudflare에서 관리하는 도메인이 필요합니다.
도메인 없으면 cloudflared tunnel --url localhost:8902 로 임시 URL 생성 가능합니다. 하지만 URL이 매번 바뀝니다.
문제 2: JARVIS Dashboard 인증 없음
터널을 열면 누구나 접속 가능합니다. 대시보드에 인증이 없었습니다.
Cloudflare Access로 이메일 인증 추가:
Cloudflare 대시보드 → Zero Trust → Access → Applications
→ Add an application → Self-hosted
→ 도메인 입력 → Policy: 특정 이메일만 허용
이메일 OTP로 로그인해야 접속 가능해집니다.
문제 3: 서비스 재시작 후 JARVIS Dashboard가 아직 안 켜진 상태
cloudflared 서비스가 먼저 시작되는데 JARVIS Dashboard(8902)가 아직 안 올라온 상태면 연결 실패.
502 Bad Gateway
해결: JARVIS Dashboard 자동 시작을 cloudflared보다 먼저 등록. Task Scheduler로 PC 시작 시 start_all.py 먼저 실행.
ngrok 대비 장점
| ngrok 무료 | Cloudflare Tunnel | |
|---|---|---|
| URL 고정 | ❌ (매번 변경) | ✅ |
| HTTPS | ✅ | ✅ |
| 비용 | 무료 (제한) | 무료 |
| 설정 | 간단 | 조금 복잡 |
| 인증 | 제한적 | Cloudflare Access |
현재 상태
JARVIS Dashboard를 외부에서 HTTPS로 접속합니다. Cloudflare Access로 접근 제한.
외출 중에도 봇 상태, 봇회의 결과, 인텔리전스 피드를 확인할 수 있습니다.