내 두 번째 Cloudflare Tunnel
Source: Dev.to

저는 트위터 사용을 중단하고 우크라이나를 지원하기 위해 Mastodon, Bluesky, LinkedIn으로 눈을 돌렸습니다. 각 플랫폼마다 자체 스케줄러가 있어 금방 번거로워졌기 때문에, 저는 이들에 대한 게시물을 예약할 수 있는 Docker 기반 애플리케이션을 만들었습니다. 이 앱은 집에 있는 Synology NAS에서 (.local 이름으로 접근 가능) 잘 동작하지만, 호주 여행 중에 홈 네트워크를 노출하지 않고 안전하게 접근할 방법이 필요했습니다.
문제
관련된 프라이버시 및 보안 문제를 간략히 정리하면:
- 포트 포워딩은 집 IP 주소를 노출합니다
- 동적 DNS는 지속적인 업데이트가 필요합니다
- 포트를 여는 것은 보안 위험입니다
- SSL 인증서 관리가 번거롭습니다
다음과 같은 솔루션을 원했습니다:
- 내 홈 네트워크를 안전하게 유지
- HTTPS를 자동으로 제공
- 인증 기능 추가
- 유지 관리가 간단함
Cloudflare 터널 시작
Cloudflare Tunnel은 네트워크에서 Cloudflare 엣지까지 보안된 아웃바운드 연결을 생성합니다. 도메인에 대한 요청은 이 터널을 통해 애플리케이션으로 라우팅되며, 인바운드 포트가 필요하지 않습니다.
흐름:
Internet → Cloudflare Edge → Tunnel → NAS → Application
모든 연결은 NAS에서 아웃바운드로 이루어지며, 방화벽은 손대지 않습니다.
Source: …
터널 설정
사전 요구 사항
- Cloudflare에서 관리되는 도메인
- NAS에서 실행 중인 Docker 서비스
- Docker 컨테이너로 실행되는 애플리케이션
이름이 지정된 터널 만들기
- Cloudflare Zero Trust 대시보드에서 Access > Tunnels 로 이동합니다.
- Create a tunnel 을 클릭하고 Cloudflared 를 선택합니다.
- 터널 이름을 지정합니다(예:
nas). - 생성된 터널 토큰을 복사합니다 – 곧 필요합니다.
이 토큰은 터널을 Cloudflare에 인증하는 역할을 합니다.
NAS에서 cloudflared 실행
공식 Docker 이미지를 가져옵니다:
docker pull cloudflare/cloudflared:2025.9.1
Synology Docker UI를 사용해 다음 설정으로 컨테이너를 생성합니다:
- Container name:
cloudflared - Command:
tunnel --no-autoupdate run - Environment variable:
TUNNEL_TOKEN= - Network: 애플리케이션과 동일한 네트워크(예:
bridge)
cloudflared 컨테이너와 애플리케이션 컨테이너를 연결합니다:
- Link container: 애플리케이션 컨테이너 이름(예:
myapp) - Alias: 동일한 이름(
myapp)
이렇게 하면 cloudflared 가 http://myapp: 에 있는 앱에 접근할 수 있게 되며, 포트를 외부에 노출하지 않습니다.
공개 호스트명 구성
- Cloudflare 대시보드에서 터널 구성을 엽니다.
- Public Hostname 탭으로 이동해 Add a public hostname 을 클릭합니다.
- 서브도메인, 도메인 및 서비스 경로를 설정합니다(예:
http://myapp:).
호스트명은 Docker 링크 별칭과 일치해야 합니다. 다음과 같은 오류가 나타나면:
dial tcp: lookup wrongname on 192.168.1.254:53: no such host
링크 이름과 호스트명을 확인해 불일치를 수정합니다.
인증 추가
추가 보호 없이 URL만 알면 누구든 앱에 접근할 수 있습니다. Cloudflare Access는 코드 변경 없이 내장 인증을 제공합니다.
- Access > Applications 로 이동합니다.
- Add an application > Self‑hosted 를 클릭합니다.
- 애플리케이션 이름, 도메인, 서브도메인을 입력하고 Next 를 클릭합니다.
- 정책을 생성합니다:
- Policy name: “Allow myself”
- Action: Allow
- Include rule: Emails →
john@doe.it
- 애플리케이션을 추가하여 마무리합니다.

정책이 터널에 연결되어 있는지 확인하세요. 연결되지 않으면 Cloudflare가 인증을 적용하지 않습니다.
결과
- Cloudflare가 인증 페이지를 표시합니다.
- 이메일을 입력합니다.
- Cloudflare가 일회용 코드를 전송합니다.
- 코드를 입력하면 인증됩니다.
- 요청이 터널을 통해 애플리케이션으로 프록시됩니다.
이제 어디서든 게시물을 예약할 수 있습니다.
결론
Cloudflare Tunnel은 자체 호스팅을 위한 우아하고 비용이 들지 않는 솔루션을 제공합니다:
- 자동 HTTPS
- Cloudflare Access를 통한 내장 인증
- 인바운드 포트가 없어 홈 네트워크를 안전하게 유지
전체 설정은 약 30분 정도 걸렸으며, 대부분은 컨테이너 이름과 정책 할당을 수정하는 데 사용되었습니다. 이 가이드가 비슷한 문제에 직면한 분들에게 도움이 되길 바랍니다.
추가 읽을거리
- Home Assistant용 Cloudflare Tunnel
- Cloudflare Access 제어
- Cloudflare 정책
- 드디어 Cloudflare Zero Trust 터널을 이해했습니다
원본은 A Java Geek에 2025년 11월 30일에 게시되었습니다.