

# Depuración del kernel para instancias Windows a través de la red
<a name="troubleshoot-windows-with-kdnet"></a>

El módulo de extensibilidad de KDNET para Elastic Network Adapter (ENA) es una capa de hardware para el soporte del controlador que permite la depuración del kernel en Windows mediante la red con ENA en las instancias de Amazon Elastic Compute Cloud. Puede usar el módulo de extensibilidad con el depurador de Windows (WinDbg) para realizar una depuración en el nivel del kernel en las instancias de EC2 que usan Windows.

La depuración del kernel ayuda a diagnosticar y solucionar problemas de bajo nivel del sistema operativo, como los errores de pantalla azul (BSOD), fallos en los controladores y problemas de arranque de las instancias de EC2 Windows.

**Topics**
+ [Requisitos previos](#kdnet-prerequisites)
+ [Paso 1: instale las herramientas de depuración de Windows en el host de depuración](#kdnet-step1-install-debugging-tools)
+ [Paso 2: configure el destino de depuración](#kdnet-step2-setup-debug-target)
+ [Paso 3: inicie la sesión de depuración en el host de depuración](#kdnet-step3-start-debugging-session)
+ [Paso 4: reinicie el destino de depuración](#kdnet-step4-reboot-debug-target)
+ [Al terminar, elimine la configuración de depuración](#kdnet-clean-up)
+ [Limitaciones](#kdnet-limitations)
+ [Notas adicionales](#kdnet-additional-notes)

## Requisitos previos
<a name="kdnet-prerequisites"></a>

Antes de empezar, asegúrese de que tiene lo siguiente:

Dos instancias de EC2 Windows en la misma subred:
+ Una instancia de **host de depuración**, que ejecuta el depurador de Windows (WinDBG).
+ Una instancia de **destino de depuración**, es decir, la instancia que desea depurar.

Para obtener más información acerca de cómo iniciar instancias, consulte [Introducción a Amazon EC2](EC2_GetStarted.md).

Los grupos de seguridad de las instancias de host y destino deben permitir el tráfico UDP entrante y saliente en el puerto utilizado para la depuración de KDNET (rango recomendado: 50 000–50 039). La forma más sencilla de configurarlo es crear un grupo de seguridad con una regla de entrada que permita el tráfico UDP desde sí mismo como origen y, a continuación, adjuntar ese grupo de seguridad a ambas instancias. Para obtener más información, consulte [Reglas del grupo de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html) en la *Guía del usuario de Amazon VPC*.

La instancia de destino de depuración debe ejecutar una de las siguientes versiones de Windows (o una posterior):
+ Windows Server 2025 con número de compilación 26100.7462 (parche de diciembre de 2025)
+ Windows 11 24H2 con número de compilación 26100.7309
+ Windows 11 25H2 con número de compilación 26200.7309

**nota**  
El módulo de extensibilidad de KDNET para ENA se distribuye como parte de Windows y solo se puede actualizar mediante las actualizaciones acumulativas mensuales de Windows. Le recomendamos que mantenga instalada la última base de conocimientos de Windows en el destino de depuración para asegurarse de que dispone de la versión más reciente.  
Para verificar que el módulo esté presente en el destino de depuración, ejecute el siguiente comando en una sesión elevada de PowerShell:  

```
Test-Path C:\Windows\system32\kd_02_1d0f.dll
```
Si el comando devuelve `True`, significa que el módulo está disponible.

## Paso 1: instale las herramientas de depuración de Windows en el host de depuración
<a name="kdnet-step1-install-debugging-tools"></a>

Instale las herramientas de depuración de Windows en la instancia del host de depuración; para hacerlo, ejecute el siguiente comando en una sesión de PowerShell:

```
winget install microsoft.windbg
```

Para obtener instrucciones de instalación detalladas, consulte [Cómo instalar el depurador de Windows](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/) en la documentación de Microsoft.

Tras la instalación, ejecute el siguiente comando en una sesión de PowerShell para verificar que el depurador funcione:

```
windbgx
```

Debería abrirse la ventana de WinDbg. En ese caso, la instalación se ha realizado correctamente y puede cerrar la ventana.

## Paso 2: configure el destino de depuración
<a name="kdnet-step2-setup-debug-target"></a>

**nota**  
Cuando la depuración del kernel está activa, el dispositivo ENA utilizado para la sesión de depuración se dedica únicamente al tráfico de depuración. Si necesita mantener el acceso a internet en la instancia del destino de depuración durante tal proceso, asocie un segundo ENA a la instancia antes de empezar.

En el destino de depuración, abra una sesión elevada de PowerShell y siga los pasos a continuación para configurar la depuración del kernel:

Ejecute el siguiente comando para ver el número de bus, dispositivo y función del adaptador ENA asociado a la instancia:

```
Get-NetAdapter -Physical |
    Where-Object -Property PnPDeviceID -Match -Value '^PCI\\VEN_1D0F&DEV_EC2[01]&' |
    Get-NetAdapterHardwareInfo |
    Select-Object InterfaceDescription, BusNumber, DeviceNumber, FunctionNumber |
    Format-List
```

### Si hay varios adaptadores ENA asociados a la instancia
<a name="kdnet-multiple-ena-adapters"></a>

Si hay varios adaptadores ENA asociados a la instancia, use el siguiente comando para asignar cada adaptador físico a su dirección IP privada. Puede cotejar estos detalles en la Consola de administración de AWS, en **EC2 → Instancias → [ID de instancia] → Redes → Interfaces de red**. Esto le servirá para correlacionar ID de interfaz de red, IP privadas y grupos de seguridad específicos con el adaptador del nivel del sistema operativo para una depuración selectiva.

```
Get-NetAdapter -Physical |
    Where-Object PnPDeviceID -Match '^PCI\\VEN_1D0F&DEV_EC2[01]&' |
    ForEach-Object {
        $adapter = $_
        $hwInfo = $adapter | Get-NetAdapterHardwareInfo
        $ipInfo = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4
        [PSCustomObject]@{
            InterfaceDescription = $adapter.InterfaceDescription
            IPAddress            = $ipInfo.IPAddress
            BusNumber            = $hwInfo.BusNumber
            DeviceNumber         = $hwInfo.DeviceNumber
            FunctionNumber       = $hwInfo.FunctionNumber
        }
    } | Format-List
```

Anote los valores de `BusNumber`, `DeviceNumber` y `FunctionNumber` del adaptador ENA que se va a utilizar para la depuración desde la salida.

Ejecute los siguientes comandos para configurar la depuración del kernel. Reemplace los valores de marcador de posición con su configuración específica:

```
bcdedit /debug on
bcdedit /set loadoptions FORCEHVTONOTSHAREDEBUGDEVICE
bcdedit /dbgsettings net hostip:{{host-private-ip}} port:{{port-number}} key:{{encryption-key}} busparams:{{b.d.f}}
```

**nota**  
Ejecute el siguiente comando para comprobar si existen `loadoptions`. Si se devuelve un valor, copie esa cadena y añádale `;FORCEHVTONOTSHAREDEBUGDEVICE`.  

```
(bcdedit /enum) -match "loadoptions"
```

Donde:
+ {{host-private-ip}}: la dirección IPv4 privada de la instancia del host de depuración. Si las instancias se inician en una subred que solo usa IPv6, consulte [Cómo configurar KDNET con IPv6](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection#ipv6) en la documentación de Microsoft para obtener más información sobre el uso de IPv6 con KDNET.
+ {{port-number}}: el puerto que se usará en la sesión de depuración. El rango recomendado es de 50 000–50 039 (por ejemplo, `50000`).
+ {{encryption-key}}: una clave de 256 bits que se utiliza para cifrar la conexión de depuración y se especifica como cuatro valores de 64 bits separados por puntos. Cada valor de 64 bits puede tener hasta 13 caracteres y componerse solo de letras minúsculas de la “a” a la “z” y dígitos del 0 al 9. No se admiten caracteres especiales. Ejemplo de clave de cifrado: `1kdnet2keys3.4kdnet5keys6.7kdnet8keys9.10kdnet11ke`.
+ {{b.d.f}}: los números de bus, dispositivo y función del dispositivo ENA, formateados como `bus.device.function` (por ejemplo, `0.3.0`), que se utilizan para la depuración.

**sugerencia**  
Para depurar el proceso de arranque de Windows, ejecute también el siguiente comando:  

```
bcdedit /bootdebug on
```

## Paso 3: inicie la sesión de depuración en el host de depuración
<a name="kdnet-step3-start-debugging-session"></a>

Para permitir el tráfico de depuración en el host, puede crear una regla de firewall para la aplicación de WinDbg o para un puerto UDP específico.

**Opción 1: permita la aplicación de WinDbg**  
Ejecute los siguientes comandos para autorizar el ejecutable de WinDbg:

```
$WinDbgxPath = "$env:LocalAppData\Microsoft\WindowsApps\WinDbgX.exe"
New-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Action Allow -Program $WinDbgxPath
```

**Opción 2: permita un puerto UDP específico**  
Como alternativa, puede permitir que el tráfico UDP entrante llegue al puerto configurado para la depuración del kernel. Sustituya {{port-number}} con el puerto KDNET de su elección:

```
$DebugPort = {{port-number}}
New-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Direction Inbound -LocalPort $DebugPort -Protocol UDP -Action Allow
```

**nota**  
Las configuraciones del firewall pueden estar restringidas por la política de grupo de dominio (GPO) o requerir permisos de administrador elevados. Si el comando falla, comuníquese con el administrador de la red.

Inicie WinDBG con el puerto y la clave que coincidan con la configuración del destino de depuración. Puede especificar opciones adicionales para la depuración del kernel que se documentan en la [referencia de la línea de comandos de WinDbg de Microsoft](https://learn.microsoft.com/en-us/windows-hardware/drivers/debuggercmds/windbg-command-line-preview#kernel-options) que se adapten a su caso de uso.

```
windbgx -k net:port={{port-number}},key={{encryption-key}}
```

WinDbg se abre y espera a que el destino de depuración se conecte.

## Paso 4: reinicie el destino de depuración
<a name="kdnet-step4-reboot-debug-target"></a>

En el destino de depuración, reinicie la instancia para iniciar la conexión de depuración:

```
shutdown -r -t 0
```

Una vez reiniciado el destino de depuración, WinDbg se conecta a él automáticamente desde el host. Ya puede usar WinDbg para inspeccionar el estado del kernel, establecer puntos de interrupción y diagnosticar problemas.

## Al terminar, elimine la configuración de depuración
<a name="kdnet-clean-up"></a>

**En el destino de depuración**  
Cuando termine de depurar, elimine la configuración de depuración del kernel del destino de depuración para restablecer el comportamiento de arranque normal. En el destino de depuración, abra una sesión elevada de PowerShell y ejecute los siguientes comandos:

```
bcdedit /debug off
bcdedit /dbgsettings LOCAL
bcdedit /deletevalue loadoptions
```

Si tiene una configuración `loadoptions` diferente a `FORCEHVTONOTSHAREDEBUGDEVICE`, debe restaurar la configuración ejecutando `bcdedit /set loadoptions` con la `loadoptions` original.

Si ha activado la depuración de arranque, también debe ejecutar:

```
bcdedit /bootdebug off
```

Reinicie la instancia para que los cambios surtan efecto.

**En el host de depuración**  
Elimine la regla de firewall con la ejecución de:

```
Remove-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection"
```

## Limitaciones
<a name="kdnet-limitations"></a>

Por el momento, el módulo de extensibilidad de KDNET para ENA no admite:
+ Tipos de instancia x86\_64 no metálicas de octava generation (por ejemplo, `m8a.xlarge`)
+ Tipos de instancia x86\_64 no metálicas 48xlarge de séptima generation (por ejemplo, `m7a.48xlarge`)
+ Tipos de instancia u7i

Por el momento, el módulo no admite instancias con el arranque seguro activado. Para verificar el estado, ejecute `Confirm-SecureBootUEFI` en una sesión elevada de PowerShell. Si el resultado es `True`, entonces el arranque seguro está activado. Tenga en cuenta que todas las imágenes proporcionadas por Amazon que tengan el prefijo “TPM” tienen activado el arranque seguro de forma predeterminada.

## Notas adicionales
<a name="kdnet-additional-notes"></a>

Si tiene problemas para conectar el depurador a la instancia de destino, verifique lo siguiente:
+ Que se cumplan todos los requisitos previos enumerados en esta guía, incluida la versión de compilación requerida de Windows Server y la presencia del módulo de extensibilidad.
+ Que los grupos de seguridad conectados a ambas instancias estén configurados correctamente para permitir el tráfico entre ellos en el puerto de depuración configurado.
+ Que las reglas de firewall de Windows en las instancias de host no bloqueen el tráfico de red entre las dos instancias del puerto configurado.

Para obtener instrucciones adicionales, consulte [Cómo configurar manualmente la depuración del kernel de red de KDNET](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection) en la documentación de Microsoft.