概要
Cloudflare Tunnel は、パブリック IP の公開や受信ポート開放なしで、オリジンサービスを Cloudflare エッジへ安全に接続する仕組みです。オリジン側の cloudflared がアウトバウンド接続を確立し、ユーザー通信を中継します。
クライアント
Cloudflare エッジ
cloudflared
オリジンサーバー
要素名
説明
クライアント
トンネル先のサービスを利用する利用者やシステム
Cloudflare エッジ
リクエスト受付とトンネル転送を行う分散エッジ
cloudflared
オリジン側で動作し、エッジへ接続するコネクター
オリジンサーバー
非公開のまま提供するアプリケーション基盤
特徴
アウトバウンド接続のみの公開方式
4 本の並列接続による高可用性
QUIC 優先、HTTP/2 フォールバック
HTTP、TCP、UDP、SSH、RDP、gRPC など多様なプロトコル対応
1 トンネル内でのホスト名・パス単位ルーティング
設定の動的反映と自動再接続
Quick Tunnel、Named Tunnel、Access 連携の動作モード
Docker、Kubernetes、Terraform など多様な運用形態
Prometheus メトリクスによる監視対応
導入判断の目安
条件
推奨
受信ポート開放を避けたい
Cloudflare Tunnel
既存VPNを段階置換したい
Cloudflare Tunnel + Access
レイヤ7の認証を強制したい
Access ポリシー併用
単純な外部公開のみ必要
Quick Tunnel で検証後に Named Tunnel
構造
システムコンテキスト
エンドユーザー
管理者
Cloudflare Tunnel
オリジン基盤
認証プロバイダー
DNS
要素名
説明
エンドユーザー
HTTPS でアプリケーションにアクセスする利用者
管理者
トンネル作成、設定、監視を実施する運用者
Cloudflare Tunnel
エッジとオリジン間の接続経路を提供する仕組み
オリジン基盤
プライベートネットワーク上のサービス実行基盤
認証プロバイダー
Access ポリシー評価に利用する外部認証基盤
DNS
トンネル宛て CNAME を解決する名前解決基盤
コンポーネント
CLI
Supervisor
Edge Discovery
QUIC Connection
HTTP2 Connection
Control Stream
Orchestrator
Ingress Router
Proxy
Edge Tunnel Endpoint
HTTP Service
TCP Service
UDP Service
要素名
説明
Supervisor
複数接続の維持、再接続、フェイルオーバー制御
Edge Discovery
接続先エッジ探索と解決
QUIC Connection
優先プロトコルのデータ転送路
HTTP2 Connection
フォールバック用転送路
Control Stream
トンネル登録と制御メッセージ処理
Orchestrator
設定変更検知と反映制御
Ingress Router
ルール評価と転送先選択
Proxy
HTTP、TCP、UDP の中継実行
データモデル
概念モデル
Account
Tunnel
Credentials
Configuration
IngressRule
OriginService
Connection
Route
DNSRecord
VirtualNetwork
要素名
説明
Tunnel
オリジン接続の論理単位
Credentials
トンネル認証情報
Configuration
ingress と originRequest の設定集合
IngressRule
ホスト名、パス、サービスの対応規則
Connection
cloudflared とエッジ間の実接続
Route
プライベートネットワーク向け IP ルート
DNSRecord
トンネル向け CNAME レコード
VirtualNetwork
重複アドレスを分離する論理ネットワーク
構築手順
全体フロー
cloudflared インストール
Cloudflare 認証
トンネル作成
設定ファイル作成
DNS 設定
トンネル起動
サービス登録
要素名
説明
cloudflared インストール
実行環境へのバイナリ導入
Cloudflare 認証
アカウント認証と証明書取得
トンネル作成
UUID と資格情報生成
設定ファイル作成
ingress ルール定義
DNS 設定
ホスト名とトンネルの関連付け
トンネル起動
実接続確立
サービス登録
自動起動設定
最短セットアップ
cloudflared tunnel login
cloudflared tunnel create my-app-tunnel
cloudflared tunnel route dns my-app-tunnel app.example.com
cloudflared tunnel run my-app-tunnel
チェック項目
確認方法
CNAME 作成完了
cloudflared tunnel route dns の結果確認
接続正常
cloudflared tunnel info my-app-tunnel
到達確認
https://app.example.com へアクセス
インストールと認証
OS
コマンド
macOS
brew install cloudflare/cloudflare/cloudflared
Debian、Ubuntu
sudo apt-get install cloudflared
RHEL、CentOS、Fedora
sudo yum install cloudflared
トンネル作成
cloudflared tunnel create my-app-tunnel
生成物
説明
Tunnel UUID
トンネル識別子
Credentials JSON
~/.cloudflared/<UUID>.json
設定ファイル例
tunnel : ae21a96c- 24d1- 4ce8- a6ba- 962cba5976d3
credentials-file : /home/user/.cloudflared/ae21a96c- 24d1- 4ce8- a6ba- 962cba5976d3.json
loglevel : info
ingress :
- hostname : app.example.com
service : http: //localhost: 8080
- hostname : api.example.com
service : http: //localhost: 8000
- service : http_status: 404
項目
説明
hostname
受信ホスト名条件
path
パス正規表現条件
service
転送先サービス
catch all
末尾 http_status:404 必須
DNS 設定と起動
cloudflared tunnel route dns my-app-tunnel app.example.com
cloudflared tunnel run my-app-tunnel
サービス登録
cloudflared service install
systemctl start cloudflared
systemctl status cloudflared
利用パターン
API で管理する
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID /cfd_tunnel" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN " \
--json '{"name":"api-tunnel","config_src":"cloudflare"}'
高可用性構成
Cloudflare Edge
Tunnel
Replica 1
Replica 2
Origin 1
Origin 2
要素名
説明
Replica 1、2
同一 UUID を共有する冗長コネクター
Origin 1、2
レプリカ背後の実サービス
SSH と RDP を通す
ingress :
- hostname : ssh.example.com
service : ssh: //localhost: 22
- hostname : rdp.example.com
service : rdp: //localhost: 3389
- service : http_status: 404
cloudflared access ssh --hostname ssh.example.com
cloudflared access rdp --hostname rdp.example.com --url localhost:3390
プライベートネットワーク接続
warp-routing :
enabled : true
cloudflared tunnel route ip add 10.0 .0.0/24 < TUNNEL_ID>
cloudflared tunnel vnet add staging-vnet
運用
ログとメトリクス
cloudflared tunnel --loglevel info --logfile /var/log/cloudflared/tunnel.log run my-tunnel
cloudflared tunnel --metrics 0.0 .0.0:60123 run my-tunnel
項目
説明
loglevel
debug、info、warn、error
metrics
Prometheus 用エンドポイント公開
KPI
監視意図
cloudflared_tunnel_total_requests
トラフィック総量の把握
cloudflared_tunnel_request_errors
失敗率の早期検知
cloudflared_tunnel_active_streams
混雑と処理負荷の把握
cloudflared
metrics endpoint
Prometheus
Grafana
更新と診断
cloudflared update
cloudflared tunnel diagnostics
運用作業
推奨頻度
バージョン更新確認
週次
診断情報採取
障害発生時
Access ポリシー棚卸し
月次
ベストプラクティス
同一トンネル UUID で複数レプリカを常時稼働
ingress 最終行に http_status:404 を常時設定
本番では --metrics で固定ポート指定
設定ファイルを Git 管理し、変更履歴を追跡
トラフィック制御が必要な場合のみロードバランサー併用
更新時の安全手順
手順
目的
新レプリカ起動
切替前の経路確保
旧レプリカ停止
二重障害の回避
更新実施
脆弱性・不具合修正
旧レプリカ再参加
冗長度の回復
トラブルシューティング
典型的な障害と対応
事象
主因
対応
Inactive
トンネル未起動
cloudflared tunnel run 実行
QUIC 接続失敗
UDP 7844 制限
--protocol http2 指定
too many open files
FD 上限不足
LimitNOFILE 引き上げ
TLS 検証失敗
証明書不整合
originRequest の証明書設定見直し
websocket bad handshake
設定不整合
Access、SSL、WebSocket 設定確認
cloudflared tunnel list
cloudflared tunnel info my-tunnel
cloudflared tunnel diagnostics
初動確認チェックリスト
観点
確認内容
プロトコル
QUIC 失敗時の HTTP2 フォールバック有無
DNS
CNAME が cfargotunnel.com を指す状態
認証
Access ポリシーと IdP 連携状態
オリジン
サービス自体のヘルス状態
まとめ
Cloudflare Tunnelは、ファイアウォールに穴を開けることなく、安全かつ簡単に内部サービスを公開できるソリューションです。
その高い可用性と多様なプロトコル対応により、Zero Trustアーキテクチャへの移行に大きく貢献します。
この記事が少しでも参考になった、あるいは改善点などがあれば、ぜひリアクションやコメント、SNSでのシェアをいただけると励みになります!
参考リンク