본문 바로가기

개발 & IT/백엔드

방화벽 뚫지 않고 로컬 서버 공개하기 — Cloudflare Tunnel 실전 사용기

개발 서버에 22번 포트만 열려 있다면? 팀원들이 API를 테스트하려면 모두 SSH 터널링을 해야 할까요?
Cloudflare Tunnel을 사용하면 인바운드 포트 개방 없이 외부에서 접근 가능한 공개 URL을 단 한 줄로 만들 수 있습니다.


문제 상황

개발 서버에 NestJS API를 띄웠지만, 외부에서는 22번 포트(SSH)만 접근 가능한 상황이었습니다.
팀원들에게 API를 공유하려면 각자 SSH 터널링을 설정해야 해서 매우 번거로웠습니다.

[팀원 브라우저] --SSH--> [개발 서버 :22] --> [NestJS API :3000 내부]
❌ 팀원마다 터널링 설정 필요

Cloudflare Tunnel이란?

Cloudflare Tunnel(구 Argo Tunnel)은 아웃바운드 연결만으로 서버를 외부에 공개할 수 있는 서비스입니다.

서버가 Cloudflare 엣지 서버에 먼저 연결을 맺고, 외부 트래픽은 그 연결을 통해 역방향으로 들어옵니다.
방화벽 인바운드 규칙과 무관하게 동작하는 이유입니다.

[팀원 브라우저] --HTTPS--> [Cloudflare Edge] <--아웃바운드-- [개발 서버(cloudflared)]
✅ 인바운드 포트 개방 불필요

빠른 시작 — 계정 없이 3분 만에

1단계 — cloudflared 설치

서버에서 GitHub 접근이 막혀 있다면 로컬에서 다운받아 SCP로 전송합니다.

# Linux 서버에서 직접 다운로드 가능한 경우
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
# Windows에서 다운로드 후 서버로 전송
Invoke-WebRequest -Uri "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64" -OutFile cloudflared
scp cloudflared user@서버IP:/home/user/cloudflared

2단계 — 실행 권한 부여 및 터널 시작

chmod +x cloudflared
./cloudflared tunnel --url http://localhost:3000

3단계 — URL 확인

실행 후 수 초 내에 로그에 공개 URL이 출력됩니다.

https://continental-scanner-blacks-samples.trycloudflare.com
# 이 URL을 팀원들에게 공유하면 끝!

핵심 포인트
cloudflared 프로세스가 실행 중인 동안만 URL이 유효합니다. 재시작 시 URL이 바뀌므로, 지속적인 사용은 아래 Named Tunnel 방식을 권장합니다.


임시 vs 영구 터널 비교

구분 Quick Tunnel (계정 불필요) Named Tunnel (계정 필요)

설정 명령어 1줄로 즉시 사용 Cloudflare 대시보드 설정 필요
URL 재시작마다 변경 고정 서브도메인 사용 가능
안정성 uptime 보장 없음 재시작 후에도 URL 유지
용도 개발·테스트 운영·스테이징 환경

tmux로 백그라운드 실행

SSH 세션이 끊겨도 터널이 유지되도록 tmux를 사용합니다.

# 새 tmux 세션 생성
tmux new -s tunnel

# 터널 실행
./cloudflared tunnel --url http://localhost:3000

# Ctrl+B, D 로 세션 분리 (터널은 계속 실행)

# 다시 연결하려면
tmux attach -t tunnel

언제 쓰면 좋을까?

  1. 폐쇄망 개발 서버 — 방화벽 규칙을 변경할 수 없는 환경에서 팀 공유가 필요할 때
  2. 웹훅 테스트 — 로컬 개발 중인 엔드포인트를 외부 서비스(Slack, GitHub 등)에 연결해야 할 때
  3. 제한된 네트워크 환경 — 포트 포워딩이 불가능한 환경(카페, 회사 내부망)에서 데모를 공유해야 할 때
  4. 임시 공유 — 배포 전 QA팀이나 클라이언트에게 빠르게 접근 URL을 전달해야 할 때

🔒 보안 주의사항
Quick Tunnel URL은 인터넷에 공개됩니다. 인증이 없는 API라면 팀 내부 테스트 후 반드시 터널을 종료하세요.
운영 환경에서는 Cloudflare Access를 함께 사용해 인증을 추가하는 것을 권장합니다.

 

반응형