RDS(リモートデスクトップサービス)
- RD接続ブローカー
- RDセッションホスト
- RD webアクセス
を使用したサービスを利用した時に、Windowsを起動したら
時々リモートデスクトップサービスが接続できないことがある
という事象が起こりました。
こちらの原因と対策を紹介します。
レジュメ
環境・前提条件
今回の現象は、クラウドAWS上のEC2で発生しました。
EC2へリモートデスクトップ接続できないなんて致命的ですよね。
- AWS EC2
- Windows Server 2019 (1台にAD、RD接続ブローカー、RDセッションホスト、RD Webアクセス、RDライセンスがインストールされている)
上記環境で発生しました。
わかっていることは、
「Remote Desktop Connection Broker」サービス (RD接続ブローカー) が起動できていない事でした。
結論、Windows起動後少し経ったらRD接続ブローカーサービスを起動させてあげる
Windows OS起動後に、リモートデスクトップ接続できない時は、「Remote Desktop Connection Broker」サービスを起動させてあげれば再度リモートデスクトップサービス接続できるようになります。
具体的には、
net start Tssdis
コマンドを実行してあげれば、RD接続ブローカーが停止している時は起動できますし、
RD接続ブローカーが開始していれば、コマンドエラーとなりそのままの状況が維持できます。
もしくは、「Remote Desktop Connection Broker」サービスのスタートアップを「自動(遅延開始)」にして遅延起動にしても回避できるかもしれませんね(未確認)。
遅延開始の遅延時間は、デフォルトで2分のようです。
RD接続ブローカーサービスが停止している状態でリモートデスクトップ接続する方法
今回の事象が起きている(RD接続ブローカーサービスが停止した)状態に、通常のリモートデスクトップ接続では接続できません。
リモートデスクトップ接続のユーザー名とパスワードまで聞かれるので、接続出来そうに見えて、最終的に上記画面の「このコンピューターはリモートコンピューターに接続できません。」エラーが発生し、接続できません。
つまり、
リモートデスクトップの3389ポートはリッスンしている
にも関わらず接続出来ない状態です。
しかし、以下のコマンドでリモートデスクトップ接続をすると、今回の事象が起きている状態でも、リモートデスクトップ接続できます。
mstsc /admin
このコマンドで、リモートデスクトップ接続してから復旧作業が出来ます。
【原因】OS起動タイミングでIPアドレスが割り当てられる前に接続ブローカーが開始されている
なぜこのような、時々RD接続ブローカーが起動しない状態が起きるのかといいますと、
- NICドライバーが読み込まれていない状態や
- DHCPにてIPアドレスが割り振られていない状態
でRD接続ブローカーサービスが起動してしまうと、RD接続ブローカーがダウンしてしまうようです。
なので、Windows OS起動のタイミングによって、この事象が起きたり起きなかったりするという状況です。
RDSサービス一式はどのような順番でサービスが起動しているのか?サービス依存関係
RDサービス一覧のスタートアップ状態を見ますと、以下のようになってます。
No | サービス名 | スタートアップの種類 |
1 | Remote Desktop Configuration | 手動 |
2 | Remote Desktop Connection Broker | 自動 |
3 | 自動 | |
4 | Remote Desktop Management | 自動(遅延起動) |
5 | Remote Desktop Services | 手動 |
6 | Remote Desktop Services UserMode Port Redirector | 手動 |
7 | RemoteApp and Desktop Connection Management | 自動 |
スタートアップが「起動」になっているサービスは
- Remote Desktop Connection Broker (RD接続ブローカー)
- Remote Desktop Licensing (RDライセンス)
- RemoteApp and Desktop Connection Management
の3つです。
今回、RD接続ブローカーサービスの依存関係を見てみますと、
上記のようになっています。
つまり、「Remote Desktop Connection Broker」サービスを起動させる前に、「このサービスが依存するシステムコンポーネント」のサービスを起動させます。
当然、RD接続ブローカーが起動する前には「Windows Internal Database」サービスが起動していないと駄目ですよね。
そして、意外なのは「Remote Desktop Services」サービスとは依存関係はないということです。