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

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

YS
김영삼
조회 556
Cloudflare Tunnel로 홈서버 외부 공개하기

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로 등록