自宅PCにCloudflare Tunnelをデプロイする
はじめに
ずいぶん早い段階でCloudflareにカードを登録していたけど、実際に使っていたのはR2がほとんどで、Zero Trustについては存在は知っていたものの一度も使ったことがなかった
そんなある日、これでできることが意外と多いことに気づいて、それなら遊んでみようかなと思った
EP0:事前準備
ここでの手順はすべて、Cloudflareアカウントをすでに作成済みで、ドメインのDNSもCloudflareアカウントに紐付け済みであることを前提にしている
まず銀行カードを1枚用意しよう。Visa & MasterCard & AMEX & Discoverのどれでもいい。以前はPayPalを登録できるという話もあったが、少なくとも僕がR2を使うためにカードを登録したときには、PayPalのボタンはもうなかった。まあ運次第というか、僕はPayPalのボタンが見当たらなかったので、カードを登録した
(登録したのは中国銀行のマスターカード)
銀行カードを使う場合は、アカウントに約1ドル残しておくのを忘れずに。Cloudflareがアカウントを認証するときに、約1ドルを引き落として確認するからだ
EP1:Zero Trustの初期化
左側のナビゲーションバーにあるZero Trustボタンをクリックすると、Zero Trust専用のコンソールに移動する(このコンソールにはダークモードがない)
すると関連する案内が表示されるので、ここに適当な名前を入力しよう。英語のみでOK

入力したら「次へ」をクリックして、Freeプランを選択する

そして「支払いを続行」をクリック

もしずいぶん前に何かのサービスを使うためにCloudflareにカードを登録済みなら、このステップではリラックスして、ステータスが更新されるのを待つだけでいい
でもCloudflareにカードを登録していない場合は、下のような画面が表示されてカード登録を求められる


次のページが表示されたら、Zero Trustの初期化は完了だ

EP2:ソフトウェアのインストール
「設定」→「リソース」をクリックして、下にスクロールして「cloudflaredのダウンロード」を選び、自分のシステムに合わせてダウンロードする。ここではWindows (64-bit)を選択する

ダウンロードしたら開いて、インストールするだけ
もちろんDockerでデプロイする方法もあるが、それは後で説明する
Dockerでインストールする場合は、あらかじめデバイスにDockerをインストールしておいてほしい。WindowsでDockerを使ってインストールするのはおすすめしない
EP3:アプリケーションの作成
「ネットワーク」→「Tunnels」をクリックして、「トンネルを追加」をクリック

左側のCloudflaredを選択

トンネルに名前を付ける。覚えやすければ何でもいい。ここではデバイス名をそのまま使っている。入力したら「トンネルを保存」をクリック

そしてここからが重要なステップだ
管理者モードでCMDまたはPowerShellを開く。gsudoをインストール済みなら、sudoと入力して管理者モードに切り替えてもいい。僕のWindowsにはgsudoがあるので、そのまま切り替えた

さっきのページに戻って、下にスクロールして「コネクタをインストールして実行」を探す
ここではすでにステップ1から3までを事前に完了しているので、コマンドをコピーして、開いたコンソールに貼り付けてEnterを押すだけだ

このステップでは「環境を選択」の欄にいくつか選択肢があり、その中にDockerもある。Dockerに切り替えると、下の「コネクタをインストールして実行」が自動的にDocker用の手順に切り替わる。同じように、コマンドをコピーして、開いたコンソールに貼り付けてEnterを押すだけだ


実行が終わったらさっきのページに戻って、一番下の「Connectors」までスクロールすると、デバイスが表示されているはずだ

表示されているのを確認したら「次へ」をクリック

案内に従って上記の情報を入力するだけだ。入力し終わったら「トンネルを保存」をクリックして、作成したリンクにアクセスして正常に動作するか確認しよう
- 例えば
Error: Bad Configuration: Validation failed: parse "http://127.0.0.1:2333 ": invalid port ":2333 " after hostのようなエラーが表示されたら、「Tunnels」ページに戻って、作成したトンネルの設定ページに入り、「パブリックホスト名」ページで個別に設定しよう。設定方法はさっきと同じだ。これで解決することが多い - それでも解決しない場合は、ファイアウォールがcloudflared関連の接続をブロックしていないか確認しよう。一般的にLinuxシステムはcloudflared関連の接続をブロックしない
- Windowsの場合はファイアウォールでcloudflaredを通すのを忘れずに。インストール時にcloudflaredが関連する受信規則を作成しているが、有効になっているとは限らない
- Windowsユーザーは「セキュリティが強化されたWindows Defenderファイアウォール」に移動して、「cloudflared」という名前の2つの規則を有効にしよう。通常は有効にすれば正常に動作する

あとがき
Cloudflare側はAccessでアプリケーションを作成して接続を保護することも推奨しているが、それは人それぞれだ(僕はやってない。やり方がわからない)
上記の操作はサーバーにも同様に適用できる(当たり前だけど)
関連リンク
- cloudflared GitHubリポジトリ:cloudflare/cloudflared