Cloudflare Tunnel로 로컬 서버 외부 노출 — 포트포워딩 없이

집 PC에서 돌아가는 FastAPI 대시보드를 외부에서 접속하고 싶었다. Cloudflare Tunnel로 포트포워딩 없이 HTTPS 접속 가능하게 만든 과정.

Cloudflare Tunnel로 로컬 서버 외부 노출 — 포트포워딩 없이

왜 필요했나

JARVIS Dashboard (localhost:8902)를 외부에서 보고 싶었습니다. 외출 중에도 봇 상태를 확인하려면.

옵션들:

  1. 포트포워딩: 공유기 설정 + 고정 IP 필요. 번거롭고 보안 위험.
  2. ngrok: 무료 티어에서 URL이 매번 바뀜.
  3. 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로 접근 제한.

외출 중에도 봇 상태, 봇회의 결과, 인텔리전스 피드를 확인할 수 있습니다.

#Cloudflare Tunnel#ngrok#로컬서버#외부접속#JARVIS