13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] Cloudflare Tunnel

  • [Nas] Cloudflare NAS 원격 접속: Tunnel 연결 오류 디버깅 완벽 가이드

    [Nas] Cloudflare NAS 원격 접속: Tunnel 연결 오류 디버깅 완벽 가이드

    안녕하세요, 13년차의 서버실입니다!

    오늘은 제 홈랩에서 개인 NAS(Network Attached Storage)를 원격으로 안전하게 접속하려고 Cloudflare Tunnel(클라우드플레어 터널)을 구축하다가 겪었던 ‘삽질 경험’과 그 해결 과정을 솔직하게 공유해보려고 합니다. 혹시 저처럼 Cloudflare Tunnel로 NAS 원격 접속을 시도하다가 연결 오류에 막혀본 적 있으신가요? 그렇다면 이 글이 많은 도움이 될 거라고 생각합니다.

    예전에는 VPN이나 포트 포워딩으로 NAS에 접속했었는데, 보안이나 설정의 복잡성 때문에 늘 고민이 많았거든요. 그러다 Cloudflare Tunnel이라는 아주 매력적인 솔루션을 알게 되었고, ‘이거다!’ 싶어서 바로 적용에 들어갔죠. Public IP(공인 IP) 없이도 안전하게 내부 서비스에 접근할 수 있다는 점이 정말 환상적이었어요. 그런데 막상 구축을 시작하니 생각지 못한 곳에서 오류가 터지면서 삽질 좀 했습니다. ㅎㅎ

    제가 어떤 문제에 부딪혔고, 어떻게 해결했는지 그 과정을 상세하게 풀어보겠습니다. 이 경험이 독자 여러분의 소중한 시간을 절약하는 데 기여했으면 좋겠습니다. 자, 그럼 시작해볼까요?

    Cloudflare Tunnel을 이용한 NAS 원격 접속 전체 아키텍처 개념도

    Cloudflare Tunnel과 Zero Trust, NAS 원격 접속의 조합

    먼저, 핵심 개념들을 간단하게 짚고 넘어가죠. 이 세 가지 기술이 어떻게 시너지를 내는지 이해하는 것이 중요합니다.

    • Cloudflare Tunnel (클라우드플레어 터널): 쉽게 말해, 외부에서 내부 네트워크로 안전하게 연결할 수 있는 ‘터널’을 만들어주는 서비스입니다. 우리 집 NAS나 서버가 공인 IP가 없어도, 심지어 방화벽 뒤에 있어도 Cloudflare의 엣지 네트워크를 통해 외부와 통신할 수 있게 해줘요. 내부에서 외부로 나가는 연결만 허용하면 되기 때문에 방화벽 설정도 훨씬 간단해집니다.
    • Zero Trust (제로 트러스트): ‘절대 아무것도 신뢰하지 않고, 항상 검증한다’는 보안 모델입니다. 전통적인 ‘경계 기반 보안’이 내부 네트워크는 안전하다고 가정했다면, Zero Trust는 내부 네트워크에 있더라도 모든 접근에 대해 사용자, 장치, 애플리케이션을 철저히 검증하죠. Cloudflare Zero Trust 플랫폼은 이 개념을 구현하는 강력한 도구거든요.
    • NAS (Network Attached Storage): 네트워크에 연결된 저장 장치입니다. 제 홈랩에서도 중요한 역할을 하는 녀석이죠. 사진, 동영상, 문서 등 개인 데이터를 저장하고, 미디어 서버나 백업 솔루션으로도 활용합니다.

    이 세 가지를 조합하면, Public IP 없이도 NAS에 안전하게 원격 접속할 수 있고, Zero Trust 모델을 통해 누가 언제 어디서 접속하는지까지 통제할 수 있게 됩니다. 기존의 VPN보다 훨씬 유연하고 강력한 보안 환경을 구축할 수 있다는 게 저의 오랜 경험상 가장 큰 장점이라고 생각합니다.

    Cloudflare Tunnel 설정부터 NAS 연결까지 차근차근

    이제 실제로 Cloudflare Tunnel을 설정하고 NAS에 연결하는 과정을 단계별로 설명해드릴게요. 제가 진행했던 순서 그대로입니다.

    1. Zero Trust 대시보드에서 Tunnel 생성

    1. Cloudflare Zero Trust 대시보드(one.dash.cloudflare.com)에 접속합니다.
    2. 좌측 메뉴에서 Access > Tunnels로 이동합니다.
    3. Create a tunnel 버튼을 클릭하고, Tunnel 이름을 지정합니다. 저는 my-nas-tunnel이라고 지었어요.
    4. 화면에 표시되는 설치 가이드를 따라 cloudflared를 설치할 운영체제를 선택합니다.

    만약 CLI(명령줄 인터페이스)로 Tunnel을 만들고 싶다면 다음과 같이 입력할 수 있습니다.

    # Cloudflare CLI 설치 (처음이라면) - OS에 따라 다름
    # curl -L --output cloudflared-linux-amd64 https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
    # chmod +x cloudflared-linux-amd64
    # sudo mv cloudflared-linux-amd64 /usr/local/bin/cloudflared
    
    # Tunnel 생성 (CLI로)
    cloudflare tunnel create my-nas-tunnel
    

    Tunnel을 생성하면 화면에 token이 표시되는데, 이 토큰을 잘 복사해두세요. NAS에 cloudflared를 설치할 때 필요합니다.

    2. NAS에 Cloudflared 설치 및 실행

    NAS의 운영체제에 따라 cloudflared 설치 방법이 조금 다를 수 있습니다. 저는 주로 Debian/Ubuntu 기반의 리눅스 서버나 Docker를 사용하기 때문에 해당 기준으로 설명해드릴게요.

    1. Linux (Debian/Ubuntu 기반):
    2. # cloudflared 패키지 다운로드 및 설치
      curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
      sudo dpkg -i cloudflared.deb
      
      # 시스템 서비스로 등록 및 실행 (위에서 복사한 토큰 사용)
      sudo cloudflared service install 
      
      # 서비스 시작
      sudo systemctl start cloudflared
      
      # 서비스 상태 확인
      sudo systemctl status cloudflared
      
    3. Docker 사용 시:
    4. Docker Compose를 사용하는 것이 편리합니다. docker-compose.yml 파일을 다음과 같이 작성할 수 있습니다.

      version: '3.8'
      services:
        cloudflared:
          image: cloudflare/cloudflared:latest
          container_name: cloudflared
          restart: unless-stopped
          command: tunnel run --token 
          network_mode: host # 중요: NAS의 다른 서비스에 접근하기 위해 host 네트워크 사용
      

      이후 docker-compose up -d 명령으로 실행합니다.

    정상적으로 실행되면 Cloudflare Zero Trust 대시보드에서 Tunnel의 상태가 ‘Healthy’로 표시될 겁니다. ✅

    Cloudflare Zero Trust 대시보드의 Tunnel 설정 화면 (Ingress 규칙)

    Cloudflare Zero Trust 대시보드의 Tunnel 설정 화면 (Ingress 규칙)

    3. Ingress(인그레스) 규칙 설정

    이제 가장 중요한 Ingress 규칙을 설정할 차례입니다. 이 규칙은 어떤 요청을 어느 내부 서비스로 보낼지 정의하는 역할을 합니다. NAS의 cloudflared가 실행되는 서버에 ~/.cloudflared/config.yaml 파일을 생성하거나 수정해야 합니다.

    # ~/.cloudflared/config.yaml
    
    tunnel:  # Tunnel 생성 시 부여된 UUID
    credentials-file: /root/.cloudflared/.json # 자격 증명 파일 경로
    
    ingress:
      - hostname: nas.yourdomain.com # NAS에 접속할 도메인
        service: http://192.168.1.100:5000 # NAS의 내부 IP와 서비스 포트 (예: Synology DSM 기본 포트)
        originRequest:
          noTLSVerify: true # NAS가 HTTPS를 사용하지 않거나 자체 서명 인증서일 경우 필수!
      - service: http_status:404 # 모든 요청이 위 규칙에 해당하지 않으면 404 반환
    

    파일을 저장한 후, cloudflared 서비스를 재시작해야 변경 사항이 적용됩니다.

    sudo systemctl restart cloudflared # Linux 서비스의 경우
    # docker-compose restart cloudflared # Docker Compose의 경우
    

    4. DNS 레코드 설정

    마지막으로, Cloudflare 대시보드에서 NAS에 연결할 도메인(nas.yourdomain.com)이 위에서 생성한 Tunnel로 트래픽을 라우팅하도록 DNS 레코드를 설정해야 합니다. Zero Trust 대시보드의 Tunnel 설정 화면에서 ‘Public Hostname’을 추가하거나, CLI로 설정할 수 있습니다.

    cloudflare tunnel route dns my-nas-tunnel nas.yourdomain.com
    

    이 명령을 실행하면 Cloudflare DNS에 CNAME 레코드가 자동으로 생성되어 해당 도메인으로 들어오는 트래픽이 Tunnel로 연결됩니다.

    ⚠️ 삽질 경험: 터널 설정 오류 디버깅 포인트!

    자, 이제 제가 가장 많이 헤매고 삽질했던 포인트들을 공유할 시간입니다. 아마 많은 분들이 여기서 비슷한 문제를 겪으셨을 거예요.

    1. noTLSVerify 옵션의 중요성 (그리고 제 실수)

    제가 가장 먼저 부딪힌 문제는 바로 이 noTLSVerify 옵션이었습니다. Ingress 규칙에 service: http://192.168.1.100:5000이라고 분명히 HTTP로 설정했는데도 계속 502 Bad Gateway 에러가 뜨는 거예요. ‘아니, NAS는 HTTPS 안 쓰는데 왜 이러지?’ 하고 한참을 헤맸습니다.

    알고 보니 Cloudflare Tunnel은 기본적으로 Origin(원본 서버, 즉 NAS)과의 통신을 HTTPS로 시도하려고 합니다. 그런데 제 NAS는 HTTPS를 사용하지 않거나, 자체 서명 인증서를 사용하고 있었던 거죠. 이럴 경우 Tunnel이 NAS의 인증서를 신뢰하지 못해서 연결에 실패하게 됩니다. 해결책은 originRequest 아래에 noTLSVerify: true를 추가하여 TLS(전송 계층 보안) 검증을 건너뛰도록 하는 것이었습니다. 이 옵션을 추가하니 거짓말처럼 연결이 되더라고요! 🎉

    💡 팁: 보안상 가능하면 NAS도 정식 HTTPS 인증서를 적용하고 noTLSVerify: false(또는 제거)로 설정하는 것이 좋습니다. 하지만 홈랩 환경에서는 편의상 이 옵션을 사용할 때가 많죠.

    2. 서비스 포트 불일치

    두 번째 삽질은 NAS의 실제 서비스 포트와 Ingress 규칙에 설정한 포트가 달라서 생긴 문제였습니다. 예를 들어 Synology NAS의 DSM(DiskStation Manager)은 기본적으로 5000번(HTTP) 또는 5001번(HTTPS) 포트를 사용하는데, 제가 다른 서비스 포트를 실수로 입력해놓은 적이 있었어요. 브라우저에서 NAS 내부 IP로 접속하면 잘 되는데, Cloudflare Tunnel을 통하면 접속이 안 되니 ‘Tunnel 문제인가?’ 하고 엉뚱한 곳을 파고 있었죠. 😅

    NAS의 관리 페이지나 다른 서비스(Plex, Photo Station 등)에 접근할 때는 반드시 해당 서비스가 사용하는 정확한 내부 포트를 Ingress 규칙의 service 필드에 명시해야 합니다. http://localhost:5000 대신 http://[NAS_내부_IP]:[포트]처럼 명시적으로 내부 IP를 사용하는 것이 더 안전하고 명확합니다.

    3. DNS 레코드 미설정 또는 오설정

    Tunnel과 Ingress 규칙을 완벽하게 설정했다고 생각했는데도 접속이 안 된다면, DNS 레코드 설정을 다시 확인해보세요. Cloudflare Tunnel은 도메인에 대한 트래픽을 Tunnel로 라우팅하기 위해 CNAME 레코드가 필요합니다. 만약 이 레코드가 없거나 잘못 설정되어 있다면, 브라우저가 NAS 도메인으로 접속하려 해도 트래픽이 Tunnel로 들어오지 못하게 됩니다. 위에서 언급한 cloudflare tunnel route dns 명령어를 사용하거나 Cloudflare 대시보드에서 직접 CNAME 레코드를 확인해보세요.

    4. cloudflared 서비스 로그 확인의 중요성

    문제가 발생했을 때 가장 먼저 해야 할 일은 cloudflared 서비스의 로그를 확인하는 것입니다. Linux 시스템에서는 sudo journalctl -u cloudflared -f 명령으로 실시간 로그를 볼 수 있고, Docker 컨테이너를 사용한다면 docker logs -f cloudflared 명령으로 확인할 수 있습니다. 저도 위에서 언급한 noTLSVerify 문제를 로그에서 Error: x509: certificate signed by unknown authority와 같은 메시지를 보고 나서야 해결 실마리를 찾을 수 있었습니다. 로그는 항상 진실을 말해주거든요!

    🎉 드디어 NAS 원격 접속 성공!

    수많은 삽질 끝에 드디어 제 NAS가 https://nas.yourdomain.com으로 외부에서 완벽하게 접속되는 순간, 그 쾌감이란…! 🎉 Zero Trust 대시보드에서 Tunnel의 상태가 Healthy로 초록불이 들어오고, 트래픽이 정상적으로 흐르는 것을 확인했을 때의 안도감은 인프라 엔지니어만이 아는 뿌듯함이죠. 이제 언제 어디서든 제 NAS에 안전하게 접속하여 파일을 관리하고, 미디어를 스트리밍할 수 있게 되었습니다.

    Cloudflare Zero Trust 대시보드에서 확인한 Tunnel의 정상 작동 상태

    Cloudflare Zero Trust 대시보드에서 확인한 Tunnel의 정상 작동 상태

    마치며: 안전한 홈랩을 위한 Cloudflare Tunnel

    오늘은 Cloudflare Tunnel을 이용해 NAS 원격 접속을 설정하고, 제가 겪었던 연결 오류들을 어떻게 디버깅했는지 상세하게 공유해드렸습니다. 13년차 인프라 엔지니어로서 많은 시스템을 만져봤지만, 이렇게 새로운 기술을 제 홈랩에 적용하며 겪는 삽질은 언제나 성장의 밑거름이 되는 것 같습니다. ‘삽질은 기술 발전의 어머니’라는 말을 다시 한번 실감했네요. 😊

    Cloudflare Tunnel은 Public IP 없이도 내부 서비스를 외부로 안전하게 노출할 수 있는 강력한 도구입니다. 특히 Zero Trust 모델과 결합하면 보안과 편의성을 동시에 잡을 수 있다는 점이 큰 매력이라고 생각합니다. 만약 여러분도 NAS 원격 접속이나 다른 홈랩 서비스를 외부에서 안전하게 접근하고 싶다면, Cloudflare Tunnel을 적극적으로 고려해보시길 강력히 추천합니다.

    다음 글에서는 Cloudflare Access를 이용해 Tunnel로 접속하는 서비스에 사용자 인증/인가를 추가하는 방법을 다뤄볼 예정입니다. 더 강력한 Zero Trust 환경을 구축하는 방법을 기대해주세요!

    Cloudflare Tunnel을 활용한 NAS 원격 접속의 주요 장점 요약

    Cloudflare Tunnel을 활용한 NAS 원격 접속의 주요 장점 요약

  • [Nas] Cloudflare Tunnel vs. VPN: 홈서버 원격 접속 비용 효율성 비교 2026년 9월 업데이트

    [Nas] Cloudflare Tunnel vs. VPN: 홈서버 원격 접속 비용 효율성 비교 2026년 9월 업데이트

    💡 도입: 홈서버 원격 접속, 이젠 선택이 아닌 필수!

    안녕하세요, 13년차의 서버실 주인장입니다. 홈랩을 운영하는 인프라 엔지니어라면 누구나 한 번쯤은 이런 고민을 해봤을 거예요. “집에 있는 내 소중한 서버에 외부에서 안전하게 접속하고 싶다!” 저도 처음엔 공유기 포트 포워딩(Port Forwarding)으로 시작했었죠. 특정 포트를 열어두고 DDNS(Dynamic DNS)를 걸어서 접속했었는데, 이게 보안적으로 너무 취약하더라고요.

    그러다 보니 자연스럽게 VPN(Virtual Private Network), WireGuard, OpenVPN 같은 기술을 살펴보게 됐어요. 그런데 VPN도 서버를 직접 구축하고 관리하는 게 생각보다 손이 많이 가거든요. 그러다 Cloudflare Tunnel이라는 녀석을 알게 됐는데, 이거 진짜 물건이더라고요. 포트 포워딩 없이, 심지어 개인 홈랩 기준으로는 무료 플랜만으로도 꽤 강력한 보안 구성을 만들 수 있으니까요.

    그래서 오늘은 Cloudflare Tunnel과 VPN, 이 두 가지 홈서버 원격 접속 방법을 2026년 9월 기준으로 다시 비교해보려고 합니다. 특히 Cloudflare Zero Trust, WARP, private network routing, NAS 원격 접속, 홈랩 보안 같은 키워드가 중요해진 만큼 예전 글에서 살짝 오래된 부분도 같이 손봤습니다.

    홈서버 원격 접속을 위한 Cloudflare Tunnel과 VPN의 개념도를 나타낸 그림입니다. 외부에서 안전하게 홈서버에 접근하는 방식을 한눈에 볼 수 있습니다.

    🤔 Cloudflare Tunnel, VPN: 개념부터 잡아봅시다!

    본격적인 비교에 앞서, 두 기술이 정확히 어떤 것인지 개념부터 확실하게 짚고 넘어가는 게 좋겠죠? 쉽게 말해드릴게요.

    Cloudflare Tunnel (클라우드플레어 터널)

    Cloudflare Tunnel은 제로 트러스트(Zero Trust) 보안 모델을 기반으로 하는 서비스예요. 내부 네트워크의 포트를 외부로 직접 열지 않고, 홈서버에 설치한 cloudflared가 Cloudflare 네트워크로 아웃바운드 터널을 만드는 방식입니다.

    • 작동 방식: 홈서버의 cloudflared가 Cloudflare 에지 네트워크로 먼저 연결합니다. 외부 사용자가 your-service.example.com 같은 도메인으로 접속하면 Cloudflare가 해당 요청을 터널을 통해 홈서버 내부 서비스로 전달해요.
    • 주요 장점: 포트 포워딩이 필요 없고, 실제 공인 IP가 노출되지 않으며, SSL/TLS와 DDoS 보호를 Cloudflare 앞단에서 활용할 수 있습니다.
    • 2026년 기준 보완점: 예전에는 “특정 웹 서비스 공개” 느낌이 강했지만, 지금은 Cloudflare One Client(WARP)와 Tunnel CIDR 라우팅을 조합해 사설 IP 대역까지 연결하는 구성이 더 자연스러워졌습니다. 다만 이 경우에는 클라이언트 등록, Split Tunnel, Gateway 정책까지 같이 설계해야 합니다.

    VPN (Virtual Private Network, 가상 사설망)

    VPN은 이름 그대로 가상 사설망을 구축해서 외부 네트워크에서도 마치 집 안 네트워크에 있는 것처럼 접속하는 기술이에요. 홈랩에서는 여전히 WireGuard가 가장 가볍고 빠른 선택지로 많이 쓰이고, OpenVPN은 호환성이 좋은 편입니다.

    • 작동 방식: VPN 클라이언트가 VPN 서버로 암호화된 터널을 만들고, 클라이언트는 할당받은 내부 IP를 통해 NAS, Proxmox, Docker 서비스, 관리 페이지 등에 접근합니다.
    • 주요 장점: 네트워크 전체 접근이 쉽습니다. 특정 웹 서비스뿐 아니라 SSH, SMB, RDP, 내부 DNS 등 홈 네트워크 전체를 다뤄야 한다면 여전히 VPN이 편해요.
    • 주의할 점: VPN 서버 포트를 외부에 열어야 하는 경우가 많고, 인증키 관리, 방화벽, 라우팅, 업데이트를 꾸준히 챙겨야 합니다.

    ⚔️ Cloudflare Tunnel vs. VPN: 비용 효율성 및 주요 차이점 비교

    이제 두 기술의 가장 중요한 차이점, 그리고 홈랩 운영자의 입장에서 어떤 방식이 더 비용 효율적인지 비교해볼까요?

    기준 Cloudflare Tunnel VPN
    비용
    • 무료 플랜: 개인 홈서버, NAS 원격 접속, 소규모 홈랩에는 여전히 충분한 편입니다.
    • 팀 단위 Access, Gateway, 로그 보관, 고급 보안 정책이 필요하면 유료 플랜을 검토해야 합니다.
    • 홈서버에서 직접 운영하면 추가 서버 비용은 거의 없지만, 전기료와 유지보수 비용은 발생합니다.
    • 클라우드 VPS에 VPN을 두면 월별 요금이 붙습니다.
    설정 난이도
    • 웹 서비스 공개만 한다면 비교적 간단합니다.
    • 2026년 기준으로는 Cloudflare Zero Trust 대시보드에서 터널과 퍼블릭 호스트네임을 만드는 방식이 가장 편합니다.
    • WireGuard는 예전보다 쉬워졌지만, 라우팅과 방화벽을 이해해야 삽질이 줄어듭니다.
    • 공유기, DDNS, 포트 포워딩, 키 관리가 필요할 수 있습니다.
    보안 모델
    • 제로 트러스트: 서비스별 접근 정책, 이메일 OTP, MFA, IdP 연동을 붙이기 좋습니다.
    • 내부 포트를 직접 열지 않는 구조라 공격 표면을 줄이기 좋습니다.
    • 경계 기반 보안: VPN에 들어오면 내부망에 들어온 것과 비슷한 권한을 갖기 쉽습니다.
    • 키 유출, 취약한 VPN 서버, 과도한 내부 접근 권한을 조심해야 합니다.
    접속 범위
    • 웹 앱, SSH, RDP 같은 서비스 단위 공개에 강합니다.
    • WARP와 Tunnel CIDR 라우팅을 쓰면 사설 IP 대역 접근도 가능하지만, 설정은 단순 웹 공개보다 복잡합니다.
    • 네트워크 전체 접근이 가장 자연스럽습니다.
    • NAS 파일 공유, 내부 DNS, 여러 장비 관리에는 여전히 강합니다.
    성능
    • Cloudflare 에지 네트워크를 거치므로 웹 서비스에는 체감이 좋은 경우가 많습니다.
    • 대용량 파일 전송이나 실시간 내부망 작업은 구성에 따라 VPN이 더 단순하고 빠를 수 있습니다.
    • 성능은 집 인터넷 업로드 속도, VPN 서버 성능, 암호화 오버헤드에 좌우됩니다.
    • WireGuard는 대체로 가볍고 빠른 편입니다.
    추가 기능
    • Cloudflare Access, Gateway 정책, WAF, Turnstile, 로그, IdP 연동과 결합하기 좋습니다.
    • 원격 접속 자체에 집중합니다. 세밀한 사용자별 웹 접근 제어는 별도 솔루션이 필요할 수 있습니다.
    Cloudflare Tunnel과 VPN 기능 및 비용 효율성 비교 인포그래픽

    정리하자면, Cloudflare Tunnel은 웹 기반 홈서버 서비스, NAS 관리 페이지, 개인 대시보드, SSH 접속을 안전하게 노출하고 싶을 때 비용 효율이 좋습니다. 반면 VPN은 홈 네트워크 전체 접근, SMB 파일 공유, 내부 장비 관리, 모든 트래픽 암호화가 필요할 때 여전히 강력합니다.

    🛠️ Cloudflare Tunnel 실전 구축: 홈서버 원격 접속!

    이제 이론은 충분히 봤으니, 홈랩에 Cloudflare Tunnel을 구축하는 과정을 2026년 기준으로 정리해볼게요. 예전처럼 CLI만으로 만들 수도 있지만, 지금은 Cloudflare Zero Trust 대시보드에서 터널을 만들고 Connector 토큰으로 서버를 등록하는 방식이 가장 직관적입니다.

    1단계: Cloudflare 계정, 도메인, Zero Trust 조직 준비

    먼저 Cloudflare 계정을 만들고, 사용할 도메인을 Cloudflare DNS에 등록합니다. 그다음 Cloudflare 대시보드에서 Zero Trust 조직을 생성해야 해요. Free 플랜을 선택해도 결제 정보 입력 단계가 나올 수 있지만, 무료 플랜 자체는 개인 홈랩 테스트에 충분합니다.

    도메인은 꼭 비싼 걸 살 필요는 없고, NAS 원격 접속용으로 nas.example.com, home.example.com, ssh.example.com처럼 서브도메인을 나눠 쓰면 관리가 편합니다.

    2단계: cloudflared 설치 및 최신 버전 확인

    2026년 9월 기준 최신 cloudflared 릴리스는 2026.9.1입니다. 2026.8.0 계열에는 일부 HTTP origin 요청에서 trailing slash 처리 문제가 보고됐기 때문에, 가능하면 2026.8.2 이상 또는 최신 버전으로 올리는 걸 추천합니다.

    # 리눅스 AMD64 기준 cloudflared 설치 예시
    curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
    chmod +x /usr/local/bin/cloudflared
    
    # 설치 확인
    cloudflared --version

    라즈베리 파이나 ARM 서버를 쓴다면 cloudflared-linux-arm64 또는 패키지 저장소 방식을 쓰는 게 좋습니다. 그리고 2027년부터는 32비트 Windows와 Intel 기반 macOS용 cloudflared 신규 빌드가 중단될 예정이라, 오래된 장비에 설치해둔 분들은 미리 ARM64, x86_64 Linux, Apple Silicon macOS 환경으로 옮길 계획을 세워두는 게 좋아요.

    3단계: 터널 생성 및 설정

    CLI로 직접 만드는 방식은 여전히 사용할 수 있습니다.

    # Cloudflare 계정 로그인
    cloudflared tunnel login
    
    # 터널 생성
    cloudflared tunnel create my-homelab-tunnel

    설정 파일은 보통 /etc/cloudflared/config.yaml에 둡니다.

    tunnel: [YOUR_TUNNEL_UUID]
    credentials-file: /root/.cloudflared/[YOUR_TUNNEL_UUID].json
    
    ingress:
      - hostname: your-service.your-domain.com
        service: http://localhost:8080
      - service: http_status:404

    요즘 제가 더 추천하는 방식은 Zero Trust 대시보드에서 Networks > Tunnels로 들어가 터널을 만들고, 안내되는 Connector 설치 명령을 서버에 붙여 넣는 방법입니다. 이 방식은 자격 증명 파일과 서비스 등록 과정이 덜 헷갈려요.

    4단계: DNS 레코드 설정

    CLI 방식이라면 다음 명령으로 CNAME 레코드를 만들 수 있습니다.

    cloudflared tunnel route dns my-homelab-tunnel your-service.your-domain.com

    대시보드 방식이라면 터널 설정의 Public Hostname에서 your-service.your-domain.com을 추가하고, 내부 서비스 주소를 http://localhost:8080처럼 입력하면 됩니다. 생성된 CNAME은 [YOUR_TUNNEL_UUID].cfargotunnel.com 형태이며, Cloudflare 프록시가 켜져 있어야 보안과 성능 이점을 제대로 활용할 수 있습니다.

    5단계: 터널 실행 및 서비스 등록

    CLI 방식에서는 다음처럼 systemd 서비스로 등록할 수 있습니다.

    sudo cloudflared tunnel service install
    sudo systemctl enable --now cloudflared
    sudo systemctl status cloudflared

    대시보드에서 만든 터널은 보통 아래처럼 토큰이 포함된 설치 명령을 제공합니다.

    sudo cloudflared service install [TOKEN]
    sudo systemctl status cloudflared

    systemctl status cloudflared에서 active (running) 상태가 보이면 1차 성공입니다. 이후 Cloudflare Zero Trust 대시보드에서도 터널 상태가 Healthy로 표시되는지 확인해보세요.

    Cloudflare Zero Trust 대시보드 터널 연결 성공 스크린샷

    ⚠️ 삽질 경험: Service Tunnel Error 해결하기

    제가 처음 Cloudflare Tunnel을 설정할 때 가장 많이 겪었던 오류 중 하나가 바로 Service Tunnel Error였어요. 터널은 생성됐는데, 실제 서비스가 안 열리는 답답한 상황이죠.

    1. config.yaml 파일 오류: YAML은 들여쓰기에 민감합니다. 탭 대신 스페이스를 쓰고, ingress 마지막에는 http_status:404 같은 기본 규칙을 넣어주세요.
    2. 잘못된 service 주소: http://localhost:8080으로 적었는데 실제 컨테이너가 다른 포트에서 떠 있거나, Docker 네트워크 때문에 localhost가 맞지 않는 경우가 많습니다.
    3. 내부 서비스 미실행: docker ps, systemctl status, ss -tulnp로 실제 서비스가 리스닝 중인지 확인하세요.
    4. 방화벽 문제: ufw, firewalld, NAS 자체 방화벽이 cloudflared의 내부 접근을 막을 수 있습니다.
    5. cloudflared 버전 문제: 특정 릴리스에서 회귀 버그가 생길 수 있으니, 이상 증상이 있으면 최신 안정 버전으로 올려보세요.
    6. 로그 확인: journalctl -u cloudflared --since '10 minutes ago' 또는 대시보드 Connector 로그를 보면 원인이 훨씬 빨리 보입니다.

    저도 “아, 이거 왜 안 되지?” 하면서 한참을 붙잡고 있다가 로그를 보니 내부 서비스 포트가 틀렸던 적이 있습니다. 결국 터널 문제처럼 보여도 절반은 origin 서비스 주소 문제더라고요.

    ✅ 검증 및 결과: 제로 트러스트 원격 접속의 편리함

    모든 설정을 마쳤다면 브라우저에서 your-service.your-domain.com으로 접속해보세요. 정상적으로 홈서버 서비스 화면이 뜨면 성공입니다.

    • 안전한 접속: 포트 포워딩 없이 실제 IP를 숨긴 채 홈서버에 접속할 수 있습니다.
    • Cloudflare 보호: HTTPS, DDoS 방어, 프록시 기반 보호를 쉽게 붙일 수 있습니다.
    • Zero Trust Access 연동: 이메일 OTP, MFA, Google Workspace, GitHub 같은 IdP 연동으로 사용자 인증을 추가할 수 있습니다.
    • NAS 원격 접속 최적화: Synology, TrueNAS, Unraid, Proxmox 대시보드처럼 웹 기반 관리 화면을 공개할 때 특히 편합니다.
    Cloudflare Tunnel을 통한 홈서버 웹 서비스 접속 화면

    🆕 2026년 9월 기준 새로 챙겨볼 변화

    원문 작성 이후 홈서버 원격 접속 쪽에서 체크할 만한 변화가 몇 가지 있었습니다.

    • cloudflared 최신 버전: 2026년 9월 기준 최신 릴리스는 2026.9.1입니다. 자동 업데이트나 정기 업데이트 루틴을 잡아두는 걸 추천합니다.
    • 오래된 클라이언트 지원 축소: 2027년부터 32비트 Windows와 Intel 기반 macOS용 신규 cloudflared 빌드가 중단될 예정입니다. 오래된 맥 미니나 구형 Windows 장비를 터널 서버로 쓰고 있다면 이전 계획이 필요합니다.
    • Private Network Routing 강화: Cloudflare Tunnel은 이제 단순 웹 앱 공개뿐 아니라 WARP 클라이언트와 Tunnel CIDR 라우팅을 통해 사설망 접근 시나리오에도 자주 쓰입니다. 전통적인 VPN 대체 구성이 더 현실적이 됐어요.
    • Access for Infrastructure: SSH 같은 인프라 접근을 사용자, 포트, 프로토콜 단위로 더 세밀하게 제어하는 기능도 계속 강화되고 있습니다. 홈랩에서도 SSH를 그냥 인터넷에 열어두는 방식은 이제 굳이 선택할 이유가 줄었습니다.
    • 보안 키워드 변화: 단순 “원격 접속”보다 Zero Trust NAS, Cloudflare WARP, 홈랩 보안, 포트포워딩 대체, self-hosted secure access 같은 관점으로 설계하는 흐름이 강해졌습니다.

    💡 마무리: 어떤 방식이 나에게 맞을까?

    결론은 꽤 명확합니다. 웹 기반 서비스 몇 개를 안전하게 공개하고 싶다면 Cloudflare Tunnel이 비용 효율과 관리 편의성 면에서 아주 좋습니다. NAS 관리 페이지, 개인 위키, 홈 대시보드, 개발용 웹앱, SSH 접근 정도라면 포트 포워딩 없이 깔끔하게 운영할 수 있어요.

    반대로 내부망 전체를 내 노트북으로 끌고 와야 한다면 VPN이 아직도 편합니다. SMB 파일 공유, 내부 DNS, 여러 장비의 관리 포트, 대용량 파일 작업이 많다면 WireGuard 기반 VPN이 더 단순할 수 있어요.

    개인적으로는 두 가지를 같이 씁니다. 평소 자주 쓰는 웹 서비스는 Cloudflare Tunnel로 열고, 내부망 전체 접근이 필요할 때만 WireGuard VPN을 켜는 식이죠. 홈서버 원격 접속은 하나만 고집하기보다, 서비스 성격에 맞게 나눠 쓰는 게 제일 편하더라고요.

    🔄 마지막 업데이트: 2026년 09월

  • [Cloud] Cloudflare Zero Trust 구축: VPN 대체 및 보안 강화 실전 가이드

    [Cloud] Cloudflare Zero Trust 구축: VPN 대체 및 보안 강화 실전 가이드

    VPN의 한계를 넘어, Cloudflare Zero Trust로 보안을 강화하다

    안녕하세요, 13년차 서버실 지킴이입니다. 제가 13년 동안 인프라 엔지니어로 일하면서 가장 많이 들었던 말 중 하나가 "보안"이에요. 특히 재택근무가 일상화되고 클라우드 전환이 가속화되면서, 기존 VPN(Virtual Private Network)만으로는 한계를 느끼는 순간이 많아졌습니다. 저도 홈랩을 운영하면서 내부 서비스에 안전하게 접속하는 방법을 항상 고민했거든요. 기존 VPN은 설정도 복잡하고, 모든 트래픽을 내부망으로 보내는 방식이라 보안 위협에 취약할 수 있다는 생각도 들었고요. 그러다 문득, Cloudflare Zero Trust가 떠올랐습니다. "이거다!" 싶었죠. VPN을 대체하고 보안 강화까지 가능한 실전 가이드를 제가 직접 구축해본 경험을 바탕으로 여러분께 공유해볼까 합니다.

    Cloudflare Zero Trust, 그게 대체 뭔데요?

    Cloudflare Zero Trust(클라우드플레어 제로 트러스트)는 이름 그대로 "아무것도 신뢰하지 않는다"는 전제에서 시작하는 보안 모델이에요. 기존 보안 모델은 내부 네트워크에 들어오면 신뢰하고, 외부 네트워크는 불신하는 "성곽과 해자(Castle and Moat)" 방식이었죠. 하지만 Zero Trust는 내부든 외부든 모든 접근 시도를 "기본적으로 신뢰하지 않고(Never Trust), 항상 검증한다(Always Verify)"는 원칙을 따릅니다.

    쉽게 말해, 어떤 사용자가 어떤 기기에서 어떤 애플리케이션에 접근하려 할 때마다, 그 사용자가 누구인지, 기기가 안전한지, 접근하려는 애플리케이션에 대한 권한이 있는지 등 모든 요소를 실시간으로 검증하는 방식이에요. Cloudflare Zero Trust는 이 원칙을 구현하기 위한 다양한 도구와 서비스를 제공하는데, 특히 Cloudflare Access(클라우드플레어 액세스)와 Cloudflare WARP(클라우드플레어 워프)가 핵심적인 역할을 합니다.

    Cloudflare Zero Trust는 기존 VPN과 달리, 모든 접근을 개별적으로 검증하여 보안을 한층 더 높입니다.

    왜 Zero Trust 보안이 필요한가요?

    • 보안 강화: 내부 네트워크 침투 시 측면 이동(Lateral Movement) 공격을 어렵게 만듭니다. 각 리소스 접근 시마다 인증과 권한 검증을 거치니까요.
    • 유연한 접근: 사용자가 어디에 있든(사무실, 재택, 카페 등) 안전하게 필요한 리소스에 접근할 수 있습니다.
    • VPN 대체: 복잡한 VPN 설정 없이도 특정 애플리케이션에 대한 접근 제어가 가능해요. 저처럼 홈랩에서 특정 서비스만 외부에서 접근하고 싶을 때 정말 유용하더라고요.
    • 성능 향상: 모든 트래픽을 데이터 센터로 모으는 VPN과 달리, 최적의 경로로 리소스에 연결되므로 성능 저하가 훨씬 덜합니다.

    Cloudflare Zero Trust, 실전 구축 가이드

    이제 본격적으로 Cloudflare Zero Trust 구축 과정을 살펴볼까요? 저도 처음엔 좀 헤맸는데, 막상 해보니 별거 아니더라고요. 단계별로 차근차근 따라오시면 됩니다.

    Step 1: Cloudflare Teams 계정 활성화

    1. Cloudflare 대시보드에 로그인합니다.
    2. 왼쪽 메뉴에서 "Zero Trust"를 클릭하세요.
    3. 처음 접근하는 경우, Cloudflare Teams 계정을 활성화하라는 메시지가 나타날 거예요. "Launch Zero Trust" 버튼을 눌러 활성화하고, 팀 이름(Team Name)을 설정해줍니다. 저는 제 홈랩 이름으로 만들었죠.
    4. 요금제는 우선 무료 플랜인 "Free"로 시작하시면 됩니다. 소규모 팀에 충분한 수의 사용자를 지원하거든요.

    Step 2: Cloudflare WARP 클라이언트 설정

    WARP는 사용자 기기와 Cloudflare Edge 네트워크 사이에 암호화된 터널을 생성해주는 클라이언트 프로그램입니다. 이걸 설치해야 Zero Trust 정책이 적용돼요.

    1. Cloudflare Zero Trust 대시보드에서 "Settings" > "WARP Client"로 이동합니다.
    2. "Device enrollment" 탭에서 "Manage"를 클릭하고, 팀 도메인(예: <code>myhomelab.cloudflareaccess.com)을 확인해둡니다.
    3. 사용자 기기(PC, 모바일)에 맞는 WARP 클라이언트를 다운로드하여 설치합니다. 저는 리눅스 서버에 설치할 거라 아래 명령어를 사용했어요.
    # Debian/Ubuntu 기준
    curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
    sudo apt update
    sudo apt install cloudflare-warp
    
    # WARP 등록
    warp-cli register
    warp-cli set-mode tunnel
    warp-cli set-gateway-mode proxy
    warp-cli set-license <YOUR_LICENSE_KEY_IF_PAID> # 무료 플랜은 필요 없음
    warp-cli connect
    

    설치 후에는 웹 브라우저가 열리면서 Cloudflare Zero Trust 계정으로 로그인하라고 할 거예요. 로그인하면 WARP가 활성화됩니다. WARP 대시보드에서 "Connected" 상태를 확인하면 성공!

    Cloudflare Zero Trust 대시보드에서 Access 애플리케이션을 손쉽게 관리할 수 있습니다.

    Step 3: Access 애플리케이션 생성

    이제 특정 내부 서비스에 접근할 수 있도록 Cloudflare Access 애플리케이션을 만들어볼까요? 저는 홈랩의 Prometheus(프로메테우스) 대시보드에 접근하는 시나리오를 예로 들겠습니다.

    1. Zero Trust 대시보드에서 "Access" > "Applications"로 이동합니다.
    2. "Add an application" 버튼을 클릭하고, "Self-hosted"를 선택합니다.
    3. "Subdomain"에 접근할 도메인(예: prometheus.myhomelab.com)을 입력하고, "Session Duration" 등 필요한 설정을 합니다.
    4. 여기서 중요한 것이 Cloudflare Tunnel(클라우드플레어 터널)입니다. 내부망에 있는 서비스를 외부로 노출하지 않고 Cloudflare Edge 네트워크로 연결해주는 방식이죠. 저는 cloudflared라는 클라이언트 프로그램을 사용해서 터널을 만들었어요.
    # cloudflared 설치 (Debian/Ubuntu 기준)
    curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
    sudo dpkg -i cloudflared.deb
    
    # 터널 생성 및 인증
    cloudflared tunnel login
    cloudflared tunnel create prometheus-tunnel # 터널 이름 지정
    
    # 터널 설정 파일 (config.yaml) 생성
    # nano ~/.cloudflared/config.yaml
    # --- (아래 내용 붙여넣기) ---
    tunnel: <YOUR_TUNNEL_UUID> # tunnel create 명령 실행 후 나오는 UUID
    credentials-file: /root/.cloudflared/<YOUR_TUNNEL_UUID>.json
    
    ingress:
      - hostname: prometheus.myhomelab.com
        service: http://localhost:9090 # Prometheus가 실행되는 내부 주소
      - service: http_status:404 # 일치하는 규칙이 없으면 404 반환
    # --- (여기까지) ---
    
    # 터널 실행 (서비스로 등록하여 자동 시작 설정 권장)
    sudo cloudflared tunnel run prometheus-tunnel
    

    Cloudflare Tunnel을 통해 내부의 Prometheus 서비스(http://localhost:9090)가 prometheus.myhomelab.com 도메인으로 Cloudflare Edge 네트워크에 안전하게 연결됩니다.

    Step 4: 정책 설정 및 사용자 인증

    이제 누가 이 애플리케이션에 접근할 수 있는지 정책(Policy)을 설정할 차례입니다. 이게 바로 Zero Trust 보안의 핵심이에요!

    1. Access 애플리케이션 설정 화면에서 "Policies" 탭으로 이동합니다.
    2. "Add a policy"를 클릭하여 새로운 정책을 만듭니다.
    3. 저는 다음과 같은 정책을 설정했어요:

      필드 (Field) 조건 (Rule) 값 (Value) 설명
      Emails in ['[email protected]'] 특정 이메일 주소만 허용
      Countries in ['KR'] 대한민국 IP에서만 접근 허용
      Device Posture Requires ['WARP is connected'] WARP 클라이언트가 연결된 기기에서만 허용
    4. "Action"은 "Allow"로 설정합니다. 이렇게 하면 지정된 조건(제 이메일, 한국 IP, WARP 연결 기기)을 모두 만족하는 사용자만 prometheus.myhomelab.com에 접근할 수 있게 됩니다.
    5. 사용자 인증은 Cloudflare Access가 제공하는 다양한 IDP(Identity Provider)와 연동할 수 있어요. 저는 주로 Google Workspace(구 G Suite)나 GitHub를 사용하는데, 무료 플랜에서도 연동이 가능해서 정말 편하더라고요.

    ⚠️ 삽질 경험 공유: 저도 이거 때문에 고생 좀 했습니다

    13년차 엔지니어라고 삽질을 안 하는 건 아니죠! 저도 몇 가지 문제 때문에 머리를 쥐어뜯었거든요. 혹시 여러분도 겪을 수 있는 문제들이니 참고하세요.

    • Cloudflare Tunnel 서비스 문제: cloudflared tunnel run 명령어로 터널을 실행했는데, 서버 재부팅 후 터널이 끊어져 있는 경우가 있었습니다. 당연히 서비스로 등록해서 자동 시작되도록 해야 하는데, 처음엔 수동으로 실행하고 "왜 안되지?" 했지 뭐예요. 꼭 systemd 등으로 서비스 등록해서 관리해주세요.

      # 서비스 파일 예시 (/etc/systemd/system/cloudflared-prometheus.service)
      [Unit]
      Description=Cloudflared Tunnel for Prometheus
      After=network.target
      
      [Service]
      TimeoutStartSec=0
      Type=notify
      ExecStart=/usr/local/bin/cloudflared tunnel run --config /root/.cloudflared/config.yaml prometheus-tunnel
      Restart=on-failure
      RestartSec=5s
      
      [Install]
      WantedBy=multi-user.target
      
      # 서비스 활성화 및 시작
      sudo systemctl enable cloudflared-prometheus
      sudo systemctl start cloudflared-prometheus
      sudo systemctl status cloudflared-prometheus
      
    • DNS 설정 누락: Cloudflare Access 애플리케이션을 만들면, 해당 서브도메인에 대한 CNAME 레코드를 Cloudflare DNS에 추가하라고 안내 메시지가 나옵니다. 이걸 빼먹으면 외부에서 접근이 안 돼요. prometheus.myhomelab.com CNAME -> <UUID>.cfargotunnel.com 이런 식으로요.

    • 정책 순서와 조건: Zero Trust 정책은 순서가 중요합니다. 특정 조건을 먼저 허용하고 다음 조건에서 거부하면, 의도치 않게 접근이 허용될 수 있어요. 항상 가장 엄격한 규칙을 위에 두는 것이 좋습니다. 또한, AND/OR 조건 조합을 잘 활용해야 하는데, 저는 처음에 이메일과 국가 조건을 OR로 묶어서 "왜 다른 사람이 접근되지?" 하고 당황했거든요. 각 조건이 모두 충족되어야 할 때는 AND처럼 동작하도록 여러 Require 규칙을 추가해야 합니다.

    🎉 드디어 성공! Cloudflare Zero Trust의 위력

    모든 설정을 마치고 제 홈랩의 Prometheus 대시보드에 접속해보니… 드디어 됐다! 처음에 웹 브라우저가 Cloudflare Access 인증 페이지로 리디렉션되고, 제 Google 계정으로 로그인한 후에야 Prometheus 화면이 나타났습니다. WARP 클라이언트가 연결되지 않은 상태에서는 아예 접근이 차단되는 것을 확인했고요.

    이거 진짜 편하더라고요! 기존 VPN 접속처럼 전체 트래픽이 느려지는 느낌도 없고, 필요한 서비스에만 딱 접근할 수 있으니 훨씬 직관적이고 빨랐어요. 게다가 Cloudflare의 글로벌 네트워크를 통해 트래픽이 처리되니 안정성도 높고요. 기존 VPN에서 발생했던 IP 충돌 문제나 복잡한 라우팅 설정이 필요 없다는 점도 정말 큰 장점입니다.

    Cloudflare Zero Trust를 통해 안전하게 내부 Prometheus 대시보드에 접속한 모습.

    마무리하며: Zero Trust, 이제 선택이 아닌 필수!

    오늘은 제가 직접 Cloudflare Zero Trust를 구축하여 VPN을 대체하고 보안을 한층 더 높인 실전 경험을 공유해드렸습니다. 처음엔 낯설게 느껴질 수 있지만, 한번 구축하고 나면 기존 VPN 방식보다 훨씬 강력하고 유연한 보안 환경을 갖출 수 있다는 것을 몸소 느꼈습니다.

    Cloudflare Zero Trust는 단순히 VPN을 대체하는 것을 넘어, 사용자와 애플리케이션, 데이터의 위치에 상관없이 일관된 보안 정책을 적용할 수 있게 해주는 미래 지향적인 보안 모델입니다. 특히 재택근무가 활성화되고 클라우드 환경이 보편화된 요즘에는 선택이 아닌 필수가 되어가고 있다고 생각해요. 여러분도 저처럼 삽질 좀 하시면서 직접 경험해보시면, 이 강력한 보안 솔루션의 매력에 푹 빠지실 겁니다. 혹시 이 글을 읽고 궁금한 점이 있다면 언제든지 댓글로 물어봐 주세요!

    Cloudflare Zero Trust와 전통 VPN의 주요 특징 비교.

    다음 글에서는 Cloudflare Zero Trust의 또 다른 강력한 기능인 WARP Gateway(워프 게이트웨이)를 활용한 DNS 필터링과 L7 방화벽 설정에 대해 더 깊이 다뤄볼게요. 기대해주세요!