Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

ルーティング

最終更新 Markdown で表示Agent セットアップ

Cloudflare Tunnel は、Cloudflare のネットワークから cloudflared の背後で動くサービスへトラフィックをルーティングします。アプリケーションを公開する と、公開ホスト名をローカルサービスに対応付けます。たとえば app.example.comhttp://localhost:8080 に対応付けます。Cloudflare はリクエストをオリジンへ転送する前に、CDN キャッシュ、WAF、DDoS 防御を適用します。

可用性とフェイルオーバーのため、cloudflared からの複数のアウトバウンド接続は Cloudflare のデータセンターに分散されます。

公開アプリケーション

公開アプリケーションは、トンネル設定で定義するホスト名とサービスの対応です。各対応は、指定した公開ホスト名のトラフィックを、どのローカルサービスが受け取るかを cloudflared に伝えます。

1 つのトンネルで複数のアプリケーションを公開できます。アプリケーションごとに次を指定します。

  • 公開ホスト名 — ユーザーがアクセスするドメインまたはサブドメインです(例: app.example.com)。
  • サービス — アプリケーションが動いているローカルアドレスまたはソケットです(例: http://localhost:8080)。

ダッシュボードからルートを追加すると、Cloudflare はそのホスト名をトンネルのサブドメイン(<UUID>.cfargotunnel.com)へ向ける DNS レコードを自動作成します。

対応プロトコル

次の表は、パブリックホスト名へルーティングできるサービスタイプの一覧です。HTTP 以外のサービスでは、エンドユーザーが接続するために クライアントへ cloudflared をインストールする 必要があります。

サービスタイプ 説明 service の値の例
HTTP 受信した HTTPS リクエストを、HTTP 経由でローカルの Web サービスへプロキシします。 http://localhost:8000
HTTPS 受信した HTTPS リクエストを、ローカルの Web サービスへ直接プロキシします。自己署名証明書に対しては、TLS 検証を無効 にできます。 https://localhost:8000
UNIX HTTP と同じですが、Unix ソケットを使います。 unix:/home/production/echo.sock
UNIX + TLS HTTPS と同じですが、Unix ソケットを使います。 unix+tls:/home/production/echo.sock
TCP WebSocket 接続上で TCP をストリームします。エンドユーザーは cloudflared access tcp を実行して 接続 します。長寿命の接続には、代わりに Client-to-Tunnel を使います。 tcp://localhost:2222
SSH WebSocket 接続上で SSH をストリームします。エンドユーザーは cloudflared access ssh を実行して 接続 します。長寿命の接続には、代わりに Client-to-Tunnel を使います。 ssh://localhost:22
RDP WebSocket 接続上で RDP をストリームします。詳細は クライアント側 cloudflared で RDP に接続する を参照してください。 rdp://localhost:3389
SMB WebSocket 接続上で SMB をストリームします。詳細は クライアント側 cloudflared で SMB に接続する を参照してください。 smb://localhost:445
HTTP_STATUS すべてのリクエストに、固定の HTTP ステータスコードで応答します。 http_status:404
BASTION cloudflared をジャンプホストとして動作させ、任意のローカルアドレスへのアクセスを提供します。 bastion
HELLO_WORLD Cloudflare Tunnel の接続を検証するためのテストサーバーです(ローカル管理トンネル のみ)。 hello_world

IPv6 サービスアドレス

service の値が IPv6 リテラルの場合は、RFC 3986 の定義どおり、アドレスを角括弧で囲みます。アドレス内の : がポート区切りと混同されないように、角括弧が必要です。

サービスタイプ service の値の例
HTTP http://[2001:db8::1]:8000
HTTPS https://[2001:db8::1]:443
TCP tcp://[2001:db8::1]:2222
SSH ssh://[2001:db8::1]:22
RDP rdp://[2001:db8::1]:3389

ホスト名と IPv4 アドレスに角括弧は不要です。http://localhost:8000http://192.0.2.1:8000 はそのまま使えます。

DNS レコード

トンネルを作成すると、Cloudflare は <UUID>.cfargotunnel.com のサブドメインを生成します。このサブドメインを指す CNAME レコードを作成すると、ホスト名へのトラフィックがトンネルへルーティングされます。

cfargotunnel.com サブドメインがプロキシするのは、同じ Cloudflare アカウント内の DNS レコード向けトラフィックだけです。トンネルの UUID が知られても、別アカウントで DNS レコードを作成して、そのトンネル経由でトラフィックをプロキシすることはできません。

DNS レコードを作成する

Cloudflare Tunnel の DNS レコードを作成するには:

  1. Cloudflare ダッシュボード にログインし、ドメインの DNS Records を開きます。

    Records を開く ↗
  2. Add record を選択します。

  3. 次の値を入力します。

    • Type: CNAME
    • Name: アプリケーションのサブドメイン
    • Target: <UUID>.cfargotunnel.com
  4. Save を選択します。

新しい CNAME レコードを作成するために入力したフィールドの例。

ローカル管理トンネルでは、次のコマンドを実行して、トンネルのサブドメインを指す CNAME レコードを作成します。

cloudflared tunnel route dns <UUID or NAME> www.app.com

この操作で CNAME レコードは作成されますが、トンネルが稼働していないとトラフィックはプロキシされません。

DNS レコードとトンネルは独立しています。稼働していないトンネルを指す DNS レコードも作成できます。トンネルが停止しても DNS レコードは削除されません。訪問者には 1016 エラーが表示されます。

同じトンネルサブドメインを指す DNS レコードを複数作成することもできます。複数のホスト名から複数のサービスへトラフィックをルーティングする場合は、ホスト名ごとに CNAME エントリを作成します。すべてのエントリは同じターゲットを共有します。

負荷分散

公開ロードバランサー を使い、公開アプリケーションを動かすサーバーへトラフィックを分散します。ヘルスチェックに基づくフェイルオーバーと、リージョンをまたぐインテリジェントなトラフィックステアリングが得られます。

graph LR
    accTitle: Load balancing traffic to applications behind Cloudflare Tunnel

    A[Internet] --> C{Cloudflare <br> Load Balancer}
    C -- Tunnel 1 --> cf1
    C -- Tunnel 2 --> cf2
    subgraph F[Data center 2]
        cf2[cloudflared]
        S3[App server]
        S4[App server]
        cf2-->S3
        cf2-->S4
    end
    subgraph E[Data center 1]
        cf1[cloudflared]
        S1[App server]
        S2[App server]
        cf1-->S1
        cf1-->S2
    end

レプリカとロードバランサー

同じトンネル UUID で複数の cloudflared レプリカ を動かすと、基本的な冗長性が得られます。1 つのホストが故障しても、他のレプリカがトラフィックを提供し続けます。ただし、ロードバランサーは同じトンネル UUID のレプリカをすべて 1 つのエンドポイントとして扱います。

きめ細かいトラフィックステアリングと セッションアフィニティ が必要な場合は、ホストごとに異なるトンネル UUID で接続します。ロードバランサーがそれぞれを独立して扱えます。

ロードバランサープールにトンネルを追加する

Cloudflare Tunnel の公開アプリケーション用にロードバランサーを作成するには:

  1. Cloudflare ダッシュボードで Load Balancing ページを開きます。

    Load Balancing を開く ↗
  2. Create load balancer を選び、Public load balancer を選びます。

  3. Select website で、公開アプリケーションルートのドメインを選びます。

  4. Hostname ページで、ロードバランサーのホスト名を入力します(例: lb.example.com)。

  5. Pools ページで Create a pool を選び、わかりやすい名前を入力します。

  6. 次の値でトンネルエンドポイントを追加します。

    • Endpoint Name: アプリケーションを実行しているサーバーの名前
    • Endpoint Address: <UUID>.cfargotunnel.com(Tunnel ID は the [Cloudflare dashboard](https://dash.cloudflare.com/) under **Networking** > **Tunnels** で確認します)
    • Header value: 公開アプリケーションルートのホスト名(例: app.example.com
    • Weight: 1(エンドポイントが 1 つの場合)
  7. Fallback pool を選びます。ルーティングの選択肢は トラフィックステアリングポリシー を参照してください。

  8. (推奨)Monitors ページで、エンドポイントにモニターを関連付けます。HTTP または HTTPS アプリケーションの場合は、次の HTTPS モニターを作成します。

    • Type: HTTPS
    • Path: /
    • Port: 443
    • Expected Code(s): 200
    • Header Name: Host
    • Value: app.example.com
  9. ロードバランサーを保存してデプロイします。

テストするには、ロードバランサーのホスト名(lb.example.com)でアプリケーションにアクセスします。

TCP トンネルのオリジンを監視する

トンネルエンドポイントでは TCP モニターは使えません。代わりに、cloudflared ホスト上にヘルスチェック用エンドポイントを作り、HTTPS モニターを使います。たとえば、cloudflared で固定の HTTP ステータス応答を返すことができます。

  1. ヘルスチェック用に 公開アプリケーションルートを追加 します。
    • Hostname: health-check.example.com
    • Service Type: HTTP_STATUS
    • HTTP Status Code: 200
  2. 次の設定で モニターを作成 します。
    • Type: HTTPS
    • Path: /
    • Port: 443
    • Expected Code(s): 200
    • Header Name: Host
    • Value: health-check.example.com

このモニターは cloudflared に到達できることを確認します。上流サービスがリクエストを受け付けているかどうかは確認しません。

ローカル接続の優先

異なる拠点のエンドポイント間でトラフィックの偏りがある場合は、ロードバランサーの設定を調整する必要があります。

Cloudflare は Anycast ルーティング で、エンドユーザーのリクエストを最も近いデータセンターへ送ります。cloudflared は同じデータセンター内の接続でリクエストを処理することを優先するため、エンドポイント間のトラフィック分散に影響します。

同じトンネル UUID で cloudflared のレプリカ を動かしている場合は、トラフィックステアリング をより細かく制御するために、別々のトンネルへ切り替えることを検討してください。

Cloudflare の設定

公開アプリケーションは、ホスト名に設定された Cloudflare の設定を継承します。キャッシュルールWAF ルール、その他の Rules 設定が含まれます。各ホスト名の設定は Cloudflare ダッシュボード で変更できます。

ロードバランサーを使う場合、設定はロードバランサーのホスト名に適用されます。

役に立ちましたか?