🛜

Cloudflare Tunnelを利用して外部からWindows ProマシンへRDPする

2024/01/07に公開

これはなに

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のアカウントを作成済みである

構成

今回構成するネットワークシステムのイメージを下図に示す。

システム構成図
システム構成図[1][2]

全体の流れ

  1. サーバーPCのプライベートIPアドレスを固定する
  2. Cloudflare Zero Trustを利用できるようにする
  3. サーバーPCとのTunnelを作成する
  4. デバイス登録ポリシーを設定する
  5. Cloudflareのデバイス設定を変更する
  6. クライアントPCにWARPをインストールし接続設定する
  7. 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割り当て」にある「編集」ボタンをクリックする

すると、IP設定の編集という画面が出てくる。「自動(DHCP)」になっている場合は「手動」に切り替え、IPv4のトグルをオンにする。その後、以下のように4つの欄を埋める。

欄の名前 入力する値
IPアドレス ipconfigコマンドで「IPv4アドレス」に書かれていたマシンのプライベートアドレス
サブネット マスク 255.255.255.0
デフォルト ゲートウェイ ipconfigコマンドで「デフォルト ゲートウェイ」に書かれていたデフォルトゲートウェイのアドレス
優先 DNC ipconfigコマンドで「デフォルト ゲートウェイ」に書かれていたデフォルトゲートウェイのアドレス

入力例を下図に示す。

IP設定の例
IP設定の例

入力を終えたら「保存」をクリックする。以上で、RDPしたいマシンのプライベートアドレスが固定される。

2. Cloudflare Zero Trustを利用できるようにする

Cloudflareにログインして、サイドバーから「Zero Trust」をクリックする。

初めてCloudflare Zero Trustを利用する場合は、下図のようなTeam nameを決める画面が表示されるので、適切に入力して「Next」をクリックする。

Team nameを決める画面
Team nameを決める画面

つぎに、利用するプランを決める。個人利用ならFreeプランで十分だと思われる。今回は「Free」を選択する。

プランを決める画面
プランを決める画面

プランの料金を確認する。

プラン料金確認場面
プラン料金確認場面

料金を支払う。Cloudflareに支払方法を登録していない場合は、たとえ0ドルのFreeプランであっても、「Add payment method」から支払方法を登録しなければならない。

プラン料金支払い画面
プラン料金支払い画面

以上で、Cloudflare Zero Trustを利用できるようになる。Zero TrustのSettings -> Accountからプランを確認できる。

Freeプランを選択したことが確認できる
Freeプランを選択したことが確認できる

3. サーバーPCとのTunnelを作成する

Cloudflare Zero Trustで、RDP接続先(サーバー)PCとCloudflareの間のTunnelを作成する。やり方は下記のドキュメントが参考になる。

まず、Cloudflareにログインして、サイドバーから「Zero Trust」をクリックする。その後、Zero TrustのサイドバーからAccess -> Tunnelsに移動する。下記のような画面が表示される。

Tunnelsの設定画面
Tunnelsの設定画面

上記画面で「Add a tunnel」ボタンをクリックする。すると、下図のようにトンネル名を決める画面が表示される。トンネル名は自分がわかりやすければなんでもよい。決めたら「Save tunnel」ボタンをクリックする。

トンネル名の設定画面
トンネル名の設定画面

すると、環境の選択画面になる。接続元(サーバー)PCの環境によってやり方が異なる。本稿ではWindows 64bitにおけるやり方を記す。

環境の選択画面
環境の選択画面

Windowsの場合は、上記画像に書かれているように、サーバーPCにcloudflaredをインストールして、画面に表示されているコマンドを実行する。

まず、書かれているリンクからcloudflaredのインストーラをダウンロードする。下記画像からわかるように、cloudflaredのインストーラはOSによって異なる。今回はWindows 64bitのcloudflaredインストーラをダウンロードする。

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の画面
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
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
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
WARNING

すると、プロファイルで接続を許可するIPアドレスを入力する欄が出てくる。ここに、RDP接続先(サーバー)PCのプライベートIPアドレスを入力する。入力したら「Save destination」ボタンをクリックする。

接続を許可するIPアドレスを入力する
接続を許可するIPアドレスを入力する

「Save destination」ボタンをクリックすると、画面右側に入力したIPアドレスが表示される。表示されていることを確認したら、左上の「Back to Profile」をクリックする。その後、一番下にある「Save profile」ボタンをクリックして設定を保存する。

画面右側に入力したIPアドレスが表示される
画面右側に入力したIPアドレスが表示される

6. クライアントPCにWARPをインストールし接続設定する

接続元(クライアント側)にWARPクライアントをインストールする。構成の章で示したように、接続元(クライアント側)はWARPクライアントによってCloudflareへ接続する。

Cloudflare Zero Trustの画面でSetting -> Downloadsを開き、「Download the WARP client」からWARPクライアントのインストーラをインストールする。このときダウンロードするインストーラは、接続元(クライアント側)のOSに合わせて選択すること。筆者の環境ではWindowsのrelease版をダウンロードした。

ダウンロードしたインストーラを実行して、WARPクライアントをインストールする。インストールが終わると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の起動画面
Zero Trustログイン後のWARPの起動画面

ここまでできたら、WARPのトグルをONにする。

7. RDP接続する

RDPクライアントで接続先(サーバー)PCに接続する。Windows 11 Proの場合は「リモートデスクトップ接続」を使えば簡単である。

リモートデスクトップ接続
リモートデスクトップ接続

接続元(クライアント)PCを外部ネットワークに接続し、WARPのトグルをONにする。その状態で「リモートデスクトップ接続」を起動し、上記のようにRDP接続先(サーバー)PCのプライベートIPアドレスを入力して接続ボタンを押す。無事にRDP接続できれば成功である。

参考文献・URL

脚注
  1. cf. CloudflareのZero Trustプラットフォームを拡張してUDPと内部DNSをサポート ↩︎

  2. アイコンはPhosphor Iconsを利用、CloudflareのロゴはCloudflareプレスキット | Cloudflareから取得。 ↩︎

  3. RDPしたいデバイスが複数ある場合は、192.168.11.0/24というように指定する。ここの指定方法の話は詳細を説明しようとすると長くなるため、本稿では割愛する。 ↩︎

Discussion