Daily-It

개발, AI, 인프라, 자동화와 일상 IT 제품 후기를 직접 써보며 정리하는 기술 블로그입니다.

Cloudflare Tunnelレビュー:ポートフォワーディングなしで開発サーバーを公開する

Cloudflare Tunnel は、ローカルサーバーや社内向けツールを外部から確認できるようにしたいときに便利な選択肢です。私の会社でも、まだルーター側でポートフォワーディングして使うケースがありますし、最近 Microsoft Teams 開発では Microsoft が提供する Dev Tunnels でローカルの Bot サーバーを公開したこともあります。どちらも目の前の問題は解決できますが、繰り返し使うと役割の違いが見えてきます。

私が Cloudflare Tunnel を良いと思った理由はシンプルです。サーバーがインターネットから直接 inbound 接続を受けるのではなく、cloudflared が Cloudflare 側に outbound 接続を作り、その経路でリクエストが入ってきます。origin IP を直接見せず、ルーター設定も毎回変えなくて済みます。

要約

Cloudflare Tunnel は cloudflared クライアントを通じて、自分のサーバーと Cloudflare ネットワークの間にトンネルを作る仕組みです。ポートフォワーディングなしで使え、独自ドメインと組み合わせると開発サーバーや内部ツールを固定 URL で共有できます。Microsoft Teams 開発で使う Dev Tunnels は Teams/Bot のローカルデバッグには便利ですが、社内共通ドメインやアクセス制御まで考えると Cloudflare Tunnel の方が運用寄りに感じます。

この記事の内容

Cloudflare Tunnel とは何か

Cloudflare の説明を短くまとめると、Cloudflare Tunnel は公開 IP なしで自分のリソースを Cloudflare に安全に接続する方法です。中心になるのは cloudflared で、ローカルマシンやサーバー上で動き、Cloudflare のグローバルネットワークに outbound 接続を作ります。

ユーザー → Cloudflare → Tunnel → ローカル/サーバー上のサービス

origin サーバー側から見ると、公開ポートに直接アクセスが来るわけではありません。すでに作られたトンネルを通してリクエストを受けます。HTTP サービス、SSH、RDP、Zero Trust の private access にも使えますが、ここでは開発者がよく使う「ローカル Web サービスや内部ツールをドメインで見せる」観点で整理します。

既存方式との比較

方式 良い点 気になる点 向いている場面
ポートフォワーディング 直接つなげられて分かりやすい ルーター/Firewall 設定、origin IP 露出の可能性 個人サーバーの単純運用
VPN 内部ネットワーク全体へのアクセスに強い 外部共有やデモには重い 社内ネットワーク、運用者アクセス
ngrok 系トンネル 短時間の共有が速い 料金/制限、固定 URL、長期運用性 短いデモ、Webhook テスト
Microsoft Dev Tunnels Teams/Bot のローカルデバッグに合う 汎用的な社内ドメインや共通アクセス制御には弱い Teams アプリ、Bot Framework、ローカルデバッグ
Cloudflare Tunnel ポート開放なし、独自ドメイン、Cloudflare のセキュリティ連携 Cloudflare、DNS、Zero Trust の理解が必要 開発サーバー共有、内部ツール、アクセス制御

Microsoft Dev Tunnels との比較

Microsoft Teams 開発では Microsoft Dev Tunnels が自然でした。Teams アプリや Bot をローカルでデバッグするときは外部 HTTPS endpoint が必要で、Microsoft の文書でも devtunnel host -p 3978 --protocol http --allow-anonymous のような流れが案内されています。

ただ、私の感覚では Dev Tunnels は Microsoft 開発フローの中でローカルデバッグを楽にする道具です。Teams、Bot Framework、Visual Studio、Agents Toolkit の流れでは強い。一方で、社内の複数ツール、独自ドメイン、アクセス制御、長期運用まで考えると Cloudflare Tunnel の方が汎用的です。

項目 Microsoft Dev Tunnels Cloudflare Tunnel
主な用途 Microsoft 系のローカル開発/デバッグ ローカル/サーバーサービスを Cloudflare に接続
Teams 開発 かなり合う 可能だが Teams 専用ではない
ドメイン運用 devtunnels.ms の開発 URL 中心 独自ドメインと DNS route が自然
アクセス制御 トンネル設定と Microsoft アカウント中心 Cloudflare Access、SSO、メール、ポリシー
長期運用 開発用の性格が強い サービス化、複数 connector、Zero Trust 構成

実務では何がよく使われるか

実務では一つの方式だけに統一されていることは少ないです。古い環境ではポートフォワーディングが残っています。単純で慣れているからです。開発段階では ngrok や Microsoft Dev Tunnels のような一時的なトンネルが、Webhook テスト、Teams Bot デバッグ、モバイルアプリの callback テストによく合います。

ただし運用に近づくほど基準は変わります。URL が毎回変わると困りますし、誰がアクセスできるかをポリシーで管理したくなります。ここでは Cloudflare Tunnel、VPN、クラウドロードバランサー、Zero Trust アクセス制御を並べて検討する方が自然です。

基本的な利用の流れ

ローカル管理型トンネルの流れは、Cloudflare にドメインを追加し、cloudflared をインストールし、ログイン、トンネル作成、設定ファイル作成、DNS route、実行という順番です。

brew install cloudflared
cloudflared tunnel login
cloudflared tunnel create my-dev-tunnel
cloudflared tunnel list
tunnel: <Tunnel-UUID>
credentials-file: /Users/me/.cloudflared/<Tunnel-UUID>.json

ingress:
  - hostname: dev.example.com
    service: http://localhost:8000
  - service: http_status:404
cloudflared tunnel route dns my-dev-tunnel dev.example.com
cloudflared tunnel run my-dev-tunnel

継続的に使うなら、ターミナルで動かしっぱなしにするより service や launch agent として登録する方が安全です。

使ってみて良かった点

一番良いのは、ルーターや Firewall を毎回触らなくてよいことです。小さな Web ツール、管理画面、テスト API を外部から確認したいとき、ネットワーク設定に時間を取られにくくなります。

また、固定ドメインを使いやすい点も大きいです。URL が毎回変わると文書や Webhook 設定を直す必要がありますが、dev.example.com のような URL なら説明もしやすいです。

セキュリティとベストプラクティス

Cloudflare Tunnel を使えば自動的に安全、というわけではありません。大事なのは、どのサービスを誰に開けているかです。

項目 推奨 理由
公開範囲 開発サーバーでも基本は認証の後ろに置く URL を知っているだけで入れる状態を避ける
アクセス制御 Cloudflare Access でメール/SSO/OTP を使う 社内ツールはユーザー単位の制御が必要
認証情報 credentials file と tunnel token を secret として扱う 流出すると意図しない connector が接続できる
実行方式 長期利用は service/launch agent 化する 再起動後の抜け漏れを減らす
ingress 最後に http_status:404 を置く 想定外の公開を減らす

「開発サーバーだから大丈夫」と考えるのが一番危ないです。開発サーバーにもテストアカウント、内部 API の応答、サンプルデータ、管理画面が混ざることがあります。

最初に迷った点

トンネルを作ることと、サービスを外部に公開することは同じではありません。トンネル作成は UUID と credentials を作る段階で、実際にどの hostname をどの service に向けるかは DNS route と ingress で決まります。

cloudflared tunnel list
cloudflared tunnel info my-dev-tunnel
cloudflared tunnel run my-dev-tunnel

向いている場面

  • ローカル開発サーバーを外部の人に見せたいとき
  • Webhook テスト用の固定 URL が必要なとき
  • ルーターのポートフォワーディングを避けたいとき
  • 社内管理ツールを Cloudflare Access の後ろに置きたいとき
  • origin IP の直接露出を減らしたいとき

まとめ

Cloudflare Tunnel は、ポートフォワーディングなしで開発サーバーや内部サービスを外部から確認したいときに現実的な選択肢です。私の会社のようにポートフォワーディングが残っていて、特定の開発では Microsoft Dev Tunnels も使う環境なら、役割を分けて考える価値があります。

万能ではありません。Cloudflare 依存はありますし、DNS と Zero Trust の理解も必要です。それでも、一度構造を理解しておくと、開発中の外部共有や内部ツール公開の面倒をかなり減らせます。

参考文献

韓国語原文:この記事は韓国語版をもとに、日本語読者向けに少し整えたものです。韓国語の原文を読む韓国語もぜひ応援してください。