Cloudflare Tunnelを利用して外部からWindows ProマシンへRDPする
これはなに
Cloudflare Zero TrustのCloudflare Tunnelを用いて、外部ネットワークから自宅のデスクトップPCにリモートデスクトップ(RDP)できるようにした際の手順メモ。スクラップに試行錯誤も含めた過程は記したが、その後の改良も含めてきちんと記事にしておく。
なお、基本的には下記のページの手順に従っているだけである。
環境
筆者は下記の環境で試している。
- 接続元(クライアント側): Windows 11 Pro
- 接続先(サーバー側): Windows 11 Pro
Windowsの場合、Home以外のエディションでなければデフォルトでRDPできない。そのため、接続元のWindowsマシンがHomeエディションの場合は、別途Microsoft Remote DesktopなどRDPクライアントの設定が必要になる。また、接続先のWindowsマシンがHomeエディションの場合は、別途RDP Wrapper LibraryなどRDP Hostの設定が必要になる。
なお、本稿の方法の場合、接続元のPCはWindowsでなくても問題ないし、接続先のPCもWindows以外で動作させられるはずである。ただし、本稿では上記Windows環境を前提として記述する。
前提条件
本稿では下記の条件をすでに満たしているものとする。
- クライアントPCがリモートデスクトップをホストできる
- サーバーPCにRDPクライアントがインストールされている
- Cloudflareのアカウントを作成済みである
構成
今回構成するネットワークシステムのイメージを下図に示す。
全体の流れ
- サーバーPCのプライベートIPアドレスを固定する
- Cloudflare Zero Trustを利用できるようにする
- サーバーPCとのTunnelを作成する
- デバイス登録ポリシーを設定する
- Cloudflareのデバイス設定を変更する
- クライアントPCにWARPをインストールし接続設定する
- RDP接続する
1. サーバーPCのプライベートIPアドレスを固定する
RDPしたいマシンのプライベートIPアドレスを固定する。これを実行することで、RDP接続先(サーバー)PCが再起動しても、同じ設定でRDPできるようになる。
まず、RDPしたいマシンのプライベートアドレスとデフォルトゲートウェイのアドレスを調べる。これは、接続先(サーバー)PCがWindowsマシンの場合、コマンドプロンプトでipconfig
コマンドを実行すると調べられる。
ipconfig
接続先(サーバー)PCがイーサネットでネットワークに接続している場合は「イーサネット アダプター イーサネット」の欄を、Wi-Fiでネットワークに接続している場合は「Wireless LAN adapter Wi-Fi」の欄を見る。「IPv4アドレス」に書かれているのがマシンのプライベートアドレス、「デフォルト ゲートウェイ」に書かれているのがデフォルトゲートウェイのアドレスである。これらを控えておく。
次に、Windowsの設定で「ネットワークとインターネット」を開く。イーサネットの場合は「イーサネット」を、Wi-Fiの場合は「Wi-Fi」->「<ネットワーク名(SSID)>プロパティ」を開き、「IP割り当て」にある「編集」ボタンをクリックする。
「IP割り当て」にある「編集」ボタンをクリックする
すると、IP設定の編集という画面が出てくる。「自動(DHCP)」になっている場合は「手動」に切り替え、IPv4のトグルをオンにする。その後、以下のように4つの欄を埋める。
欄の名前 | 入力する値 |
---|---|
IPアドレス |
ipconfig コマンドで「IPv4アドレス」に書かれていたマシンのプライベートアドレス |
サブネット マスク | 255.255.255.0 |
デフォルト ゲートウェイ |
ipconfig コマンドで「デフォルト ゲートウェイ」に書かれていたデフォルトゲートウェイのアドレス |
優先 DNC |
ipconfig コマンドで「デフォルト ゲートウェイ」に書かれていたデフォルトゲートウェイのアドレス |
入力例を下図に示す。
IP設定の例
入力を終えたら「保存」をクリックする。以上で、RDPしたいマシンのプライベートアドレスが固定される。
2. Cloudflare Zero Trustを利用できるようにする
Cloudflareにログインして、サイドバーから「Zero Trust」をクリックする。
初めてCloudflare Zero Trustを利用する場合は、下図のようなTeam nameを決める画面が表示されるので、適切に入力して「Next」をクリックする。
Team nameを決める画面
つぎに、利用するプランを決める。個人利用ならFreeプランで十分だと思われる。今回は「Free」を選択する。
プランを決める画面
プランの料金を確認する。
プラン料金確認場面
料金を支払う。Cloudflareに支払方法を登録していない場合は、たとえ0ドルのFreeプランであっても、「Add payment method」から支払方法を登録しなければならない。
プラン料金支払い画面
以上で、Cloudflare Zero Trustを利用できるようになる。Zero TrustのSettings -> Accountからプランを確認できる。
Freeプランを選択したことが確認できる
3. サーバーPCとのTunnelを作成する
Cloudflare Zero Trustで、RDP接続先(サーバー)PCとCloudflareの間のTunnelを作成する。やり方は下記のドキュメントが参考になる。
まず、Cloudflareにログインして、サイドバーから「Zero Trust」をクリックする。その後、Zero TrustのサイドバーからAccess -> Tunnelsに移動する。下記のような画面が表示される。
Tunnelsの設定画面
上記画面で「Add a tunnel」ボタンをクリックする。すると、下図のようにトンネル名を決める画面が表示される。トンネル名は自分がわかりやすければなんでもよい。決めたら「Save tunnel」ボタンをクリックする。
トンネル名の設定画面
すると、環境の選択画面になる。接続元(サーバー)PCの環境によってやり方が異なる。本稿ではWindows 64bitにおけるやり方を記す。
環境の選択画面
Windowsの場合は、上記画像に書かれているように、サーバーPCにcloudflaredをインストールして、画面に表示されているコマンドを実行する。
まず、書かれているリンクからcloudflaredのインストーラをダウンロードする。下記画像からわかるように、cloudflaredのインストーラはOSによって異なる。今回はWindows 64bitのcloudflaredインストーラをダウンロードする。
cloudflaredのインストーラをダウンロードする
ダウンロードが終わったら、インストーラを実行する。デフォルト設定のままインストールを実行して問題ない。筆者の環境では何の画面も出ずにインストールが終わった。
インストールが終わったらコマンドプロンプトを開き、cloudflared
コマンドが実行できるか確認する。
cloudflared --version
実行できれば、下記のようにバージョン情報が表示される。
> cloudflared --version
cloudflared version 2023.10.0 (built 2023-10-31-1231 UTC)
無事にcloudflared
コマンドが実行できたら、管理者権限でコマンドプロンプトを開きなおし、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
コマンドの実行に成功していれば、Cloudflareの画面のConnectorsに、Connectedなデバイスが表示される。
Connectedなデバイスの表示を確認したら、Nextをクリックする。すると、Route tunnelの画面に移行する。
Route tunnelの画面
今回はネットワークへアクセスできるようにするため、Private Networksタブに切り替える。CIDRの欄に、先ほど固定したサーバーPCのプライベートIPアドレスを入力する[3]。192.168.11.5/32
のように/32
が自動挿入される場合もあるが、それはそのままで問題ない。
入力を終えたら「Save tunnel」ボタンをクリックする。すると、画面がTunnelsに遷移する。StatusがHEALTHY
なTunnelができていれば成功である。
4. デバイス登録ポリシーを設定する
接続できるデバイスを制限する設定を追加する。これをしないと、Team名を知っている人間であればだれでも接続できてしまう。
Cloudflare Zero TrustのSettings -> WARP Clientを開き、Device enrollment permissionsを編集(Manage)する。
Device enrollment permissions
Rulesタブで「Add a rule」ボタンをクリックする。
デバイス登録ポリシーを追加する画面
ここでは用途によってさまざまなルールを設定できる。好きなルールにして構わなが、本稿では、メールアドレスを指定したワンタイムパスワード形式のルールを設定する。
IncludeのSelectorをEmailsにし、Valueに自分のメールアドレスを入力する。その後、Rule actionがAllowであることを確認して、「Save」ボタンをクリックする。
メールアドレスを指定したワンタイムパスワード形式のルール
下図のように、Policiesにルールが追加されていれば成功である。
デバイス登録ポリシーのルールが設定された
5. Cloudflareのデバイス設定を変更する
Cloudflare Zero Trustのデフォルト設定では、192.168.11.5
のようなプライベートIPアドレスはCloudflareへの接続ではなく、元のネットワーク(ローカル)内に接続されてしまう。そのため、Cloudflareの接続設定を変更し、RDP接続先(サーバー)のプライベートIPアドレスはCloudflareへ接続するようにする。
Cloudflare Zero Trustの画面でSettings -> WARP Clientを開き、Device settingsのProfile settingsを追加する。Profile settingsの「Create profile」ボタンをクリックする。
Device settingsのProfile settings
適当な名前を付け、「Build an expression」を用途に合わせて設定する。この設定はデバイスせってーを適用するルールになる。たとえば、メールアドレスが一致している場合にルールを適用したい場合は、下図のようにUser Emailを指定する。
プロファイルの作成
設定したら、一番下にある「Create profile」ボタンをクリックする。下図のようにDefaultとは別のプロファイルが作成される。
プロファイルが作成された
次に、先ほど新しく作成したプロファイル(上図ならRDP)をクリックし、「Configure」ボタンをクリックする。下のほうにある「Split Tunnels」を「Include IPs and domains」に変更する。変更時に下図のようなWARNINGが出るため、「Continue and delete」をクリックする。
WARNING
すると、プロファイルで接続を許可するIPアドレスを入力する欄が出てくる。ここに、RDP接続先(サーバー)PCのプライベートIPアドレスを入力する。入力したら「Save destination」ボタンをクリックする。
接続を許可するIPアドレスを入力する
「Save destination」ボタンをクリックすると、画面右側に入力したIPアドレスが表示される。表示されていることを確認したら、左上の「Back to Profile」をクリックする。その後、一番下にある「Save profile」ボタンをクリックして設定を保存する。
画面右側に入力したIPアドレスが表示される
6. クライアントPCにWARPをインストールし接続設定する
接続元(クライアント側)にWARPクライアントをインストールする。構成の章で示したように、接続元(クライアント側)はWARPクライアントによってCloudflareへ接続する。
Cloudflare Zero Trustの画面でSetting -> Downloadsを開き、「Download the WARP client」からWARPクライアントのインストーラをインストールする。このときダウンロードするインストーラは、接続元(クライアント側)のOSに合わせて選択すること。筆者の環境ではWindowsのrelease版をダウンロードした。
ダウンロードしたインストーラを実行して、WARPクライアントをインストールする。インストールが終わるとWARPクライアントが自動で起動する。規約に同意すると次の画面が出る。
WARPの起動画面
右下の歯車マークから環境設定を開き、サイドバーのアカウントタブからCloudflare Zero Trustにログインする。するとTeam名を求められるので、Cloudflare Zero TrustのTeam名を入力する。忘れてしまった場合はCloudflare Zero TrustのSetting -> Custom Pages -> Team domainから確認できる。
Team名を入力すると、デバイス登録ポリシーで設定したようにメールアドレスの入力を求められる。メールアドレスを入力し、メールで送られてきた認証コードを入力すればログインできる。
ログイン成功画面
ログインに成功するとWARPクライアントを開くように促されるので、それに従う。すると、WARPクライアントの画面が"WARP"から"Zero Trust"に変わる。
Zero Trustログイン後のWARPの起動画面
ここまでできたら、WARPのトグルをONにする。
7. RDP接続する
RDPクライアントで接続先(サーバー)PCに接続する。Windows 11 Proの場合は「リモートデスクトップ接続」を使えば簡単である。
リモートデスクトップ接続
接続元(クライアント)PCを外部ネットワークに接続し、WARPのトグルをONにする。その状態で「リモートデスクトップ接続」を起動し、上記のようにRDP接続先(サーバー)PCのプライベートIPアドレスを入力して接続ボタンを押す。無事にRDP接続できれば成功である。
参考文献・URL
-
アイコンはPhosphor Iconsを利用、CloudflareのロゴはCloudflareプレスキット | Cloudflareから取得。 ↩︎
-
RDPしたいデバイスが複数ある場合は、
192.168.11.0/24
というように指定する。ここの指定方法の話は詳細を説明しようとすると長くなるため、本稿では割愛する。 ↩︎
Discussion