如何在Microsoft Azure平台虚拟机上使用WinDbg调试Windows内核
该调试需求可以完全实现,以下是4种经过验证的可行方案:
VPN对接方案(最稳定推荐)
给Azure虚拟机所在的虚拟网络配置点到站点(P2S)VPN,本地调试主机安装对应VPN客户端后接入该虚拟网络,此时调试主机与目标Azure VM处于同一逻辑内网,直接按照KDNET常规流程配置即可。操作时需要注意在目标VM的网络安全组放行KDNET使用的UDP端口(默认50000,可自定义)的入站规则,同时关闭VM内Windows防火墙的对应拦截规则。公网端口映射方案(临时调试用)
给目标Azure VM分配公网IP,在VM对应的网络安全组添加入站规则,放行自定义的KDNET UDP端口,同时在VM网络配置中做好端口映射,将公网IP的对应UDP端口转发到VM内网地址的KDNET端口。配置目标VM的KDNET参数时,host参数填写本地调试主机的公网IP,同时本地调试主机的出口路由器需要做对应UDP端口的端口映射,或直接给调试主机配置公网IP、关闭本地防火墙的对应端口拦截。该方案调试流量走公网,延迟较高且存在数据泄露风险,仅建议临时测试使用。Azure串行控制台方案(快速排障用)
直接使用Azure平台自带的串行控制台功能,不需要额外配置网络,在Azure门户中找到目标VM的「串行控制台」入口,进入后即可开展基础内核调试操作。该方案适合快速排查启动类故障,但交互性较差,不支持复杂的驱动调试操作。嵌套虚拟化中转方案(无网络配置权限时用)
在目标Azure VM中开启嵌套虚拟化,新建一个嵌套VM作为实际的调试目标,外层Azure VM作为调试中转主机,本地调试主机通过RDP连接外层VM,在外层VM中直接使用WinDbg连接内层嵌套VM的内核即可。该方案不需要修改公网网络配置,调试稳定性介于VPN方案和公网映射方案之间,适合没有权限配置Azure虚拟网络的场景。
KDNET配置完成后,在调试主机使用命令 windbg -k net:port=<自定义端口号>,key=<KDNET生成的加密密钥> 即可发起连接。
内容的提问来源于stack exchange,提问作者M3ik Shizuka

