Cloudflare Zero Trust VPN 완벽 사용 가이드
VPN 서버를 직접 구축하려면 복잡한 설정과 보안 관리가 필요하고, 포트 포워딩으로 인한 보안 위험도 감수해야 합니다. 하지만 Cloudflare Zero Trust를 사용하면 이 모든 문제를 간단하게 해결할 수 있습니다. 방화벽 포트를 열지 않고도 안전하게 내부 네트워크에 접속할 수 있으며, 무료 플랜으로도 최대 50명까지 사용 가능합니다.
이 글에서는 Synology NAS 환경에서 Cloudflare Zero Trust VPN을 구축하는 전체 과정을 단계별로 안내하며, 실제 현장에서 검증된 방법만을 소개합니다. 특히 Synology NAS의 하드웨어 제약사항과 해결 방법, 그리고 기존 Public Hostname 터널과의 통합 전략까지 실무에 필요한 모든 내용을 다룹니다.

목 차
1. Zero Trust VPN이란 무엇인가
Zero Trust VPN은 기존 VPN의 "일단 연결되면 모든 것에 접근 가능"이라는 개념을 완전히 뒤집은 보안 모델입니다.
전통적인 VPN은 네트워크 경계를 기준으로 내부는 신뢰하고 외부는 차단하는 방식이었지만, Zero Trust는 내부든 외부든 모든 연결을 검증합니다. 사용자가 인증되었다고 해서 모든 리소스에 접근할 수 있는 것이 아니라, 각 리소스마다 별도의 권한 확인을 거칩니다. Cloudflare Zero Trust VPN은 이러한 철학을 구현한 클라우드 기반 VPN 서비스로, 기업 수준의 보안을 개인과 소규모 팀도 무료로 사용할 수 있습니다.
Zero Trust의 핵심 원칙
Zero Trust VPN의 동작 원리는 세 가지 핵심 원칙을 기반으로 합니다.
- 첫째, "절대 신뢰하지 않고 항상 검증한다"는 원칙으로, 사용자의 신원과 디바이스 상태를 매번 확인합니다.
- 둘째, "최소 권한 원칙"을 적용하여 사용자가 필요한 리소스에만 접근할 수 있도록 제한합니다.
- 셋째, "마이크로 세그멘테이션"을 통해 네트워크를 작은 단위로 나누고 각 세그먼트마다 별도의 보안 정책을 적용합니다.
이러한 원칙 덕분에 VPN 계정이 탈취되더라도 공격자가 전체 네트워크에 접근할 수 없습니다.
Cloudflare의 Zero Trust 구현
Cloudflare는 자체 글로벌 네트워크를 활용하여 Zero Trust VPN을 구현했습니다. 사용자와 서버 사이에 Cloudflare 네트워크가 중간자 역할을 하며, 모든 트래픽을 검사하고 정책을 적용합니다. 사용자는 WARP 클라이언트를 통해 Cloudflare 네트워크에 연결하고, 서버는 Cloudflared 데몬을 통해 Cloudflare에 연결합니다. 이 구조에서는 서버가 외부에 포트를 개방할 필요가 없으며, 모든 연결은 아웃바운드 방향으로만 이루어집니다. 무료 플랜에서도 50명까지 사용할 수 있어 소규모 조직이나 가족 단위 사용에 충분합니다.
[참고] Cloudflare Zero Trust의 무료 플랜은 개인과 소규모 팀을 위한 것으로, 상업적 용도로 대규모 사용 시에는 유료 플랜을 검토해야 합니다.
2. 전통적 VPN vs Cloudflare Zero Trust
전통적 VPN의 문제점
기존 VPN 솔루션은 OpenVPN, WireGuard, L2TP 등 여러 프로토콜을 사용하지만 공통적인 문제점을 가지고 있습니다. 가장 큰 문제는 방화벽에 포트를 개방해야 한다는 점입니다. VPN 서버가 외부 연결을 받기 위해서는 1194번(OpenVPN) 또는 51820번(WireGuard) 같은 포트를 인터넷에 노출해야 하며, 이는 DDoS 공격이나 취약점 스캔의 대상이 됩니다. 또한 VPN 서버의 보안 패치와 업데이트를 지속적으로 관리해야 하며, 클라이언트 설정도 복잡하여 일반 사용자가 접근하기 어렵습니다. ISP가 제공하는 공유기에서는 VPN 패스스루 설정이 제한될 수 있으며, CGNAT 환경에서는 아예 사용이 불가능한 경우도 있습니다.
Cloudflare Zero Trust VPN의 장점
Cloudflare Zero Trust VPN은 이러한 문제를 근본적으로 해결합니다. 서버에서 Cloudflare로 아웃바운드 연결만 만들면 되므로 방화벽 포트 개방이 전혀 필요 없습니다. DDoS 공격은 Cloudflare의 글로벌 네트워크가 자동으로 차단하며, SSL 인증서도 Cloudflare가 자동으로 관리해줍니다. 클라이언트 설정은 일반적인 앱 설치 수준으로 간단하며, 웹 브라우저를 통한 SSO 인증을 지원하여 비밀번호 관리도 필요 없습니다. 또한 Cloudflare의 전 세계 데이터센터를 활용하므로 지리적으로 가까운 엣지 서버를 통해 빠른 연결 속도를 제공합니다.
VPN 방식 비교표
| 구분 | 전통적 VPN | Cloudflare Zero Trust VPN |
| 포트 개방 | 필수 (1194, 51820 등) | 불필요 (아웃바운드만) |
| DDoS 보호 | 별도 구축 필요 | Cloudflare 자동 제공 |
| 인증서 관리 | 수동 갱신 필요 | 자동 관리 |
| 클라이언트 설정 | 복잡 (설정 파일 필요) | 간단 (앱 설치 후 로그인) |
| CGNAT 환경 | 제한적 또는 불가 | 제약 없음 |
| 접근 제어 | IP/포트 기반 | 사용자/정책 기반 |
| 비용 | 서버 운영비 | 무료 (50명까지) |
| 성능 | 서버 스펙 의존 | 글로벌 CDN 활용 |
이 표에서 볼 수 있듯이 Cloudflare Zero Trust VPN은 거의 모든 측면에서 전통적 VPN보다 우수하며, 특히 보안과 관리 편의성에서 큰 차이를 보입니다.
3. Cloudflared와 WARP Connector 선택하기
Cloudflared | VPN 대체의 표준 방법
Cloudflared는 Cloudflare가 제공하는 경량 데몬으로 서버와 Cloudflare 네트워크를 연결하는 터널을 생성합니다. Cloudflare로 생성된 터널은 대부분 특정 호스팅 서비스를 오픈하는 용도로 주로 사용하도록 계획되었습니다. Cloudflare용 터널도 VPN용도로 사용할 수 있으며, VPN 용도로 사용할 때는 Private Network 모드로 동작하며, 내부 네트워크의 IP 대역 전체를 Cloudflare를 통해 접근할 수 있게 만듭니다. 단방향 프록시 방식으로 동작하여 사용자가 서버에 접속하는 것만 지원하며, 서버에서 사용자 쪽으로 연결을 시작할 수는 없습니다. 하지만 대부분의 VPN 사용 시나리오에서는 사용자가 서버에 접속하는 것이 목적이므로 이는 큰 제약이 아닙니다. Cloudflare는 공식적으로 VPN 대체 용도로 Cloudflared를 권장하고 있습니다.
WARP Connector | 고급 네트워킹 기능
WARP Connector는 더 복잡한 네트워킹 시나리오를 위한 도구입니다. 양방향 프록시를 지원하여 서버에서 사용자 쪽으로 연결을 시작할 수 있으며, Site-to-Site VPN 구성도 가능합니다. VOIP 전화나 SIP 서버처럼 서버가 클라이언트로 먼저 연결을 시도해야 하는 경우에 필수적입니다. 또한 Mesh 네트워킹을 지원하여 여러 개의 Private Network를 서로 연결할 수 있습니다. 하지만 WARP Connector는 Linux AMD64 플랫폼만 지원하며, nftables라는 최신 방화벽 시스템을 필요로 합니다.
Synology NAS의 제약사항
여기서 중요한 문제가 발생합니다. Synology NAS는 커스텀 리눅스 커널을 사용하며, nftables 대신 구버전 iptables를 사용합니다. 커널도 3.10.108로 매우 오래되었으며, nftables는 커널 컴파일 시점에 포함되어야 하므로 나중에 추가할 수 없습니다. 실제로 GitHub의 warp-docker 프로젝트에서 Synology 사용자들이 "Failed to run NFT command" 오류를 보고했으며, 이는 근본적으로 해결이 불가능합니다. 따라서 Synology NAS에서는 WARP Connector를 사용할 수 없고, Cloudflared를 사용해야 합니다.
선택 가이드
VPN 용도만 필요 (사용자 -> 서버 접속)
└─> Cloudflared 사용 (모든 플랫폼 지원)
양방향 통신 필요 (서버 -> 사용자 연결)
├─> VOIP/SIP 서비스
├─> Mesh 네트워킹
└─> WARP Connector 필요
└─> Linux AMD64 + nftables 환경에서만 가능
└─> Synology NAS: 불가능
└─> Ubuntu/Debian 서버: 가능
└─> Raspberry Pi (Ubuntu): 가능
대부분의 홈랩이나 소규모 오피스 VPN 구축에서는 Cloudflared만으로 충분하며, Synology NAS 환경에서는 Cloudflared가 유일한 선택지입니다.
4. Synology NAS 환경 분석
Synology DSM의 특수성
Synology의 DiskStation Manager(DSM)는 표준 리눅스 배포판이 아닌 자체 커스텀 리눅스입니다. /etc/os-release 파일조차 존재하지 않으며, 커널 버전은 3.10.108로 2015년 수준입니다. Intel Avoton 플랫폼 기반으로 동작하며, x86_64 아키텍처를 사용하지만 많은 최신 리눅스 기능이 빠져 있습니다. 특히 systemd 대신 자체 init 시스템을 사용하고, 방화벽도 nftables가 아닌 iptables를 사용합니다. 이러한 특성 때문에 일반 Linux용으로 제작된 소프트웨어가 Synology에서 바로 동작하지 않는 경우가 많습니다.
Docker를 통한 호환성 확보
다행히 Synology는 Docker를 공식 지원하며, DSM 7.2부터는 Container Manager라는 이름으로 더욱 강화된 Docker 환경을 제공합니다. Docker 컨테이너 내부는 표준 리눅스 환경이므로 Cloudflared 같은 소프트웨어가 문제없이 동작합니다. Synology의 커스텀 커널은 Docker 런타임만 지원하면 되고, 컨테이너 내부의 네트워킹과 파일시스템은 독립적으로 동작합니다. 따라서 Cloudflared를 Docker 컨테이너로 실행하면 Synology의 모든 제약을 우회할 수 있습니다. 실제로 많은 Synology 사용자들이 이 방법으로 Cloudflare Tunnel VPN을 성공적으로 구축했습니다.
기존 Cloudflared 터널 확인
많은 사용자가 이미 Synology NAS에서 Cloudflared를 Public Hostname 용도로 사용하고 있을 것입니다. 예를 들어 n8n, Nginx, Jellyfin 같은 웹 서비스를 외부에 노출하기 위해 Cloudflare Tunnel을 설정했다면, 이미 Cloudflared 컨테이너가 실행 중입니다. 이 경우 새로운 VPN 전용 터널을 만들 수도 있지만, 기존 터널에 Private Network 라우팅만 추가하는 것이 더 효율적입니다. 기존 터널 상태는 다음 명령어로 확인할 수 있습니다.
# SSH로 Synology에 접속 후 실행
sudo docker ps | grep cloudflare
출력 예시:
ae0ec8eb0acd cloudflare/cloudflared:latest "cloudflared --no-au..." 6 hours ago Up 6 hours cloudflared
이렇게 이미 실행 중인 Cloudflared가 있다면 새로운 터널을 만들지 않고 활용하는 방법을 먼저 고려해야 합니다.
5. VPN 아키텍처 설계
단일 터널 VPN 아키텍처 | 권장
가장 간단하고 효율적인 VPN 구성은 하나의 Cloudflared 터널로 Public Hostname과 Private Network를 모두 처리하는 것입니다. 이 방식은 리소스를 절약하고 관리가 단순하며, 단일 장애점을 줄입니다. 기존에 웹 서비스 노출용 터널이 있다면 거기에 Private Network만 추가하면 됩니다.
[WARP 클라이언트] [Cloudflare] [Cloudflared]
사용자 디바이스 --(VPN)--> 글로벌 네트워크 --(Tunnel)--> Docker 컨테이너
├─> Public Hostnames
│ (n8n, Nginx 등)
└─> Private Network
(192.168.1.0/24)
├─> NAS 웹 인터페이스
├─> Docker 컨테이너
└─> SMB/NFS 파일 공유
이 아키텍처의 장점은 하나의 터널로 모든 것을 처리하므로 Cloudflare Dashboard에서 관리가 쉽고, 터널 상태 모니터링도 단순합니다. 또한 VPN 트래픽과 웹 트래픽이 같은 경로를 사용하므로 일관된 성능을 제공합니다.
듀얼 터널 VPN 아키텍처 | 고급
트래픽을 분리하고 싶거나 장애 격리가 필요한 경우 VPN 전용 터널을 별도로 구성할 수 있습니다. 이 방식은 Public Hostname 터널과 Private Network 터널이 독립적으로 동작하므로, 하나가 문제가 생겨도 다른 하나는 정상 작동합니다.
[WARP 클라이언트] --(VPN)--> [Cloudflare] --(Tunnel 1)--> [Cloudflared-VPN]
├─> Private Network
[웹 사용자] --(HTTPS)--> [Cloudflare] --(Tunnel 2)--> [Cloudflared-Web]
├─> Public Hostnames
이 아키텍처는 관리 복잡도가 증가하고 리소스를 두 배로 사용하지만, 트래픽 분리와 장애 격리 측면에서 이점이 있습니다. 특히 Public Hostname에 많은 트래픽이 발생하는 환경에서 VPN 성능을 보장하고 싶을 때 유용합니다.
VPN 네트워크 대역 설계
Private Network를 설정할 때 어떤 IP 대역을 노출할지 결정해야 합니다. 가정이나 소규모 오피스에서는 보통 다음과 같은 IP 대역을 사용합니다.
# 일반적인 네트워크 대역: 0/24옵션을 통해 해당 네트워크 대역 전체 접근이 가능
192.168.0.0/24 - 공유기 기본값 (많은 제품)
192.168.1.0/24 - 공유기 기본값 (일부 제품)
192.168.x.0/24 - 사용자 설정
10.0.0.0/24 - 일부 공유기 및 기업 환경
#Cloudflare 가상 IP:
100.64.0.0/10 - Cloudflare CGNAT 대역 (자동 할당)
VPN을 설정할 때는 자신의 네트워크 대역을 정확히 파악해야 합니다. NAS의 IP가 192.168.1.48이라면 네트워크 대역은 192.168.1.0/24입니다. 이 전체 대역을 Private Network로 등록하면 해당 네트워크의 모든 기기에 VPN으로 접근할 수 있습니다.
다중 터널 환경에서의 라우팅
WARP Client는 사용자가 터널을 직접 선택하지 않습니다. Zero Trust 조직에 연결하면 Cloudflare Gateway가 목적지 IP 주소를 보고 자동으로 적절한 터널을 선택합니다. 따라서 여러 터널이 있을 때는 각 터널에 서로 다른 네트워크 대역을 할당하여 중복을 피해야 합니다. 예를 들어 집 터널에는 192.168.1.0/24를, 사무실 터널에는 192.168.111.0/24를 할당하면 사용자가 접속하는 IP 주소에 따라 자동으로 올바른 터널이 선택됩니다. 만약 특정 네트워크만 VPN을 통해 접속하고 싶다면 Split Tunnels의 Include 모드를 사용하여 해당 네트워크 대역만 포함시키면 됩니다.
6. 환경 확인 및 사전 준비
Cloudflare 계정 및 Zero Trust 설정
VPN 구축을 시작하기 전에 Cloudflare 계정과 Zero Trust가 준비되어 있어야 합니다. Cloudflare 계정은 무료로 생성할 수 있으며, Zero Trust도 50명까지 무료로 사용할 수 있습니다.
Cloudflare Zero Trust 활성화:
1. https://one.dash.cloudflare.com 접속
2. "Sign up for Zero Trust" 클릭
3. 팀 이름 설정 (예: mycompany-vpn)
4. 결제 정보 입력 (무료 플랜도 카드 등록 필요, 요금 청구 안됨)
5. Zero Trust 대시보드 접속 확인
팀 이름은 나중에 WARP 클라이언트 로그인 시 팀이름.cloudflareaccess.com 형태로 사용되므로 기억하기 쉬운 이름을 선택하는 것이 좋습니다.
네트워크 정보 수집
VPN 설정에 필요한 네트워크 정보를 미리 확인해둡니다.
# Synology NAS의 IP 주소 확인
# DSM → 제어판 → 네트워크 → 네트워크 인터페이스
# 또는 SSH로 확인
ifconfig | grep "inet addr"
# 네트워크 대역 확인 (일반적으로 /24)
# IP가 192.168.1.48이면 → 192.168.1.0/24
# IP가 10.0.0.100이면 → 10.0.0.0/24
정리할 정보:
- NAS IP 주소: 192.168.1.48
- 네트워크 대역: 192.168.1.0/24
- 게이트웨이(공유기): 192.168.1.1
- DNS 서버: 192.168.1.1 (또는 공유기 IP)
DSM 버전 및 Docker 확인
Synology NAS의 DSM 버전에 따라 설치 방법이 다릅니다.
DSM 버전 확인:
DSM → 제어판 → 정보 센터 → 일반
Docker/Container Manager 설치 여부 확인:
DSM → 패키지 센터 → 설치됨 → "Docker" 또는 "Container Manager" 검색
| DSM 버전 | Docker 패키지 이름 | 설치 방법 |
| 7.2 이상 | Container Manager | Docker Compose 권장 |
| 7.0 ~ 7.1 | Docker | CLI 명령어 변환 필요 |
| 6.x | Docker | CLI 명령어 변환 필요 |
만약 Docker/Container Manager가 설치되어 있지 않다면 패키지 센터에서 설치합니다.
기존 Cloudflared 터널 확인
기존에 Cloudflare Tunnel을 사용 중인지 확인합니다.
SSH로 확인:
ssh admin@192.168.1.48
sudo -i
# Docker 컨테이너 확인
docker ps -a | grep cloudflare
Cloudflare Dashboard에서 확인:
Zero Trust → Networks → Tunnels
→ 활성 터널 목록 확인
기존 터널이 있다면:
- 터널 이름 기록
- 연결된 Public Hostname 확인
- 터널 상태(Healthy/Inactive) 확인
기존 터널이 없다면 새로 생성해야 하며, 있다면 Private Network만 추가하는 방법을 선택할 수 있습니다.
7. 방법 1 | 기존 터널 활용 (추천)
이미 Public Hostname용 Cloudflared 터널이 있다면 VPN을 위해 새 터널을 만들 필요가 없습니다. 기존 터널에 Private Network 라우팅만 추가하면 됩니다. 이 방법은 리소스 효율적이고 관리가 간단하며, 대부분의 사용 사례에 적합합니다.
Private Network 추가
Step 1: Cloudflare Zero Trust Dashboard 접속
https://one.dash.cloudflare.com
→ Networks → Tunnels
→ 기존 터널 선택 (예: home-tunnel)
Step 2: Private Networks 탭으로 이동
터널 상세 화면에서 상단 탭 확인:
- Public Hostnames (기존 웹 서비스)
- Private Networks (VPN 설정) ← 여기 클릭
Step 3: Private Network 추가
"Add a private network" 버튼 클릭
입력 사항:
- CIDR: 192.168.1.0/24
- Description: Home Network (선택사항)
→ Save
[!] CIDR 표기법에 주의하세요. 192.168.1.0/24는 192.168.1.1부터 192.168.1.254까지 모든 IP를 포함합니다. 특정 IP만 허용하려면 /32를 사용합니다 (예: 192.168.1.48/32).
Step 4: 터널 상태 확인
터널 목록으로 돌아가서 상태 확인:
Status: Healthy (녹색)
Connectors: 1 active
Private Networks 탭에서:
192.168.1.0/24 - Routed through this tunnel
이제 기존 터널이 Public Hostname과 Private Network 모두를 처리합니다. 별도의 컨테이너 설정 변경은 필요 없습니다.
Split Tunnels 설정
WARP 클라이언트가 어떤 트래픽을 Cloudflare를 통해 라우팅할지 설정합니다. VPN 용도로는 내부 네트워크 트래픽만 터널을 통하도록 설정하는 것이 효율적입니다.

Step 1: Devices Profile 설정으로 이동
Zero Trust Dashboard
→ Team & Resources → Devices
→ Device Profile list → Configure
Step 2: Split Tunnels 모드 선택
Split Tunnels 섹션 찾기
→ Mode 변경: "Exclude IPs and domains" → "Include IPs and domains"
Exclude 모드는 모든 트래픽을 터널로 보내고 예외만 제외하는 방식이고, Include 모드는 지정한 트래픽만 터널로 보냅니다. VPN 용도로는 Include 모드가 적합합니다.
Step 3: 내부 네트워크 대역 추가
"Manage" 버튼 클릭
→ "Add" 버튼 클릭
추가할 항목들:
1. 192.168.1.0/24 (내부 네트워크)
2. 100.64.0.0/10 (Cloudflare CGNAT - 선택사항)
→ Save
이제 WARP 클라이언트는 192.168.1.x로 가는 트래픽만 Cloudflare를 통해 라우팅하고, 나머지 인터넷 트래픽은 직접 연결합니다.
Local Domain Fallback 설정
내부 네트워크에서 nas.local 같은 로컬 도메인을 사용한다면 Local Domain Fallback을 설정해야 합니다. 이 설정이 없으면 WARP 클라이언트가 Cloudflare DNS에 로컬 도메인을 질의하여 실패합니다.
Step 1: Local Domain Fallback 활성화
Settings → WARP Client → Device settings → Configure
→ Local Domain Fallback 섹션
→ "Manage" 버튼 클릭
Step 2: 로컬 도메인 추가
"Add entry" 버튼 클릭
입력 사항:
- Domain: internal.local (또는 사용 중인 로컬 도메인)
- DNS Server 1: 192.168.1.1 (공유기 또는 내부 DNS)
- DNS Server 2: (비워둠 또는 보조 DNS)
→ Save
이제 nas.internal.local 같은 도메인은 내부 DNS 서버가 해석하고, 나머지 도메인은 Cloudflare DNS가 해석합니다.
8. 방법 2 | VPN 전용 터널 구축
기존 터널과 VPN 트래픽을 완전히 분리하고 싶다면 VPN 전용 터널을 새로 만들 수 있습니다. 이 방법은 트래픽 격리와 독립적인 장애 처리가 가능하지만, 관리 복잡도와 리소스 사용이 증가합니다.
DSM 버전별 설치 방법 개요
VPN 전용 터널 설치는 DSM 버전에 따라 방법이 다릅니다.
| DSM 버전 | 방법 | 난이도 | 권장도 |
| 7.2+ | Container Manager + Docker Compose | 쉬움 | 강력 권장 |
| 7.0~7.1 | Docker 앱 + GUI 설정 | 보통 | 가능 |
| 6.x | Docker 앱 + GUI 설정 | 보통 | 레거시 |
DSM 7.2 이상을 사용 중이라면 Container Manager와 Docker Compose를 활용하는 것이 가장 효율적입니다. 이전 버전에서는 Cloudflare가 제공하는 Docker 실행 명령어를 터미널에서 그대로 실행한 후 GUI에서 컨테이너 이름 등을 맞게 변환해야 합니다.
Zero Trust에서 새 터널 생성
모든 DSM 버전에서 공통적으로 먼저 Cloudflare Zero Trust에서 터널을 생성해야 합니다.
Step 1: 터널 생성 시작
Zero Trust Dashboard
→ Networks → Tunnels
→ "Create a tunnel" 버튼 클릭
Step 2: Connector 타입 선택
Choose connector type:
○ Cloudflared ← 이것 선택
○ WARP Connector (Synology에서 사용 불가)
→ Next
Step 3: 터널 이름 입력
Tunnel name: home-vpn-tunnel
→ Save tunnel
Step 4: Connector 설치 화면
이 화면에서 Docker 실행 명령어가 표시됩니다. 이 화면을 닫지 마세요! 터널 토큰이 포함된 명령어를 복사해야 합니다.
# Cloudflare가 제공하는 명령어 예시
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiXXXXXXXXXXXXX...
이 명령어에서 eyJhIjoiXXXXXXXXX... 부분이 터널 토큰입니다. 이 토큰을 안전하게 복사해둡니다.
DSM 7.2+ Container Manager 설치
DSM 7.2 이상에서는 Container Manager를 사용한 Docker Compose 방식을 권장합니다.
Step 1: Container Manager 확인
패키지 센터 → 검색: "Container Manager"
→ 이미 설치됨 확인 (또는 설치)
Step 2: 폴더 구조 생성
File Station 열기
→ docker 폴더로 이동 (/volume1/docker)
→ 새 폴더 생성: cloudflared-vpn
Step 3: docker-compose.yml 파일 생성
File Station에서 cloudflared-vpn 폴더 안에 docker-compose.yml 파일을 생성합니다. Windows나 Mac에서 텍스트 에디터로 작성한 후 업로드해도 됩니다.
version: '3.8'
services:
cloudflared-vpn:
image: cloudflare/cloudflared:latest
container_name: cloudflared-vpn
restart: unless-stopped
# Cloudflare에서 복사한 터널 토큰 입력
command: tunnel run --token eyJhIjoiXXXXXXXXXXXXX...
# 네트워크 설정 (기존 터널과 격리)
network_mode: bridge
# 로그 설정
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
토큰을 파일에 직접 넣는 것이 불안하다면 환경 변수 파일을 사용할 수 있습니다.
Step 4: 환경 변수 파일 생성 (선택사항)
같은 폴더에 .env 파일 생성:
TUNNEL_TOKEN=eyJhIjoiXXXXXXXXXXXXX...
docker-compose.yml 수정:
services:
cloudflared-vpn:
# ... 기존 설정 ...
command: tunnel run --token ${TUNNEL_TOKEN}
env_file:
- .env
Step 5: Container Manager에서 프로젝트 생성
Container Manager 열기
→ 프로젝트 탭
→ "생성" 버튼 클릭
→ "경로에서 생성" 선택
프로젝트 이름: cloudflared-vpn
경로: /docker/cloudflared-vpn
→ "다음" 클릭
→ docker-compose.yml 미리보기 확인
→ "완료" 클릭
프로젝트가 자동으로 시작되며, Container Manager의 컨테이너 탭에서 cloudflared-vpn 컨테이너가 실행 중인 것을 확인할 수 있습니다.
DSM 7.1 이하 Docker 앱 설치
DSM 7.1 이하에서는 cloudflare.com에서 터널 생성중 가이드해준 Docker용 스크립트를 터미널에서 실행하는 것으로 터널이 자동으로 설치됩니다. 편리한 점이 있으나 세부적인 설정변경은 로컬에서 더이상 진행할 수 없으며, Cloudflare에서 터널과 관련된 상세정보를 수정하실 수 있습니다.
Synology NAS에서는 터미널 창을 이용하여 cloudflare에서 제공하는 Token만을 등록하는 절차만 수행합니다. 앱의 GUI를 사용하여 컨테이너의 이름을 변경할 수 있습니다.
터널 상태 확인
컨테이너를 시작한 후 Cloudflare Dashboard에서 터널 연결을 확인합니다.
Cloudflare Dashboard 확인:
Zero Trust → Networks → Tunnels
→ home-vpn-tunnel 선택
Status: Healthy (녹색 표시)
Last seen: Just now
Connectors: 1 active
컨테이너 로그 확인:
Container Manager (DSM 7.2+):
Container Manager → 컨테이너 탭
→ cloudflared-vpn 선택
→ "로그" 버튼 클릭
Docker 앱 (DSM 7.1 이하):
Docker → 컨테이너 탭
→ cloudflared-vpn 선택
→ "세부 정보" 버튼
→ "로그" 탭
정상 로그 예시:
2025-01-24T15:30:00Z INF Starting tunnel tunnelID=abc123...
2025-01-24T15:30:01Z INF Registered tunnel connection connIndex=0
2025-01-24T15:30:01Z INF Connection established location=ICN
오류가 발생하면:
ERR Authentication failed - 토큰이 잘못됨
ERR Tunnel not found - 터널이 삭제됨
ERR Connection timeout - 네트워크 문제
Private Network 추가
터널이 정상 연결되었으면 이제 Private Network를 설정합니다.
Zero Trust → Networks → Tunnels
→ home-vpn-tunnel 선택
→ "Private Networks" 탭 클릭
→ "Add a private network" 버튼
CIDR: 192.168.1.0/24
Description: Home VPN Network
→ Save
이제 VPN 전용 터널이 완성되었습니다. 다음 단계는 WARP 클라이언트를 설치하여 실제로 VPN에 연결하는 것입니다.
9. WARP 클라이언트로 VPN 연결
터널 설정이 완료되었으면 이제 사용자 디바이스에서 VPN에 연결할 차례입니다. Cloudflare WARP 클라이언트는 일반 VPN 클라이언트처럼 동작하지만 설정이 훨씬 간단합니다.
WARP 클라이언트 다운로드 및 설치
Windows/macOS: WARP 터널을 생성하는 과정에서 자연스럽게 다운로드하는 단계가 나타납니다.(권장)
공식 다운로드: https://1.1.1.1/
또는
Zero Trust Dashboard → Settings → Downloads
→ "Download WARP" 링크 클릭

iOS/Android:
App Store / Google Play에서 검색: "1.1.1.1"
또는 "Cloudflare WARP"
Linux (Ubuntu/Debian):
# Cloudflare GPG 키 추가
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | \
sudo gpg --yes --dearmor \
--output /usr/share/keyrings/cloudflare-main.gpg
# Repository 추가
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] \
https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/cloudflared.list
# 설치
sudo apt update
sudo apt install cloudflare-warp
Zero Trust 조직에 등록 | WARP Client 로그인
WARP 앱을 설치한 후 Zero Trust 조직에 등록해야 VPN 기능을 사용할 수 있습니다.
WARP 클라이언트가 정상적인 동작을 수행하기 위해서는 Cloudflare.com에 로그인하여 시트를 활성화 하여야 합니다. 상단의 상태바의 WARP Client를 선택하면 'Preference'메뉴를 선택하고, 나타나는 설정 팝업창의 세번째 탭인 'Account'를 선택하고 Cloudflare.com에 로그인 합니다.
- Team Name : 로그인을 시도하면 팝업창에서 팀이름을 묻습니다. 팀이름은 메인대시보드 > Zero Trust > Setting 화면에서 확인하실 수 있습니다.
- 인증코드 : 팀이름이 정상적으로 확인되면, 이메일 인증절차 화면이 나타납니다. 이메일을 입력하고 이메일로 전송된 인증코드 6자리를 등록하시면 됩니다. 메일 클라이언트에 인증코드가 담긴 인증코드를 확인하시면, 정상적으로 로그인되며, 로그인전의 빨간색 스위치 버튼이 파란색으로 전환되면 정상적으로 인증되었음을 확인하실 수 있습니다.

Step 1: WARP 앱 실행
Windows: 시스템 트레이에서 Cloudflare 아이콘 클릭
macOS: 메뉴 바에서 Cloudflare 아이콘 클릭
Mobile: 1.1.1.1 앱 실행
Step 2: 계정 메뉴로 이동
WARP 앱 화면:
→ 설정(톱니바퀴) 아이콘 클릭
→ "Account" 또는 "계정" 메뉴
→ "Login with Cloudflare Zero Trust" 선택
Step 3: 팀 이름 입력
팝업 창:
Your team name: mycompany-vpn
[!] 이것은 Zero Trust 설정 시 입력한 팀 이름입니다.
전체 주소는 mycompany-vpn.cloudflareaccess.com 형태입니다.
→ "Next" 클릭
Step 4: 브라우저에서 인증
자동으로 브라우저가 열리며 로그인 화면이 표시됩니다.
인증 방법 선택:
- One-time PIN (이메일로 PIN 받기)
- Google
- GitHub
- Microsoft
등 (Zero Trust 설정에 따라 다름)
→ 인증 완료
Step 5: 디바이스 등록 확인
브라우저에 "Success!" 메시지 표시
→ WARP 앱으로 돌아가면 "Connected to [팀이름]" 표시
Zero Trust Dashboard에서도 확인할 수 있습니다:
Settings → Team and Resources → Devices
→ 방금 등록한 디바이스 표시됨

VPN 연결 활성화
Step 1: WARP 모드 확인
WARP 앱 → 설정 → Preferences
Connection mode:
○ WARP (전체 트래픽 터널링)
● Gateway with WARP (Zero Trust VPN) ← 이것 선택
Step 2: 연결 활성화
WARP 앱 메인 화면:
큰 토글 버튼 클릭
OFF → ON
연결 상태:
"Connected to [팀이름] Zero Trust"
Step 3: Split Tunnel 동작 확인
Split Tunnel을 Include 모드로 설정했다면 내부 네트워크 트래픽만 터널을 경유합니다.
# macOS/Linux에서 라우팅 확인
netstat -rn | grep 192.168.1
# Windows PowerShell에서 확인
Get-NetRoute -DestinationPrefix 192.168.1.0/24
정상적으로 설정되었다면 192.168.1.0/24로 가는 트래픽이 Cloudflare 인터페이스를 통하도록 라우팅됩니다.
연결 문제 해결
연결이 안 되는 경우:
- 팀 이름 오류
증상: "Organization not found" 오류
해결: Zero Trust Dashboard에서 정확한 팀 이름 확인
- 디바이스 등록 권한 없음
증상: "Not authorized to enroll" 오류
해결: Zero Trust → Settings → Device enrollment
→ Enrollment permissions 규칙 확인
- WARP가 연결되지만 VPN 안 됨
증상: WARP는 연결되었으나 내부 네트워크 접속 실패
해결: Split Tunnels 설정에서 192.168.1.0/24 포함 확인
Private Network 라우팅이 터널에 추가되었는지 확인
- DNS 해석 실패
증상: IP는 접속되지만 nas.local 같은 도메인 안 됨
해결: Local Domain Fallback에 로컬 도메인 추가
10. VPN 접속 테스트 및 검증
VPN 연결이 완료되었으면 실제로 내부 네트워크에 접근할 수 있는지 테스트해야 합니다. 체계적인 테스트를 통해 VPN이 정상적으로 동작하는지 확인하고, 문제가 있다면 조기에 발견할 수 있습니다.
기본 연결 테스트
Ping 테스트:
# macOS/Linux 터미널
ping -c 4 192.168.1.48
# Windows PowerShell
Test-Connection -ComputerName 192.168.1.48 -Count 4
[i]-c 4 옵션의 의미
-c (Count): 패킷을 보낼 횟수를 지정하는 옵션입니다.
4: 숫자는 횟수를 의미하며, 여기서는 총 4번의 ICMP 에코 요청(Ping) 패킷을 보내고 명령을 자동으로 종료하라는 뜻입니다.
정상 응답:
PING 192.168.1.48: 56 data bytes
64 bytes from 192.168.1.48: icmp_seq=0 ttl=64 time=45.2 ms
64 bytes from 192.168.1.48: icmp_seq=1 ttl=64 time=43.8 ms
64 bytes from 192.168.1.48: icmp_seq=2 ttl=64 time=44.5 ms
64 bytes from 192.168.1.48: icmp_seq=3 ttl=64 time=46.1 ms
--- 192.168.1.48 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
응답 시간(time)이 보통 20-100ms 사이면 정상입니다. Cloudflare 글로벌 네트워크를 경유하므로 직접 연결보다는 느리지만 VPN 용도로는 충분합니다.
비정상 응답 : 웹접속을 성공하나 Ping서비스에 실패

- 141.101.83.102 - Cloudflare 엣지 서버 IP
- 100.96.0.1 - WARP CGNAT 소스 IP
- Destination Host Unreachable 응답
비정상적인 응담의 원인은 Cloudflare Gateway의 ICMP 프로토콜 처리방식에 있습니다. Cloudflare Gateway는 기본적으로 ICMP를 차단합니다.
- ICMP는 stateless 프로토콜 (연결 개념 없음)
- DDoS 공격에 악용 가능 (Ping flood, Smurf attack)
- Zero Trust 정책상 불필요한 프로토콜로 간주
- Gateway Firewall에서 기본 차단 정책 적용
해결 방법 : Gateway Network Policy에서 ICMP 허용 (권장)
Cloudflare Gateway에서 ICMP 프로토콜을 명시적으로 허용해야 합니다.
ICMP 허용 정책 생성 | Proxy에서 ICMP 활성화
경로: Traffic policies → Traffic settings
탭: Proxy and inspection
섹션: Allow Secure Web Gateway to proxy traffic
설정: Toggle: ON (녹색)
Select protocols to forward:
☑ TCP (required)
☑ UDP (recommended) - 필수!
☑ ICMP (recommended) [Beta]
- Ping용 → Save → WARP Client 재연결

Cloudflare Zero Trust의 ICMP 제한: 위와 같이 다 설정해도 ping 여전히 문제가 있습니다.
- ICMP는 [Beta] 기능 - 불완전함
- 단방향만 지원 - Echo Request는 전달, Reply는 보장 안 됨
- Cloudflared 터널의 한계 - TCP/UDP에 최적화, ICMP 응답 경로 불확실
- 설계 철학 - 애플리케이션 접근 제어 중심, ICMP는 부차적
결론: Ping이 안 되는 것은 정상이며 문제가 아닙니다. Cloudflare Zero Trust는 애플리케이션 VPN이지 완전한 네트워크 레이어 VPN이 아닙니다.
대체 방법
Cloudflare는 ICMP 대신 TCP 기반 진단을 권장:
# 연결 확인
nc -zv 192.168.111.48 22
# 응답 시간
curl -o /dev/null -s -w "Time: %{time_total}s\n" \
http://192.168.111.48:5000
# SSH 테스트
ssh admin@192.168.111.48 "echo ok"
웹 서비스 접속 테스트
Synology DSM 접속:
브라우저에서 접속:
http://192.168.1.48:5000
또는 HTTPS:
https://192.168.1.48:5001
정상적이라면 Synology 로그인 화면이 표시됩니다. 외부 네트워크에서 접속하는 것이므로 브라우저가 "안전하지 않은 연결" 경고를 표시할 수 있지만, 트래픽 자체는 Cloudflare 터널을 통해 암호화되어 있습니다.
Docker 컨테이너 서비스 접속:
n8n: http://192.168.1.48:5678
Portainer: http://192.168.1.48:9000
Jellyfin: http://192.168.1.48:8096
각 서비스의 포트 번호는 실제 설정에 따라 다를 수 있습니다.
파일 공유 접속 테스트
SMB 파일 공유 (Windows/macOS):
Windows:
파일 탐색기 주소창:
\\192.168.1.48\share
또는 네트워크 드라이브 연결:
net use Z: \\192.168.1.48\share /user:사용자명
macOS:
Finder → 이동 → 서버에 연결 (Cmd+K)
smb://192.168.1.48/share
사용자 이름과 암호 입력 후 연결
NFS 파일 공유 (Linux/macOS):
# macOS
mount -t nfs 192.168.1.48:/volume1/share /Users/username/nas
# Linux
sudo mount -t nfs 192.168.1.48:/volume1/share /mnt/nas
파일 공유가 정상적으로 마운트되면 VPN을 통한 모든 네트워크 서비스가 작동하는 것입니다.
SSH 접속 테스트
# Synology NAS SSH 접속
ssh admin@192.168.1.48
# 또는 다른 내부 서버
ssh user@192.168.1.100
SSH 접속이 가능하다면 터미널 기반 관리 작업도 VPN을 통해 수행할 수 있습니다.
성능 측정
VPN 연결의 실제 성능을 측정하여 사용 가능한 대역폭을 확인합니다.
파일 전송 속도 테스트:
1. 작은 파일(1MB) 복사 → 레이턴시 확인
2. 큰 파일(100MB) 복사 → 대역폭 확인
3. 여러 파일 동시 복사 → 안정성 확인
일반적인 성능 범위:
- 레이턴시: 20-100ms (위치에 따라 다름)
- 다운로드 속도: 10-50 Mbps (일반적)
- 업로드 속도: 5-30 Mbps (일반적)
성능은 사용자 위치, Cloudflare 데이터센터 거리, 인터넷 회선 속도, NAS 하드웨어 성능 등 여러 요인에 영향을 받습니다.
11. VPN 보안 정책 설정 | Cloudflare.com 내부 정책에 따라 UI 변경 될 수 있음
Zero Trust VPN의 가장 큰 장점은 세밀한 보안 정책을 적용할 수 있다는 점입니다. 단순히 VPN에 연결했다고 해서 모든 리소스에 접근할 수 있는 것이 아니라, 사용자별, 디바이스별, 서비스별로 다른 정책을 적용할 수 있습니다.
Device Enrollment 정책
어떤 사용자가 VPN에 등록할 수 있는지 제어합니다.
Step 1 | Enrollment Permissions 설정
Zero Trust → Settings → WARP Client
→ Device enrollment
→ "Manage" 버튼 클릭
Step 2 | 등록 규칙 추가
"Add a rule" 버튼 클릭
Rule name: Allow company emails
Rule type: Include
Selector: Email
Value: *@company.com
→ Save
일반적인 등록 정책 예시:
회사 이메일만 허용:
Include: Email ends with @company.com
특정 사용자만 허용:
Include: Email
Values:
- user1@gmail.com
- user2@gmail.com
- admin@company.com
국가 제한 (한국에서만):
Include: Country
Value: South Korea
여러 조건 조합:
Include: Email ends with @company.com
Require: Country is South Korea
Access Policy (접근 제어)
Private Network에 연결된 상태에서 특정 서비스나 IP에 대한 접근을 제어합니다.
Step 1 | Access Application 생성
Zero Trust → Access → Applications
→ "Add an application" 버튼
→ "Private Network" 선택
Step 2 | Application 설정
Application name: Internal NAS Services
Application type: Private Network
→ Next
Step 3 | 정책 설정
Policy name: Allow authenticated users
Action: Allow
Include: Emails
Values: user1@gmail.com, user2@gmail.com
→ Next → Save
고급 정책 예시:
관리자만 SSH 접속 허용:
Application: SSH to NAS
Destination IP: 192.168.1.48/32
Port: 22
Policy: Include email admin@company.com
업무 시간에만 VPN 허용:
Include: Email ends with @company.com
Require: Time of day between 09:00-18:00 KST
특정 디바이스만 허용:
Include: Email is user@company.com
Require: Device Posture - macOS version >= 13.0
Gateway Network Policy
네트워크 레벨에서 트래픽을 필터링합니다.
Step 1 | Network Policy 생성
Zero Trust → Gateway → Firewall Policies
→ Network 탭
→ "Add a policy" 버튼
Step 2 | 정책 설정
Policy name: Block unauthorized ports
Traffic criteria:
- Destination IP: 192.168.1.0/24
- Port: Any except 22, 80, 443, 5000, 5001
Action: Block
→ Create policy
보안 정책 예시:
위험한 포트 차단:
Block: Destination port in (23, 21, 3389)
Reason: Telnet, FTP, RDP 차단
특정 서비스만 허용:
Allow: Destination IP = 192.168.1.48 AND Port in (22, 5000, 5001)
Block: All other traffic to 192.168.1.0/24
업로드 크기 제한:
Block: Upload size > 100MB
Reason: 대용량 파일 업로드 방지
Device Posture Check
디바이스의 보안 상태를 확인하여 안전한 디바이스만 VPN 접속을 허용합니다.
Step 1 | Device Posture 활성화
Zero Trust → Settings → WARP Client
→ Device posture
→ "Enable" 클릭
Step 2 | Posture Check 생성
"Add a check" 버튼 클릭
Check type: Operating System Version
OS: macOS
Operator: >=
Version: 13.0
→ Save
Step 3 | Access Policy에 적용
Access → Applications → [기존 application 선택]
→ Edit policy
Require: Passed Device Posture Check
Check name: macOS version >= 13.0
→ Update
Posture Check 종류:
운영체제 버전:
OS: Windows
Version: >= 10.0.19041 (Windows 10 20H1 이상)
파일 존재 여부:
File path: C:\Program Files\Antivirus\scanner.exe
Check: File exists
프로세스 실행 여부:
Process name: antivirus.exe
Check: Process running
방화벽 활성화:
Check: Windows Firewall enabled
이러한 Posture Check를 통해 보안이 취약한 디바이스의 VPN 접속을 차단할 수 있습니다.
12. VPN 트러블슈팅
VPN 사용 중 발생할 수 있는 일반적인 문제와 해결 방법을 정리했습니다.
연결 문제
증상: WARP가 "Connecting..." 상태에서 멈춤
원인과 해결:
1. 터널 상태 확인
Zero Trust → Tunnels → 터널 상태가 Healthy인지 확인
2. Cloudflared 컨테이너 재시작
Docker → cloudflared-vpn → 재시작
3. 로그 확인
컨테이너 로그에서 "Connection established" 메시지 확인
증상: VPN은 연결되지만 내부 네트워크 접속 안 됨
원인:
- Split Tunnels에 내부 IP 대역이 포함되지 않음
- Private Network 라우팅이 설정되지 않음
해결:
1. Split Tunnels 확인
Settings → WARP Client → Split Tunnels
→ Include 모드에 192.168.1.0/24 추가 확인
2. Private Network 확인
Networks → Tunnels → [터널] → Private Networks 탭
→ 192.168.1.0/24 라우팅 확인
3. WARP 클라이언트 재연결
WARP 앱에서 Disconnect → Connect
DNS 문제
증상: IP 주소는 접속되지만 도메인 이름은 안 됨
예: 192.168.1.48은 되지만 nas.local은 안 됨
해결:
Local Domain Fallback 설정
Settings → WARP Client → Device settings
→ Local Domain Fallback → Manage
→ Add entry:
Domain: local
DNS Server: 192.168.1.1
→ Save
증상: 외부 인터넷 DNS가 느림
원인: Cloudflare DNS를 사용하지만 일부 지역에서 느릴 수 있음
해결:
Split Tunnels에서 Exclude 모드 사용
→ 내부 네트워크만 Include하고 나머지는 직접 연결
성능 문제
증상: VPN 속도가 매우 느림 (1 Mbps 이하)
원인과 해결:
1. 지리적 거리 확인
사용자 위치와 NAS 위치가 매우 먼 경우
→ 성능 저하 불가피, Cloudflare 엣지 서버 경유 시간
2. Cloudflare 데이터센터 확인
https://speed.cloudflare.com 접속
→ 가장 가까운 데이터센터와 레이턴시 확인
3. 네트워크 혼잡 확인
ISP의 Cloudflare 피어링 상태 확인
→ 일부 ISP는 Cloudflare와 직접 연결 없음
증상: 파일 전송 중 연결 끊김
원인: MTU 크기 문제 또는 장시간 Idle 타임아웃
해결:
1. MTU 크기 조정
네트워크 어댑터 MTU를 1280으로 설정
2. Keep-alive 설정
장시간 전송 중 주기적으로 작은 패킷 전송
인증 문제
증상: "Access denied" 또는 "Not authorized"
원인: Access Policy에서 차단됨
해결:
1. Access Logs 확인
Zero Trust → Logs → Access
→ 차단된 요청 찾기
→ 어떤 정책에서 차단되었는지 확인
2. Policy 수정
Access → Applications
→ 해당 application의 policy 수정
→ 사용자 이메일 또는 그룹 추가
증상: Device Posture 실패
원인: 디바이스가 보안 요구사항을 충족하지 못함
해결:
1. Posture Check 상태 확인
WARP 앱 → Settings → Account → Device Posture
→ Failed checks 확인
2. 요구사항 충족
OS 업데이트, 보안 소프트웨어 설치 등
3. 일시적 우회 (테스트용)
Access Policy에서 Posture 요구사항 제거
컨테이너 문제
증상: Cloudflared 컨테이너가 계속 재시작됨
로그 확인:
# Container Manager
Container Manager → cloudflared-vpn → 로그
# Docker 앱
Docker → 컨테이너 → cloudflared-vpn → 세부 정보 → 로그
# SSH
sudo docker logs cloudflared-vpn
일반적인 오류와 해결:
ERR Invalid token
→ 터널 토큰 재확인, docker-compose.yml 수정
ERR Tunnel not found
→ Zero Trust에서 터널 삭제됨, 새로 생성 필요
ERR Connection timeout
→ 방화벽에서 Cloudflare IP 차단 확인
NAS의 아웃바운드 443 포트 허용 확인
WARP 클라이언트 재설정
모든 해결 방법이 실패하면 WARP 클라이언트를 재설정합니다.
Windows/macOS:
1. WARP 앱 설정 → Advanced → Reset to factory defaults
2. 앱 재시작
3. Zero Trust 재등록
완전 재설치:
1. WARP 앱 제거
2. 설정 폴더 삭제:
Windows: C:\ProgramData\Cloudflare
macOS: ~/Library/Application Support/Cloudflare
3. WARP 재설치
4. Zero Trust 재등록
13. 고급 VPN 활용법
기본 VPN 설정을 넘어 더 고급 기능을 활용하는 방법을 소개합니다.
여러 네트워크 대역 동시 라우팅
집과 사무실에 각각 NAS가 있고 둘 다 VPN으로 접속하고 싶다면 여러 Private Network를 하나의 터널에 추가할 수 있습니다. 어떠한 네트워크이든 동일한 터널 프로파일을 사용하면 동시에 연결 가능합니다.
시나리오:
- 집: 192.168.1.0/24 (NAS IP: 192.168.1.48)
- 사무실: 10.0.0.0/24 (NAS IP: 10.0.0.100)
설정:
Zero Trust → Networks → Tunnels → [터널 선택]
→ Private Networks 탭
1. Add: 192.168.1.0/24 (Description: Home Network)
2. Add: 10.0.0.0/24 (Description: Office Network)
Split Tunnels 설정:
Include IPs and domains:
- 192.168.1.0/24
- 10.0.0.0/24
이제 WARP 연결 시 두 네트워크 모두 접속 가능합니다.
Site-to-Site VPN | 네트워크 간 연결
두 개의 서로 다른 위치 네트워크를 직접 연결할 수 있습니다. 예를 들어 집의 디바이스가 사무실 NAS에 직접 접속하도록 설정할 수 있습니다.
요구사항:
- 각 위치에 Cloudflared 터널 설치
- 두 터널 모두 Private Network 설정
집 터널 (home-tunnel):
Private Network: 192.168.1.0/24
사무실 터널 (office-tunnel):
Private Network: 10.0.0.0/24
집 네트워크에서 사무실 접속:
집 디바이스에 WARP 클라이언트 설치
→ Zero Trust 등록
→ 10.0.0.100 (사무실 NAS) 접속 가능
사무실 네트워크에서 집 접속:
사무실 디바이스에 WARP 클라이언트 설치
→ Zero Trust 등록
→ 192.168.1.48 (집 NAS) 접속 가능
양쪽 모두 Cloudflare를 통해 연결되므로 포트 포워딩이나 고정 IP가 필요 없습니다.
선택적 서비스 노출
전체 네트워크 대역을 노출하는 대신 특정 IP나 서비스만 VPN으로 접근하도록 제한할 수 있습니다.
시나리오: NAS만 VPN 접속 허용
Private Network: 192.168.1.48/32 (단일 IP)
Split Tunnels:
Include: 192.168.1.48/32
Gateway Network Policy:
Allow: Destination IP = 192.168.1.48 AND Port in (22, 5000, 5001)
Block: All other traffic
이렇게 하면 다른 내부 네트워크 디바이스(192.168.1.1-47, 49-254)는 VPN으로 접근할 수 없고 오직 NAS만 접근 가능합니다.
WARP-to-WARP Direct Connect
같은 Zero Trust 조직에 등록된 디바이스끼리 직접 통신할 수 있습니다. 서버 없이 P2P 방식으로 연결됩니다.
활성화:
Zero Trust → Settings → Network
→ Firewall
→ Proxy: Enabled (TCP, UDP, ICMP 모두)
→ WARP-to-WARP
→ Enable WARP-to-WARP connectivity
사용 예시:
Alice의 노트북 (WARP CGNAT IP: 100.96.0.10) Bob의 데스크탑 (WARP CGNAT IP: 100.96.0.20)
Alice → Bob 파일 전송:
scp file.txt 100.96.0.20:/home/bob/
Bob → Alice 원격 제어:
ssh alice@100.96.0.10
Cloudflare가 중간에서 NAT traversal을 처리하므로 방화벽이나 공유기 설정 변경 없이 P2P 연결이 가능합니다.
로그 모니터링 및 분석
Zero Trust는 모든 VPN 접속과 트래픽을 로그로 기록합니다.
Access Logs (인증 로그):
Zero Trust → Logs → Access
확인 항목:
- User: 누가 접속했는지
- Application: 어떤 서비스에 접속했는지
- Action: 허용/차단
- Country: 어느 국가에서 접속했는지
- Device: 어떤 디바이스로 접속했는지
Gateway Logs (네트워크 트래픽 로그):
Zero Trust → Logs → Gateway → Network
확인 항목:
- Source IP: 사용자 IP
- Destination IP: 접속 대상 (내부 IP)
- Port: 사용된 포트
- Bytes: 전송량
- Action: 허용/차단
로그 활용 예시:
비정상 접속 탐지:
필터: Action = Block
→ 차단된 접속 시도 분석
→ 공격 패턴 확인
사용량 분석:
필터: Destination IP = 192.168.1.48
→ Group by User
→ 사용자별 트래픽 확인
접속 시간대 분석:
Group by Hour
→ 피크 시간대 파악
→ 인프라 확장 계획
14. 대안 | Raspberry Pi VPN 구성
Synology NAS에서 Cloudflared를 사용할 수 없는 환경이거나, WARP Connector의 양방향 통신이 필요한 경우 Raspberry Pi나 Ubuntu 서버를 활용할 수 있습니다.
Raspberry Pi를 VPN 게이트웨이로 사용
Raspberry Pi는 저전력으로 24시간 가동이 가능하며, Ubuntu를 설치하면 WARP Connector를 포함한 모든 Cloudflare 기능을 사용할 수 있습니다.
하드웨어 요구사항:
- Raspberry Pi 4 Model B (4GB RAM 권장)
- MicroSD 카드 (32GB 이상)
- 안정적인 전원 공급장치
- 유선 네트워크 연결 (Wi-Fi보다 안정적)
Ubuntu 설치:
1. Raspberry Pi Imager 다운로드
https://www.raspberrypi.com/software/
2. OS 선택:
Other general-purpose OS → Ubuntu → Ubuntu Server 22.04 LTS (64-bit)
3. SD 카드에 설치
4. SSH 활성화:
Settings에서 SSH 활성화, 사용자 이름과 비밀번호 설정
5. Raspberry Pi 부팅 및 네트워크 연결
Cloudflared 설치 | Raspberry Pi
# SSH로 Raspberry Pi 접속
ssh ubuntu@라즈베리파이IP
# 시스템 업데이트
sudo apt update && sudo apt upgrade -y
# Cloudflare GPG 키 추가
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | \
sudo gpg --yes --dearmor \
--output /usr/share/keyrings/cloudflare-main.gpg
# Repository 추가
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] \
https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/cloudflared.list
# Cloudflared 설치
sudo apt update
sudo apt install cloudflared
# 버전 확인
cloudflared --version
Cloudflared VPN 터널 설정 | Raspberry Pi
Synology NAS에서 VPN을 설정했던것과 동일하게 Cloudflared방식 또는 WARP Connector를 이용한 방법으로 라즈베리파이 모둘에서 VPN을 설정할 수 있습니다.
Step 1 | Cloudflare 로그인
cloudflared tunnel login
브라우저가 열리며 Cloudflare 인증 요청. 승인하면 인증서가 저장됩니다.
Step 2 | 터널 생성
cloudflared tunnel create raspi-vpn-tunnel
# 출력:
# Tunnel credentials written to ~/.cloudflared/[TUNNEL-ID].json
# Created tunnel raspi-vpn-tunnel with id [TUNNEL-ID]
Step 3 | 설정 파일 생성
sudo nano /etc/cloudflared/config.yml
내용:
tunnel: [TUNNEL-ID]
credentials-file: /root/.cloudflared/[TUNNEL-ID].json
ingress:
# Private Network 라우팅
- service: http_status:404
Step 4 | Private Network 추가
Zero Trust Dashboard
→ Networks → Tunnels → raspi-vpn-tunnel
→ Private Networks 탭
→ Add: 192.168.1.0/24
Step 5 | 서비스로 등록
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
# 상태 확인
sudo systemctl status cloudflared
이제 Raspberry Pi가 VPN 게이트웨이로 동작하며, Synology NAS보다 더 안정적이고 표준적인 Linux 환경에서 실행됩니다.
WARP Connector 설치 | Raspberry Pi 고급
양방향 통신이 필요하면 WARP Connector를 설치합니다.
# WARP 클라이언트 설치
curl -fsSL https://pkg.cloudflare.com/cloudflare-warp-ascii.gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] \
https://pkg.cloudflare.com/ $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/cloudflare-warp.list
sudo apt update
sudo apt install cloudflare-warp
# WARP Connector 모드로 등록
warp-cli registration new
warp-cli mode warp+doh
warp-cli connect
# 상태 확인
warp-cli status
WARP Connector는 Cloudflared보다 고급 기능을 제공하지만 설정이 복잡하고, 대부분의 VPN 사용 사례에서는 Cloudflared만으로 충분합니다.
Cloudflare에서 WARP Connector로 한번에 등록하기
Copy and paste this code for Debian/Ubuntu OS device terminal window. View instructionsThis link opens in a new tab
# 1. Setup pubkey, apt repo, and update/install WARP
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-get update && sudo apt-get install cloudflare-warp
# 2. Enable IP forwarding on the host
sudo sysctl -w net.ipv4.ip_forward=1
# 3. Run the WARP Connector with token
# Successful completion of this command will cause remote connections to the host to drop.
warp-cli connector new eyJhIjoiMW...
warp-cli connect
WARP connector 터널이 생성되면 private network와 네트워크 보안정책을 Cloudflare.com에서 설정하면 됩니다.
기본 접속 방식 | DNS 등록 없이
WARP Client로 Private Network 접속 시 IP 주소로 직접 접속합니다:
# IP로 직접 접속
http://192.168.1.48:5000 # Synology DSM
http://192.168.1.48:5678 # n8n
ssh admin@192.168.1.48 # SSH
# SMB 파일 공유
smb://192.168.1.48/share
장점:
- 추가 설정 불필요
- 즉시 사용 가능
- DNS 장애에 영향 없음
단점:
- IP 주소를 외워야 함
- IP 변경 시 재설정 필요
로컬 DNS를 활용한 접속 방식 | 내부 DNS
집/사무실 공유기나 내부 DNS 서버에서 이미 로컬 도메인을 사용 중이라면:
## 공유기에 등록된 로컬 도메인
http://nas.local:5000
http://myserver.home:5678
ssh admin@nas.local
## Cloudflare 설정 필요:
Zero Trust → Team and Resources → Devices → Device profile
→ Local Domain Fallback
Domain: local (또는 .home)
DNS Server: 192.168.1.1 (내부 DNS/공유기)
## 동작 원리:
- WARP Client가 `nas.local` 요청 감지
- Cloudflare DNS 대신 내부 DNS(192.168.1.1)로 질의
- 내부 DNS가 `nas.local → 192.168.1.48` 응답
- VPN 터널을 통해 192.168.1.48 접속
## 장점:
- 기존 로컬 도메인 그대로 사용
- Cloudflare DNS 설정 불필요
- 내부 네트워크와 일관성 유지
---
Cloudflare에 실제 도메인을 등록하고 Private IP를 연결할 수도 있습니다:
하지만 이건 공개 DNS에 내부 IP가 노출되는 등의 보안문제가 발생할 수 있습니다.
---
Local Domain Fallback
- 위치 : Cloudflare 대시보드 > Zero Trust > Team & Resources > Devices > Device Profile > Local Domain Fallback

## Local Domain Fallback 설정
1. Zero Trust Dashboard
→ Team and Resources → Devices → Device Profile settings
→ Configure
2. Local Domain Fallback 섹션
→ Manage
3. Add entry
Domain: local
DNS Server 1: 192.168.1.1
Description: Home Router DNS
4. Save
대부분의 경우 IP 주소만으로 충분하며, 편의성이 필요하면 Local Domain Fallback이나 Cloudflare Gateway DNS Overrides를 사용하는 것이 좋습니다.
15. WARP Client VPN 연결 시 기존 연결 끊김 현상
WARP Client를 활성화하면 기존에 연결되어 있던 SSH, RDP, 데이터베이스 연결 등이 모두 끊어집니다. 이는 전통적인 하드웨어 VPN과 다른 동작 방식 때문입니다.
왜 연결이 끊어지는가?
네트워크 인터페이스 변경
WARP Client 활성화 시 네트워크 라우팅 테이블이 재구성됩니다.
WARP 비활성화 상태:
[사용자 PC] ---(WiFi/Ethernet)---> [192.168.1.48:22 SSH]
eth0 / wlan0
WARP 활성화 순간:
1. WARP 가상 네트워크 인터페이스 생성 (CloudflareWARP0)
2. 라우팅 테이블 재구성
3. 기존 연결의 소스 IP/인터페이스 변경
4. TCP 연결 유지 실패 → 연결 끊김
WARP 활성화 후:
[사용자 PC] ---(CloudflareWARP0)---> [Cloudflare] ---(Tunnel)---> [192.168.1.48:22]
TCP 연결 상태 불일치
TCP는 4-tuple로 연결을 식별합니다:
(소스 IP, 소스 포트, 목적지 IP, 목적지 포트)
기존 SSH 연결:
소스: 192.168.1.100:54321 (WiFi IP)
목적지: 192.168.1.48:22
WARP 활성화 후:
소스: 100.96.0.10:54321 (WARP CGNAT IP)
목적지: 192.168.1.48:22
소스 IP가 변경되어 서버는 이를 새로운 연결로 인식하고, 기존 연결은 타임아웃됩니다.
전통적 VPN과의 차이점
하드웨어 VPN | OpenVPN, WireGuard, IPsec
Split Routing 방식:
기존 연결: eth0 유지
VPN 트래픽: tun0 추가
라우팅 테이블:
192.168.1.0/24 dev eth0 (로컬 - 기존 경로 유지)
10.8.0.0/24 dev tun0 (VPN)
0.0.0.0/0 dev eth0 (기본 게이트웨이)
기존 연결이 유지되는 이유:
- 로컬 네트워크 트래픽은 eth0 경로 그대로 유지
- VPN 터널은 별도 인터페이스(tun0)로 추가
- 라우팅 변경이 점진적이고 기존 경로 보존
WARP Client (Cloudflare Zero Trust)
Full Stack 방식:
모든 트래픽을 WARP 인터페이스로 우선 라우팅
라우팅 테이블 재구성:
192.168.1.0/24 dev CloudflareWARP0 (Split Tunnel Include 시)
0.0.0.0/0 dev CloudflareWARP0 (기본값)
연결이 끊기는 이유:
- 모든 트래픽을 WARP 인터페이스로 재라우팅
- 기존 물리 인터페이스 경로가 비활성화되거나 우선순위 하락
- 라우팅 변경이 즉각적이고 전면적
Split Tunnels 모드별 동작 차이
Exclude 모드 | 기본값
설정: 모든 트래픽을 WARP로, 예외만 직접 연결
동작:
- WARP 활성화 → 모든 라우팅을 WARP로 전환
- 기존 로컬 네트워크 연결도 WARP 경유 시도
- 내부 IP → Cloudflare → 터널 → 내부 IP (루프백)
- 기존 SSH 연결 끊김
문제:
같은 네트워크에 있어도 WARP를 거쳐서 접속 시도
→ 기존 직접 연결 세션 끊김
Include 모드 | 권장
설정: 지정한 트래픽만 WARP로, 나머지 직접 연결
Include: 192.168.1.0/24
동작:
- 로컬 네트워크(192.168.1.x)는 WARP 경유
- 다른 트래픽은 물리 인터페이스 유지
문제:
여전히 192.168.1.x로 가는 트래픽은 WARP로 재라우팅
→ 같은 네트워크 내 기존 SSH 연결 끊김
WARP vs 전통적 VPN 비교표
| 특성 | 전통적 VPN | WARP Client |
| 라우팅 방식 | 추가형 (Additive) | 대체형 (Replacement) |
| 기존 연결 | 유지됨 | 끊어짐 |
| 네트워크 IF | 별도 인터페이스 추가 | 기존 IF 우선순위 변경 |
| 활성화 속도 | 느림 (3-10초) | 빠름 (1-2초) |
| Split Tunnel | 정밀 제어 가능 | Include/Exclude만 |
| 동시 VPN | 가능 (복잡) | 어려움 |
WARP 활성화 시 주의사항
기존 연결 끊김 현상
WARP Client를 활성화하면 기존에 연결되어 있던 SSH, 데이터베이스, RDP 등의 세션이 모두 끊어집니다. 이는 WARP가 네트워크 라우팅을 전면적으로 재구성하기 때문입니다. 전통적인 하드웨어 VPN과 달리 WARP는 기존 네트워크 인터페이스에 VPN 터널을 추가하는 것이 아니라, 모든 트래픽을 WARP 인터페이스로 우선 라우팅하도록 변경합니다. 이 과정에서 TCP 연결의 소스 IP와 네트워크 경로가 변경되어 기존 세션이 끊어지게 됩니다.
해결 방법
같은 네트워크에서 작업 중일 때는 WARP를 활성화하기 전에 중요한 작업을 완료하거나, tmux나 screen 같은 세션 관리자를 사용하여 연결이 끊겨도 작업을 복구할 수 있도록 준비해야 합니다. 또는 Split Tunnels를 Exclude 모드로 설정하고 로컬 네트워크 대역(192.168.0.0/16)을 제외하면 같은 네트워크 내의 연결은 VPN을 거치지 않고 직접 연결되어 기존 세션이 유지됩니다.
로컬 네트워크와 원격 VPN 동시 사용
같은 네트워크에 있을 때는 직접 연결하고, 외부에서만 WARP VPN을 사용하려면 Split Tunnels Exclude 모드를 권장합니다. 로컬 네트워크 대역을 Exclude 리스트에 추가하면 집이나 사무실에서는 빠른 직접 연결을 유지하면서, 외부에서만 VPN을 통해 안전하게 접속할 수 있습니다.
16. 마무리 및 VPN 운영 가이드
구축 방법 종합 비교
이 글에서 소개한 여러 VPN 구축 방법을 정리하면 다음과 같습니다.
| 방법 | 적합 대상 | 장점 | 단점 |
| 기존 터널 + Private Network | 이미 Cloudflared 사용 중 | 설정 간단, 리소스 효율적 | 트래픽 분리 불가 |
| VPN 전용 터널 (Synology) | 트래픽 분리 원하는 경우 | 독립 운영, 장애 격리 | 리소스 2배, 관리 복잡 |
| Raspberry Pi + Cloudflared | 표준 Linux 환경 선호 | 안정성, 확장성 | 추가 하드웨어 필요 |
| Raspberry Pi + WARP | 양방향 통신 필요 | 전체 기능 지원 | 설정 복잡, 고급 지식 |
대부분의 홈랩 사용자는 기존 터널 + Private Network 방법으로 충분하며, 이것이 가장 간단하고 효율적입니다.
VPN 보안 체크리스트
운영 중인 VPN의 보안을 주기적으로 점검해야 합니다.
[ ] Device Enrollment 정책 설정됨
→ 승인된 사용자만 등록 가능
[ ] Access Policy 구성됨
→ 사용자별 접근 권한 설정
[ ] Gateway Network Policy 활성화
→ 위험한 포트와 프로토콜 차단
[ ] Device Posture Check 활성화
→ 보안 요구사항 충족 디바이스만 허용
[ ] Split Tunnels 최적화
→ 필요한 트래픽만 터널 경유
[ ] Access Logs 정기 검토
→ 비정상 접속 시도 모니터링
[ ] 터널 상태 모니터링
→ Healthy 상태 유지 확인
[ ] Cloudflared 업데이트
→ 최신 보안 패치 적용
일반적인 운영 시나리오
시나리오 1 | 외출 중 NAS 파일 접근
1. 스마트폰에서 WARP 앱 실행
2. VPN 연결 활성화
3. 파일 관리자 앱에서 SMB 연결
smb://192.168.1.48/photos
4. 사진 다운로드 또는 업로드
5. 작업 완료 후 VPN 연결 해제
시나리오 2 | 원격지에서 Docker 컨테이너 관리
1. 노트북에서 WARP 연결
2. 브라우저로 Portainer 접속
http://192.168.1.48:9000
3. 컨테이너 상태 확인 및 재시작
4. 로그 확인
5. 작업 완료 (VPN 연결 유지 가능)
시나리오 3 | 여러 사람과 공유
1. 팀원 이메일 주소를 Device Enrollment에 추가
2. 팀원에게 팀 이름 공유 (예: mycompany-vpn)
3. 팀원이 WARP 앱 설치 및 등록
4. 필요한 서비스별로 Access Policy 설정
5. 각 팀원의 접근 로그 모니터링
성능 최적화 팁
Split Tunnels 최적화:
모든 트래픽을 VPN으로 보내면 느림
→ Include 모드로 내부 네트워크만 라우팅
추천 설정:
Include:
- 192.168.1.0/24 (내부 네트워크)
- 100.64.0.0/10 (WARP CGNAT - WARP-to-WARP 사용 시)
Exclude:
- (비워둠 - 나머지는 모두 직접 연결)
DNS 최적화:
Cloudflare DNS가 느린 경우:
→ Local Domain Fallback에 내부 도메인 추가
→ 내부 DNS 서버 지정
외부 도메인도 느린 경우:
→ Settings → Gateway → DNS locations
→ 가까운 데이터센터 우선 사용
지리적 최적화:
사용자와 NAS가 지리적으로 멀리 떨어진 경우:
→ 레이턴시 증가 불가피
→ Cloudflare 데이터센터 경유 시간
대안:
→ 자주 접속하는 파일은 로컬에 캐시
→ 대용량 파일은 VPN 외 방법 활용 (Synology C2 등)
참고 자료
공식 문서
커뮤니티 자료
- Cloudflare Community Forum
- Crosstalk Solutions - Cloudflare Tunnel 튜토리얼
- Jarrod's Tech - Zero Trust VPN 가이드
- Synology Community
추가 학습
- Cloudflare Zero Trust 아키텍처 백서
- Zero Trust 보안 모델 개론
- Private Network 라우팅 프로토콜
- Docker 네트워킹 기초
'AI 코딩' 카테고리의 다른 글
| [라즈베리파이] Bookworm에서 Chrome 한글 입력 문제 해결하기 (0) | 2026.02.01 |
|---|---|
| [라즈베리파이] 4K모니터에서 CLI폰트 키우기 (0) | 2026.02.01 |
| Cloudflare Tunnel을 활용한 HTTPS 연결하기(3) - Obsidian (0) | 2026.01.23 |
| Cloudflare Tunnel을 활용한 HTTPS 연결하기(2) - Synology NAS (0) | 2026.01.23 |
| Cloudflare Tunnel을 활용한 HTTPS 연결하기(1) - 기본편 (1) | 2026.01.22 |