Skip to content

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

Client-to-Tunnel で Private Network Load Balancing を設定する

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

Private Network Load Balancing を使うと、Cloudflare Tunnel 経由で接続したプライベートホスト名と IP へ、Cloudflare One Client のトラフィックを振り分けられます。

たとえば、内部アプリケーションが 2 つのデータセンターで稼働しており、Cloudflare One Client のユーザーが地理的に最も近いデータセンターからそのアプリケーションへアクセスできるようにしたい場合を考えます。一般的な負荷分散の構成は、次の図のとおりです。

graph LR
    W[WARP クライアント] --> C{プライベートロードバランサー <br> 100.112.0.0}
    C -- トンネル 1 --> cf1
    C -- トンネル 2 --> cf2
		subgraph D2[データセンター 2]
			cf2@{ shape: processes, label: "cloudflared" }
			subgraph F[プール 2]
					S3["エンドポイント <br> 10.0.0.1 (VNET-2)"]
					S4["エンドポイント <br> 10.0.0.2 (VNET-2)"]
			end
			cf2-->S3
			cf2-->S4
		end
		subgraph D1[データセンター 1]
			cf1@{ shape: processes, label: "cloudflared" }
			subgraph E[プール 1]
					S1["エンドポイント <br> 10.0.0.1 (VNET-1)"]
					S2["エンドポイント <br> 10.0.0.2 (VNET-1)"]
			end
			cf1-->S1
			cf1-->S2
		end

		style E stroke-width:2px,stroke-dasharray: 5 5
		style F stroke-width:2px,stroke-dasharray: 5 5

図の構成要素は次のとおりです。

  • cloudflared: 各データセンターは、それぞれ独自の Cloudflare Tunnel で Cloudflare に接続します。cloudflared は、ネットワーク内の 1 台または複数 のホストマシンにインストールします。
  • プライベートロードバランサー IP: エンドユーザーは、ロードバランサーの IP アドレスを使ってアプリケーションに接続します。100.112.0.0/16 内の Cloudflare 割り当て IP、または RFC 1918 範囲のカスタム /32 IP のいずれかを使えます。
  • ロードバランサープール: ロードバランサーは、トンネルごとに 1 つの プール を設定します。
  • ロードバランサーエンドポイント: プールには 1 つ以上のエンドポイントが含まれます。各エンドポイントは、cloudflared の背後でアプリケーションを実行しているサーバーです。サーバーの IP が重複している場合は、トンネルごとに別の 仮想ネットワーク(VNET) を割り当てると、Load Balancer が正しいエンドポイントへ確実にリクエストをルーティングできます。

前提条件

  • エンドポイントの IP アドレスが Cloudflare Tunnel 経由でルーティングされること。プライベートネットワークの接続方法は、IP/CIDR を接続する を参照してください。

1. ロードバランサープールを作成する

ロードバランサープールは、エンドポイントの論理グループです。通常は物理データセンターや地理的なリージョン単位でまとめます。プール内のエンドポイントが、トラフィックの最終的な送信先です。

プールは Cloudflare ダッシュボードまたは API で作成できます。

ダッシュボードでプールを作成する手順は、プールを作成する を参照してください。

現在の仮想ネットワーク一覧を取得するには、仮想ネットワークを一覧する API 操作を使います。

API リクエストの originsvirtual_network_id フィールドを追加すると、仮想 / プライベート IP のサポートが有効になります。API でプールを作成する方法は、Cloudflare Load Balancer API のドキュメント を参照してください。

次の例は、既存の Load Balancer プールに Cloudflare Tunnel エンドポイントを追加します。

Required API token permissions

At least one of the following token permissions is required:
  • Load Balancing: Monitors and Pools Write
Patch Poolbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/load_balancers/pools/$POOL_ID" \
	--request PATCH \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"origins": [
				{
						"name": "server-1",
						"address": "10.0.0.1",
						"enabled": true,
						"weight": 1,
						"virtual_network_id": "a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
				}
		]
	}'

2. プライベートロードバランサーを作成する

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

    Load Balancing を開く ↗
  2. Create a Load Balancer を選択します。

  3. Private Load Balancer を選択します。

  4. 次のステップで、このロードバランサーを次のいずれかと関連付けます。

    • 100.112.0.0/16 範囲から Cloudflare が割り当てる IP
    • RFC 1918 範囲のカスタム /32 IP
  5. ロードバランサーを識別できるわかりやすい名前を追加します。

  6. セットアップを進めます。

セットアップが完了すると、Load Balancing ダッシュボードへ戻ります。検索バー、または Private ロードバランサーで絞り込んで、作成したロードバランサーを探せます。以降の手順で使うため、ロードバランサー IP を控えておきます。

3. ロードバランサー IP を Cloudflare One Client 経由でルーティングする

Cloudflare One Client がロードバランサーへ接続するには、ロードバランサーの IP アドレスを Split Tunnel 設定 の WARP トンネル経由でルーティングする必要があります。

  1. Cloudflare ダッシュボードZero Trust > Team & Resources > Device profiles を開きます。
  2. 変更したい デバイスプロファイル を見つけ、Edit を選択します。
  3. Split Tunnels で、Split Tunnels モードExcludeInclude かを確認します。
  4. Manage を選択します。モードに応じて次を行います。
    • Exclude モード: ロードバランサー IP を含む IP 範囲を削除します。たとえば、ロードバランサーが Cloudflare 割り当ての CGNAT IP を使う場合は、100.64.0.0/10 を削除します。ロードバランサーで使っていない IP は 戻して追加する ことを推奨します。
    • Include モード: ロードバランサー IP を追加します。

これで、Cloudflare One Client のトラフィックがプライベートロードバランサーに到達できます。たとえば、ロードバランサーが Web アプリケーションを指している場合は、デバイス上で curl <load-balancer-IP> を実行して確認できます。このトラフィックは、設定したステアリング方式に従って、Cloudflare Tunnel 経由でプライベートエンドポイントへ振り分けられます。

4.(任意)ロードバランサーにホスト名を割り当てる

ロードバランサーとそのエンドポイントを、ホスト名でユーザーから透過的に使えるようにしたい場合は、ホスト名をロードバランサーの IP アドレスへ対応付ける Gateway DNS Override ポリシー を作成できます。これにより、そのホスト名宛てのトラフィックが正しい IP に名前解決されます。

  1. Cloudflare ダッシュボードZero Trust > Traffic policies > Firewall policies > DNS を開きます。

  2. Add a policy を選択します。

  3. Traffic で、SelectorHostOperatorisValue がロードバランサーに関連付けたいホスト名になる式を作成します。例:

    セレクター 演算子
    Host is app.internal.local
  4. ActionOverride に設定します。

  5. Override Hostname に、プライベートロードバランサー IP を入力します(例: 100.112.0.0)。

これで、ホスト名へのリクエストはプライベートロードバランサーに名前解決されます。

役に立ちましたか?