Condividi tramite


Configurare manualmente il debug del kernel di rete KDNET

Questo articolo illustra come configurare manualmente il debug del kernel di rete KDNET usando gli strumenti di debug per Windows. Configurare sia il computer host che quello di destinazione per abilitare il debug di rete.

Importante

La configurazione del debug di rete manuale è complessa e soggetta a errori. Per la maggior parte degli scenari, usare invece l'installazione automatica:Configurazione automatica del debug automatico del kernel di rete KDNET. È consigliabile usare l'utilità KDNET.

Informazioni ottenute dall'esercitazione:

  • Come configurare computer host e di destinazione per il debug di rete
  • Come stabilire e risolvere i problemi di debug delle connessioni
  • Quando usare IPv6 e IPv4 per il debug

Il computer che esegue il debugger viene chiamato computer host e il computer sottoposto a debug viene chiamato computer di destinazione . Il computer host deve eseguire Windows 7 o versione successiva e il computer di destinazione deve eseguire Windows 8 o versione successiva.

Il debug in una rete presenta i vantaggi seguenti rispetto al debug su altri tipi di connettività.

  • I computer host e di destinazione possono trovarsi in qualsiasi punto della rete locale.
  • È facile eseguire il debug di molti computer di destinazione da un computer host.
  • Dati due computer qualsiasi, è probabile che abbiano entrambi schede Ethernet. È meno probabile che abbiano entrambi porte seriali o porte 1394.
  • Il debug di rete è più veloce rispetto al debug delle porte seriali.

Schede di rete supportate

Host computer: Qualsiasi scheda di rete funziona.

Computer di destinazione: Deve usare una scheda di rete supportata. Controllare la versione di Windows:

Installare gli strumenti di debug per Windows

Verificare che gli strumenti di debug per Windows siano installati nel sistema host. Per informazioni sul download e sull'installazione degli strumenti del debugger, vedere Strumenti di debug per Windows.

Determinare l'indirizzo IP del computer host

Utilizzare una delle procedure seguenti per determinare l'indirizzo IP del computer host.

  1. Nel computer host aprire un prompt dei comandi e immettere il comando seguente:

    ipconfig
    

    Prendere nota dell'indirizzo IPv4 della scheda di rete che si intende usare per il debug.

  2. Nel computer di destinazione aprire un prompt dei comandi e immettere il comando seguente, dove YourIPAddress è l'indirizzo IP del computer host:

    ping -4 <YourIPAddress>
    

Scegliere una porta per il debug di rete

Intervallo di porte consigliato: 50000-50039

È possibile usare qualsiasi porta da 49152-65535, ma l'intervallo consigliato offre la migliore compatibilità. Il debugger usa questa porta esclusivamente, quindi assicurarsi che nessun'altra applicazione la usi.

Considerazioni importanti

  • I firewall aziendali potrebbero limitare gli intervalli di porte. Rivolgersi all'amministratore di rete.
  • Ogni computer di destinazione necessita di una porta univoca (ad esempio: 50000, 50001, 50002).
  • Computer host diversi possono riutilizzare lo stesso intervallo di porte.

Nota

I criteri di rete dell'azienda potrebbero limitare le porte disponibili. Se si verificano problemi di connessione, rivolgersi agli amministratori di rete.

Se si connettono più computer di destinazione a un singolo computer host, ogni connessione deve avere un numero di porta univoco. Ad esempio, se si connettono 100 computer di destinazione a un singolo computer host, è possibile assegnare la porta 50000 alla prima connessione, alla porta 50001 alla seconda connessione e così via.

Nota

Un computer host diverso può usare lo stesso intervallo di porte (da 50000 a 50099) per connettersi a altri 100 computer di destinazione.

Configurare il computer di destinazione

  1. Verificare che nel computer di destinazione sia supportata una scheda di rete. Per altre informazioni, vedere:

  2. Connettere la scheda supportata a un hub di rete o a un commutatore usando un cavo di rete appropriato.

Importante

Prima di usare BCDEdit per modificare le informazioni di avvio, potrebbe essere necessario sospendere temporaneamente le funzionalità di sicurezza di Windows, ad esempio BitLocker e Avvio protetto, nel PC di test. Riabilitare queste funzionalità di sicurezza al termine dei test e gestire in modo appropriato il PC di test quando le funzionalità di sicurezza sono disabilitate.

  1. In un prompt dei comandi con privilegi elevati immettere i comandi seguenti. Sostituire w.x.y.z con l'indirizzo IP del computer host e n con il numero di porta scelto:

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

    Per esempio:

    bcdedit /debug on
    bcdedit /dbgsettings net hostip:192.168.1.100 port:50000
    
  2. BCDEdit visualizza una chiave generata automaticamente. Copiare la chiave e archiviarla in un dispositivo di archiviazione rimovibile, ad esempio un'unità flash USB. È necessaria la chiave quando si avvia una sessione di debug nel computer host.

  3. Usare Gestione dei dispositivi per determinare i numeri di bus, dispositivo e funzione PCI per l'adattatore da usare per il debug. Questi valori vengono visualizzati in Gestione Dispositivi in Posizione nella scheda Generale. Quindi, in un prompt dei comandi con privilegi elevati, immettere il comando seguente, dove b, de f sono il numero bus, il numero di dispositivo e il numero di funzione dell'adattatore:

    bcdedit /set "{dbgsettings}" busparams b.d.f
    
  4. Il PC di destinazione viene riavviato dopo l'associazione di un debugger del kernel.

Nota

Se hai intenzione di installare il ruolo Hyper-V nel computer di destinazione, vedere Configurazione del debug di rete di un host della macchina virtuale.

Attenzione

Se il computer di destinazione si trova in una stazione di ancoraggio e si abilita il debug di rete per una scheda di rete che fa parte della stazione di ancoraggio, non rimuovere il computer dalla stazione di ancoraggio. Se è necessario rimuovere il computer di destinazione dalla docking station, disabilitare prima il debug del kernel. Per disabilitare il debug del kernel nel computer di destinazione, aprire un prompt dei comandi come amministratore e immettere il comando bcdedit /debug off. Riavviare il computer di destinazione.

Avviare la sessione di debug

Prima di iniziare: Verificare che la scheda di rete del computer host sia connessa a un hub di rete o a un commutatore.

Opzione 1: Usare WinDbg (GUI)

  1. Aprire WinDbg nel computer host.
  2. Selezionare File>Debug del kernel.
  3. Aprire la scheda Net .
  4. Immettere il numero di porta e la chiave.
  5. Selezionare OK.

Opzione 2: Usare WinDbg (riga di comando)

È anche possibile avviare una sessione con WinDbg aprendo un prompt dei comandi e immettendo il comando seguente, dove n è il numero di porta e MyKey è la chiave generata automaticamente da BCDEdit quando si configura il computer di destinazione:

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

Se viene richiesto di consentire a WinDbg di accedere alla porta tramite il firewall, consentire a WinDbg di accedere alla porta per tutti e tre i dei diversi tipi di rete.

Usare KD

Sul computer host, apri un prompt dei comandi. Immettere il comando seguente, dove n è il numero di porta e MyKey è la chiave generata automaticamente da BCDEdit quando si configura il computer di destinazione:

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

Se viene richiesto di consentire a WinDbg di accedere alla porta tramite il firewall, consentire a WinDbg di accedere alla porta per tutti e tre i dei diversi tipi di rete.

Riavviare il PC di destinazione

Quando il debugger si connette e attende, riavviare il computer di destinazione. Un modo per riavviare il PC consiste nell'usare questo comando dal prompt dei comandi di un amministratore:

shutdown -r -t 0

Quando la destinazione si riavvia, il debugger nel sistema operativo host si connette.

Dopo la connessione alla destinazione sull'host, selezionare il punto di interruzione sul debugger per avviare il debug.

Consentire al debugger tramite il firewall

Quando si tenta di stabilire una connessione di debug di rete, potrebbe essere richiesto di consentire all'applicazione di debug (WinDbg o KD) l'accesso tramite il firewall. Le versioni client di Windows visualizzano il prompt, ma le versioni server di Windows non visualizzano il prompt. Rispondere al prompt selezionando le caselle per tutti e tre i tipi di rete: dominio, privato e pubblico.

Se non si riceve il prompt o se non sono state controllate le caselle quando la richiesta era disponibile, usare il Pannello di controllo per consentire l'accesso tramite il firewall nel PC host in cui è in esecuzione il debugger. Aprire Pannello di controllo > Sistema e Sicurezza e selezionare Consenti un'app tramite Windows Firewall.

  • (WinDbg) Nell'elenco delle applicazioni, cercare il processo del motore WinDbg (TCP) (tutti).

  • (WinDbg classico) Nell'elenco delle applicazioni, individuare debugger simbolico dell'interfaccia grafica utente Windows e debugger del kernel Windows.

Utilizza le caselle di controllo per consentire a queste applicazioni attraverso il firewall. Riavviare l'applicazione di debug (WinDbg o KD).

Chiave di crittografia

Per proteggere il computer di destinazione, è necessario crittografare i pacchetti che si spostano tra i computer host e di destinazione. Usare una chiave di crittografia generata automaticamente (fornita da BCDEdit quando si configura il computer di destinazione). Una chiave di crittografia generata automaticamente è più sicura e fornisce un valore univoco usato per stabilire la connessione a una destinazione specifica.

La risoluzione dei problemi di rete utilizza una chiave a 256 bit specificata come quattro valori di 64 bit, in base 36, separati da punti. Ogni valore a 64 bit viene specificato usando fino a 13 caratteri. I caratteri validi sono le lettere dalla a fino a z e le cifre da 0 a 9. Non sono consentiti caratteri speciali.

Per specificare la propria chiave, aprire un prompt dei comandi con privilegi elevati nel computer di destinazione. Immettere il comando seguente, dove w.x.y.z è l'indirizzo IP del computer host, n è il numero di porta e Key è la chiave:

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

Il computer di destinazione deve essere riavviato ogni volta che si modificano le impostazioni dbgsettings.

Suggerimenti per la risoluzione dei problemi

Consentire l'applicazione di debug tramite firewall

Quando si tenta di stabilire una connessione di debug di rete, potrebbe essere richiesto di consentire all'applicazione di debug (WinDbg o KD) l'accesso tramite il firewall. Le versioni client di Windows visualizzano il prompt, ma le versioni server di Windows non visualizzano il prompt. Rispondere al prompt selezionando le caselle per tutti e tre i tipi di rete: dominio, privato e pubblico.

Se non si riceve il prompt o se non sono state controllate le caselle quando la richiesta era disponibile, è necessario usare il Pannello di controllo per consentire l'accesso tramite il firewall. Aprire Pannello di controllo > Sistema e Sicurezza e selezionare Consenti un'app tramite Windows Firewall.

  • (WinDbg) Nell'elenco delle applicazioni, cercare il processo del motore WinDbg (TCP) (tutti).

  • (WinDbg (versione classica)) Nell'elenco delle applicazioni individuare debugger simbolico dell'interfaccia utente grafica windows e debugger del kernel Windows.

Utilizza le caselle di controllo per consentire a queste applicazioni attraverso il firewall. Scorrere verso il basso e selezionare OK per salvare le modifiche del firewall. Riavviare il debugger.

Il numero di porta deve essere compreso nell'intervallo consentito dai criteri di rete

I criteri di rete dell'azienda potrebbero limitare l'intervallo di numeri di porta che è possibile usare per il debug di rete. Per scoprire se i criteri dell'azienda limitano l'intervallo di porte per il debug di rete, rivolgersi all'amministratore di rete. Nel computer di destinazione aprire un prompt dei comandi come amministratore e immettere il comando bcdedit /dbgsettings. L'output è simile all'esempio seguente:

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

Nell'output precedente il valore della porta è 50085. Se il valore della porta non rientra nell'intervallo consentito dall'amministratore di rete, immettere il comando seguente. Il valore w.x.y.z è l'indirizzo IP del computer host e YourDebugPort è un numero di porta nell'intervallo consentito.

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

Dopo aver modificato le impostazioni del debugger del computer di destinazione, eseguire di nuovo il debugger nel computer host con la nuova impostazione della porta e quindi riavviare il computer di destinazione.

Usare ping per testare la connettività

Se il debugger non si connette, usare il comando ping nel PC di destinazione per verificare la connettività.

C:\>Ping <HostComputerIPAddress>

Nota

Questo metodo potrebbe non funzionare se il computer host non è configurato per essere individuabile in rete perché il firewall potrebbe bloccare le richieste ping. Se il firewall blocca le richieste ping, non si ottengono risposte quando si esegue il ping dell'host.

Come il debugger ottiene un indirizzo IP per il computer di destinazione

KDNET nel computer di destinazione tenta di usare DHCP (Dynamic Host Configuration Protocol) per ottenere un indirizzo IP instradabile per la scheda di rete usata per il debug. Se KDNET ottiene un indirizzo assegnato da DHCP, i computer host in qualsiasi punto della rete possono eseguire il debug del computer di destinazione. Se KDNET non riesce a ottenere un indirizzo assegnato da DHCP, usa l'APIPA (Automatic Private IP Addressing) per ottenere un indirizzo IP di collegamento locale. Gli indirizzi IP del collegamento locale non sono instradabili, quindi un host e una destinazione non possono usare un indirizzo IP di collegamento locale per comunicare tramite un router. In tal caso, il debug di rete funziona se si collega l'host e i computer di destinazione nello stesso hub di rete o nello stesso commutatore.

Specificare sempre busparams durante la configurazione di KDNET in un computer fisico con una scheda di interfaccia di rete basata su PCI

Se si configura KDNET in un computer fisico con una scheda di interfaccia di rete basata su PCI o PCIe, specificare sempre i busparams per la scheda di interfaccia di rete da usare per KDNET. Per specificare i parametri del bus, aprire Gestione dispositivi e individuare la scheda di rete da usare per il debug. Aprire la pagina delle proprietà per la scheda di rete e prendere nota del numero del bus, del numero di dispositivo e del numero di funzione visualizzato in Posizione nella scheda Generale . In un prompt dei comandi con privilegi elevati immettere il comando seguente, dove b, d e f sono i numeri bus, dispositivo e funzione in formato decimale:

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

Quando il debugger è in esecuzione nel computer host e in attesa di connettersi, riavviare il computer di destinazione usando il comando seguente:

shutdown -r -t 0

Eliminare manualmente le voci BCDEdit

In genere non è necessario eliminare manualmente le voci BCDEdit. Tuttavia, è possibile usare questa procedura per risolvere situazioni insolite.

Non è necessario eliminare manualmente le voci quando si usa l'utilità kdnet. Per ulteriori informazioni, vedere Configurazione automatica del debug del kernel di rete KDNET.

Quando si usa bcdedit –deletevalue, è necessario specificare un nome di elemento bcd valido. Per altre informazioni, vedere BCDEdit /deletevalue.

Per eliminare manualmente le voci bcdedit, seguire questa procedura:

  1. Sul computer di destinazione, aprire il prompt dei comandi come amministratore.

  2. Ad esempio, inserisci il seguente comando per eliminare la voce di debug BCDEdit per l'indirizzo IP dell'host:

    bcdedit -deletevalue {dbgsettings} hostip
    

Quando si elimina l'hostip, è necessario specificare target= nella riga di comando del debugger.

  1. Come altro esempio, eliminare la voce di porta usando il comando seguente:

    bcdedit -deletevalue {dbgsettings} port
    

Quando si elimina la voce della porta, KDNET utilizza la porta predefinita del debugger registrata presso ICANN, la 5364.

Configurare Hyper-V

Per installare il ruolo Hyper-V nel computer di destinazione, vedere Configurazione del debug di rete dell'host della macchina virtuale.

Per informazioni sul debug di una macchina virtuale Hyper-V (VM), consultare Configurazione del debug di rete di una macchina virtuale - KDNET.

Abilitare KDNET in un host Hyper-V che esegue macchine virtuali con connettività di rete esterna

In alcuni casi si verifica una situazione che causa l'arresto della rete nelle macchine virtuali:

  • È possibile abilitare Hyper-V nel PC, creare un commutatore di rete esterno che punti a una scheda di interfaccia di rete fisica nel computer e configurare le macchine virtuali per l'uso di tale commutatore esterno per la rete.

  • È possibile abilitare KDNET nel sistema operativo host Hyper-V usando la stessa scheda di interfaccia di rete fisica a cui punta il commutatore di rete esterno. Riavviare l'host.

  • Tutte le macchine virtuali che usano il commutatore esterno configurato in precedenza perdono la connettività di rete dopo il riavvio.

Questa interruzione è intenzionale. KDNET assume il controllo esclusivo sulla scheda di interfaccia di rete (NIC) che è stata configurata per l'uso. Il sistema operativo non carica il miniport NDIS nativo per tale scheda di interfaccia di rete. Il commutatore di rete esterno non può più comunicare con il driver miniport NDIS nativo e smette di funzionare. Per ovviare a questa situazione, completare i passaggi seguenti:

  1. Aprire Virtual Switch Manager da Hyper-V Manager e selezionare il commutatore virtuale esistente. Modificare la scheda di rete esterna in Adattatore di rete per debug del kernel Microsoft selezionandola dal menu a discesa e quindi selezionando il OK nella finestra di dialogo Gestione commutatori virtuali.

  2. Dopo aver aggiornato la scheda di rete del commutatore virtuale, spegni e riavvia le macchine virtuali.

Quando disattivi il debug KDNET, segui la stessa procedura per ripristinare il commutatore esterno al miniport NDIS nativo per la NIC. In caso contrario, la connettività della macchina virtuale viene persa quando si riavvia il computer dopo la disabilitazione del debug.

IPv6

Windows versione 1809 aggiunge il supporto per IPv6.

Per usare IPv6 con il debugger, completare la procedura seguente:

  1. Effettua il ping di <debughostname> e annota l'indirizzo IPv6 riportato nella risposta delle righe di output. Usare questo indirizzo IPv6 al posto di x:y:z:p:d:q:r:n.

  2. Usare BCDEdit per eliminare i valori degli indirizzi IP esistenti in dbgsettings.

    bcdedit -deletevalue {dbgsettings} hostip
    
  3. Impostare l'indirizzo IPv6 dell'host. La hostipv6=s:t:u:v:w:x:y:z stringa non può contenere spazi. <YourPort> è il numero di porta di rete da usare per questa macchina di destinazione. <YourKey> è la chiave di sicurezza in quattro parti. <b.d.f> sono i numeri di posizione della funzione del dispositivo bus per la NIC che vuoi usare con KDNET.

    bcdedit /dbgsettings net hostipv6:s:t:u:v:w:x:y:z port:<YourPort> key:<YourKey> busparams:<b.d.f>
    
  4. Digitare questo comando per verificare che le impostazioni dbgsettings siano impostate correttamente.

    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. Nel computer host usare il comando seguente per avviare il debugger:

    Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address> 
    
  6. Quando il debugger è in esecuzione nel computer host e in attesa di connettersi, riavviare il computer di destinazione.

  7. Il debugger si connette al debugger host all'inizio dell'avvio. È possibile notare che KDNET usa una connessione IPv6 perché gli indirizzi IP segnalati nel messaggio connesso sono indirizzi IPv6 anziché indirizzi IPv4.

Note

  • Ogni impostazione bcd del debugger che permette di specificare hostip ha un elemento corrispondente hostipv6. Ci sono tre coppie.
IPv4 IPv6 Uso
IP dell'host hostipv6 Per il debug di avvio e del kernel
targethostip targethostipv6 Specifica per il debug del kernel
hypervisorhostip hypervisorhostipv6 Per il debug di Hyper-V
  • Se si imposta l'indirizzo hostipv6 di stile per uno di questi tipi di debug, si ottiene IPv6.

  • Se si imposta l'indirizzo hostip di stile per uno di questi tipi di debug, si ottiene IPv4.

  • La destinazione supporta solo IPv4 o IPv6, non entrambi contemporaneamente. La versione del protocollo IP usata è controllata dal dbgsettings del computer di destinazione. Se si imposta hostip, la destinazione usa IPv4. Se si imposta hostipv6, la destinazione usa IPv6.

  • Il debugger host seleziona in genere automaticamente l'uso di IPv4 o IPv6. Per impostazione predefinita, il debugger è in ascolto sia su un socket IPv4 che su un socket IPv6 e si connette automaticamente su uno dei due alla macchina di destinazione.

  • Se si vuole forzare l'uso di IPv6 nel debugger sull'host, ma si vuole che il debugger ascolti una connessione dal target, è possibile aggiungere target=:: alla riga di comando del debugger. :: è un indirizzo IPv6 pari a 0.

  • Se desideri forzare il debug IPv4 nel debugger sull'host, ma vuoi che il debugger ascolti una connessione dal target, è possibile aggiungere target=0.0.0.0 alla riga di comando del debugger. 0.0.0.0 è un indirizzo IPv4 pari a 0.

  • Se si specifica target= nella riga di comando del debugger e si usa un nome del computer, il debugger converte il nome del computer in un indirizzo IPv4 e un indirizzo IPv6. Il debugger tenta quindi di connettersi a entrambi.

  • Quando si specifica target= nella riga di comando del debugger e si usa un indirizzo IP, se l'indirizzo IP contiene caratteri : , il debugger presuppone che si tratti di un indirizzo IPv6 e forza l'uso di IPv6 per tale connessione. Se l'indirizzo IP contiene qualsiasi . caratteri, il debugger presuppone che si tratti di un indirizzo IPv4 e forza l'uso di IPv4 per tale connessione.

  • Se si configura IPv6 nella destinazione e si forza l'uso di IPv4 nella riga di comando del debugger, non si ottiene una connessione.

  • Se si configura IPv4 nella destinazione e si forza l'uso di IPv6 nella riga di comando del debugger, non si ottiene una connessione.