Cloudflareくんとお知り合いになって外部からWindowsマシンへRDPする

このスクラップの内容をこちらにまとめました。このスクラップ自体は試行錯誤の過程として残しておきます。

背景
- Windows 11 Proのマシンに外出先からリモートデスクトップ接続したい
- 最初はDDNSとかポート開放とかしようとしたが、回線の契約上グローバルIPアドレスが手に入らなくて詰んだ
- Cloudflareを使うとグローバルIPアドレス無くてもリモートデスクトップ接続できるらしい
現在のレベル
- 自宅回線内であればリモートデスクトップ接続できるようになっている
- Cloudflareくんのことはまったく知らない。他人レベル。

「cloudflare rdp」でググってページを眺める

CloudflareのなかのZero TrustのなかのCloudflare Tunnelを使うっぽい

Cloudflare Tunnelを使用して、サーバーからCloudflareのエッジへの安全な送信専用接続を作成できます。これには、cloudflaredサーバー上でデーモンを実行する必要があります。ユーザーは、デバイスにCloudflare WARPクライアントをインストールし、ゼロトラスト組織に登録することでサービスを利用できます。リモート デバイスは、あたかもプライベート ネットワーク上にあるかのように接続できるようになります。デフォルトでは、特定のユーザーを許可またはブロックするポリシーを作成しない限り、組織に登録されているすべてのデバイスがサービスにアクセスできます
引用元 : https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/rdp/
Google訳

今の理解
- クライアントはCloudflare WARPクライアントをインストールし、Zero Trust組織(?)に登録することでサービスを利用できる
- サーバーはCloudflaredサーバーを実行する必要があり、Cloudflaredサーバー上でデーモン(?)を実行する必要がある
- CloudflaredサーバーがCloudflare Tunnelを使っていい感じに通信する。
- ポリシーをきちんと設定しないと全デバイスに公開されてしまう

今の理解
- サーバーは、Cloudflare TunnelによってCloudflareのグローバルネットワークに接続される
- これはサーバー上でcloudflaredデーモンを実行することで行われる
- 簡単に言うと、Cloudflare TunnelはプライベートネットワークをCloudflareに接続するもの
- クライアント側では、エンドユーザーはCloudflare WARPクライアントを使用して、Cloudflareのグローバルネットワークに接続する

つまり、サーバーとクライアントを両方Cloudflareのグローバルネットワークに接続して、いい感じに通信するってことかな?

とりあえずCloudflareのアカウントを作ってログイン

Zero Trustを選択するとTeam nameを決めるように言われたので適当に決めた。

プラン選択画面が出た。Freeを選択。

確認画面

支払方法を登録する

無事にプラン決定

たぶん下記のサイトに従えばよさそう。

接続したいPC(サーバー)側はWindows11 Proなので、RDPのサーバーはすでに入っている。Windows11の設定からリモートデスクトップを有効化しておく。

接続するPC(クライアント)側もWindows11なので、リモートデスクトップ接続のクライアントアプリはデフォルトで入っている。それを使う。

つまり、"Connect to RDP server with WARP to Tunnel"からが新しい設定だと思われる

Cloudflare Tunnelを使用すると、サーバーからCloudflareのエッジへのセキュアなアウトバウンド専用接続を作成できます。これにはサーバー上でcloudflaredデーモンを実行する必要があります。ユーザーはデバイスにCloudflare WARPクライアントをインストールし、Zero Trust組織に登録することでサービスにアクセスします。リモートデバイスは、あたかもプライベートネットワーク上にあるかのように接続することができます。デフォルトでは、特定のユーザーを許可またはブロックするポリシーを作成しない限り、組織に登録されたすべてのデバイスがサービスにアクセスできます。

今の理解
必要な操作は下記かな?
- サーバー側はcloudflareデーモンを実行する
- クライアント側にはWARPクライアントをインストールする
- Zero Trust組織にクライアントデバイスを登録する
- 特定のユーザーを許可またはブロックするポリシーを作成する

参考

まずはサーバーでcloudflareデーモンを実行するようにする。
Cloudflare Zero TrustのAccess -> Tunnelsを見る

Cloudflaredのインストールと認証をする。上記のCloudflaredのリンクをクリックするとDownloadsに移動し、それぞれのOSごとのダウンロードができる。
今回はWindows 64bitのcloudflaredインストーラをダウンロードした。

インストーラを実行。管理者権限がいる。
何の画面も出ずにインストールが終わった…

cloudflared
コマンドを実行してみるときちんと実行されたので、インストールはできていそう。
> cloudflared --version
cloudflared version 2023.10.0 (built 2023-10-31-1231 UTC)

なんか下記のサイトによるとCreate a tunnelから作成できるらしい。こっちでやってみる。

Add a tunnelをクリック。トンネル名を決める。わかりやすけば問題なさそう。決めたらSave tunnelボタンをクリック。

すると環境の選択画面になる。Windowsの場合は結局cloudflaredをインストールする必要があるようだ。じゃあ問題ないか。

cloudflareのインストーラを実行し、管理者権限でコマンドプロンプトを開き、表示されているコマンドを実行する。注意書きにあるようにコマンドに書かれたtokenの情報は流出するとヤバイので割愛。
すでにcloudflareのインストーラは実行済みなので、管理者権限でコマンドプロンプトを開き、表示されているコマンドを実行した。
> cloudflared.exe service install
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2023-12-28T16:18:04Z INF Installing cloudflared Windows service
2023-12-28T16:18:04Z INF cloudflared agent service is installed windowsServiceName=Cloudflared
2023-12-28T16:18:05Z INF Agent service for cloudflared installed successfully windowsServiceName=Cloudflared

successfullyとあるし成功してそう。
Cloudflareの方でConnectorsにConnectedなデバイスが出てきた。
ここまでサイト通り

Nextをクリックすると、Route tunnelの画面に移行した。このサイトによると接続したいのがアプリケーションなのかネットワークなのかでやり方が異なるようだ。
今回接続したいのはネットワークなので、Private NetworksでCIDRかIPを指定する。

Save tunnelボタンをクリックすると、画面がTunnelsに遷移する。
StatusがHEALTHYなTunnelができていれば成功。

次に、クライアント側にWARPクライアントをインストールする。
Setting -> Downloadsを開き、WARPクライアントをインストールする。
今回はWindows版のrelease版

ダウンロードしたインストーラを実行。管理者権限がいる。
インストールするとWARPが起動する。規約に同意すると次の画面が出る。

歯車マークから環境設定を開く。アカウントタブからCloudflare Zero Trustにログインする。
…できない…

入力したteam名は合っているので、デバイス登録ポリシーが原因っぽい

Settings -> WARP ClientからDevice enrollment permissionsを変更する。

ここでAdd a ruleする

ルールを追加した後に再度WARPの環境設定->アカウントタブからCloudflare Zero Trustにログインすると無事ログインできた。

WARPの画面もZero Trustに変わった

これをONにすればいいのか…?

ダメー

Settings -> WARP Clientから、Device settingsのProfile settingsを変更する

もともとあったDefaultの設定を複製して、Split Tunnelsの設定から192.168.0.0/16の設定を削除した

RDPを試したらうまくいった!やったね!