본문 바로가기
Infra2025년 12월 28일6분 읽기

Cloudflare Tunnel로 홈서버 외부 공개하기

YS
김영삼
조회 536

Cloudflare Tunnel 소개

Cloudflare Tunnel(구 Argo Tunnel)은 공인 IP나 포트포워딩 없이 내부 서비스를 외부에 안전하게 노출할 수 있는 서비스입니다. 홈서버 운영자에게 매우 유용합니다.

동작 원리

홈서버에서 cloudflared 데몬이 Cloudflare 엣지 서버로 아웃바운드 연결을 생성합니다. 외부 요청은 Cloudflare를 거쳐 이 터널을 통해 홈서버로 전달됩니다.

사용자 → Cloudflare CDN → Cloudflare Edge
                              ↓ (터널)
                         cloudflared (홈서버)
                              ↓
                         로컬 서비스 (localhost:3000)

설치 및 인증

# cloudflared 설치 (Ubuntu/Debian)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb

# Cloudflare 계정 인증
cloudflared tunnel login

# 터널 생성
cloudflared tunnel create my-homelab

터널 설정 파일

# ~/.cloudflared/config.yml
tunnel: a1b2c3d4-e5f6-7890-abcd-ef1234567890
credentials-file: /home/user/.cloudflared/a1b2c3d4.json

ingress:
  - hostname: home.example.com
    service: http://localhost:3000

  - hostname: grafana.example.com
    service: http://localhost:3001
    originRequest:
      noTLSVerify: true

  - hostname: ssh.example.com
    service: ssh://localhost:22

  - hostname: files.example.com
    service: http://localhost:8080

  - service: http_status:404

DNS 레코드 연결

# CNAME 레코드 자동 생성
cloudflared tunnel route dns my-homelab home.example.com
cloudflared tunnel route dns my-homelab grafana.example.com
cloudflared tunnel route dns my-homelab ssh.example.com

cloudflared tunnel route ip show

systemd 서비스 등록

sudo cloudflared service install

sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared

journalctl -u cloudflared -f

Cloudflare Access로 보안 강화

# Zero Trust 대시보드에서 Access Policy 설정
# 1. Application 생성
#    - Application name: Home Dashboard
#    - Session Duration: 24 hours
#    - Application domain: home.example.com

# 2. Policy 설정
#    - Allow: 이메일이 @example.com 도메인인 경우
#    - Allow: 특정 IP 범위 (회사 VPN 등)
#    - Deny: 나머지 모두

# 3. 추가 보안 옵션
#    - 다중 인증 (MFA) 요구
#    - 기기 인증서 요구
#    - 지리적 제한 설정

Docker와 함께 사용

# docker-compose.yml
version: '3'
services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    command: tunnel --config /etc/cloudflared/config.yml run
    volumes:
      - ./cloudflared:/etc/cloudflared
    restart: unless-stopped
    networks:
      - internal

  webapp:
    image: my-webapp:latest
    networks:
      - internal
    expose:
      - "3000"

networks:
  internal:

장점과 주의사항

장점주의사항
공인 IP 불필요Cloudflare 의존성
자동 SSL/TLS대역폭 제한 (무료 플랜)
DDoS 보호동영상 스트리밍 제한
Zero Trust 보안WebSocket 일부 제한
포트포워딩 불필요Cloudflare ToS 준수 필요
  • 홈서버를 외부에 공개할 때 가장 안전하고 간편한 방법
  • 무료 플랜으로도 충분한 기능 제공
  • SSH, RDP 등 TCP 서비스도 터널링 가능
  • Cloudflare WARP 클라이언트를 통한 사설 네트워크 구성도 가능

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록