リモート デスクトップ接続の一般的なトラブルシューティング
仮想オペレーターを試す - RD セッションの接続に関する一般的な問題をすばやく特定、解決するのに役立ちます
リモート デスクトップ クライアントがリモート デスクトップに接続できず、しかし原因の特定に役立つメッセージや他の症状が提供されない場合は、以下の手順を使用します。
RDP プロトコルの状態を確認する
ローカル コンピューターで RDP プロトコルの状態を確認する
ローカル コンピューターで RDP プロトコルの状態を確認および変更するには、「リモート デスクトップを有効にする方法」をご覧ください。
注意
リモート デスクトップのオプションを利用できない場合は、「ローカル コンピューターでグループ ポリシー オブジェクト (GPO) が RDP をブロックしているかどうかを確認する」をご覧ください。
リモート コンピューターで RDP プロトコルの状態を確認する
重要
このセクションの手順には、慎重に従ってください。 レジストリに正しくない変更を加えると、重大な問題が発生する可能性があります。 レジストリの変更を開始する前に、レジストリをバックアップして、何らかの問題が発生した場合に復元できるようにします。
リモート コンピューターで RDP プロトコルの状態を確認して変更するには、ネットワーク レジストリ接続を使います。
- 最初に、 [スタート] メニューに移動し、 [ファイル名を指定して実行] を選択します。 表示されるテキストボックスに「regedt32」と入力します。
- レジストリ エディターで、 [ファイル] 、 [ネットワーク レジストリへの接続] の順に選択します。
- [コンピューターの選択] ダイアログ ボックスで、リモート コンピューターの名前を入力し、 [名前の確認] を選択してから、 [OK] を選択します。
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server および HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services に移動します。
- fDenyTSConnections キーの値が 0 の場合、RDP は有効になっています。
- fDenyTSConnections キーの値が 1 の場合、RDP は無効になっています。
- RDP を有効にするには、fDenyTSConnections の値を 1 から 0 に変更します。
ローカル コンピューターでグループ ポリシー オブジェクト (GPO) が RDP をブロックしているかどうかを確認する
ユーザー インターフェイスで RDP を有効にできない場合、または変更した後で fDenyTSConnections の値が 1 に戻る場合は、GPO によってコンピューター レベルの設定がオーバーライドされている可能性があります。
ローカル コンピューターでのグループ ポリシーの構成を確認するには、管理者としてコマンド プロンプト ウィンドウを開き、次のコマンドを入力します。
gpresult /H c:\gpresult.html
このコマンドの終了後、gpresult.html を開きます。 [コンピューターの構成] \ [管理用テンプレート] \ [Windows コンポーネント] \ [リモート デスクトップ サービス] \ [リモート デスクトップ セッション ホスト] \ [接続] で、[ユーザーがリモート デスクトップ サービスを使ってリモート接続することを許可する] ポリシーを探します。
このポリシーの設定が [有効] である場合、グループ ポリシーでは RDP 接続はブロックされていません。
このポリシー設定が [無効] である場合は、 [優勢な GPO] を確認します。 これが、RDP 接続をブロックしている GPO です。
リモート コンピューターで GPO によって RDP がブロックされているかどうかを確認する
リモート コンピューターでグループ ポリシーの構成を確認するためのコマンドは、ローカル コンピューターの場合とほぼ同じです。
gpresult /S <computer name> /H c:\gpresult-<computer name>.html
このコマンドによって生成されるファイル (gpresult-<<コンピューター名>>.html) では、ローカル コンピューター バージョン (gpresult.html) と同じ情報の形式が使われます。
ブロックしている GPO を変更する
グループ ポリシー オブジェクト エディター (GPE) およびグループ ポリシー管理コンソール (GPM) で、これらの設定を変更することができます。 グループ ポリシーの使い方について詳しくは、「Advanced Group Policy Management」(高度なグループ ポリシーの管理) をご覧ください。
ブロックしているポリシーを変更するには、次のいずれかの方法を使います。
- GPE で、適切なレベルの GPO (ローカル、ドメインなど) にアクセスし、 [コンピューターの構成]>[管理用テンプレート]>[Windows コンポーネント]>[リモート デスクトップ サービス]>[リモート デスクトップ セッション ホスト]>[接続]>[ユーザーがリモート デスクトップ サービスを使ってリモート接続することを許可する] に移動します。
- ポリシーを [有効] または [未構成] に設定します。
- 影響を受けるコンピューターで、管理者としてコマンド プロンプト ウィンドウを開き、gpupdate /force コマンドを実行します。
- GPM で、影響を受けるコンピューターにブロック ポリシーを適用している組織単位 (OU) に移動し、OU からこのポリシーを削除します。
RDP サービスの状態を確認する
ローカル (クライアント) コンピューターとリモート (ターゲット) コンピューターの両方で、次のサービスが実行されている必要があります。
- リモート デスクトップ サービス (TermService)
- リモート デスクトップ サービス ユーザー モード ポート リダイレクター (UmRdpService)
サービス MMC スナップインを使って、ローカル環境またはリモート環境のサービスを管理できます。 PowerShell を使用して、ローカル環境またはリモート環境 (リモート PowerShell コマンドレットを受け付けるようにリモート コンピューターが構成されている場合) のサービスを管理することもできます。
いずれかのコンピューターで、1 つまたは両方のサービスが実行されていない場合は、開始します。
注意
リモート デスクトップ サービス サービスを開始する場合、 [はい] をクリックすると、リモート デスクトップ サービス ユーザー モード ポート リダイレクター サービスが自動的に再起動します。
RDP リスナーが機能していることを確認する
重要
このセクションの手順には、慎重に従ってください。 レジストリに正しくない変更を加えると、重大な問題が発生する可能性があります。 レジストリの変更を開始する前に、レジストリをバックアップして、何らかの問題が発生した場合に復元できるようにします。
RDP リスナーの状態を確認する
この手順では、管理者アクセス許可を持つ PowerShell インスタンスを使います。 ローカル コンピューターでは、管理者アクセス許可を持つコマンド プロンプトを使うこともできます。 ただし、この手順では、ローカルとリモートの両方で同じコマンドレットが動作するため、PowerShell を使います。
リモート コンピューターに接続するために、次のコマンドレットを実行します。
Enter-PSSession -ComputerName <computer name>
「qwinsta」と入力します。
リストに Listen という状態の rdp-tcp が含まれている場合、RDP リスナーは動作しています。 「RDP リスナー ポートを確認する」に進んでください。 それ以外の場合は、手順 4 に進みます。
動作中のコンピューターから RDP リスナーの構成をエクスポートします。
- 影響を受けるコンピューターと同じバージョンのオペレーティング システムが搭載されているコンピューターにサインインし、そのコンピューターのレジストリにアクセスします (たとえば、レジストリ エディターを使用)。
- 次のレジストリ エントリに移動します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp - エントリを .reg ファイルにエクスポートします。 たとえば、レジストリ エディターでエントリを右クリックし、 [エクスポート] を選択してから、エクスポートされる設定のファイル名を入力します。
- エクスポートした .reg ファイルを、影響を受けるコンピューターにコピーします。
RDP リスナーの構成をインポートするには、影響を受けるコンピューターで管理者アクセス許可を持つ PowerShell ウィンドウを開きます (または、PowerShell ウィンドウを開き、影響を受けるコンピューターにリモート接続します)。
既存のレジストリ エントリをバックアップするには、次のコマンドレットを入力します。
cmd /c 'reg export "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp" C:\Rdp-tcp-backup.reg'
既存のレジストリ エントリを削除するには、次のコマンドレットを入力します。
Remove-Item -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp' -Recurse -Force
新しいレジストリ エントリをインポートしてサービスを再起動するには、次のコマンドレットを入力します。
cmd /c 'regedit /s c:\<filename>.reg' Restart-Service TermService -Force
<filename> は、エクスポートした .reg ファイルの名前に置き換えます。
再びリモート デスクトップ接続を試みて、構成をテストします。 まだ接続できない場合は、影響を受けるコンピューターを再起動します。
それでも接続できない場合は、RDP の自己署名証明書の状態を確認します。
RDP の自己署名証明書の状態を確認する
- まだ接続できない場合は、証明書 MMC スナップインを開きます。 管理する証明書ストアの選択を求めるメッセージが表示されたら、 [コンピューター アカウント] を選択し、影響を受けるコンピューターを選択します。
- [証明書] フォルダーの [リモート デスクトップ] で、RDP 自己署名証明書を削除します。
- 影響を受けるコンピューターで、リモート デスクトップ サービスのサービスを再起動します。
- 証明書スナップインを最新の情報に更新します。
- RDP 自己署名証明書が再作成されていない場合は、MachineKeys フォルダーのアクセス許可を確認します。
MachineKeys フォルダーのアクセス許可を確認する
- 影響を受けるコンピューターでエクスプローラーを開き、C:\ProgramData\Microsoft\Crypto\RSA\ に移動します。
- MachineKeys を右クリックし、 [プロパティ] 、 [セキュリティ] 、 [詳細設定] の順に選択します。
- 次のアクセス許可が構成されていることを確認します。
- Builtin\Administrators: フル コントロール
- Everyone: 読み取り、書き込み
RDP リスナー ポートを確認する
ローカル (クライアント) コンピューターとリモート (ターゲット) コンピューターの両方で、RDP リスナーがポート 3389 でリッスンしている必要があります。 他のアプリケーションがこのポートを使っていてはなりません。
重要
このセクションの手順には、慎重に従ってください。 レジストリに正しくない変更を加えると、重大な問題が発生する可能性があります。 レジストリの変更を開始する前に、レジストリをバックアップして、何らかの問題が発生した場合に復元できるようにします。
RDP ポートを確認または変更するには、レジストリ エディターを使います。
- [スタート] メニューに移動し、 [ファイル名を指定して実行] を選択して、表示されるテキストボックスに「regedt32」と入力します。
- リモート コンピューターに接続するには、 [ファイル] 、 [ネットワーク レジストリへの接続] の順に選択します。
- [コンピューターの選択] ダイアログ ボックスで、リモート コンピューターの名前を入力し、 [名前の確認] を選択してから、 [OK] を選択します。
- レジストリを開き、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\<listener> に移動します。
- PortNumber の値が 3389 以外の場合は、3389 に変更します。
重要
別のポートを使ってリモート デスクトップ サービスを動作させることができます。 ただし、このようにすることはお勧めしません。 この記事では、その種類の構成のトラブルシューティング方法については説明しません。
- ポート番号を変更した後、リモート デスクトップ サービスのサービスを再起動します。
別のアプリケーションが同じポートを使おうとしていないことを確認する
この手順では、管理者アクセス許可を持つ PowerShell インスタンスを使います。 ローカル コンピューターでは、管理者アクセス許可を持つコマンド プロンプトを使うこともできます。 ただし、この手順では、ローカルとリモートで同じコマンドレットが動作するため、PowerShell を使います。
PowerShell ウィンドウを開きます。 リモート コンピューターに接続するには、「Enter-PSSession -ComputerName <<コンピューター名>> 」と入力します。
次のコマンドを入力します。
cmd /c 'netstat -ano | find "3389"'
状態が「LISTENING」の TCP ポート 3389 (または割り当てられた RDP ポート) のエントリを探します。
注意
そのポートを使用しているプロセスまたはサービスのプロセス ID (PID) が、[PID] 列の下に表示されます。
ポート 3389 (または、割り当てられている RDP ポート) を使っているアプリケーションを確認するには、次のコマンドを入力します。
cmd /c 'tasklist /svc | find "<pid listening on 3389>"'
ポートに関連付けられている PID 番号 (netstat の出力からの情報) のエントリを探します。 その PID に関連付けられているサービスまたはプロセスが、右側の列に表示されます。
リモート デスクトップ サービス (TermServ.exe) 以外のアプリケーションまたはサービスによってそのポートが使われている場合は、次のいずれかの方法を使って競合を解決できます。
- 他のアプリケーションまたはサービスを、別のポートを使うように構成します (推奨)。
- 他のアプリケーションまたはサービスをアンインストールします。
- 別のポートを使うように RDP を構成した後、リモート デスクトップ サービスのサービスを再起動します (推奨されません)。
ファイアウォールで RDP ポートがブロックされているかどうかを確認する
ポート 3389 を使って、影響を受けるコンピューターに到達できるかどうかをテストするには、psping ツールを使います。
影響を受けていない別のコンピューターにアクセスし、https://live.sysinternals.com/psping.exe から psping をダウンロードします。
管理者としてコマンド プロンプト ウィンドウを開き、psping をインストールしたディレクトリに移動して、次のコマンドを入力します。
psping -accepteula <computer IP>:3389
psping コマンドの出力で次のような結果を確認します。
- <コンピューター IP> へ接続しています: リモート コンピューターは到達可能です。
- (0% 損失) : すべての接続試行が成功しました。
- The remote computer refused the network connection (リモート コンピューターによりネットワーク接続が拒否されました) : リモート コンピューターは到達不可能です。
- (100% 損失) : すべての接続試行が失敗しました。
複数のコンピューターで psping を実行し、影響を受けるコンピューターに接続できるかどうかをテストします。
影響を受けるコンピューターによって、他のすべてのコンピューターからの接続がブロックされるか、他のコンピューターの一部がブロックされるか、または他のコンピューターの 1 つだけかに注意してください。
推奨される次の手順は次のとおりです。
- ネットワーク管理者と協力して、影響を受けるコンピューターへの RDP トラフィックがネットワークで許可されることを確認します。
- ソース コンピューターと影響を受けるコンピューターの間にあるすべてのファイアウォール (影響を受けるコンピューター上の Windows ファイアウォールを含む) の構成を調べて、ファイアウォールによって RDP ポートがブロックされているかどうかを確認します。