cloudflaretunnelzero-trust

Cloudflare Tunnel でローカルの React アプリをインターネットに公開する

TPThuanPD2026年9月4日45分新着
Cloudflare

Cloudflare Tunnel を使い、port を開けたり firewall を触ったりせずに localhost:5173 の React アプリを HTTPS で公開します。Vite の Blocked request エラーの対処と、1 コマンドの Quick Tunnel も扱います。

TunnelLocal → Public

Lab Overview and Learning Objectives

開始前の注意

Cloudflare Tunnel は cloudflared プロセスを通じて、マシンから Cloudflare ネットワークへの outbound 接続を張ります。そのため公開 port を開けたり固定 IP を用意したりする必要がありません。Cloudflare が前段の reverse proxy として HTTPS を提供し、マシンの実 IP を隠します。本ラボはサンドボックスアカウントとデモアプリを使い、実際の社内サービスは公開しません。

  1. Cloudflare アカウントと、Cloudflare に追加済みの domain を用意します(スクリーンショットは devtest.uk を使用。ご自身の domain に読み替えてください)。
  2. cloudflared をインストールできるマシン(本ラボは Windows)と、管理者としてコマンドを実行できる権限を用意します。
  3. Vite で React アプリを作成・起動できるよう Node.js をインストールします。
  4. マシンから Cloudflare へ port 7844 の outbound 通信ができることを確認します。
  5. 本ラボでは実データや機密情報を含むサービスを tunnel で公開しないでください。
目的:ラボ完了時には、localhost:5173 の React アプリが react-tunnel.your-domain のような HTTPS アドレスで公開され、一時的な Quick Tunnel の作り方も分かります。
1

1. シンプルな React アプリを作成して起動

tunnel には向き先となる稼働中のアプリが必要です。ここでは Vite で React アプリを素早く作成します。dev server は既定の port 5173 で動きます。別 port で動くアプリが既にある場合は、その port を以降の手順で使います。

  1. Node.js が入ったマシンでターミナルを開きます。
  2. 下のコマンドで Vite の React アプリを作成し、依存関係をインストールします。
  3. npm run dev を実行して dev server を起動します。
  4. ラボ中は dev server を起動したままにします。
Terminal · React を作成 & 起動(Vite、port 5173)
npm create vite@latest my-react-app -- --template react
cd my-react-app
npm install

npm run dev
npm run dev を実行し、Vite が http://localhost:5173/ で ready と表示しているターミナル
npm run dev を実行し、Vite が http://localhost:5173/ で ready と表示しているターミナル
完了条件:ターミナルに VITE ready と Local: http://localhost:5173/ が表示され、アプリがマシン上で稼働します。
2

2. localhost でアプリが動くことを確認

インターネットに公開する前に、ローカルで正しく動くことを確認します。この画面は、ラボ最後に公開アドレス経由で再度目にすることになります。

  1. ブラウザで http://localhost:5173 を開きます。
  2. 既定の React ページに Get started の見出しと Count is 0 ボタンが表示されることを確認します。
  3. Count is 0 を押して、静的なページではなく実際に動作していることを確認します。
localhost:5173 で開いた Vite の既定 React ページ
localhost:5173 で開いた Vite の既定 React ページ
完了条件:既定の React ページが localhost:5173 に表示され、現時点では自分のマシンからのみアクセスできます。
3

3. Networking → Tunnels を開き Create Tunnel を押す

Cloudflare は tunnel を dashboard の Networking 配下で管理します。後から tunnel の接続状態を確認する場所でもあります。

  1. Cloudflare Dashboard にサインインします。
  2. 左メニューで Networking を開き、Tunnels を選びます。
  3. Get started with Cloudflare Tunnel の画面で Create Tunnel を押します。
Create Tunnel ボタンが強調された Networking → Tunnels ページ
Create Tunnel ボタンが強調された Networking → Tunnels ページ
完了条件:Create a Tunnel 画面が表示され、Tunnel name 欄と Create Tunnel ボタンだけが並びます。
4

4. tunnel に名前を付けて作成

Create a Tunnel 画面は非常にシンプルで、名前を付けて作成するだけです。この段階では connector の種類を選びません。cloudflared connector のインストールは直後の手順で行います。

  1. Tunnel name に分かりやすい名前(例: react-tunnel)を入力します。
  2. Create Tunnel を押します。
Tunnel name に react-tunnel を入力した Create a Tunnel 画面と Create Tunnel ボタン
Tunnel name に react-tunnel を入力した Create a Tunnel 画面と Create Tunnel ボタン
完了条件:tunnel が作成され、connector をインストールする Setup Environment セクションに進みます。
5

5. OS と Architecture を選び cloudflared をダウンロード

Setup Environment では、選んだ OS に応じたインストール手順と tunnel の token が表示されます。token のすぐ上に Security Notice があります。token はアカウントへのアクセス権を持つため、必ず秘密にしてください。

  1. Operating System でマシンの OS(例: Windows)を選びます。
  2. Architecture で 64-bit または 32-bit を選びます。
  3. cloudflared-windows-amd64.msi のリンクからインストーラーをダウンロードし、実行します。
  4. macOS/Linux/Docker の場合は、その選択で表示されるコマンドに従います。
Windows・64-bit と cloudflared-windows-amd64.msi のダウンロードリンクが表示された Setup Environment
Windows・64-bit と cloudflared-windows-amd64.msi のダウンロードリンクが表示された Setup Environment
注意:インストールコマンド内の token は tunnel の鍵に相当します。公開ドキュメント、スクリーンショット、repository に載せないでください。
完了条件:cloudflared がマシンにインストールされ、画面には Run the following command として token 付きコマンドが表示されたままになります。
6

6. 管理者権限の Command Prompt で connector をインストール

service install コマンドは cloudflared を Windows service として登録し、token でこのマシンを作成した tunnel に紐付けます。service を作るため管理者権限が必要です。

  1. Command Prompt を管理者として開きます。
  2. dashboard の Run the following command のコマンドをそのままコピーします(token が含まれています)。
  3. Command Prompt に貼り付けて実行します。コマンドの形は下記のとおりです。
  4. ログに Agent service for cloudflared installed successfully が出ることを確認します。
Command Prompt(管理者)· connector をインストール — dashboard の実 token を使用
cloudflared.exe service install <YOUR_TUNNEL_TOKEN>
cloudflared agent service is installed windowsServiceName=Cloudflared のログが出た Command Prompt
cloudflared agent service is installed windowsServiceName=Cloudflared のログが出た Command Prompt
完了条件:cloudflared が Cloudflared という名前の Windows service として動き、Cloudflare への接続を開始します。
7

7. Tunnel connected successfully を確認

Connection Status は最初 Waiting for your Tunnel to connect... と No connection detected yet を表示します。インストールコマンドを実行すると数秒で handshake が完了し、ページを再読み込みせずに状態が変わります。

  1. tunnel のページを開いている dashboard のタブに戻ります。
  2. Connection Status が Tunnel connected successfully に変わるのを待ちます。
  3. Continue を押してセットアップを完了します。
Tunnel connected successfully と Continue ボタンが表示された Connection Status
Tunnel connected successfully と Continue ボタンが表示された Connection Status
完了条件:Your Tunnel is now ready to use と表示され、Continue ボタンが有効になります。
8

8. 一覧で tunnel が Healthy であることを確認

Tunnels 一覧は後から健全性を確認する場所です。Healthy は connector が Cloudflare への接続を維持している状態、Replicas はこの tunnel で動いている connector の数を示します。

  1. Networking → Tunnels を再度開きます。
  2. 一覧から react-tunnel の行を探します。
  3. Status が Healthy、Replicas が 1 であることを確認します。
  4. Routes 列がまだ No routes であることに注目します。次の手順で設定します。
react-tunnel が Healthy・replica 1・No routes と表示された Tunnels 一覧
react-tunnel が Healthy・replica 1・No routes と表示された Tunnels 一覧
完了条件:tunnel は接続済みで準備完了ですが、まだ公開アドレスが向けられていません。
9

9. Routes タブを開き Add route を押す

route は tunnel に入ってきた traffic の転送先を決める設定です。route がなければ Healthy な tunnel でも誰にも応答できません。

  1. tunnel 名 react-tunnel を押して詳細ページを開きます。
  2. Routes タブを選びます。
  3. 右上の Add route を押します。
No routes configured と Add route ボタンが表示された tunnel の Routes タブ
No routes configured と Add route ボタンが表示された tunnel の Routes タブ
完了条件:Add a route ダイアログが開き、route の種類を選べます。
10

10. route の種類で Published application を選ぶ

route には 4 種類あります。Published application はローカルアプリを public hostname でインターネットに公開する種類で、本ラボの目的に合致します。残りの 3 種類(Private hostname、Private CIDR、Workers VPC)は内部アクセス用で、公開アドレスは作られません。

  1. Add a route ダイアログで Published application のカードを選びます。
4 つの選択肢のうち Published application が強調された Add a route ダイアログ
4 つの選択肢のうち Published application が強調された Add a route ダイアログ
完了条件:hostname と転送先サービスを入力する Add published application フォームが開きます。
11

11. hostname と Service URL を入力して Add route

この手順で、公開アドレス(自分の domain のサブドメイン)をローカルで動くアプリに紐付けます。Service URL はマシン上の cloudflared が呼び出す先なので、公開アドレスではなく localhost を指定します。

  1. Subdomain に react-tunnel を入力します。
  2. Domain で自分の domain を選びます(スクリーンショットは devtest.uk)。
  3. Full hostname が react-tunnel.devtest.uk になっていることを確認します。
  4. Service URL に http://localhost:5173(手順 1 の dev server の port)を入力します。
  5. Path は空のまま Add route を押します。
subdomain react-tunnel、domain devtest.uk、Service URL http://localhost:5173 を入力した Add published application フォーム
subdomain react-tunnel、domain devtest.uk、Service URL http://localhost:5173 を入力した Add published application フォーム
完了条件:route が保存され、react-tunnel.devtest.uk が tunnel 経由で http://localhost:5173 に対応します。
12

12. route と DNS record が作られたことを確認

Cloudflare は hostname の DNS record を自動作成するため、DNS タブを開く必要はありません。record は tunnel を指す CNAME で、これによりマシンに公開 IP が不要になります。

  1. Route added successfully のメッセージを確認します。
  2. Type が Published application、Hostname が react-tunnel.devtest.uk であることを確認します。
  3. DNS record created の行に Type: CNAME があることを確認します。
  4. メッセージを閉じます。
hostname react-tunnel.devtest.uk と CNAME の DNS record が表示された Route added successfully メッセージ
hostname react-tunnel.devtest.uk と CNAME の DNS record が表示された Route added successfully メッセージ
完了条件:公開 hostname の DNS が tunnel を向き、route が有効になりました。
13

13. エラーが出た場合: Vite の Blocked request

この時点で公開アドレスを開くと、多くの場合 Blocked request. This host is not allowed. という白い画面になります。これは tunnel の問題ではありません。tunnel は request をマシンまで届けていますが、Vite の dev server は Host が localhost の request しか受け付けず、DNS rebinding 攻撃を防ぐため未知の hostname を拒否します。

  1. ブラウザで https://react-tunnel.devtest.uk を開きます。
  2. Blocked request. This host ("react-tunnel.devtest.uk") is not allowed が出たら、その下のヒント行を読みます。
  3. Vite が報告している hostname を正確に控えます。次の手順で登録します。
Blocked request. This host (react-tunnel.devtest.uk) is not allowed を表示したブラウザ
Blocked request. This host (react-tunnel.devtest.uk) is not allowed を表示したブラウザ
完了条件:原因が tunnel や DNS ではなく Vite の dev server にあると切り分けられます。
14

14. vite.config.js の allowedHosts に hostname を追加

Vite では server.allowedHosts で受け付ける hostname を宣言できます。保護機能を丸ごと無効化するのではなく、tunnel の hostname だけを追加するのが最も安全な対処です。

  1. my-react-app フォルダの vite.config.js を開きます。
  2. 下記のように server.allowedHosts に自分の tunnel hostname を追加します。
  3. ファイルを保存すると、Vite が dev server を自動再起動します。
  4. 反映されない場合は Ctrl+C で停止し、npm run dev を再実行します。
vite.config.js · tunnel の hostname を宣言
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite'

// https://vite.dev/config/
export default defineConfig({
  plugins: [react()],
  server: {
    allowedHosts: ['react-tunnel.devtest.uk'],
  },
})
allowedHosts に react-tunnel.devtest.uk を追加した vite.config.js
allowedHosts に react-tunnel.devtest.uk を追加した vite.config.js
注意:必要な hostname だけを列挙してください。allowedHosts を true にすると全ての hostname を受け入れ、dev server が DNS rebinding 攻撃にさらされます。
完了条件:Vite の dev server が、tunnel hostname を Host に持つ request を受け付けるようになります。
15

15. 公開 URL を再読み込みして確認

ブラウザ → Cloudflare → tunnel → マシン上の cloudflared → port 5173 の dev server という経路全体を確認する手順です。HTTPS 証明書は Cloudflare 側が用意するため、自分で管理するものはありません。

  1. https://react-tunnel.devtest.uk を再読み込みします。
  2. localhost:5173 と同じ React ページが表示されることを確認します。
  3. アドレスバーが https で、証明書の警告が出ないことを確認します。
  4. モバイル回線のスマートフォンから開き、実際に公開されていることを確認します。
https://react-tunnel.devtest.uk でローカルの React アプリを表示したブラウザ
https://react-tunnel.devtest.uk でローカルの React アプリを表示したブラウザ
完了条件:マシンや router の port を一切開けずに、ローカルの React アプリが HTTPS で公開されました。
16

16. Quick Tunnel を試す(任意)

テスト中にすぐ共有したいだけなら、Quick Tunnel が 1 コマンドで公開 URL を作ってくれます。tunnel の作成も domain も不要です。URL は trycloudflare.com 上のランダムな値で、あくまで一時的なものです。

  1. ローカルアプリを port 5173 で起動したままにします。
  2. 別のターミナルを開き、下のコマンドを実行します。
  3. cloudflared が https://<ランダム>.trycloudflare.com 形式の URL を出力します。
  4. Vite に再度ブロックされる場合は、その trycloudflare.com の hostname を allowedHosts に追加します。
  5. URL を開いて確認し、終わったら Ctrl+C で停止します。
Terminal · Quick Tunnel
cloudflared tunnel --url http://localhost:5173
完了条件:ローカルアプリを指す一時的な公開 URL が得られます。Quick Tunnel はテスト・デモ専用で、uptime 保証はなく同時 200 request の上限があります。
17

17. クリーンアップ

使い終わったら tunnel と connector を削除し、マシンへの経路を残さないようにします。

  1. tunnel の Routes タブで、作成した react-tunnel の route を削除します。
  2. Tunnels 一覧で react-tunnel を削除します。
  3. マシン側で cloudflared service uninstall を実行します(または cloudflared パッケージをアンインストール)。
  4. React の dev server を停止します(ターミナルで Ctrl+C)。
完了条件:本ラボで作成した tunnel、connector、public hostname は残っていません。

参考ドキュメント