집 서버에서 Cloudflare Tunnel을 거쳐 외부로 안전하게 연결되는 모습

집 서버에서 Cloudflare Tunnel을 거쳐 외부로 안전하게 연결되는 모습

클라우드플레어 터널(Cloudflare Tunnel)로 포트포워딩 없이 로컬 웹서비스 안전하게 외부 공개하기

컴퓨터, 소프트웨어 2026년 10월 12일

집에서 돌리는 웹서비스를 외부에서 접속하고 싶을 때, 가장 먼저 부딪히는 벽은 공유기입니다. 포트포워딩을 열고, 바뀌는 IP를 쫓아다니며 DDNS를 설정하는 과정은 번거로울 뿐 아니라 보안상으로도 찜찜합니다.

이 글을 읽으시면 공유기 설정을 전혀 건드리지 않고 Cloudflare Tunnel로 로컬 웹서비스를 안전한 HTTPS 주소로 외부에 공개하는 방법을 확실하게 이해하실 수 있습니다. 글의 후반부에는 rclone serve webdav 명령어로 내 컴퓨터의 폴더를 통째로 안전하게 공개하는 실전 예시도 준비했으니 끝까지 읽어보세요.

집 서버에서 Cloudflare Tunnel을 거쳐 외부로 안전하게 연결되는 모습
집 서버에서 Cloudflare Tunnel을 거쳐 외부로 안전하게 연결되는 모습

1. 전통적인 포트포워딩 공개의 위험성

집 서버를 외부에 공개하는 가장 고전적인 방법은 공유기에서 특정 포트를 여는 '포트포워딩'입니다. 겉보기엔 간단해 보이지만 실제로는 치명적인 세 가지 문제가 따릅니다.

  • 보안 취약성: 포트를 여는 순간 집의 공인 IP가 외부에 노출되며, 전 세계 해커들의 포트 스캔 및 해킹 공격 대상이 됩니다.
  • IP 변경 번거로움: 일반 가정용 인터넷은 통신사 사정에 따라 공인 IP가 수시로 바뀝니다. 이때마다 DDNS로 이를 쫓아다녀야 합니다.
  • CGNAT 환경 제약: 최근 늘어난 통신사 인터넷 환경에서는 공유기에 공인 IP 자체가 할당되지 않아 포트포워딩이 아예 불가능한 경우도 있습니다.
⚠️
저도 예전에 포트포워딩으로 개인 서버를 외부에 공개했다가, 서버 로그에 찍힌 무차별 대입(Brute-force) 로그인 시도들을 보고 식겁한 기억이 있습니다. 그 뒤로는 절대 공유기 포트를 직접 열지 않습니다.

2. Cloudflare Tunnel의 압도적인 장점

Cloudflare Tunnel의 가장 큰 매력은 공유기를 건드릴 필요가 전혀 없다는 점입니다. 방화벽의 문을 직접 여는 대신, 내 컴퓨터가 바깥쪽으로 안전한 통로를 먼저 개척하는 방식이기 때문입니다.

포트포워딩을 쓰지 않으니 집의 공인 IP가 외부에 노출될 일이 없고, 해커들의 공격이 닿을 통로 자체가 사라집니다. IP가 바뀌어도 DDNS로 고민할 필요가 없으며, 통신사가 IP를 쪼개 쓰는 CGNAT 환경에서도 완벽하게 동작합니다.

특히 훌륭한 점은 복잡한 HTTPS 보안 인증서 발급과 갱신을 Cloudflare가 알아서 무료로 처리해 준다는 것입니다. 트래픽이 Cloudflare의 거대한 서버 네트워크(엣지)를 거치면서 기본적인 DDoS 방어 효과까지 덤으로 얻게 됩니다.

3. Cloudflare Tunnel의 동작 원리

이 기술의 핵심은 발상의 전환입니다. 외부에서 내 집으로 들어오는 문을 쏙 닫아두고, 반대로 내 서버에서 Cloudflare 엣지 네트워크를 향해 아웃바운드(Outbound) 연결을 먼저 맺는 것입니다.

내 서버에서 실행되는 작은 백그라운드 프로그램인 cloudflared가 Cloudflare 서버와 암호화된 터널을 맺고 대기합니다. 사용자가 접속을 시도하면 다음과 같은 흐름으로 안전하게 통신이 이루어집니다.

사용자 → Cloudflare 엣지 → 암호화된 터널 → 내 컴퓨터의 cloudflared → 로컬 웹서비스

이 구조에서 공유기의 방화벽은 완전히 닫혀 있습니다. 80번이나 443번 포트를 열어둘 필요가 없고, 실제 서버의 공인 IP도 완벽하게 감춰집니다.

4. 실전! Cloudflare Tunnel 설정하기

지금부터 실제로 프로그램을 설치하고 터널을 연결해 보겠습니다. 사전에 무료 Cloudflare 계정과 본인 소유의 도메인 1개가 필요합니다.

4-1. cloudflared 프로그램 설치

먼저 내 컴퓨터나 서버에 터널 프로그램인 cloudflared를 설치합니다. 윈도우 환경이라면 터미널을 열고 패키지 관리자로 한 줄만 입력하면 끝납니다.

winget install --id Cloudflare.cloudflared

리눅스(Ubuntu/Debian) 환경이라면 공식 저장소를 등록하거나 .deb 파일을 받아 설치하시면 됩니다. 설치가 끝난 뒤 아래 명령어로 정상 설치되었는지 확인합니다.

cloudflared --version

4-2. 터널 생성과 도메인 연결

설치가 완료되었다면 Cloudflare 계정과 프로그램을 연동합니다. 아래 명령어를 입력하면 브라우저가 뜨면서 로그인 창이 나타납니다.

cloudflared tunnel login

로그인이 끝나면 나만의 터널을 하나 생성합니다. 여기서 my-tunnel 부분은 원하는 이름으로 자유롭게 바꾸셔도 됩니다.

cloudflared tunnel create my-tunnel

명령어가 성공하면 고유한 터널 ID와 함께 인증 파일이 생성됩니다. 이제 이 터널을 사용할 도메인 주소와 연결해 줍니다. (app.example.com 부분에 본인의 도메인을 입력하세요.)

cloudflared tunnel route dns my-tunnel app.example.com

4-3. 트래픽 라우팅 설정 파일 작성

어떤 도메인으로 들어온 요청을 내 컴퓨터의 어떤 포트로 보낼지 설정 파일을 만들어야 합니다. 홈 디렉토리 아래 .cloudflared 폴더 안에 config.yml 파일을 생성하고 아래와 같이 적어줍니다.

tunnel: <발급받은-터널ID-입력>
credentials-file: C:\Users\<사용자명>\.cloudflared\<발급받은-터널ID>.json
ingress:
  - hostname: app.example.com
    service: http://localhost:3000
  - service: http_status:404

마지막 줄의 404 규칙은 등록되지 않은 주소로 접근했을 때 깔끔하게 차단하기 위한 안전장치입니다. 이제 터널을 실행합니다.

환경 파일 경로

OS와 현재 유저에 따라 경로가 다를 수 있습니다. credentials-file(인증 파일)과 config.yml의 기본 위치는 아래와 같습니다.

# 리눅스
credentials-file: /home/사용자명/.cloudflared/<발급받은-터널ID>.json
config.yml:       /home/사용자명/.cloudflared/config.yml

# 윈도우
credentials-file: C:\Users\<사용자명>\.cloudflared\<발급받은-터널ID>.json
config.yml:       C:\Users\<사용자명>\.cloudflared\config.yml
  • cloudflared service install로 서비스에 등록하면 리눅스에서는 /etc/cloudflared/config.yml을 읽으므로, 이 경우 config와 인증 파일을 해당 위치로 옮겨야 합니다.
cloudflared tunnel run my-tunnel

브라우저를 켜고 https://app.example.com에 접속해 보세요. 내 컴퓨터의 3000번 포트에서 돌고 있던 로컬 웹서비스가 안전한 자물쇠(HTTPS) 아이콘과 함께 외부에 멋지게 노출된 것을 볼 수 있습니다. 항상 켜두고 싶다면 cloudflared service install 명령어로 시스템 백그라운드 서비스에 등록하면 됩니다.

💡
정식 설정이 귀찮을 때: 빠른 테스트용 Quick Tunnel
도메인이나 복잡한 설정 없이 당장 3초 만에 테스트해보고 싶다면 아래 명령어를 사용해 보세요.
```bash
cloudflared tunnel --url http://localhost:3000
```
실행 즉시 https://xxxx.trycloudflare.com 같은 임시 보안 주소가 튀어나옵니다. 프로그램을 끄면 주소도 바로 사라지므로 개발 중인 결과물을 잠시 공유할 때 매우 유용합니다.

5. 실전 응용: rclone으로 내 컴퓨터 폴더를 웹하드처럼 공개하기

웹서비스뿐만 아니라, 내 컴퓨터의 특정 폴더를 외부에서 파일 탐색기처럼 쓰고 싶을 때가 있습니다. 이럴 때 rclone과 Cloudflare Tunnel을 조합하면 완벽한 개인용 웹하드가 완성됩니다.

rclone으로 serve한 로컬 폴더를 클라우드플레어 터널로 외부에서 접근
rclone으로 serve한 로컬 폴더를 클라우드플레어 터널로 외부에서 접근

1단계: rclone으로 WebDAV 서버 띄우기

rclone은 다양한 클라우드 스토리지를 연결하는 도구이지만, 내 로컬 폴더를 WebDAV 서버로 변환하는 강력한 기능도 가지고 있습니다. 아래 명령어로 특정 폴더를 로컬 전용 포트로 띄웁니다.

rclone serve webdav "C:\내공유폴더" --addr 127.0.0.1:8080 --user myid --pass mypassword

여기서 --addr 127.0.0.1:8080으로 설정하여 외부에서는 절대 직접 접속하지 못하고, 오직 내 컴퓨터 내부의 터널을 통해서만 접근하도록 틀어막는 것이 보안상 중요합니다.

💡
비밀번호를 명령어에 직접 노출하기 찜찜하다면 --htpasswd 옵션을 사용해 보안 인증 파일로 관리할 수도 있습니다. 윈도우 환경이라면 작업 스케줄러에 등록해 부팅 시 자동 실행되게 해두면 편리합니다.

2단계: 터널 설정에 WebDAV 주소 추가하기

앞서 만들었던 터널에 새로운 도메인을 연결합니다.

cloudflared tunnel route dns my-tunnel files.example.com

그리고 config.yml 설정 파일을 열어 아래처럼 WebDAV 서비스 항목을 추가해 줍니다.

tunnel: <발급받은-터널ID-입력>
credentials-file: /home/사용자명/.cloudflared/<발급받은-터널ID>.json
ingress:
  - hostname: app.example.com
    service: http://localhost:3000
  - hostname: files.example.com
    service: http://127.0.0.1:8080
  - service: http_status:404

터널을 다시 실행한 뒤 스마트폰이나 외부 PC에서 https://files.example.com에 접속해 보세요. rclone 실행 시 입력했던 아이디와 비밀번호를 넣으면 내 컴퓨터 폴더 안의 파일들을 자유롭게 확인하고 내려받을 수 있습니다.


6. 외부 공개 시 꼭 기억해야 할 보안 주의사항

⚠️
Cloudflare Tunnel로 연결된 주소는 전 세계 어디서나 접근 가능한 열린 공간이 됩니다. 비밀번호나 로그인 기능이 없는 사내 관리자 페이지, 개인용 민감 데이터 서버를 무턱대고 공개하면 큰일 납니다. 중요한 서비스라면 반드시 자체 로그인 기능을 두거나, Cloudflare Access(Zero Trust) 기능을 함께 적용해 특정 사용자만 접속하도록 빗장을 걸어두세요.

저 역시 집 서버의 파일 저장소와 개인 메모 서비스를 이 방식으로 수개월째 안전하게 잘 쓰고 있습니다. 포트포워딩 시절처럼 공유기 설정을 만지작거릴 필요가 없고, 외부에 노출되는 접점이 철저히 보호되니 마음의 평화가 찾아왔습니다.

마무리

오늘 살펴본 Cloudflare Tunnel을 활용하면 공유기 포트포워딩, 복잡한 DDNS, 골치 아픈 인증서 발급이라는 세 가지 큰 장애물을 한 번에 뛰어넘을 수 있습니다.

집에서 놀고 있는 라즈베리파이나 남는 PC가 있다면, 오늘 당장 Quick Tunnel부터 가볍게 테스트해 보시기 바랍니다. 제 글이 유용하셨다면 주변에 공유해 주시고, 궁금한 점이 있다면 언제든 편하게 댓글 남겨주세요!

태그

BoniK

협업, 의뢰, 레슨 등 문의 : [email protected] | https://open.kakao.com/me/bonik

Bubble button icon