Cloudflare Zero Trustを使ってみた

目次

ZTNAというものに触れてみたかったのでCloudflare Zero Trustを触ってみたメモ

きっかけ

とあるイベント参加のために外からSSHかVPNで自宅内のNWに入れるよう穴をあけようとしたが、ふとZTNAという物を思い出したため調べてみると、CloudflareのZTNAサービスなら個人が使う範囲であれば無料で使えることがわかったため触ってみることにした。

環境

  • Tunnelに使うサーバ: Ubuntu 22.04.1
  • クライアント: iPadOS 16.3, Android 13
  • 接続プロトコル: SSH, RDP (なんでも良いはず)

やったこと

今回はCloudflareとトンネルを張るサーバを自宅内に1台用意し、外で使う端末にWARP clientをインストールして、インターネット経由で自宅内のサーバにアクセスできるようにした。
通信経路はこんな感じ

通信経路図

矢印の向きが示す通り、自宅内のサーバにインターネットからアクセスする穴を開ける必要がないところがポイントだと思う。

Tunnel作成

アカウント作成やウィザードに従った初期設定が終わったらまずはTunnelを作成する。
ダッシュボードからAccess->Tunnelsに進み、Create a tunnelボタンを押して、適当な名前で作成。
インストール先のOSを選択して表示された通りにサーバ側を操作する。
次の画面に進んだら、Route tunnelでアクセスしたい先のサーバのプライベートアドレスを設定すれば完了。

認証設定

今回はメール認証(One-time PIN)を使うことにした。
ダッシュボードからSettings->WARP Clientに進み、Device enrollment permissionsのManageボタンを押し、アクセスできる条件を設定する。
今回は、IncludeをSelector: Login Methods. Value: One-time PIN、RequireをSelector: Emails. Value: “メールアドレス"として、設定したメールアドレス以外では接続できないように設定した。

Applications作成

Tunnelを作っただけでは、まだ自宅内のサーバにアクセスすることはできない。
ダッシュボードからAccess->Applicationsに進み、Private networkをSelectする。
Application Nameを適当につけ、Application TypeをDestination IP、Valueを外からアクセスしたいサーバのプライベートIPにする。 ポリシーはデフォルトのままでも問題ないと思うが、念のため User Email is "メールアドレス" というルールも入れておいた。

WARP Client設定

以上の設定で接続できると思っていたが、実際に試してみるとスマートフォンのトラフィックがCloudflare経由になるだけで、自宅内のサーバには接続することができなかったため、WARP Clientの設定を変更した。

ダッシュボードからSettings->WARP Clientに進み、Device settingsのProfile SettingsのDefaultのConfigureを押し、Split Tunnelsを Include IPs and domains に変更した。
変更後にentriesを追加するように指示されるため、接続したい自宅サーバのプライベートIPを追加したところ、接続できるようになった。

雑記

  • TunnelサーバとCloudflare間の通信はUDP7844ポートを使っているような気がした