Cloudflare Tunnel は、ほぼ任意のホストマシンで動作する、送信専用のデーモンサービスです。Cloudflare ネットワークからの検証後に、ローカルトラフィックをプロキシします。Cloudflare One Client から始まったユーザートラフィックは Cloudflare にオンランプし、Cloudflare Tunnel 接続を下り、ローカルネットワークで自動的に終端します。内部アプリケーションやサービスに届くトラフィックの送信元 IP は、cloudflared デーモンを実行しているホストマシンのローカル送信元 IP になります。
プライベートネットワークを接続する手順です。
-
Cloudflare ダッシュボードにログインし、Networking > Tunnels を開きます。
Tunnels を開く ↗ -
Create a tunnel を選択します。
-
トンネルの名前を入力します。このトンネル経由で接続するリソースの種類がわかる名前(例:
enterprise-VPC-01)を推奨します。 -
Create Tunnel を選択します。
-
オペレーティングシステムを選び、インストールコマンドをコピーして、オリジンサーバーのターミナルで実行します。
-
トンネルの接続を待ちます。接続が確立したら Continue を選択します。
-
CIDR タブで、プライベートネットワークの CIDR(例:
10.0.0.0/8)を入力します。 -
Save tunnel を選択します。
-
cloudflare_api_token↗ に次の権限を追加します。Cloudflare Tunnel Write
-
cloudflare_zero_trust_tunnel_cloudflare↗ リソースでトンネルを作成します。resource "cloudflare_zero_trust_tunnel_cloudflared" "example_tunnel" { account_id = var.cloudflare_account_id name = "Example tunnel" config_src = "cloudflare" } -
cloudflare_zero_trust_tunnel_cloudflared_route↗ リソースで、プライベートネットワークの CIDR をトンネル経由でルーティングします。resource "cloudflare_zero_trust_tunnel_cloudflared_route" "example_tunnel_route" { account_id = var.cloudflare_account_id tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.example_tunnel.id network = "10.0.0.0/8" comment = "Example tunnel route" } -
トンネルの実行に使う トークン を取得します。
data "cloudflare_zero_trust_tunnel_cloudflared_token" "tunnel_token" { account_id = var.cloudflare_account_id tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.example_tunnel.id }ホストマシンを Terraform で管理していない場合、またはトンネルを手動でインストールする場合は、トークン値を CLI に出力できます。
例: CLI に出力する
- トンネルトークンを Terraform の state ファイルに出力します。
output "tunnel_token" { value = data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token sensitive = true } - 構成を適用します。
terraform apply - トンネルトークンを読み取ります。
terraform output -raw tunnel_tokeneyJhIj...
または、
data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.tokenをホストの Terraform 構成に直接渡すか、シークレット管理ツールにトークンを保存します。例: HashiCorp Vault に保存する
resource "vault_generic_secret" "tunnel_token" { path = "kv/cloudflare/tunnel_token" data_json = jsonencode({ "TUNNEL_TOKEN" = data.cloudflare_zero_trust_tunnel_cloudflared_token.tunnel_token.token }) } - トンネルトークンを Terraform の state ファイルに出力します。
-
プライベートネットワーク内のホストマシンに
cloudflaredをインストールし、トンネルを実行します。-
cloudflaredを ダウンロードしてインストール ↗ します。 -
次のコマンドを実行します。
sudo cloudflared service install <TUNNEL_TOKEN>
-
cloudflaredを ダウンロードしてインストール します。 -
管理者としてコマンドプロンプトを開きます。
-
次のコマンドを実行します。
cloudflared.exe service install <TUNNEL_TOKEN>
-
cloudflaredを ダウンロードしてインストール します。 -
ターミナルを開き、次のコマンドを実行します。
sudo cloudflared service install <TUNNEL_TOKEN>
-
ターミナルを開きます。
-
次のコマンドを実行します。
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <TUNNEL_TOKEN>
-
この IP 範囲の内部アプリケーションとサービスはすべて、Cloudflare に接続されます。
- 本番トラフィックとステージングトラフィックは、別の Cloudflare Tunnel に分けます。
- 可用性を増やすため、別のホストマシンに
cloudflaredレプリカ を追加します。 - プライベート DNS、Active Directory、その他の重要システムなど、重要なサービスへのアクセスは、サーバー側障害時の影響範囲を狭めるため、異なるトンネルに分散します。
- Cloudflare ダッシュボードで 通知を有効 にし、トンネルの健全性を監視します。
- パフォーマンス指標を監視 し、ボトルネックの兆候を把握します。
cloudflaredを定期的に更新 します。