Cloudflare Zero Trustトンネルをようやく理解した
(david.coffee)- Cloudflare Zero TrustとWarpを活用して、NAT・ファイアウォールの問題なしにプライベートネットワークを接続し、サービスへのアクセスを制御する構成を説明
- Argoトンネルを通じてプライベートネットワークやローカルサービスを公開ドメインとして公開したり、Warp接続時のみアクセス可能なプライベートネットワークを構成可能
- TailscaleはP2Pベースで高速だが、NAT環境では制約があり、Cloudflareはすべてのトラフィックをエッジネットワーク経由でルーティングして安定した接続を提供
- Cloudflaredはトンネル作成、Warp Clientはネットワーク接続とポリシー適用を担当し、Tunnels・Routes・Targetsでトラフィックの流れとアクセス制御を構成
- メールアドレス・GitHubログインなどによる細かなAccess Policyを設定し、Warp接続の有無に応じてログイン手順を省略または制限するセキュアなネットワーク環境を構築
Cloudflare Zero TrustとWarpの概要
- TailscaleのNAT越え失敗をきっかけに、Cloudflare Zero Trust + Warpの学習を開始
- Zero Trustトンネルを通じて、プライベートネットワーク接続、サービス公開、プライベートIPネットワーク構成、ローカルサービスの一時公開など多様な機能を活用可能
- NATの問題なしにCloudflareネットワーク経由ですべてのトラフィックが転送され、きめ細かなアクセス ポリシーでユーザー・ボット・サーバー間のアクセス制御が可能
- SSH接続時には公開ポートなしでZero Trust認証ベースのログインをサポート
Cloudflare Zero Trust vs Tailscale
- TailscaleはNAT・ファイアウォールを回避してP2P接続を試み、不可能な場合は中継サーバーを使用
- CloudflareはWarp-to-Warpを除くすべてのトラフィックがCloudflareエッジサーバーを経由して転送されるため、NATの問題はないが多少の遅延が発生
CloudflaredとWarpの違い
- Warp Client: クライアントをCloudflareネットワークに接続し、ポリシーを適用するツール
- 主にクライアントで実行されるが、サーバーでも使用可能
- Warp-to-WarpルーティングでP2P接続をサポート
- Cloudflared: トンネルを作成してZero Trustネットワークに追加するツール
- サーバーで実行してネットワークの入口を提供
cloudflared accessコマンドで他のZero Trustリソースに接続可能- 単発テスト用のトンネル作成が可能
Tunnels, Routes, Targetsの構造
- Tunnels:
cloudflaredでデプロイされるトラフィックの出口地点- 例: ホームネットワーク(192.168.1.1/24)の常時稼働デバイスにインストール
- 設定ファイル(
/etc/cloudflared/config.yml)でリクエスト到着時のルーティング先を指定 - 例:
gitlab.widgetcorp.tech→localhost:80,gitlab-ssh→localhost:22
- 公開例:
homeassistant.mydomain.com→192.168.1.3へルーティング- Cloudflare DNSで
CNAMEをトンネルアドレスに指定すればWarpなしでもアクセス可能
- Routes: 特定のIP範囲をどのトンネルへ送るかを定義
- 例:
192.168.1.1/24全体、または192.168.1.3/32単一IPを指定 - Warp接続時、そのIPへのリクエストはCloudflareネットワーク経由でトンネルへ転送
- 存在しない仮想IP(例: 10.128.1.1)もルーティング可能
- 例:
- Targets: 保護するインフラ単位を定義
- 例:
homeassistant.mydomain.com→192.168.1.3/32 - 対象にアクセス ポリシーを付与して特定ユーザーのみアクセス可能にする
- 例:
Access Policies: アクセス制御
- トンネル、ルート、ターゲットを構成した後、Access Policyでアクセス権限を設定
- ポリシー構成要素
- Include: アクセス許可条件(OR)
- Require: 必ず満たすべき条件(AND)
- Action: Allow / Deny / Bypass / Service Auth
- 例1 – メールアドレスベースのアクセス制御
- 特定のメールアドレスのみアクセスを許可
- GitHubログイン方式で認証を制限可能
- 例2 – Warp接続時はログイン省略
- Gatewayセレクターを使ってZero Trust Warp接続時はログイン画面を省略
- Warp未接続時にはGitHubログインを要求
Warpクライアントの配布と登録
- Settings → Warp Clientで登録ポリシーを設定
- GitHub認証および特定メールアドレスのみ登録を許可
- WARP認証IDを設定するとGatewayセレクターを使用可能
- Profile Settingsでクライアント動作を定義
- プロトコル(MASQUE/WireGuard)、サービスモード、ルーティング除外IPなどを設定
- Cloudflare CA自動インストール、固有のCGNAT IP割り当て、デバイス状態チェック(Device Posture)の設定が可能
- Warpクライアントにログイン後、Zero Trustネットワークへの接続が完了
- その後、
192.168.1.3へのリクエストはトンネル経由でルーティングされる
- その後、
構築結果の要約
- GitHubおよびメールアドレスベースのログインポリシーでWarpクライアント登録
- プライベートネットワーク内のトンネルが
homeassistant.mydomain.comへのリクエストを192.168.1.3へ転送 192.168.1.3へのトラフィックはWarp接続時のみトンネル経由でアクセス可能- DNSベースの公開アクセスとWarpベースの非公開アクセスの2方式を提供
- Warp接続時はログインを省略し、未接続時はGitHub認証を要求
追加で扱っていない項目
- Warp-to-Warpルーティング
- Zero Trust内部専用のプライベートIP作成
- SSH認証ポリシー構成
- Self-Hosted以外のアプリケーション種別
原文に追加情報なし
1件のコメント
Hacker Newsの意見
CloudflareはTLS終端ポイントとして動作するため、個人利用には不利
Tailscale Funnelを使えば証明書は自分のエンドポイントに直接インストールされるが、Cloudflareはトラフィックを途中で復号して再暗号化する
WARPの個人ネットワークにおけるプライバシー水準はよく分からないが、インターネットトンネリングではプライバシー低下が大きいと考えている
また、P2P接続 + リレーフォールバック構造は第三者中継なしでも動作するため、はるかに望ましいと思う
友人のマシンをWebRTCベースのexit nodeとして使う構成で、TURN/relayサーバーなしのP2Pのみをサポートしている
NAT環境によって接続成功率は低いが、トラフィックが第三者サーバーを通らないため、プライバシー保証は確実だ
Caddyで似たように構成することもできるが、それでもポートフォワーディングは必要になる
エンドツーエンド暗号化と100以上のPoPによる性能・信頼性の確保が強み
参加しているピアだけがエンドポイントを公開するため、セキュリティ・プライバシー面で有利
自分でホスティングすることも、公式サービスを使うこともできる
私は自宅と個人用途でNetbirdを使っている
Synology NAS、家族のすべてのノートPC・デスクトップ・モバイルに入れており、Tmux環境でリモートデスクトップのように使うのに便利
「すべてのトラフィックがCloudflareネットワークを通る」という一文で読むのをやめた
Hyprspaceは私が出会ったあらゆるNATを突破してきたし、大企業のインフラなしでもうまく動く
これは本当に素晴らしい構成ガイドのように感じる
Cloudflareがこれを文書化して公式ガイドとして使ってもよさそう
TailscaleがNAT環境でP2P接続を確立できないときにもどかしくて、Cloudflare Zero Trust + Warpを学んでみたという記事を読んだ
しかしCloudflareはそもそもP2Pを試みることすらなく、結局Cloudflareの信頼モデルに切り替えることになる
動機は理解しにくいが、記事そのものはよく整理されている
わが社も全面リモートだが、TailscaleからCloudflareに移行してから性能が向上した
維持されるなら信頼モデルの違いはそれほど大きくないが、Cloudflareはリレー性能が強みなので速度面では有利
それでもTailscaleのNATホールパンチング能力は優秀なので、可能なら直接接続を好む
個人サービス公開用にtuns.shを使っている
SSHトンネルベースなので、インストール不要ですぐ使える点が気に入っている
記事もコメントもどちらも有益だった
ただし本文の画像が壊れていて404エラーになる — 例: targets-config-screen.png
CFの神聖視された問題にようやく批判が出てきてうれしい
Zero Trustモデルの問題点を指摘する議論が必要だと思う
無料のCloudflareアカウントではPlexサーバーを運用できないのが致命的
関連する規約はこちらで確認できる
私はIPv6ベースでEmbyとJellyfinを友人たちと問題なく使っている
単純なWebトラフィックと違って、映画1本で数百倍の帯域コストが発生する
彼女の仕事用ノートPCにはTailscaleをインストールできないので、この方法が役に立った
Cloudflareの利用はベンダーロックイン (vendor lock-in) ではないのかという疑問がある
Tailscaleには少なくともそうしたロックインはないと思う
オープンソースのプロジェクトだと思っていたが、そうではなかった