목차
- 안녕하세요, 13년차의 서버실입니다!
- Cloudflare Tunnel과 Zero Trust, NAS 원격 접속의 조합
- Cloudflare Tunnel 설정부터 NAS 연결까지 차근차근
- 1. Zero Trust 대시보드에서 Tunnel 생성
- 2. NAS에 Cloudflared 설치 및 실행
- 3. Ingress(인그레스) 규칙 설정
- 4. DNS 레코드 설정
- ⚠️ 삽질 경험: 터널 설정 오류 디버깅 포인트!
- 1.
noTLSVerify옵션의 중요성 (그리고 제 실수) - 2. 서비스 포트 불일치
- 3. DNS 레코드 미설정 또는 오설정
- 4.
cloudflared서비스 로그 확인의 중요성 - 🎉 드디어 NAS 원격 접속 성공!
- 마치며: 안전한 홈랩을 위한 Cloudflare 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 생성
- Cloudflare Zero Trust 대시보드(one.dash.cloudflare.com)에 접속합니다.
- 좌측 메뉴에서
Access>Tunnels로 이동합니다. Create a tunnel버튼을 클릭하고, Tunnel 이름을 지정합니다. 저는my-nas-tunnel이라고 지었어요.- 화면에 표시되는 설치 가이드를 따라
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를 사용하기 때문에 해당 기준으로 설명해드릴게요.
- Linux (Debian/Ubuntu 기반):
# 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
- Docker 사용 시:
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 규칙)
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 Tunnel
오늘은 Cloudflare Tunnel을 이용해 NAS 원격 접속을 설정하고, 제가 겪었던 연결 오류들을 어떻게 디버깅했는지 상세하게 공유해드렸습니다. 13년차 인프라 엔지니어로서 많은 시스템을 만져봤지만, 이렇게 새로운 기술을 제 홈랩에 적용하며 겪는 삽질은 언제나 성장의 밑거름이 되는 것 같습니다. '삽질은 기술 발전의 어머니'라는 말을 다시 한번 실감했네요. 😊
Cloudflare Tunnel은 Public IP 없이도 내부 서비스를 외부로 안전하게 노출할 수 있는 강력한 도구입니다. 특히 Zero Trust 모델과 결합하면 보안과 편의성을 동시에 잡을 수 있다는 점이 큰 매력이라고 생각합니다. 만약 여러분도 NAS 원격 접속이나 다른 홈랩 서비스를 외부에서 안전하게 접근하고 싶다면, Cloudflare Tunnel을 적극적으로 고려해보시길 강력히 추천합니다.
다음 글에서는 Cloudflare Access를 이용해 Tunnel로 접속하는 서비스에 사용자 인증/인가를 추가하는 방법을 다뤄볼 예정입니다. 더 강력한 Zero Trust 환경을 구축하는 방법을 기대해주세요!
Cloudflare Tunnel을 활용한 NAS 원격 접속의 주요 장점 요약
'IT > Nas' 카테고리의 다른 글
| [NAS] Immich NAS 성능 벤치마크와 최적화 (0) | 2026.06.24 |
|---|---|
| [Nas] Jellyfin 트랜스코딩 성능 벤치마크: N100 미니PC vs Ryzen 5700G NAS (0) | 2026.06.19 |
| [NAS] TrueNAS CORE에서 SCALE로: 안전한 데이터 마이그레이션 전략 (0) | 2026.06.18 |
| [Nas] NAS 디스크 교체 후 SMART 모니터링 심층 분석: 숨겨진 문제 진단과 예방 (0) | 2026.06.16 |
| [NAS] TrueNAS SCALE로 NAS OS 마이그레이션: OpenMediaVault에서 안전하게 전환하기 (1) | 2026.06.15 |
| [Nas] NAS 데이터 안전 지킴이: 재앙을 막는 백업 전략 체크리스트 10가지 (0) | 2026.06.13 |