特定の状況では、RDP を使用して Compute Engine の Windows 仮想マシン(VM)インスタンスに接続できないことがあります。この原因として、構成エラー、ネットワーク エラー、ブートプロセスの未完了などが考えられます。
このドキュメントでは、RDP に関する一般的な問題をトラブルシューティングして解決するためのヒントと方法を紹介します。
VM がオンラインであり使用可能であることを確認する
VM の起動が完了したら(数分かかることがあります)、以下のいずれかの方法で状態を確認します。
シリアルポート 1
シリアルポート 1 は、システムとアプリケーションのアクティビティをロギングするために使用します。出力を表示して、VM の起動が完了していることと、サービスが正常に起動したかどうかを確認します。
Google Cloud コンソールで [VM インスタンス] ページに移動します。
ログを表示する VM の名前をクリックします。[VM インスタンスの詳細] ページが開きます。
[ログ] の下の [シリアルポート 1] を選択します。
シリアルポート 1 の出力を確認して、次のような出力を探します。
BdsDxe: loading Boot0003 "Windows Boot Manager" from HD(2,GPT,DD3FB000-7000-4000-8000-3977378A7000,0x0000,0x00000)/\EFI\Microsoft\Boot\bootmgfw.efi BdsDxe: starting Boot0003 "Windows Boot Manager" from HD(2,GPT,DD3FB000-7000-4000-8000-3977378A7000,0x0000,0x00000)/\EFI\Microsoft\Boot\bootmgfw.efi UEFI: Attempting to start image. Description: Windows Boot Manager FilePath: HD(2,GPT,DD3FB000-7000-4000-8000-3977378A7000,0x0000,0x00000)/\EFI\Microsoft\Boot\bootmgfw.efi OptionNumber: 3. 2021/04/13 10:50:22 GCEGuestAgent: GCE Agent Started (version 20210128.00) 2021-04-13T10:50:23.4621Z OSConfigAgent Info: OSConfig Agent (version 20210217.00.0+win@1) started. 2021/04/13 10:50:42 GCEMetadataScripts: Starting startup scripts (version 20200129.00). 2021/04/13 10:50:42 GCEMetadataScripts: No startup scripts to run.
GCEGuestAgent
または GCEMetadataScripts
を含む出力で、Windows が正常に起動したことを確認します。RDP を使用して VM への再接続を試行します。
シリアルポート 2
シリアルポート 2 は、VM とのインタラクティブな接続を提供し、また Special Administrative Console(SAC)の出力を表示します。シリアル コンソール 2 を使用して、システム サービスが正常に起動したかどうかを確認できます。
Google Cloud コンソールで [VM インスタンス] ページに移動します。
ログを表示する VM の名前をクリックします。[VM インスタンスの詳細] ページが開きます。
[ログ] の下の [その他] を展開し、[シリアルポート 2(コンソール)] をクリックします。
シリアルポート 2 の出力を確認して、次のような出力を探します。
BdsDxe: loading Boot0003 "Windows Boot Manager" from HD(2,GPT,DD3FB000-7000-4000-8000-3977378A7000,0x0000,0x00000)/\EFI\Microsoft\Boot\bootmgfw.efi BdsDxe: starting Boot0003 "Windows Boot Manager" from HD(2,GPT,DD3FB000-7000-4000-8000-3977378A7000,0x0000,0x00000)/\EFI\Microsoft\Boot\bootmgfw.efi UEFI: Attempting to start image. Description: Windows Boot Manager FilePath: HD(2,GPT,DD3FB000-7000-4000-8000-3977378A7000,0x0000,0x00000)/\EFI\Microsoft\Boot\bootmgfw.efi OptionNumber: 3. <machine-info> <name>WINDOWS</name> <guid>b7ab5000-4000-e000-e000-bc5a738da000</guid> <processor-architecture>AMD64</processor-architecture> <os-version>10.0</os-version> <os-build-number>17763</os-build-number> <os-product>Windows Server 2019 Datacenter</os-product> <os-service-pack>None</os-service-pack> </machine-info> Computer is booting, SAC started and initialized. Use the "ch -?" command for information about using channels. EVENT: The CMD command is now available. SAC>
SAC started and initialized
または CMD command is now
available
を含む出力で、Windows が正常に起動したことを確認します。RDP を使用して VM への再接続を試行します。
VM スクリーンショット
VM のスクリーンショットは、パソコンのモニターの場合と同様に、VM の状態を視覚的に表します。
VM のスクリーンショットをキャプチャするには、VM の仮想ディスプレイを有効にする必要があります。仮想ディスプレイをまだ有効にしていない場合は、仮想ディスプレイを有効にするをご覧ください。
スクリーンショットをキャプチャします。詳細については、VM からスクリーンショットをキャプチャするをご覧ください。
スクリーンショットを調べて、インスタンスの準備ができていることを確認します。
スクリーンショットを以下に照らし、現在の状態を確認します。
- Windows のログイン画面は、OS が正常に起動したことを示します。RDP を介した接続を試行できます。
- Windows Update の進捗画面は、VM の準備がまだできていないことを示します。更新が完了するまで待ちます。
- サービス読み込み画面は、VM の準備がまだできていないことを示します。VM によって必要なサービスが開始されるまで待ちます。
- UEFI 読み込み画面は、ブートファイル / レコードが見つからないか、ブートセクター / マネージャーが破損していることを示す場合があります。
- Windows のブルー スクリーン エラーは、一時的なものである場合も、トラブルシューティングが必要な場合もあります。
数分経っても Windows が正常に起動しない場合は、Windows のトラブルシューティング ガイドをご覧ください。
ワークステーションと VM インスタンスとの接続を確認する
Windows VM の接続時に問題が発生した場合は、接続に使用しているワークステーションと接続先の VM のどちらに問題があるのかを特定することをおすすめします。Linux、macOS、または Windows のワークステーションから次のコマンドを実行して、ワークステーションと VM との接続を確認します。
curl -v telnet://DESTINATION_IP_ADDRESS:PORT
次のように置き換えます。
DESTINATION_IP_ADDRESS
: Windows VM の IP アドレスPORT
: Windows VM で RDP を介して接続するように構成されたポート
また、接続テストを使用して、VM インスタンスとほかの Google Cloud プロダクトやサービスとの接続を詳細に検証することもできます。さらに、同じサブネットワーク上に踏み台インスタンスを設定して、VM インスタンス上で RDP 接続の問題を切り分けることも有効な場合があります。
Windows インスタンスのパスワードを確認する
ドメインまたはカスタム イメージのローカル パスワードがまだ設定されていない場合は、Compute Engine の各 Windows インスタンスでローカル パスワードを設定する必要があります。Google Cloud CLI
コマンドライン ツールまたは Google Cloud コンソールを使用して VM に接続し、正しいパスワードが設定されていることを確認します。詳細については、SAC を使用して Windows VM に接続するをご覧ください。
接続に問題がある場合は、パスワードを作成またはリセットしてみてください。詳細については、Windows VM のパスワードの作成をご覧ください。
Windows Server Core を使用しているかどうかを確認する
RDP を使用して接続する際に、空白の背景にコマンド プロンプト ウィンドウが表示される場合は、Windows Server Core を使用している可能性があります。これを確認するには、以下のコマンドを実行します。
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallationType
出力の Server Core
は、Windows Core エディションを使用していることを示します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion InstallationType REG_SZ Server Core
ワークロードにグラフィカル ユーザー インターフェースが必要な場合は、Server Core ではなくデスクトップ エクスペリエンスを含む Windows インスタンスの作成をご検討ください。あるいは、Microsoft のドキュメントで Windows Core Server の管理についてご確認ください。
VPC ファイアウォール ルールを確認する
Compute Engine は RDP トラフィックを許可するファイアウォール ルールを設定して新規プロジェクトを自動的にプロビジョニングします。既存のプロジェクトがある場合や構成を変更した場合は、RDP を許可するデフォルトのファイアウォール ルールが設定されていない可能性があります。対象のインスタンスを含むネットワークに RDP トラフィックを接続できるようにルールが設定されていることを確認してください。
プロジェクトに default-allow-rdp ファイアウォール ルールが存在するかどうかを確認するには、[ファイアウォール ルール] ページを参照するか、次の gcloud CLI コマンドを実行します。
gcloud compute firewall-rules list
ルールが存在しない場合、新たに作成するには次のコマンドを使用します。
gcloud compute firewall-rules create allow-rdp --allow tcp:3389
外部 IP アドレスを検証する
対象のインスタンスへの接続に正しい外部 IP アドレスを使用していることを確認してください。インスタンスの IP を表示するには、[VM インスタンス] ページを参照するか、以下の gcloud CLI コマンドを使用します。
gcloud compute instances list
Windows リモート デスクトップ サービス(RDS)を使用する
インスタンスに Windows リモート デスクトップ サービス(旧称ターミナル サービス)がインストールされている場合、クライアント アクセス ライセンス(CAL)の条件が適用されます。これらの CAL では、次のいずれかの条件が満たされると RDP 接続が失敗します。
- 使用可能なすべてのライセンスを使い切っている
- ライセンスはインストールされているが、正しく設定または有効化されていない
- RDS の 180 日の試用期間が終了した
有効なライセンスが不足している可能性がある場合は、次のようなメッセージが表示されます。
- ライセンスを提供できるリモート デスクトップ ライセンス サーバーがないため、このリモート セッションは切断されました。
- ターミナル サーバーのライセンスに関連するエラーが発生したため、リモート セッションが切断されました。
- このパソコンで使用できるリモート デスクトップ クライアント アクセス ライセンスがないため、リモート セッションが切断されました。
RDP 接続が失敗した場合、管理スイッチを使用して、管理を目的としてインスタンスに接続できます。これは、ネイティブのリモート デスクトップ接続クライアントを使用して、Windows マシンで実行できます。
%SystemRoot%\System32\mstsc.exe /admin
オンデマンドの Windows Server と SQL Server イメージには、管理用の 2 つの同時リモート デスクトップ セッションが含まれています。
RDP 接続の問題を解決するには、インスタンスの新しい RDS ライセンスを購入します。CAL の詳細については、Microsoft のドキュメントをご覧ください。または、リモート デスクトップ サービスが必要ない場合は、サービスをアンインストールし、通常の RDP 接続を使用します。
OS レベルの構成とリソースを検証する
インスタンスのゲスト環境と構成が正しい場合は、インスタンスのオペレーティング システムが正しく構成されていない可能性があります。また、十分なリソースがないと、RDP 接続の確立に失敗する可能性もあります。OS レベルの構成を検証するには、Windows SAC に接続して以下を確認します。
VM に十分なリソースがあることを確認する
CPU、メモリ、ディスク使用量、使用可能なディスク容量が上限に達していないことを確認します。このデータは、Google Cloud コンソールでオブザーバビリティ指標を表示して調べることができます。一部の指標は、Ops エージェントがインストールされている VM でのみ使用できます。また、Ops エージェントがインストールされていない場合は、SAC に接続して次のコマンドを使用します。
CPU 使用率、メモリ使用量、ディスク使用量、ディスク容量
- CPU 使用率
typeperf "\Processor(_Total)\% Processor Time" -sc 5
- メモリ使用率
typeperf "\Memory\% Committed Bytes In Use" -sc 5
- ディスク使用量
typeperf "\LogicalDisk(*)\% Idle Time" -sc 5
- ディスク容量
fsutil volume diskfree C:
次に、RDP 接続の推奨リソース使用量を示します。ただし、これらはあくまで推定であり、インスタンスによって異なる場合があります。
- CPU: 80% 未満
- メモリ: 80% 未満
- ディスク空き容量: 20% 超
- ディスクのアイドル状態: 50% 超
提案された見積もりのいずれかが上限に達している場合は、VM インスタンスのそのリソースを変更できます。VM のプロパティを編集するには、VM インスタンスのマシンタイプを編集する方法と永続ディスクのサイズを増やす方法をご覧ください。
OS の構成を確認する
SAC を介してインスタンスに接続し、次のコマンドを実行して、インスタンスが接続を受け入れていることを確認します。
イーサネット アダプターが有効になっていることを確認します。
- コマンド:
netsh interface show interface
- 問題がない場合: Ethernet とラベルされているインターフェース名で、管理者の状態が有効になっている。
- 問題がある場合: Ethernet というラベルのついたインターフェース名で、管理者の状態が無効になっている。
- 解決策: イーサネット アダプターを有効にします。
netsh interface set interface Ethernet admin=enabled
- コマンド:
インスタンスに有効な IP 構成があることを確認します。
- コマンド:
ipconfig /all
- 問題がない場合: イーサネット アダプターの Ethernet に、インスタンスが割り当てられているサブネットの IPv4 アドレスが表示される。
- 問題がある場合: IPv4 アドレスがない、または Google Cloud コンソールに表示されるアドレスと一致しない。
- 解決策: 次の手順に進みます。
- コマンド:
インスタンスで DHCP が有効になっていることを確認します。
- コマンド:
netsh interface ipv4 show addresses
- 問題がない場合: [Ethernet] の下の出力に、[DHCP Enabled: Yes] と表示されます。
- 問題がある場合: [Ethernet] の下の出力に、[DHCP Enabled: No] と表示されます。
- 解決策: イーサネット アダプターで DHCP を有効にします。
netsh interface ipv4 set address Ethernet dhcp
- コマンド:
「リモート デスクトップ サービス」が実行されていることを確認する場合:
- コマンド:
net start | find "Remote Desktop Services"
- 問題がない場合: Remote Desktop Service
- 問題がある場合: (リモート デスクトップ サービスが出力に含まれていない)
- 解決策: リモート デスクトップ サービスを開始します。
net start "Remote Desktop Services"
- コマンド:
リモート接続が有効になっているか確認する場合:
- コマンド:
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
- 問題がない場合: fDenyTSConnections REG_DWORD 0x0
- 問題がある場合: fDenyTSConnections REG_DWORD 0x1
- 解決策: レジストリでリモート デスクトップ接続を有効にします。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /f /v fDenyTSConnections /t REG_DWORD /d 0
- コマンド:
Windows ファイアウォールでリモート デスクトップ接続が有効になっていることを確認する場合:
- コマンド:
netsh advfirewall firewall show rule name="Remote Desktop -User Mode (TCP-In)"
問題がない場合: Enabled:Yes, Direction: In, Profiles: Public, Grouping: Remote Desktop, LocalIP: Any, RemoteIP: Any, Protocol:TCP, LocalPort: 3389, RemotePort: Any, Edge traversal: No, Action: Allow
問題がある場合: (enabled = No といった予期しない結果)
解決策: Windows ファイアウォール内で、デフォルトの「リモート デスクトップ」ファイアウォール ルールを有効にします。
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes
- コマンド:
リモート インスタンスで RDP 接続用に構成されたポート番号を確認する場合:
- コマンド:
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
- 問題がない場合: PortNumber REG_DWORD [PORT NUMBER]
- 問題がある場合: (予期しないポート番号)
解決策: RDP に必要なレジストリでポート番号を構成します。
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /f /v PortNumber /t REG_DWORD /d [PORT NUMBER]
- コマンド:
別のアプリケーションが同じポートを使用しようとしていないことを確認します。
- コマンド:
netstat -ano | find "3389"
- 問題がない場合: ステータスが Listening の割り当てられた RDP ポートのエントリを探します。一致するサービスは、次のコマンドを使用して、プロセス識別子(PID)から見つけることができます。
ここで、PID は前のコマンドで取得した識別子です。出力では Termservice のみが返されます。tasklist /svc | find "
" - 問題がある場合: Termservice 以外が割り当て済みのポートを使用しています。
- 解決策: 別のポート番号を使用するようにアプリケーションまたはサービスを構成します。
- コマンド:
接続されたユーザー アカウントにリモート接続の権限があることを確認します。
- コマンド:
net localgroup "Remote Desktop Users"
- 問題がない場合: (結果リストにターゲットのローカル / ドメイン ユーザー名がある)
- 問題がある場合: (ターゲットのローカル / ドメイン ユーザー名がない)
解決策: ドメイン内のユーザーに「リモート デスクトップ ユーザー」ルールを追加します。
net localgroup "Remote Desktop Users" /add [DOMAIN\USERNAME]
ドメインの指定は、別のドメインに参加しているシステム上のユーザー アカウントの場合にのみ必要です。ローカル アカウントではユーザー名のみを指定します。
- コマンド:
クライアント / サーバーのセキュリティ ネゴシエーションがデフォルト値に設定されていることを確認します。
- コマンド:
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer
- 問題がない場合: SecurityLayer REG_DWORD 0x1
- 問題がある場合: SecurityLayer REG_DWORD 0x0(または 0x2)
- 解決策: レジストリにセキュリティ ネゴシエーションの値を設定します。
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 1 /f
- コマンド:
インスタンスが Active Directory ドメインに接続されていても、接続を確立できなかった場合、インスタンスにアクセスしようとすると、次のエラーが発生することがあります。
The remote computer that you are trying to connect to requires Network Level Authentication (NLA), but your Windows domain controller cannot be contacted to perform NLA.
ユーザーのネットワーク レベル認証(NLA)がデフォルト値に設定されていることを確認します。
- コマンド:
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication
- 問題がない場合: UserAuthentication REG_DWORD 0x0
- 問題がある場合: UserAuthentication REG_DWORD 0x1
- 解決策: レジストリでネットワーク レベル認証の値を設定します。
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
- コマンド:
MTU サイズがネットワーク MTU 以下であることを確認します。
- コマンド:
netsh interface ipv4 show subinterfaces
- 問題がない場合: MTU に続く数字が VPC ネットワークの MTU と一致する。
- 問題がある場合: MTU に続く数字が VPC ネットワークの MTU より大きい。
解決策: インターフェースの MTU を VPC ネットワークの MTU に設定します。
netsh interface ipv4 set subinterface Ethernet mtu=MTU_OF_VPC_NETWORK
不適切な MTU サイズについては、パケットの断片化のドキュメントをご覧ください。
- コマンド:
RDP を使用して VM に接続しようとしたときに、VM にキーボード レイアウト画面が表示される場合は、Windows SAC に接続して言語を選択する必要があります。言語を選択するには、次の手順を行います。
- SAC に接続します。
- 「
powershell
」と入力して Powershell を開きます。 正しい言語文字列を取得します。
Get-WinUserLanguageList
目的のレイアウトを設定します。
LANGUAGE_TAG
は、必要な言語レイアウト(en-US
など)に置き換えます。Set-WinUserLanguageList -LanguageList LANGUAGE_TAG -force
インスタンスを再起動します。
shutdown -r -t 0
ログオン画面で RDP エラーとして
you need the right to sign in through Remote Desktop Services
またはyou must be granted the Allow log on through Terminal Services right
が表示される場合、リモート デスクトップ ユーザーまたは管理者グループは [リモート デスクトップ サービスを介したログオンを許可する] または SeRemoteInteractiveLogonRight のローカル コンピュータ ポリシーの設定から削除されています。証明書の認証をブロックしている権限がないことを確認します。
- コマンド:
icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys"
- 問題がない場合: 出力は「Everyone:(R,W) BUILTIN\Administrators:(F)」のようになります
- 問題がある場合: 出力が Everyone:(R,W) BUILTIN\Administrators:(F) と一致しません
- コマンド:
使用しているウイルス対策やエンドポイント保護のクライアント設定で、構成されたポート番号とサービスが許容されるかどうかを確認します。
セッション タイムアウトの上限を確認する
RDP 接続を確立できても、しばらくしてタイマーの期限切れに関するメッセージが表示されて接続が切断される場合は、次の値が想定どおりであることを確認します。
レジストリパス: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
レジストリキー:
MaxDisconnectionTime
MaxIdleTime
MaxConnectionTime
MaxDisconnectionTime
RemoteAppLogoffTimeLimit
これらの値はミリ秒単位で設定されます。これらのキーがレジストリにない場合、VM インスタンスにセッションの制限はありません。これらのキーがレジストリに存在していても、値が 0
に設定されている場合、セッションは期限切れになりません。
Windows の起動に関するトラブルシューティング
前述のトラブルシューティング手順で RDP 接続の問題が解決しない場合、Windows インスタンスが正常に起動または実行されていない可能性があります。この場合、Windows のトラブルシューティングに関するガイドをご覧ください。
次のステップ
Windows オペレーティング システムのトラブルシューティングの詳細を確認する。
VM から診断情報を収集する方法を学習する。
シリアル コンソールを使用したトラブルシューティングについて学習する。
VM からスクリーンショットをキャプチャする方法を学習する。