내 두 번째 Cloudflare Tunnel

발행: (2025년 12월 4일 오후 06:02 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

Cover image for My second Cloudflare Tunnel

저는 트위터 사용을 중단하고 우크라이나를 지원하기 위해 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 컨테이너로 실행되는 애플리케이션

이름이 지정된 터널 만들기

  1. Cloudflare Zero Trust 대시보드에서 Access > Tunnels 로 이동합니다.
  2. Create a tunnel 을 클릭하고 Cloudflared 를 선택합니다.
  3. 터널 이름을 지정합니다(예: nas).
  4. 생성된 터널 토큰을 복사합니다 – 곧 필요합니다.

이 토큰은 터널을 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)

이렇게 하면 cloudflaredhttp://myapp: 에 있는 앱에 접근할 수 있게 되며, 포트를 외부에 노출하지 않습니다.

공개 호스트명 구성

  1. Cloudflare 대시보드에서 터널 구성을 엽니다.
  2. Public Hostname 탭으로 이동해 Add a public hostname 을 클릭합니다.
  3. 서브도메인, 도메인 및 서비스 경로를 설정합니다(예: http://myapp:).

호스트명은 Docker 링크 별칭과 일치해야 합니다. 다음과 같은 오류가 나타나면:

dial tcp: lookup wrongname on 192.168.1.254:53: no such host

링크 이름과 호스트명을 확인해 불일치를 수정합니다.

인증 추가

추가 보호 없이 URL만 알면 누구든 앱에 접근할 수 있습니다. Cloudflare Access는 코드 변경 없이 내장 인증을 제공합니다.

  1. Access > Applications 로 이동합니다.
  2. Add an application > Self‑hosted 를 클릭합니다.
  3. 애플리케이션 이름, 도메인, 서브도메인을 입력하고 Next 를 클릭합니다.
  4. 정책을 생성합니다:
    • Policy name: “Allow myself”
    • Action: Allow
    • Include rule: Emails → john@doe.it
  5. 애플리케이션을 추가하여 마무리합니다.

Policy created

정책이 터널에 연결되어 있는지 확인하세요. 연결되지 않으면 Cloudflare가 인증을 적용하지 않습니다.

결과

  1. Cloudflare가 인증 페이지를 표시합니다.
  2. 이메일을 입력합니다.
  3. Cloudflare가 일회용 코드를 전송합니다.
  4. 코드를 입력하면 인증됩니다.
  5. 요청이 터널을 통해 애플리케이션으로 프록시됩니다.

이제 어디서든 게시물을 예약할 수 있습니다.

결론

Cloudflare Tunnel은 자체 호스팅을 위한 우아하고 비용이 들지 않는 솔루션을 제공합니다:

  • 자동 HTTPS
  • Cloudflare Access를 통한 내장 인증
  • 인바운드 포트가 없어 홈 네트워크를 안전하게 유지

전체 설정은 약 30분 정도 걸렸으며, 대부분은 컨테이너 이름과 정책 할당을 수정하는 데 사용되었습니다. 이 가이드가 비슷한 문제에 직면한 분들에게 도움이 되길 바랍니다.

추가 읽을거리

원본은 A Java Geek에 2025년 11월 30일에 게시되었습니다.

Back to Blog

관련 글

더 보기 »