リモート・デスクトップ・ゲートウェイ経由でOCI Windows VMへの接続方法

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

# 初めに
オンプレミスからOracle Cloud Infrastruture (<strong>OCI</strong>)プライベートサブネット内のComputeインスタンスに接続する方法はいくつかあります。本記事は、Microsoft リモート・デスクトップ・ゲートウェイ (<strong>RDG</strong>) を介して Windows インスタンスに接続する方法を紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9f125609-4d82-a34f-c7e1-e0c7e4dfd293.png)

__メリット__
✅ RDG サービスは Windows サーバの<strong>標準機能</strong>である。
✅ <strong>HTTPS (443 ポート)</strong>を経由するので、パブリック・サブネットにTCP 3389 ポートを公開しない。
✅ クライアントと踏み台サーバーの間にSSL証明書認証を利用することで、セキュアな接続が確保できる。
✅ SSHポート転送の方法 (OCI Bastionなど) と比較して、SSHセッションの<strong>タイムアウト</strong>を心配することなく、長時間の接続が可能。

__デメリット__
🛠️ <strong>踏み台サーバ</strong>の作成・設定には手間がかかる。
⏳ クライアント側から<strong>初期セッションを立てる</strong>までにやや長い時間がかかり、約1分ほど。
💰 コスト面では、Linux系の踏み台サーバよりも高くなる。

# ステップ
- [1. 事前準備](#1-事前準備)
- [2. リモート・デスクトップ・ゲートウェイをインストール (踏み台)](#2-リモートデスクトップゲートウェイをインストール-踏み台)
- [3. 承認ポリシーの作成 (踏み台)](#3-承認ポリシーの作成-踏み台)
- [4. SSL証明書の作成 (踏み台)](#4-ssl証明書の作成-踏み台)
- [5. SSL証明書のエクスポート (踏み台)](#5-ssl証明書のエクスポート-踏み台)
- [6. SSL証明書のインポート (クライアント)](#6-ssl証明書のインポート-クライアント)
- [7. 接続テスト (クライアント/踏み台)](#7-接続テスト-クライアント踏み台)
- [トラブル・シューティング](#トラブルシューティング)
  - [問題-1「リモート リソースを使用できません」](#問題-1-リモート-リソースを使用できません)
  - [問題-2 「リモート コンピューターに接続できません」](#問題-2-リモート-コンピューターに接続できません)
  - [問題-3 「サーバーアドレスと証明書のサブネット名が一致しません」](#問題-3-サーバーアドレスと証明書のサブネット名が一致しません)
  - [問題-4 「RD ゲートウェイの ID を確認できません」](#問題-4-rd-ゲートウェイの-id-を確認できません)

## 1. 事前準備
__関連 OCI リソース__
|タイプ|項目|値|コメント|
|:--|:--|:--|:--|
|VCN|CIDR|10.0.0.0/16|
|パブリック・サブネット|CIDR|10.0.0.0/24|踏み台サーバ|
|プライベート・サブネット|CIDR|10.0.1.0/24|接続先サーバ|
|インターネット・ゲートウェイ|||ルート表に追加する|
|セキュリティ・リスト (<strong>パブリック</strong>・サブネット用)|Ingress|XX.XX.XX.XX/32, TCP <font color=blue>443</font>|接続元の IP アドレスを指定する|
|||XX.XX.XX.XX/32, TCP <font color=blue>3389</font>|最初にこれを追加する必要がある。RDG 経由で接続先のインスタンスに正常に接続できたら、削除しても問題がない。|
||Egress|0.0.0.0/0, 全てのプロトコル||
|セキュリティ・リスト (<strong>プライベート</strong>・サブネット用)|Ingress|10.0.0.0/24, TCP All|踏み台からのアクセスを許可|
||Egress|0.0.0.0/0, 全てのプロトコル||
|ルート表 (<strong>パブリック</strong>・サブネット用)|ルール|ターゲット: インターネット・ゲートウェイ<br>宛先: 0.0.0.0/0||
|Compute インスタンス|踏み台サーバ|Windows サーバ 2022|
||接続先サーバ|Windows サーバ 2022|プライベート IP: 10.0.1.167|

## 2. リモート・デスクトップ・ゲートウェイをインストール (踏み台)
サーバーマネージャーからインストールすることもできますが、PowerShellを使った方が簡単です。

踏み台サーバに RDP ログインし、次のPowerShell コマンドを実行します。
`Install-WindowsFeature RDS-Gateway -IncludeAllSubFeature -IncludeManagementTools`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4fb9689d-16a8-dc04-9e0d-3923eb77979b.png)

## 3. 承認ポリシーの作成 (踏み台)
サーバー・マネージャー → ツール → Remote Desktop Services → "<strong>リモート デスクトップ ゲートウェイ マネージャー</strong>"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/647ba7f2-65d8-c9fd-3527-c117204b8442.png)

RD ゲートウェイ マネージャー → ポリシー (右クリック) → <strong>新しいポリシーの作成</strong>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/efb54eb7-2c80-33bd-9a0c-1e4261fcacd3.png)
デフォルトの「<strong>RD CAP と RD RAP を作成する (推奨)</strong>」を選択し, 「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/231338b4-f268-102f-77cd-1f21d043aab6.png)

RD CAP の名前を入力し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9f8ccb31-9968-9f84-c744-6b3ec411edf0.png)

「<strong>グループの追加</strong>」ボタンをクリックして、RD CAP に関連付けられるグループを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a8adccee-ffed-6016-4055-b2306ae8ce79.png)

グループ名を入力し、「<strong>名前の確認</strong>」をクリックします。 有効なグループ名を確認した後、OK をクリックして画面を閉じます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/fd5cbaed-3852-3e91-4e7c-047354a694a2.png", width="500">

「次へ」をクリックして続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/5f2c2403-c3a1-6c73-c0a9-6c4623f1a589.png)

デフォルトのままで、「次へ」をクリックして続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3cbc11be-5823-c471-b91d-f3fede21e28c.png)

タイムアウトを設定したくない場合、デフォルトのままで、「次へ」をクリックして続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8ec882c6-c4fe-ec5d-af5e-dffe6aab731c.png)

「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/57a0d541-f9c4-51d6-3199-58fd17659349.png)

RD RAP の名前を入力し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ffcf1d5f-4808-635c-5e9e-1c67e312d5c9.png)

同じグループを使用してもよいので、そのままで「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c01ac253-a1c4-9336-78db-b381013ab79b.png)

「<strong>ユーザーによる任意のネットワーク リソース (コンピューター) への接続を許可する</strong>」を選択し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/524de428-e9c1-3932-11fe-a79cc1e94d3a.png)

「ポート 3389 への接続のみを許可する」はデフォルトでチェックされています。 「次へ」をクリックして続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0abf205d-903d-9b88-6635-ba55fe00237d.png)

「完了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/99b4ddcf-41f5-4e02-4bf6-cde31c7426d5.png)

ポリシーの作成を確認し、「閉じる」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/25f75c08-b1aa-14ec-97ee-d9d5682f6be2.png)

## 4. SSL証明書の作成 (踏み台)
RD ゲートウェイ マネージャー → サーバー名をクリック → "<strong>証明書のプロパティを表示または変更</strong>"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/5dcf60b9-4bec-6755-5876-ba803eef6eb7.png)

このテストには自己署名証明書を使用します。「<strong>証明書の作成とインポート</strong>」をクリックして続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/5c108f90-6e1d-5462-a02e-0fa9bf33fe6d.png", width="500">

デフォルトの証明書の名前は、サーバー名と同じです。 踏み台サーバーの<font color=blue>パブリック IP</font> または<font color=blue>パブリック DNS 名</font>に変更します。 (このテストにはパブリック IP を使用します。)

デフォルトのサーバー名を使用する場合、接続セッションを立てる時、[問題-3](#問題-3)が発生する可能性がありますので、ご注意ください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/dd4dcf6d-9ddf-dc99-efab-9075b359009f.png", width="500">
作成後、次のようなメッセージが表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a7ff2989-181e-3166-2b6a-e54a380d1608.png", width="400">
「適用」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/07aab027-8f1e-3de5-0f6a-def8e21cbbe6.png", width="500">
証明書が踏み台サーバーにインストールされていることを確認し、OK をクリックして終了します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/babae98c-b742-5a76-5870-b0c3f7303412.png", width="500">

## 5. SSL証明書のエクスポート (踏み台)
検索ボックスに`certlm.msc`と入力し、管理コンソールを起動します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/229887e6-8e9a-9a0c-d7e8-38e6384a79c6.png", width="400">
個人 → 証明書 → 証明書を選択 → すべてのタスク -> エクスポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/77b0c059-5a15-90da-98da-d5bcd67dad59.png)

「次へ」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/86431258-3c1c-359f-2082-c551d40e1f9b.png", width="500">
デフォルトのままで、「次へ」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/32052fd0-f370-bc38-8a3f-959ba3bdb3ab.png", width="500">

デフォルトのままで、「次へ」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f90ce0d8-8dfe-928a-7242-ec0389ea532a.png", width="500">
ファイル名を入力し、「次へ」をクリックして続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ca2aff36-39b0-59d6-0a04-9cc05295d1d5.png", width="500">

「完了」 をクリックすると、次のような成功メッセージが表示されます。OK をクリックして終了します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2939ece7-b7ce-c83b-63f2-2a0b412081eb.png", width="500">

踏み台サーバーからローカル クライアントに証明書をコピーします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/cb86e13c-e3b8-1ed6-0009-6eabea3f1ee2.png", width="500">

## 6. SSL証明書のインポート (クライアント)
ローカル クライアントに保存されている証明書ファイル`Win2022-RDG.cer`をダブルクリックしたら、以下の画面が表示されます。「<strong>証明書のインストール</strong>」ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a739a193-f313-99a3-e8c4-9e2262e8ea15.png", width="400">
「現在のユーザー」は、デフォルトでチェックされています。「次へ」をクリックして続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/19e87c54-0090-fd59-b8ef-83e0b65aa4b2.png", width="500">
「証明書をすべての次のストアに配置する」を選択し、「参照」ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/bd25cc23-90a8-4022-ee9a-41439b40488b.png", width="500">
「信頼されたルート証明機関」を選択し、OK をクリックします。それ以外のストアを選択した場合、接続セッションを立てる時、[問題-4](#問題-4)が発生する可能性がありますので、ご注意ください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/98d89843-5b03-e603-33df-85862a53e474.png", width="350">
「次へ」をクリックして続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b8669f93-be6c-5c20-f186-ab29fc6d68d3.png", width="500">
「完了」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a1806177-ef5d-9664-ec53-32064ac06884.png", width="500">
次のような警告メッセージが表示されたら、「はい」 をクリックして続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d5ce0027-4d57-2a4b-86c6-d21c439d980b.png", width="450">
「OK」をクリックしてウィザードを終了します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/441e6e6c-bc3c-9b2c-1439-5d12b18bdce2.png", width="200">

## 7. 接続テスト (クライアント/踏み台)
### RD ゲートウェイ サービスを起動 (踏み台)
次のように、サービスを起動します。起動後の状態は「停止」から「<font color=blue>実行中</font>」に変わったことを確認します。

サーバー・マネージャー → リモート デスクトップ サービス → サーバー → サービス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/00d0fd71-ba97-17f4-5dbe-0db8eda39e3e.png)

### ユーザをグループに追加 (踏み台)
RD CAP/RAP に関連付けられているグループにログイン・ユーザーを追加することを忘れないでください。このテストでは、デフォルトの `opc` ユーザーでログインします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e01e94ee-27dc-1203-1125-f0ea734e1685.png", width="450">

### 接続を開始 (クライアント)
ローカル クライアントから「リモート デスクトップ接続」を起動します。 「<font color=blue>詳細設定</font>」タブに切り替え、「設定」ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7d3b105b-43d8-befb-c0d8-fd70fd08ac61.png", width="450">
「<strong>次の RD ゲートウェイ サーバー設定を使用する</strong>」を選択し、踏み台の<strong>パブリック IP</strong> または<strong>パブリック DNS 名</strong>を入力します。 「ローカル アドレスには RD ゲートウェイ サーバーを使用しない」のチェックを外し、OK をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a5dd3b86-726c-0dcf-b8df-1b315d366ee4.png", width="450">

「全般」タブに切り替え、接続先のWindowsサーバーの<font color=blue>プライベートIP</font>とユーザー名を入力し、「接続」ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4fc62844-7de3-d900-f61d-57984ca87ddf.png", width="450">

<strong>踏み台サーバー</strong>のユーザー名とパスワードを入力します。
ユーザー名の例：`localhost\opc`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/41f14762-6b79-47fe-bdb6-c766033c0399.png", width="400">

次のように、リモート セッションの作成が始まります。しばらくお待ちください。このテストは、接続完了まで1分ほどかかりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d7b0aa3c-23bf-89e6-29f3-ca5e5bf76c08.png", width="400">

「このコンピュータへの接続について今後確認しない」にチェックを入れ、「はい」をクリックして続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0d746fef-267f-356f-6371-c309ab2c0887.png", width="450">

<strong>接続先サーバー</strong>のユーザー名とパスワードを入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8d4e67cd-9105-5ff8-474c-9b25d96f715c.png", width="550">

接続先の Windows サーバーにログインできました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/dcc90ad0-1665-9e33-592f-f53db28fef49.png", width="550">

__セキュリティ・リスト（パブリック サブネット用）__
最後に、TCP 3389 ポートのルールを削除し、<font color=blue>443</font> ポートのみを保留します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a0cd432e-ccaa-9c79-5f3d-a948fcb3eca5.png)

__踏み台サーバーを接続先にしたい場合__
「詳細設定」タブを上記と同様に設定し、「全般」タブで、コンピューター名に`localhost`を入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2b1a4783-5122-5763-5f1e-cf713ca8c2c5.png", width="400">

# トラブル・シューティング
うまくいかない時に、これを見てください。

## 問題-1 「リモート リソースを使用できません」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/243be186-c87f-db88-c051-218006d77e51.png", width="600">
考えられる理由 1：RD ゲートウェイ サービスが開始されていません。(["RD ゲートウェイ サービスを起動"](#rd-ゲートウェイ-サービスを起動-踏み台)をご参照)
考えられる理由 2：セキュリティ・リストに、接続元（クライアント）からの<strong>入力(Ingress)ルール</strong>が追加されていません。

## 問題-2 「リモート コンピューターに接続できません」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/94974022-4084-7155-1df2-d94501e9cfdc.png", width="500">
考えられる理由：ログイン ユーザーは、RD CAP/RAP に関連付けられているグループに追加されていません。(["ユーザをグループに追加"](#ユーザをグループに追加-踏み台)をご参照)

## 問題-3 「サーバーアドレスと証明書のサブネット名が一致しません」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/dffba107-ba06-0ee4-ecf1-1f6df262603d.png)
考えられる理由：証明書のサブジェクト名は、踏み台サーバーの<strong>パブリック IP </strong>または、<strong>パブリック DNS 名</strong>ではありません。([Step 4](#4-ssl証明書の作成-踏み台)をご参照)

## 問題-4 「RD ゲートウェイの ID を確認できません」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ead453fa-535f-8419-6626-eef10f76d3f5.png)
考えられる理由：証明書は、「<strong>信頼されたルート証明機関</strong>」に配置されていません。([Step 6](#6-ssl証明書のインポート-クライアント)をご参照)

以上

----
__関連記事__
[プライベート・サブネット内のOCI Computeインスタンスに接続する方法のまとめ](https://qiita.com/liu-wei/items/e0376fd71433d243bce0)
[OCI Bastion経由でプライベート・サブネット内のComputeインスタンスに接続](https://qiita.com/liu-wei/items/2187c9421e41c8c5d099)
[ネットワーク・ロード・バランサ (NLB) の経由でプライベート・サブネット内の OCI VMに接続する](https://qiita.com/liu-wei/items/d4144794ef1a8692580c)