Depuración del kernel para instancias Windows a través de la red
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.
Contenido
Requisitos previos
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.
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 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
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
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
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, 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-ipport:port-numberkey:encryption-keybusparams: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 IPv6en 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 comobus.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
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-numberNew-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
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
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
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
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
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