ダッシュボードを安全に公開する:Claude Code、Codex、OpenCode 向け Cloudflare Tunnel、Tailscale Funnel、ngrok の比較
セルフホストしたダッシュボードにスマホからアクセスする 3 つの方法の実践的な比較と、それぞれのトレードオフ(信頼の境界、認証、HTTPS、運用の手間)。
- CLI
- 0.2.17
- プレビュー ref
- a2c45c8
自分で管理するマシンで Claude Code、Codex、OpenCode を動かしていると、次に浮かぶ考えは明らかです。
「スマホから確認したい。」
そして、危険な次の考えが続きます。
「ポートを開けてしまえばいい。」
こうして、認証が中途半端なダッシュボードがインターネットに公開されることになります。
このガイドでは、同じ望みをより安全な形で実現する方法を扱います。
受信ポートを開けずに、スマホで使える HTTPS の URL を用意する。
よく使われるツールは 3 つです。
- Cloudflare Tunnel
- Tailscale Funnel
- ngrok
どれも動きます。
ただ、信頼の境界や失敗のしかたは大きく異なります。
要点
- 「自分のプライベートネットワークの中だけ」でよいなら、たいていは Tailscale Serve / Funnel が手軽です。
- 強力な ID 制御つきでインターネットに公開したいなら、Cloudflare Tunnel と Cloudflare Access の組み合わせがよく使われるパターンです。
- 「いますぐ URL がほしい」なら、ngrok が定番です。
- 公開するダッシュボードが Happier の Web UI なら、ブラウザの暗号機能の制約を忘れずに。スマホからのリモートアクセスは HTTPS(セキュアコンテキスト)にする必要があります。
課題
同時に 3 つのものがほしいわけです。
- スマホで開ける URL
- HTTPS(セキュアコンテキスト)
- ファイアウォールに受信用の穴を開けないこと
難しいのは、ここでの「安全」が TLS だけではない点です。
次のことも含まれます。
- 誰がその URL に到達できるか
- どう認証するか
- トンネルの認証情報が漏れたら何が起きるか
よくある方法とそのトレードオフ
- ポートを開ける:速いですが、無謀です。
- LAN 内だけでアクセスする:安全ですが、外出先のスマホからは使えません。
- 認証なしのトンネル:ポートを開けるよりは少しましですが、やはり無謀です。
そのため、「スマホからのアクセス」は ID とネットワーク設計の問題として考えると役立ちます。
選択肢 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 の Web UI を公開する場合は、追加の制約があります。
最近のブラウザは、一部の暗号機能を セキュアコンテキスト でしか許可しません。
http://localhost は該当します。
http://<lan-ip> や http://<tailscale-ip> は該当しません。
そのため HTTPS が必要です。
Happier が推奨するリモートアクセスの方法は、Tailscale Serve で https://*.ts.net の URL を得ることです。