次の方法で共有


KDNET ネットワーク カーネルのデバッグを手動で設定する

この記事では、Windows 用デバッグ ツールを使用して KDNET ネットワーク カーネル デバッグを手動で設定する方法について説明します。 ネットワーク デバッグを有効にするには、ホスト コンピューターとターゲット コンピューターの両方を構成します。

Important

手動ネットワーク デバッグのセットアップは複雑で、エラーが発生しやすくなります。 ほとんどのシナリオでは、代わりに自動セットアップを使用します。KDNET ネットワーク カーネルのデバッグを自動的に設定します。 KDNET ユーティリティを強くお勧めします。

学習する内容:

  • ネットワーク デバッグ用にホスト コンピューターとターゲット コンピューターを構成する方法
  • 接続のデバッグを確立してトラブルシューティングする方法
  • デバッグに IPv6 と IPv4 を使用する場合

デバッガを実行するコンピューターは ホスト コンピューターと呼ばれ、デバッグ対象のコンピューターは ターゲット コンピューターと呼ばれます。 ホスト コンピューターは Windows 7 以降を実行し、ターゲット コンピューターは Windows 8 以降を実行する必要があります。

ネットワーク経由でのデバッグには、他の種類の接続に対するデバッグと比較して、次のような利点があります。

  • ホスト コンピューターとターゲット コンピューターは、ローカル ネットワーク上の任意の場所に配置できます。
  • 1 台のホスト コンピューターから多数のターゲット コンピューターを簡単にデバッグできます。
  • 2 台のコンピューターがある場合、両方にイーサネット アダプターがある可能性があります。 両方にシリアル ポートまたは 1394 ポートがある可能性は低くなります。
  • ネットワーク デバッグは、シリアル ポート デバッグよりも高速です。

サポートされているネットワーク アダプター

ホスト コンピューター: 任意のネットワーク アダプターが機能します。

ターゲット コンピューター: サポートされているネットワーク アダプターを使用する必要があります。 Windows のバージョンを確認します。

Windows 用デバッグ ツールをインストールする

Windows 用デバッグ ツールがホスト システムにインストールされていることを確認します。 デバッガー ツールのダウンロードとインストールの詳細については、「 Windows 用デバッグ ツール」を参照してください。

ホスト コンピューターの IP アドレスを確認する

次のいずれかの手順を使用して、ホスト コンピューターの IP アドレスを確認します。

  1. ホスト コンピューターでコマンド プロンプトを開き、次のコマンドを入力します。

    ipconfig
    

    デバッグに使用するネットワーク アダプターの IPv4 アドレスを書き留めておきます。

  2. ターゲット コンピューターでコマンド プロンプトを開き、次のコマンドを入力します。 ここで、YourIPAddress はホスト コンピューターの IP アドレスです。

    ping -4 <YourIPAddress>
    

ネットワーク デバッグ用のポートを選択する

推奨されるポート範囲: 50000 から 50039

49152 から 65535 の任意のポートを使用できますが、推奨される範囲が最適な互換性を提供します。 デバッガーはこのポートを排他的に使用するため、他のアプリケーションで使用されていないことを確認します。

重要な考慮事項

  • 企業ファイアウォールでは、ポート範囲が制限される場合があります。 ネットワーク管理者に問い合わせてください。
  • 各ターゲット コンピューターには、一意のポートが必要です (例: 50000、50001、50002)。
  • 異なるホスト コンピューターで同じポート範囲を再利用できます。

会社のネットワーク ポリシーによって、使用可能なポートが制限される場合があります。 接続の問題が発生した場合は、ネットワーク管理者に問い合わせてください。

複数のターゲット コンピューターを 1 台のホスト コンピューターに接続する場合、各接続には一意のポート番号が必要です。 たとえば、100 台のターゲット コンピューターを 1 台のホスト コンピューターに接続する場合、ポート 50000 を最初の接続に割り当て、ポート 50001 を 2 つ目の接続に割り当てることができます。

別のホスト コンピューターは、同じ範囲のポート (50000 ~ 50099) を使用して、別の 100 台のターゲット コンピューターに接続できます。

ターゲット コンピューターを設定する

  1. ターゲット コンピューターにサポートされているネットワーク アダプターがあることを確認します。 詳細については、以下を参照してください。

  2. 適切なネットワーク ケーブルを使用して、サポートされているアダプターをネットワーク ハブまたはスイッチに接続します。

Important

BCDEdit を使用してブート情報を変更する前に、テスト PC で BitLocker やセキュア ブートなどの Windows セキュリティ機能を一時的に中断することが必要になる場合があります。 テストが完了したら、これらのセキュリティ機能を再度有効にし、セキュリティ機能が無効になっている場合はテスト PC を適切に管理します。

  1. 管理者特権でのコマンド プロンプトで、次のコマンドを入力します。 w.x.y.z をホスト コンピューターの IP アドレスに置き換え、n を選択したポート番号に置き換えます。

    bcdedit /debug on
    bcdedit /dbgsettings net hostip:w.x.y.z port:n
    

    例えば次が挙げられます。

    bcdedit /debug on
    bcdedit /dbgsettings net hostip:192.168.1.100 port:50000
    
  2. BCDEdit は、自動的に生成されたキーを表示します。 キーをコピーし、USB フラッシュ ドライブなどのリムーバブル記憶装置に保存します。 ホスト コンピューターでデバッグ セッションを開始するときに、キーが必要です。

  3. デバイス マネージャーを使用して、デバッグに使用するアダプターの PCI バス、デバイス、および関数番号を確認します。 これらの値は、デバイス マネージャーの [全般] タブの [場所] に表示されます。次に、管理者特権のコマンド プロンプトで、次のコマンドを入力します。ここで、bdf は、アダプターのバス番号、デバイス番号、および関数番号です。

    bcdedit /set "{dbgsettings}" busparams b.d.f
    
  4. カーネル デバッガーがアタッチされた後、ターゲット PC が再起動されます。

ターゲット コンピューターに Hyper-V の役割をインストールする場合は、「 仮想マシン ホストのネットワーク デバッグの設定」を参照してください。

注意事項

ターゲット コンピューターがドッキング ステーションにあり、ドッキング ステーションの一部であるネットワーク アダプターのネットワーク デバッグを有効にする場合は、ドッキング ステーションからコンピューターを削除しないでください。 ターゲット コンピューターをドッキング ステーションから削除する必要がある場合は、まずカーネル デバッグを無効にします。 ターゲット コンピューターでカーネル デバッグを無効にするには、管理者としてコマンド プロンプトを開き、コマンド bcdedit /debug offを入力します。 ターゲット コンピューターを再起動します。

デバッグ セッションを開始する

開始する前に、次の手順を実行します。 ホスト コンピューターのネットワーク アダプターがネットワーク ハブまたはスイッチに接続されていることを確認します。

オプション 1: WinDbg (GUI) を使用する

  1. ホスト コンピューターで WinDbg を開きます。
  2. [ファイル>カーネル デバッグ] を選択します。
  3. [ ネット ] タブを開きます。
  4. ポート番号とキーを入力します。
  5. [OK] を選択.

オプション 2: WinDbg を使用する (コマンド ライン)

WinDbg とのセッションを開始するには、コマンド プロンプトを開き、次のコマンドを入力します。ここで、 n はポート番号、 MyKey はターゲット コンピューターのセットアップ時に BCDEdit によって自動的に生成されるキーです。

windbg -k net:port=<n>,key=<MyKey>

WinDbg がファイアウォールを介してポートにアクセスすることを許可するように求められた場合は、WinDbg が 3 種類のネットワークすべてに 対してポートにアクセスすることを許可します。

KD を使用する

ホスト コンピューターで、コマンド プロンプトを開きます。 次のコマンドを入力します。 ここで、n はポート番号、 MyKey はターゲット コンピューターの設定時に BCDEdit によって自動的に生成されるキーです。

kd -k net:port=<n>,key=<MyKey>

ファイアウォールを介して WinDbg がポートにアクセスすることを許可するように求められた場合は、WinDbg が 3 つの 異なるネットワークの種類すべてに対してポートにアクセスすることを許可します。

ターゲット PC を再起動する

デバッガーが接続して待機したら、ターゲット コンピューターを再起動します。 PC を再起動する方法の 1 つは、管理者のコマンド プロンプトから次のコマンドを使用することです。

shutdown -r -t 0

ターゲットが再起動すると、ホスト OS のデバッガーが接続します。

ホスト上のターゲットに接続した後、デバッガーで [中断] を選択すると、デバッグを開始できます。

ファイアウォール経由でデバッガーを許可する

最初にネットワーク デバッグ接続を確立しようとすると、ファイアウォール経由でデバッグ アプリケーション (WinDbg または KD) へのアクセスを許可するように求められる場合があります。 Windows のクライアント バージョンではプロンプトが表示されますが、サーバー バージョンの Windows ではプロンプトは表示されません。 ドメイン、プライベート、パブリックの 3 種類のネットワークの チェック ボックスをすべてオンにして、プロンプトに応答します。

プロンプトが表示されない場合、またはプロンプトが表示されたときにチェック ボックスをオンにしなかった場合は、コントロール パネルを使用して、デバッガーが実行されているホスト PC 上のファイアウォール経由のアクセスを許可します。 [システムとセキュリティ] >コントロール パネルを開き、[Windows ファイアウォール経由でアプリを許可する] を選択します。

  • (WinDbg)アプリケーションの一覧で、 WinDbg エンジン プロセス (TCP) (すべて) を見つけます。

  • (クラシック WinDbg)アプリケーションの一覧で、 Windows GUI シンボリック デバッガーWindows カーネル デバッガーを見つけます。

これらのアプリケーションがファイアウォールを通過することを許可するには、チェック ボックスを使用します。 デバッグ アプリケーション (WinDbg または KD) を再起動します。

暗号化キー

ターゲット コンピューターをセキュリティで保護するには、ホストコンピューターとターゲット コンピューターの間を移動するパケットを暗号化する必要があります。 自動的に生成された暗号化キーを使用します (ターゲット コンピューターを構成するときに BCDEdit によって提供されます)。 自動的に生成される暗号化キーの安全性が高く、特定のターゲットへの接続を確立するために使用する一意の値が提供されます。

ネットワーク デバッグでは、ピリオドで区切られた 4 つの 64 ビット値 (base 36) として指定された 256 ビット キーを使用します。 各 64 ビット値は、最大 13 文字を使用して指定されます。 有効な文字は 、a ~ z の文字と 0 から 9 の数字です。 特殊文字は使用できません。

独自のキーを指定するには、ターゲット コンピューターで管理者特権のコマンド プロンプトを開きます。 次のコマンドを入力します。ここで、 w.x.y.z はホスト コンピューターの IP アドレス、 n はポート番号、 キー はキーです。

bcdedit /dbgsettings net hostip:w.x.y.z port:n key:Key

dbgsettings を変更するたびに、ターゲット コンピューターを再起動する必要があります。

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

ファイアウォールを介してデバッグ アプリケーションを許可する

最初にネットワーク デバッグ接続を確立しようとすると、ファイアウォール経由でデバッグ アプリケーション (WinDbg または KD) へのアクセスを許可するように求められる場合があります。 Windows のクライアント バージョンではプロンプトが表示されますが、サーバー バージョンの Windows ではプロンプトは表示されません。 ドメイン、プライベート、パブリックの 3 種類のネットワークの チェック ボックスをすべてオンにして、プロンプトに応答します。

プロンプトが表示されない場合、またはプロンプトが表示されたときにチェック ボックスをオンにしなかった場合は、コントロール パネルを使用してファイアウォール経由のアクセスを許可する必要があります。 [システムとセキュリティ] >コントロール パネルを開き、[Windows ファイアウォール経由でアプリを許可する] を選択します。

  • (WinDbg)アプリケーションの一覧で、 WinDbg エンジン プロセス (TCP) (すべて) を見つけます。

  • (WinDbg (クラシック))アプリケーションの一覧で、 Windows GUI シンボリック デバッガーWindows カーネル デバッガーを見つけます。

これらのアプリケーションがファイアウォールを通過することを許可するには、チェック ボックスを使用します。 下にスクロールし、[ OK] を 選択してファイアウォールの変更を保存します。 デバッガーを再起動してください。

ポート番号は、ネットワーク ポリシーで許可されている範囲内である必要があります

会社のネットワーク ポリシーによって、ネットワーク デバッグに使用できるポート番号の範囲が制限される場合があります。 会社のポリシーでネットワーク デバッグ用のポートの範囲が制限されているかどうかを確認するには、ネットワーク管理者に問い合わせてください。 ターゲット コンピューターで、管理者としてコマンド プロンプトを開き、コマンド bcdedit /dbgsettingsを入力します。 出力は次の例のようになります。

C:\> bcdedit /dbgsettings
key                     XXXXXX.XXXXX.XXXXX.XXXXX
debugtype               NET
hostip                  169.168.1.1
port                    50085
dhcp                    Yes
The operation completed successfully.

上記の出力では、ポートの値は 50085 です。 ポート値がネットワーク管理者が許可する範囲外の場合は、次のコマンドを入力します。 値 w.x.y.z はホスト コンピューターの IP アドレスであり、YourDebugPort は許容範囲内のポート番号です。

bcdedit /dbgsettings net hostip:w.x.y.z port:YourDebugPort

ターゲット コンピューターのデバッガー設定を変更した後、新しいポート設定でホスト コンピューター上のデバッガーを再実行し、ターゲット コンピューターを再起動します。

ping を使用して接続をテストする

デバッガーが接続しない場合は、ターゲット PC の ping コマンドを使用して接続を確認します。

C:\>Ping <HostComputerIPAddress>

ファイアウォールによって ping 要求がブロックされる可能性があるため、ホスト コンピューターがネットワーク上で検出可能に構成されていない場合、この方法は機能しない可能性があります。 ファイアウォールで ping 要求がブロックされている場合、ホストに ping を実行しても応答は返されません。

デバッガーがターゲット コンピューターの IP アドレスを取得する方法

ターゲット コンピューター上の KDNET は、動的ホスト構成プロトコル (DHCP) を使用して、デバッグに使用されるネットワーク アダプターのルーティング可能な IP アドレスを取得しようとします。 KDNET が DHCP 割り当てアドレスを取得した場合、ネットワーク上の任意の場所にあるホスト コンピューターは、ターゲット コンピューターをデバッグできます。 KDNET が DHCP 割り当てアドレスを取得できない場合は、自動プライベート IP アドレス指定 (APIPA) を使用してローカル リンク IP アドレスを取得します。 ローカル リンク IP アドレスはルーティングできないため、ホストとターゲットはローカル リンク IP アドレスを使用してルーター経由で通信することはできません。 その場合、ホストコンピューターとターゲット コンピューターを同じネットワーク ハブまたはスイッチに接続すると、ネットワーク デバッグが機能します。

PCI ベースの NIC を使用して物理マシンで KDNET を設定する場合は、常にバスパラメーターを指定します

PCI または PCIe ベースの NIC を使用して物理マシン上に KDNET を設定する場合は、KDNET に使用する NIC のバスパラメーターを常に指定します。 バス パラメーターを指定するには、デバイス マネージャーを開き、デバッグに使用するネットワーク アダプターを見つけます。 ネットワーク アダプターのプロパティ ページを開き、[全般] タブの [場所] に表示されるバス番号、デバイス番号、および関数番号をメモします。管理者特権のコマンド プロンプトで、次のコマンドを入力します。ここで、bdf は、バス、デバイス、および関数番号を 10 進形式で表します。

bcdedit /set "{dbgsettings}" busparams b.d.f

デバッガーがホスト コンピューターで実行されていて、接続を待機している場合は、次のコマンドを使用してターゲット コンピューターを再起動します。

shutdown -r -t 0

BCDEdit エントリを手動で削除する

通常、BCDEdit エントリを手動で削除する必要はありません。 ただし、この手順を使用して、異常な状況のトラブルシューティングを行うことができます。

kdnet ユーティリティを使用するときに、エントリを手動で削除する必要はありません。 詳細については、「 KDNET ネットワーク カーネルのデバッグを自動的に設定する」を参照してください。

bcdedit –deletevalueを使用する場合は、有効な bcd 要素名を指定する必要があります。 詳細については、「 BCDEdit /deletevalue」を参照してください。

bcdedit エントリを手動で削除するには、次の手順を実行します。

  1. ターゲット コンピューターで、管理者としてコマンド プロンプトを開きます。

  2. たとえば、次のコマンドを入力して、ホスト IP アドレスの BCDEdit デバッグ エントリを削除します。

    bcdedit -deletevalue {dbgsettings} hostip
    

hostip を削除するときは、デバッガーのコマンド ラインで target= を指定する必要があります。

  1. 別の例として、次のコマンドを使用してポート エントリを削除します。

    bcdedit -deletevalue {dbgsettings} port
    

ポート エントリを削除すると、KDNET は既定の ICANN 登録済みデバッガー ポート 5364 を使用します。

Hyper-V を設定する

ターゲット コンピューターに Hyper-V の役割をインストールする場合は、「 仮想マシン ホストのネットワーク デバッグの設定」を参照してください。

Hyper-V 仮想マシン (VM) のデバッグについては、「 仮想マシンのネットワーク デバッグの設定 - KDNET」を参照してください。

外部ネットワーク接続を使用して VM を実行している Hyper-V ホストで KDNET を有効にする

VM のネットワークが動作を停止する状況が発生することがあります。

  • PC で Hyper-V を有効にし、コンピューター内の物理 NIC を指す外部ネットワーク スイッチを作成し、その外部スイッチをネットワークに使用するように VM を構成します。

  • 外部ネットワーク スイッチが指すのと同じ物理 NIC を使用して、Hyper-V ホスト OS で KDNET を有効にします。 ホストを再起動します。

  • 以前に構成した外部スイッチを使用するすべての VM は、再起動後にネットワーク接続を失います。

この停止は仕様です。 KDNET は、使用するように構成されている NIC を排他的に制御します。 OS では、その NIC のネイティブ NDIS ミニポートが読み込まれません。 外部ネットワーク スイッチは、ネイティブ NDIS ミニポート ドライバーと通信できなくなり、動作を停止します。 この状況を回避するには、次の手順を実行します。

  1. Hyper-V Manager から仮想スイッチ マネージャーを開き、既存の仮想スイッチを選択します。 ドロップダウン メニューから外部ネットワーク NIC を選択し、[仮想スイッチ マネージャー] ダイアログで [OK] を選択して、Microsoft カーネル デバッグ ネットワーク アダプターに変更します。

  2. 仮想スイッチ NIC を更新した後、VM をシャットダウンして再起動します。

KDNET デバッグをオフにする場合は、NIC のネイティブ NDIS ミニポートに外部スイッチを再ポイントする同じ手順に従います。 そうしないと、デバッグが無効になった後にマシンを再起動すると、VM の接続が失われます。

IPv6

Windows バージョン 1809 では、IPv6 のサポートが追加されています。

デバッガーで IPv6 を使用するには、次の手順を実行します。

  1. <debughostname に ping を実行し>出力行からの応答で報告される IPv6 アドレスを書き留めます。 x:y:z:p:d:q:r:nの代わりに、この IPv6 アドレスを使用します。

  2. BCDEdit を使用して、dbgsettings 内の既存の IP アドレス値を削除します。

    bcdedit -deletevalue {dbgsettings} hostip
    
  3. ホストの IPv6 アドレスを設定します。 hostipv6=s:t:u:v:w:x:y:z文字列にスペースを含めることはできません。 <YourPort> は、このターゲット コンピューターに使用するネットワーク ポート番号です。 <YourKey> は 4 部構成のセキュリティ キーです。 <b.d.f> は、KDNET に使用する NIC のバス デバイス関数の場所番号です。

    bcdedit /dbgsettings net hostipv6:s:t:u:v:w:x:y:z port:<YourPort> key:<YourKey> busparams:<b.d.f>
    
  4. このコマンドを入力して、dbgsettings が正しく設定されていることを確認します。

    C:\> bcdedit /dbgsettings
    busparams               0.25.0
    key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    debugtype               NET
    hostipv6                  2001:db8:0:0:ff00:0:42:8329
    port                    50010
    dhcp                    Yes
    The operation completed successfully.
    
  5. ホスト コンピューターで、次のコマンドを使用してデバッガーを起動します。

    Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address> 
    
  6. デバッガーがホスト コンピューターで実行され、接続を待機している場合は、ターゲット コンピューターを再起動します。

  7. デバッガーは、起動時の早い段階でホスト デバッガーに接続します。 接続されたメッセージで報告される IP アドレスは IPv4 アドレスではなく IPv6 アドレスであるため、KDNET で IPv6 接続が使用されていることがわかります。

注記

  • hostipを指定できるすべてのデバッガー bcd 設定には、対応するhostipv6要素があります。 3 つのペアがあります。
IPv4 IPv6 Usage
ホストIP hostipv6 ブートとカーネルのデバッグ用
targethostip ターゲットホストIPv6 (targethostipv6) カーネル デバッグに固有
HypervisorHostIP hypervisorhostipv6 Hyper-V のデバッグ
  • これらの種類のデバッグに hostipv6 スタイル アドレスを設定すると、IPv6 が表示されます。

  • これらの種類のデバッグに hostip スタイル アドレスを設定すると、IPv4 が表示されます。

  • ターゲットは IPv4 または IPv6 のみを実行し、両方を同時に行うわけではありません。 使用される IP プロトコルのバージョンは、ターゲット コンピューターの dbgsettings によって制御されます。 hostip設定した場合、ターゲットは IPv4 を使用します。 hostipv6設定した場合、ターゲットは IPv6 を使用します。

  • ホスト デバッガーは通常、IPv4 または IPv6 の使用を自動的に選択します。 既定では、デバッガーは IPv4 ソケットと IPv6 ソケットの両方でリッスンし、いずれかのソケットでターゲット コンピューターに自動的に接続します。

  • ホスト上のデバッガーで IPv6 を強制的に使用するが、デバッガーでターゲットからの接続をリッスンする場合は、デバッガーのコマンド ラインに target=:: を追加できます。 :: は 0 の IPv6 アドレスです。

  • ホスト上のデバッガーで IPv4 デバッグを強制するが、デバッガーでターゲットからの接続をリッスンする場合は、デバッガーのコマンド ラインに target=0.0.0.0 を追加できます。 0.0.0.0 は 0 の IPv4 アドレスです。

  • デバッガーのコマンド ラインで target= を指定し、コンピューター名を使用すると、デバッガーはそのマシン名を IPv4 アドレスと IPv6 アドレスに変換します。 その後、デバッガーは両方で接続を試みます。

  • デバッガーのコマンド ラインで target= を指定し、IP アドレスを使用すると、IP アドレスに の文字が含まれている場合、デバッガーは IPv6 アドレスであると見なし、その接続に対して IPv6 を強制的に使用します。 IP アドレスに . 文字が含まれている場合、デバッガーは IPv4 アドレスであると見なし、その接続に IPv4 を強制的に使用します。

  • ターゲットで IPv6 を設定し、デバッガーのコマンド ラインで IPv4 を強制的に使用した場合、接続は取得されません。

  • ターゲットで IPv4 を設定し、デバッガーのコマンド ラインで IPv6 を強制的に使用する場合、接続も取得されません。