AI와 개발을 쉽게 이해하는 실험실

비개발자도 따라오는 AI 도구, 자동화, 개발 실험 기록

개발 & 기술/DevOps·인프라

Cloudflare Tunnel 5분 입문: 포트포워딩 없이 외부 접속

루민 Lumin 2026. 6. 27. 12:38
반응형

집에 작은 서버 하나 두고 외부에서 접속해보려다 공유기 설정에서 막힌 경험, 다들 한 번쯤 있으실 겁니다. 통신사 공유기는 포트포워딩 자체를 막아두기도 하고, 어렵게 뚫어놔도 IP가 바뀌면 다시 헤매야 합니다.

Cloudflare Tunnel은 그 모든 걸 우회합니다. 공유기를 건드리지 않고도 외부에서 내 서버에 안전하게 접속하게 해주는 무료 도구거든요. 이 글에서는 Cloudflare Tunnel이 뭔지, 왜 편한지, 그리고 실제로 5~10분 안에 어떻게 띄우는지를 처음 보는 분 기준으로 풀어봅니다.

Cloudflare Tunnel 한눈에 보기

Cloudflare Tunnel은 내 서버에서 Cloudflare로 먼저 연결을 거는 방식으로, 공유기 포트를 열지 않고도 외부 접속을 가능하게 하는 터널링 서비스입니다.

기존 방식과 가장 큰 차이는 연결 방향입니다. 일반적인 포트포워딩은 외부에서 우리 집 IP를 두드리는 구조라 공유기 설정·고정 IP·방화벽 같은 걸림돌이 줄줄이 따라옵니다. 반대로 Cloudflare Tunnel은 내 서버가 먼저 Cloudflare 쪽으로 연결을 걸어두고, 외부 사용자는 Cloudflare 도메인으로 들어옵니다.

비유하자면 이렇습니다.

💡 포트포워딩이 "우리 집 대문 번호를 외부에 알려주는 방식"이라면, Cloudflare Tunnel은 "직원이 회사 본사로 무전기를 켜둔 채 대기하는 방식"입니다. 외부에서 본사로 연락하면 무전기로 직원에게 전달됩니다.
[기존 포트포워딩]
외부 사용자 → 내 공유기 포트 → 내 서버
              (열어줘야 함)

[Cloudflare Tunnel]
외부 사용자 → Cloudflare 도메인
                  ↑
              (cloudflared가 미리 연결 유지)
                  ↓
              내 서버

Cloudflare 공식 소개에 따르면 이 서비스는 무료 플랜에서도 충분히 쓸 만하고, HTTPS 인증서도 자동으로 붙습니다. 따로 SSL 설정을 안 해도 https:// 주소가 만들어진다는 뜻입니다.

왜 포트포워딩 대신 Tunnel을 쓰는가

가장 큰 이유는 귀찮음과 보안입니다. 포트포워딩은 한번 뚫으면 그 포트가 인터넷에 그대로 노출됩니다. 자동화된 봇이 24시간 내내 비밀번호를 시도하는 게 흔한 일이에요.

항목 포트포워딩 Cloudflare Tunnel
공유기 설정 필요 (통신사 공유기는 막힌 경우 多) 불필요
고정 IP 필요 또는 DDNS 따로 설정 불필요
HTTPS 인증서 직접 발급·갱신 자동
외부 노출 포트 있음 (스캔 대상) 없음
도메인 연결 별도 작업 Cloudflare에서 한 번에
비용 무료 (보통) 무료 플랜으로 충분

특히 외부 노출 포트가 없다는 점이 큽니다. 내 서버는 Cloudflare 쪽으로만 outbound 연결을 유지하기 때문에 공격자가 우리 집 IP를 직접 두드릴 수가 없거든요.

실제 활용 예를 들면 이런 상황에서 빛을 봅니다.

  • 집에 두고 온 라즈베리파이로 만든 토이 프로젝트를 외부 친구에게 보여주고 싶을 때
  • NAS의 웹 인터페이스를 외부에서 안전하게 쓰고 싶을 때
  • 회사 네트워크 안에서만 돌아가는 사내 도구를 일부 사람에게만 열어주고 싶을 때 (Cloudflare Access와 결합)
  • 개발 중인 로컬 웹서버를 클라이언트에게 임시로 보여줄 때

저도 처음엔 "에이 그냥 ngrok 쓰지" 했는데, 고정 도메인무료 무제한 사용이 가능하다는 점에서 Cloudflare Tunnel로 갈아탔습니다.

시작하기 전 준비물

설치 전에 챙길 게 세 가지 있습니다. 한 번만 준비하면 그 다음부터는 신경 쓸 일이 거의 없어요.

  • Cloudflare 계정 (무료)
  • 본인 소유 도메인 1개 (Cloudflare에 등록되어 있어야 함)
  • 외부에서 접속하고 싶은 서버 1대 (라즈베리파이, NAS, 노트북, VM 등)

도메인은 새로 살 필요 없이 가지고 있는 걸 Cloudflare로 옮기기만 하면 됩니다(네임서버 변경). 도메인 등록업체에서 산 도메인을 Cloudflare에 무료로 연결할 수 있고, 이 과정은 보통 5~10분 안에 끝납니다.

도메인이 아예 없으신 분은 가비아·Namecheap·Cloudflare Registrar 같은 곳에서 .xyz, .shop 같은 저렴한 도메인을 1년에 1~2달러 수준으로 구할 수 있습니다(글 작성 시점 기준 가격).

⚠️ 무료 서브도메인 서비스(.tk, .duckdns.org 등)는 Cloudflare Tunnel과 직접 연결이 안 됩니다. 본인 도메인이 Cloudflare DNS에 등록되어 있어야 한다는 점은 꼭 확인하세요.

맥/리눅스에서 설치하는 단계

Cloudflare Tunnel을 띄우려면 cloudflared라는 작은 프로그램을 서버에 설치하고, 이 프로그램이 Cloudflare와 터널을 유지하도록 설정합니다. 터미널(검은 화면에 명령어를 입력하는 프로그램)에서 진행합니다.

1단계: cloudflared 설치

맥이라면 Homebrew(맥용 프로그램 설치 도구)로 한 줄이면 끝입니다.

brew install cloudflared

리눅스(라즈베리파이·우분투 등)라면 Cloudflare 공식 다운로드 페이지에서 자기 CPU에 맞는 패키지를 받으면 됩니다. 라즈베리파이 4 기준으로는 arm64 버전을 받습니다.

설치가 됐는지 확인하려면 다음을 입력합니다.

cloudflared --version

버전 번호가 뜨면 성공입니다.

2단계: Cloudflare 로그인

cloudflared tunnel login

이 명령은 브라우저를 자동으로 열어 Cloudflare에 로그인하라고 안내합니다. 로그인 후 어떤 도메인에 이 터널을 연결할지 고르면, 인증 정보가 자동으로 서버에 저장됩니다.

3단계: 터널 만들기

cloudflared tunnel create my-first-tunnel

my-first-tunnel 자리에 원하는 이름을 넣으면 됩니다. 이 명령이 끝나면 터널 ID(긴 영문+숫자 문자열)가 출력되는데, 이걸 어딘가 메모해두면 편합니다.

4단계: DNS 연결

내 도메인의 어떤 주소로 들어오면 이 터널을 쓸지 정합니다. 예를 들어 home.example.com으로 들어오는 트래픽을 이 터널로 받고 싶다면:

cloudflared tunnel route dns my-first-tunnel home.example.com

이 한 줄이 Cloudflare DNS에 자동으로 레코드를 추가해줍니다. 직접 DNS 관리 페이지에서 클릭할 필요 없어요.

5단계: 터널 실행

이제 내 서버의 어떤 포트로 트래픽을 넘길지 지정해서 터널을 띄웁니다. 예를 들어 내 서버에서 8080 포트로 웹앱이 돌고 있다면:

cloudflared tunnel --url http://localhost:8080 run my-first-tunnel

성공하면 몇 초 안에 https://home.example.com이 살아납니다. 브라우저에서 열어보세요.

자주 막히는 부분

처음 설정할 때 거의 모두가 한두 군데서 막힙니다. 제가 겪었거나 자주 보이는 사례 위주로 정리했습니다.

1. "DNS 레코드가 이미 존재한다"는 에러

기존에 같은 서브도메인에 A 레코드 같은 게 남아있으면 충돌이 납니다. Cloudflare 대시보드 → DNS 메뉴에서 해당 레코드를 삭제하거나 다른 서브도메인 이름을 쓰면 됩니다.

2. 터널은 떴는데 502 Bad Gateway

cloudflared는 잘 돌아가는데 내 서버 쪽 앱이 죽었거나, 포트 번호가 틀린 경우입니다. localhost:8080으로 지정했다면 같은 컴퓨터에서 curl http://localhost:8080이 응답하는지 먼저 확인해보세요.

3. 터미널을 닫으면 터널이 죽음

cloudflared tunnel run 명령은 포그라운드에서 돕니다. 터미널을 닫으면 터널도 같이 죽어요. 항상 띄워두려면 서비스로 등록해야 합니다.

sudo cloudflared service install

이 명령을 쓰면 컴퓨터 부팅 시 자동으로 터널이 살아납니다. 라즈베리파이처럼 24시간 켜두는 기기에 특히 유용합니다.

4. 회사·학교 네트워크에서 안 됨

방화벽이 outbound 443 포트를 막고 있으면 터널 연결 자체가 안 됩니다. 이럴 땐 관리자에게 문의하거나, 다른 네트워크에서 시도해보세요.

비용과 한계는 어디까지인가

Cloudflare Tunnel은 무료 플랜에서도 터널 개수 무제한, 트래픽 무제한으로 쓸 수 있습니다(글 작성 시점, Cloudflare 공식 가격 페이지 기준). 개인 프로젝트나 소규모 팀 용도로는 비용 걱정이 사실상 없습니다.

다만 알아둘 한계가 몇 가지 있습니다.

항목 무료 플랜
터널 개수 무제한
동시 접속 실용적인 수준에서 무제한
HTTP/HTTPS 트래픽 무제한
비-HTTP 트래픽 (SSH, RDP 등) 가능 (Cloudflare WARP 또는 cloudflared access 필요)
업로드 파일 크기 무료 플랜은 응답 본문 100MB 제한
Cloudflare Access (인증) 사용자 50명까지 무료

큰 파일 업로드가 잦은 서비스(예: 사진 NAS에서 1GB짜리 영상 통째로 업로드)는 무료 플랜의 100MB 제한에 걸립니다. 이 경우엔 유료 플랜(Pro 월 $25부터)이나 다른 방식을 검토해야 합니다.

상업 서비스로 운영하려는 분들은 Cloudflare 약관도 확인하세요. 비디오 스트리밍처럼 대역폭을 크게 쓰는 용도는 별도 제품(Stream)을 권장하고 있습니다.

마무리

Cloudflare Tunnel은 "외부에서 내 서버 접속하는 가장 쉬운 방법"이라는 자리에 꽤 굳건히 자리잡았습니다. 공유기를 건드리지 않고, HTTPS도 자동이고, 무료 플랜으로 개인 용도는 충분히 커버됩니다.

처음 시도하시는 분이라면 라즈베리파이나 노트북에 간단한 웹앱(예: python -m http.server 8080로 띄운 임시 페이지) 하나 올리고, 그걸 Cloudflare Tunnel로 외부에서 열어보는 것부터 해보시길 권합니다. 30분 안에 https://내도메인.com으로 접속되는 경험을 하고 나면, 그 다음부터는 NAS·Home Assistant·개인 위키 뭘 붙여도 똑같은 방식이라 응용이 빨라집니다.

다음에 기회가 되면 Cloudflare Access를 붙여 특정 이메일 주소만 접속 가능하게 만드는 방법도 다뤄보겠습니다. 혼자만 쓰는 관리자 페이지를 외부에 안전하게 열 때 정말 유용하거든요.

반응형