대시보드를 안전하게 공개하기: Claude Code, Codex, OpenCode를 위한 Cloudflare Tunnel vs Tailscale Funnel vs ngrok 비교
셀프 호스팅한 대시보드에 휴대폰으로 접속하는 세 가지 방법의 실용적인 비교와 각각의 트레이드오프(신뢰 경계, 인증, HTTPS, 운영 복잡도).
- CLI
- 0.2.17
- 프리뷰 ref
- a2c45c8
직접 관리하는 머신에서 Claude Code, Codex, OpenCode를 돌리고 있다면, 다음에 떠오르는 생각은 뻔합니다.
"휴대폰으로 확인하고 싶다."
그리고 이어지는 위험한 생각:
"그냥 포트 하나 열면 되지."
그렇게 해서 인증이 어설픈 대시보드가 인터넷에 공개됩니다.
그래서 이 가이드는 같은 바람을 더 안전하게 이루는 방법을 다룹니다.
인바운드 포트를 열지 않고, 휴대폰에서 열 수 있는 HTTPS URL 만들기.
많이 쓰는 도구는 세 가지입니다.
- Cloudflare Tunnel
- Tailscale Funnel
- ngrok
모두 동작합니다.
하지만 신뢰 경계와 실패 방식은 크게 다릅니다.
요약
- "내 사설 네트워크 안에서만"이면 보통 Tailscale Serve / Funnel이 간단합니다.
- 강력한 신원 확인과 함께 인터넷에 공개하려면 Cloudflare Tunnel과 Cloudflare Access 조합이 흔한 패턴입니다.
- "지금 당장 URL이 필요하다"면 ngrok이 여전히 흔한 기본 선택입니다.
- 공개하려는 대시보드가 Happier 웹 UI라면 브라우저 암호화 제약을 기억하세요. 휴대폰 원격 접속은 HTTPS(보안 컨텍스트)여야 합니다.
문제
세 가지를 동시에 원합니다.
- 휴대폰에서 열 수 있는 URL
- HTTPS(보안 컨텍스트)
- 방화벽에 인바운드 구멍을 내지 않기
어려운 점은 여기서 말하는 "안전"이 TLS만이 아니라는 것입니다.
다음도 포함됩니다.
- 누가 그 URL에 접근할 수 있는지
- 어떻게 인증하는지
- 터널 자격 증명이 유출되면 어떻게 되는지
일반적인 방법과 트레이드오프
- 포트 열기: 빠르지만 무모합니다.
- LAN 안에서만 접속: 안전하지만, 밖에 있는 휴대폰에서는 안 됩니다.
- 인증 없는 터널: 포트를 여는 것보다는 조금 낫지만 여전히 무모합니다.
그래서 "휴대폰 접속"을 신원과 네트워크 설계의 문제로 보면 도움이 됩니다.
선택지 A: Cloudflare Tunnel
Cloudflare Tunnel은 아웃바운드 전용입니다. 커넥터가 Cloudflare 쪽으로 연결합니다.
사람들이 좋아하는 이유:
- 인바운드 포트가 필요 없다
- Cloudflare Access로 SSO, 디바이스 상태 확인, 정책을 쓸 수 있다
트레이드오프:
- 엣지로서 Cloudflare를 신뢰해야 한다
- DNS와 Access 정책을 관리해야 한다
선택지 B: Tailscale Funnel
Funnel은 Tailscale을 통해 HTTPS 엔드포인트를 공개합니다.
사람들이 좋아하는 이유:
- tailnet에 기본으로 통합되어 있다
- 오리진 IP를 숨긴다
트레이드오프:
- 제약과 정책 요구 사항이 있다
- Funnel(공개)과 Serve(tailnet 전용)를 헷갈리기 쉽다
선택지 C: ngrok
ngrok은 URL을 빠르게 얻는 방법입니다.
트레이드오프:
- 사용량 제한과 요금이 제약이 된다
- 운영 환경에 가까운 대시보드에는 강력한 인증이 필요하다
Happier의 위치(보안 컨텍스트와 Tailscale Serve)
특히 Happier 웹 UI를 공개한다면 추가 제약이 있습니다.
최신 브라우저는 일부 암호화 기능을 보안 컨텍스트에서만 허용합니다.
http://localhost는 해당됩니다.
http://<lan-ip>와 http://<tailscale-ip>는 해당되지 않습니다.
그래서 HTTPS가 필요합니다.
Happier가 권장하는 원격 접속 경로는 Tailscale Serve로 https://*.ts.net URL을 얻는 것입니다.