RDP のトラブルシューティング


状況によっては、RDP を使用して Compute Engine Windows 仮想マシン(VM)インスタンスに接続できないことがあります。この原因として、構成エラー、ネットワーク エラー、ブートプロセスの未完了などが考えられます。

このドキュメントでは、RDP に関する一般的な問題をトラブルシューティングして解決するヒントと方法を紹介します。

VM がオンラインであり使用準備ができていることを確認する

VM の起動が完了したら(数分かかることがあります)、以下のいずれかの方法を使用して状態を確認します。

シリアルポート 1

シリアルポート 1 は、システムとアプリケーションのアクティビティをロギングするために使用します。出力を表示して、VM の起動が完了したことと、サービスが正常に起動したかどうかを確認します。

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. ログを表示する VM の名前をクリックします。[VM インスタンスの詳細] ページが開きます。

  3. [ログ] の下の [シリアルポート 1] を選択します。

  4. シリアルポート 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 を使用して、システム サービスが正常に起動したかどうかを確認できます。

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. ログを表示する VM の名前をクリックします。[VM インスタンスの詳細] ページが開きます。

  3. [ログ] の下の [その他] を展開し、[シリアルポート 2(コンソール)] をクリックします。

  4. シリアルポート 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 の状態を視覚的に表します。

  1. VM のスクリーンショットをキャプチャするには、その前に VM の仮想ディスプレイを有効にする必要があります。仮想ディスプレイをまだ有効にしていない場合は、仮想ディスプレイを有効にするをご覧ください。

  2. スクリーンショットをキャプチャします。詳細については、VM からスクリーンショットをキャプチャするをご覧ください。

  3. スクリーンショットを調べて、インスタンスが準備できていることを確認します。

スクリーンショットを以下に照らし、現在の状態を確認します。

  • 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 に接続し、正しいパスワードが設定されていることを確認します。詳細については、Windows SAC への接続をご覧ください。

接続に問題がある場合は、パスワードを作成またはリセットしてみてください。詳細については、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 を介してインスタンスに接続し、次のコマンドを実行して、インスタンスが接続を受け入れていることを確認します。

  1. イーサネット アダプターが有効になっていることを確認します。

    • コマンド:
      netsh interface show interface
    • 問題がない場合: Ethernet とラベルされているインターフェース名で、管理者の状態が有効になっている。
    • 問題がある場合: Ethernet とラベルされているインターフェース名で、管理者の状態が無効になっている。
    • 解決策: イーサネット アダプターを有効にします。
      netsh interface set interface Ethernet admin=enabled
  2. インスタンスに有効な IP 構成があることを確認します。

    • コマンド:
      ipconfig /all
    • 問題がない場合: イーサネット アダプターの Ethernet に、インスタンスが割り当てられているサブネットの IPv4 アドレスが表示される。
    • 問題がある場合: IPv4 アドレスがない、または Google Cloud コンソールに表示されるアドレスと一致しない。
    • 解決策: 次の手順に進みます。
  3. インスタンスで DHCP が有効になっていることを確認します。

    • コマンド:
      netsh interface ipv4 show addresses
    • 問題がない場合: [Ethernet] の下の出力に、[DHCP Enabled: Yes] と表示されます。
    • 問題がある場合: [Ethernet] の下の出力に、[DHCP Enabled: No] と表示されます。
    • 解決策: イーサネット アダプターで DHCP を有効にします。
      netsh interface ipv4 set address Ethernet dhcp
  4. 「リモート デスクトップ サービス」が実行されていることを確認する場合:

    • コマンド:
      net start | find "Remote Desktop Services"
    • 問題がない場合: Remote Desktop Service
    • 問題がある場合: (リモート デスクトップ サービスが出力に含まれていない)
    • 解決策: リモート デスクトップ サービスを開始します。
      net start "Remote Desktop Services"
  5. リモート接続が有効になっているか確認する場合:

    • コマンド:
      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
  6. 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

  7. リモート インスタンスで 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]

  8. 別のアプリケーションが同じポートを使用しようとしていないことを確認します。

    • コマンド:
      netstat -ano | find "3389"
    • 問題がない場合: ステータスが Listening の割り当てられた RDP ポートのエントリを探します。一致するサービスは、次のコマンドを使用して、プロセス識別子(PID)から見つけることができます。
      tasklist /svc | find ""
      ここで、PID は前のコマンドで取得した識別子です。出力では Termservice のみが返されます。
    • 問題がある場合: Termservice 以外が割り当て済みのポートを使用しています。
    • 解決策: 別のポート番号を使用するようにアプリケーションまたはサービスを構成します。
  9. 接続されたユーザー アカウントにリモート接続の権限があることを確認します。

    • コマンド:
      net localgroup "Remote Desktop Users"
    • 問題がない場合: (結果リストにターゲットのローカル / ドメイン ユーザー名がある)
    • 問題がある場合: (ターゲットのローカル / ドメイン ユーザー名がない)
    • 解決策: ドメイン内のユーザーに「リモート デスクトップ ユーザー」ルールを追加します。

      net localgroup "Remote Desktop Users" /add [DOMAIN\USERNAME]

      ドメインの指定は、別のドメインに参加しているシステム上のユーザー アカウントの場合にのみ必要です。ローカル アカウントではユーザー名のみを指定します。

  10. クライアント / サーバーのセキュリティ ネゴシエーションがデフォルト値に設定されていることを確認します。

    • コマンド:
      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
  11. インスタンスが 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
  12. 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 サイズについては、パケットの断片化のドキュメントをご覧ください。

  13. RDP を使用して VM に接続しようとしたときに、VM にキーボード レイアウト画面が表示される場合は、Windows SAC に接続して言語を選択する必要があります。言語を選択するには、次の手順を行います。

    1. SAC に接続します。
    2. powershell」と入力して Powershell を開きます。
    3. 正しい言語文字列を取得します。

      Get-WinUserLanguageList
    4. 目的のレイアウトを設定します。LANGUAGE_TAG は、必要な言語レイアウト(en-US など)に置き換えます。

      Set-WinUserLanguageList -LanguageList LANGUAGE_TAG -force
    5. インスタンスを再起動します。

      shutdown -r -t 0
  14. ログオン画面で 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 のローカル コンピュータ ポリシーの設定から削除されています。

  15. 証明書の認証をブロックしている権限がないことを確認します。

    • コマンド:
      icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys"
    • 問題がない場合: 出力は「Everyone:(R,W) BUILTIN\Administrators:(F)」のようになります
    • 問題がある場合: 出力が Everyone:(R,W) BUILTIN\Administrators:(F) と一致しません
  16. 使用しているウイルス対策やエンドポイント保護のクライアント設定で、構成されたポート番号とサービスが許容されるかどうかを確認します。

セッション タイムアウトの上限を確認する

RDP 接続を確立できても、しばらくしてタイマーの期限切れに関するメッセージが表示されて接続が切断される場合は、次の値が想定どおりであることを確認します。

レジストリパス: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services

レジストリキー:

  • MaxDisconnectionTime
  • MaxIdleTime
  • MaxConnectionTime
  • MaxDisconnectionTime
  • RemoteAppLogoffTimeLimit

これらの値はミリ秒単位で設定されます。これらのキーがレジストリにない場合、VM インスタンスにセッションの制限はありません。これらのキーがレジストリに存在していても、値が 0 に設定されている場合、セッションは期限切れになりません。

Windows の起動に関するトラブルシューティング

前述のトラブルシューティング手順で RDP 接続の問題が解決しない場合、Windows インスタンスが正常に起動または実行されていない可能性があります。この場合、Windows のトラブルシューティングに関するガイドをご覧ください。

次のステップ