Настройка отладки сетевого ядра KDNET вручную
Средства отладки для Windows поддерживают отладку ядра по сети. В этой статье описывается настройка отладки сети вручную.
Важный
Настройка отладки сети вручную — это сложный и подверженный ошибкам процесс. Сведения о автоматической настройке отладки сети см. в статье Настройка отладки сетевого ядра KDNET автоматически. Использование служебной программы KDNET настоятельно рекомендуется для всех пользователей отладчика.
Компьютер, на котором запущен отладчик, называется хост-компьютером, а отлаживаемый компьютер называется целевым компьютером. Главный компьютер должен работать под управлением Windows 7 или более поздней версии, а целевой компьютер должен работать под управлением Windows 8 или более поздней версии.
Отладка по сети имеет следующие преимущества по сравнению с отладкой по другим типам подключения.
- Хост и целевые компьютеры могут находиться в любом месте локальной сети.
- Легко выполнить отладку нескольких целевых компьютеров с одного хост-компьютера.
- Даны любые два компьютера, и, скорее всего, у них обоих есть адаптеры Ethernet. Маловероятно, что у них обоих есть последовательные порты или порты 1394.
- Отладка сети выполняется быстрее, чем отладка последовательного порта.
Поддерживаемые сетевые адаптеры
Главный компьютер может использовать любой сетевой адаптер, но целевой компьютер должен использовать сетевой адаптер, поддерживаемый средствами отладки для Windows. Список поддерживаемых сетевых адаптеров см. в разделе Поддерживаемые сетевые адаптеры Ethernet для отладки сетевого ядра в Windows 11 и Поддерживаемые сетевые адаптеры Ethernet для отладки сетевого ядра в Windows 10.
Установка средств отладки для Windows
Убедитесь, что средства отладки для Windows установлены в системе узла. Сведения о скачивании и установке средств отладчика см. в разделе Средства отладки для Windows.
Определение IP-адреса хост-компьютера
Используйте одну из следующих процедур, чтобы определить IP-адрес хост-компьютера.
На хост-компьютере откройте командную строку и введите следующую команду:
ipconfig
Запишите IPv4-адрес сетевого адаптера, который планируется использовать для отладки.
На целевом компьютере откройте командную строку и введите следующую команду, где
YourIPAddress является IP-адресом хост-компьютера:ping -4 <YourIPAddress>
Выбор порта для отладки сети
Выберите номер порта для отладки на узлах и целевых компьютерах. Вы можете выбрать любое число от 49152 до 65535. Рекомендуемый диапазон — 50000 – 50039. Выбранное порт открывается для монопольного доступа отладчиком, запущенным на хост-компьютере. Необходимо выбрать номер порта, который не используется другими приложениями, работающими на хост-компьютере.
Заметка
Диапазон номеров портов, которые можно использовать для отладки сети, может быть ограничен политикой сети вашей компании. Нет способа определить, какие ограничения существуют на хост-компьютере. Чтобы определить, ограничивает ли политика вашей компании диапазон портов, которые можно использовать для отладки сети, обратитесь к администраторам сети.
При подключении нескольких целевых компьютеров к одному узлу каждое подключение должно иметь уникальный номер порта. Например, при подключении 100 целевых компьютеров к одному узлу можно назначить порт 50000 для первого подключения, порт 50001 второму подключению и т. д.
Заметка
Другой главный компьютер может использовать тот же диапазон портов (50000 до 50099) для подключения к другим 100 целевым компьютерам.
Настройка целевого компьютера
Убедитесь, что на целевом компьютере есть поддерживаемый сетевой адаптер. Дополнительные сведения см. в следующем разделе:
Подключите поддерживаемый адаптер к сетевому концентратору или коммутатору с помощью соответствующего сетевого кабеля.
Важный
Прежде чем использовать BCDEdit для изменения сведений о загрузке, может потребоваться временно приостановить функции безопасности Windows, такие как BitLocker и безопасная загрузка, на тестовом компьютере. Повторно включите эти функции безопасности при завершении тестирования и соответствующим образом управляйте тестируемым компьютером при отключении функций безопасности.
В командной строке с повышенными привилегиями введите следующие команды, где w.x.y.z является IP-адресом хост-компьютера, а n — это номер порта.
bcdedit /debug on bcdedit /dbgsettings net hostip:w.x.y.z port:n
BCDEdit отображает автоматически созданный ключ. Скопируйте ключ и сохраните его на съемных устройствах хранения, таких как USB-флэш-накопитель. При запуске сеанса отладки на главном компьютере требуется ключ.
Используйте диспетчер устройств, чтобы определить номера шины PCI, устройства и функции для адаптера, который вы хотите использовать для отладки. Эти значения отображаются в диспетчере устройств в разделе
Расположение на вкладке "Общие". Затем в командной строке с повышенными привилегиями введите следующую команду, где b ,d иf — номер шины, номер устройства и номер функции адаптера:bcdedit /set "{dbgsettings}" busparams b.d.f
Целевой компьютер будет перезагружен после подключения отладчика ядра.
Заметка
Если вы планируете установить роль Hyper-V на целевом компьютере, ознакомьтесь с настройке сетевой отладкиузла виртуальной машины.
Внимание Если целевой компьютер находится на док-станции, а у вас включена отладка сети для сетевого адаптера, который является частью док-станции, не удаляйте компьютер из док-станции. Если необходимо удалить целевой компьютер из док-станции, отключите отладку ядра. Чтобы отключить отладку ядра на целевом компьютере, откройте командную строку от имени администратора и введите команду bcdedit /debug off
. Перезагрузите целевой компьютер.
Запуск сеанса отладки
Убедитесь, что сетевой адаптер хост-компьютера подключен к сетевому концентратору или коммутатору с помощью соответствующего сетевого кабеля.
На хост-компьютере откройте WinDbg. В меню файл выберите Отладка ядра. В диалоговом окне отладки ядра откройте вкладку Net. Введите номер порта и ключ. Нажмите кнопку ОК.
Вы также можете запустить сеанс с WinDbg, открыв командную строку и введя следующую команду, где n номер порта, а MyKey является ключом, автоматически созданным BCDEdit при настройке целевого компьютера:
windbg -k net:port=<n>,key=<MyKey>
Если вам будет предложено разрешить WinDbg получить доступ к порту через брандмауэр, разрешите WinDbg получить доступ к порту для всех трех различных типов сети.
Использование KD
На хост-компьютере откройте командную строку. Введите следующую команду, где n — номер порта, а MyKey — это ключ, автоматически созданный BCDEdit при настройке целевого компьютера:
kd -k net:port=<n>,key=<MyKey>
Если вам будет предложено разрешить WinDbg получить доступ к порту через брандмауэр, разрешите WinDbg получить доступ к порту для всех трех различных типов сети.
Перезапустите целевой компьютер
После подключения отладчика и ожидания подключения перезагрузите целевой компьютер. Одним из способов перезагрузки компьютера является использование этой команды из командной строки администратора:
shutdown -r -t 0
Когда целевой перезапустится, отладчик хостовой ОС должен будет подключиться.
После подключения к целевому объекту на узле нажмите перерыв на отладчике и вы можете начать отладку.
Разрешить отладчику проход через брандмауэр
При первой попытке установить подключение к отладке сети может потребоваться разрешить доступ к приложению отладки (WinDbg или KD) через брандмауэр. Клиентские версии Windows отображают запрос, но серверные версии Windows не отображают запрос. Чтобы ответить на запрос, установите флажки для всех трех типов сети: доменная, частная и общедоступная.
Если вам не показывается запрос или если вы не установили флажки, когда запрос был доступен, необходимо использовать Панель управления, чтобы разрешить доступ через брандмауэр на хост-компьютере, где выполняется отладчик. Откройте панель управления Система и безопасность > и выберите Разрешить приложению доступ через брандмауэр Windows.
(WinDbg) В списке приложений найдите процесс двигателя WinDbg (TCP) (все).
(Классический WinDbg) В списке приложений найдите символьный отладчик Windows GUI и отладчик Windows ядра.
Установите флажки, чтобы разрешить этим приложениям доступ через брандмауэр. Перезапустите приложение отладки (WinDbg или KD).
Ключ шифрования
Чтобы обеспечить безопасность целевого компьютера, пакеты, передаваемые между узлом и целевыми компьютерами, должны быть зашифрованы. При настройке целевого компьютера следует использовать автоматически созданный ключ шифрования (предоставленный BCDEdit). Использование автоматически созданного ключа шифрования рекомендуется как более безопасное и предоставляет уникальное значение, используемое при установке подключения к определенному целевому объекту.
Отладка сети использует 256-разрядный ключ, указанный как четыре 64-разрядных значения, в базовом 36, разделенном периодами. Каждое 64-разрядное значение указывается с помощью до 13 символов. Допустимые символы — это буквы через z и цифры от 0 до 9. Специальные символы не допускаются.
Чтобы указать собственный ключ, откройте командную строку с повышенными привилегиями на целевом компьютере. Введите следующую команду, где
bcdedit /dbgsettings net hostip:w.x.y.z port:n key:Key
Целевой компьютер необходимо перезагрузить каждый раз, когда изменяются настройки отладки.
Советы по устранению неполадок
Приложение отладки должно быть разрешено через брандмауэры
При первой попытке установить подключение к отладке сети может потребоваться разрешить доступ к приложению отладки (WinDbg или KD) через брандмауэр. Клиентские версии Windows отображают запрос, но серверные версии Windows не отображают запрос. Чтобы ответить на запрос, установите флажки для всех трех типов сети: домен, частный и общедоступный.
Если вы не получаете запрос или не установите флажки при наличии запроса, необходимо использовать панель управления, чтобы разрешить доступ через брандмауэр. Откройте панель управления , затем перейдите в систему и безопасность > и выберите Разрешить приложение через брандмауэр Windows.
(WinDbg) В списке приложений найдите процесс движка WinDbg (TCP) (все).
(WinDbg (классическая модель)) В списке приложений найдите символьного отладчика Windows GUI и отладчик ядра Windows.
Поставьте галочки, чтобы разрешить этим приложениям доступ через брандмауэр. Прокрутите вниз и нажмите кнопку ОК, чтобы сохранить изменения брандмауэра. Перезапустите отладчик.
Номер порта должен находиться в диапазоне, разрешенном политикой сети.
Диапазон номеров портов, которые можно использовать для отладки сети, может быть ограничен политикой сети вашей компании. Чтобы определить, ограничивает ли политика вашей компании диапазон портов, которые можно использовать для отладки сети, обратитесь к администратору сети. На целевом компьютере откройте командную строку от имени администратора и введите команду 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 для проверки подключения
Если отладчик не подключается, используйте команду ping на целевом компьютере для проверки подключения.
C:\>Ping <HostComputerIPAddress>
Заметка
Это может не работать, если хост-компьютер не настроен для обнаружения в сети, так как брандмауэр может блокировать запросы на связь. Если брандмауэр блокирует ping-запросы, вы не получите никаких ответов при пинговании узла.
Как отладчик получает IP-адрес для целевого компьютера
KDNET на целевом компьютере пытается использовать протокол конфигурации динамических узлов (DHCP), чтобы получить маршрутизируемый IP-адрес сетевого адаптера, который используется для отладки. Если KDNET получает адрес, назначенный DHCP, то целевой компьютер может быть отлажен хост-компьютерами, расположенными в любой точке сети. Если KDNET не удается получить назначаемый DHCP-адрес, он использует автоматическую частную IP-адресацию (APIPA) для получения IP-адреса локальной связи. IP-адреса локальной связи не являются маршрутизируемыми, поэтому узел и целевой объект не могут использовать IP-адрес локальной связи для обмена данными через маршрутизатор. В этом случае отладка сети будет работать, если подключить узел и целевые компьютеры к тому же сетевому концентратору или коммутатору.
Всегда указывайте busparams при настройке KDNET на физическом компьютере с сетевым адаптером на основе PCI
Если вы настраиваете KDNET на физическом компьютере с сетевым адаптером на основе PCI или PCIe, всегда следует указать busparams для сетевого интерфейса, который вы хотите использовать для KDNET. Чтобы указать параметры шины, откройте диспетчер устройств и найдите сетевой адаптер, который требуется использовать для отладки. Откройте страницу свойств сетевого адаптера и запишите номера шины, устройства и функции, отображаемые в разделе Расположение на вкладке Общие. В командной строке с повышенными привилегиями введите следующую команду, где b, dи f — это номера шины, устройства и функции в десятичном формате.
bcdedit /set "{dbgsettings}" busparams b.d.f
Когда отладчик работает на хост-компьютере и ожидает подключения, перезагрузите целевой компьютер с помощью следующей команды:
shutdown -r -t 0
Удаление записей BCDEdit вручную
Удаление вручную обычно не требуется, но предоставляется здесь в качестве процедуры устранения неполадок для необычных ситуаций.
Удаление записей вручную не требуется при использовании служебной программы kdnet. Дополнительные сведения см. в статье Настройка отладки сетевого ядра KDNET автоматически.
При использовании bcdedit –deletevalue
необходимо указать допустимое имя элемента bcd. Дополнительные сведения см. в разделе BCDEdit /deletevalue.
Чтобы вручную удалить записи bcdedit, выполните следующие действия.
На целевом компьютере откройте командную строку от имени администратора.
В качестве примера введите следующую команду, чтобы удалить запись отладки BCDEdit для IP-адреса узла:
bcdedit -deletevalue {dbgsettings} hostip
При удалении hostip необходимо указать target= в командной строке отладчика.
В качестве другого примера удалите запись порта с помощью следующей команды:
bcdedit -deletevalue {dbgsettings} port
При удалении записи порта KDNET использует порт отладчика 5364, зарегистрированный в ICANN по умолчанию.
Настройка Hyper-V
Если вы планируете установить роль Hyper-V на целевом компьютере, ознакомьтесь с по настройке сетевой отладки виртуальной машины узла.
Для получения информации об отладке Hyper-V виртуальной машины см. раздел Настройка сетевой отладки виртуальной машины — KDNET.
Включение KDNET на узле Hyper-V, на котором выполняются виртуальные машины с подключением к внешней сети
Иногда возникает ситуация, которая приводит к остановке работы сети в виртуальных машинах:
Hyper-V включен на компьютере, создан внешний сетевой коммутатор, который подключен к физическому сетевому адаптеру на компьютере, и виртуальные машины настроены для использования этого внешнего коммутатора для своей сети.
После этого KDNET включена на ОС узла Hyper-V с использованием той же физической сетевой карты, на которую указывает внешний сетевой коммутатор. Узел перезагружается.
Все виртуальные машины, использующие ранее настроенный внешний коммутатор, теряют сетевое подключение после перезагрузки.
Эта остановка выполняется по проектированию и происходит, так как KDNET принимает монопольный контроль над сетевой картой, которую он настраивает для использования. Собственный минипорт NDIS для этой сетевой карты не загружается операционной системой. Внешний сетевой коммутатор больше не может взаимодействовать с собственным драйвером минипорта NDIS и перестать работать. Чтобы обойти эту ситуацию, сделайте следующее:
Откройте диспетчер виртуальных коммутаторов из диспетчера Hyper-V и выберите существующий виртуальный коммутатор. Измените сетевой адаптер внешней сети на сетевой адаптер для отладки Microsoft Kernel , выбрав его в раскрывающемся меню, а затем выбрав ОК в диалоговом окне диспетчера виртуальных коммутаторов.
После обновления сетевого адаптера виртуального коммутатора завершите работу и перезапустите виртуальные машины.
При отключении отладки KDNET необходимо выполнить ту же процедуру, чтобы перенаправить внешний коммутатор обратно в собственный минипорт NDIS для сетевой карты. В противном случае подключение к виртуальной машине теряется при перезагрузке компьютера после отключения отладки.
IPv6
Поддержка IPv6 была добавлена в Windows версии 1809.
Чтобы использовать IPv6 с отладчиком, выполните следующие действия.
Ping your <debughostname> и запишите IPv6-адрес, который сообщается об ответе из выходных строк. Используйте этот IPv6-адрес вместо
x:y:z:p:d:q:r:n
.Используйте BCDEdit для удаления всех существующих значений IP-адресов в dbgsettings.
bcdedit -deletevalue {dbgsettings} hostip
Задайте IPv6-адрес узла. В строке
hostipv6=s:t:u:v:w:x:y:z
не должно быть пробелов. <YourPort> — это номер сетевого порта, используемый для этого целевого компьютера. < > YourKey — это четырехкомпонентный ключ безопасности. <b.d.f> — это номера расположения функции шины для сетевого адаптера, который вы хотите использовать для KDNET.bcdedit /dbgsettings net hostipv6:s:t:u:v:w:x:y:z port:<YourPort> key:<YourKey> busparams:<b.d.f>
Введите эту команду, чтобы убедиться, что параметры 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.
На хост-компьютере выполните следующую команду, чтобы запустить отладчик:
Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address>
Когда отладчик работает на хост-компьютере и ожидает подключения, перезагрузите целевой компьютер.
Отладчик должен подключиться к отладчику узла рано во время загрузки. Вы видите, что KDNET использует подключение IPv6, так как IP-адреса, сообщаемые в подключенном сообщении, являются IPv6-адресами вместо IPv4-адресов.
Примечания
Каждый параметр bcd отладчика, позволяющий указывать
hostip
, имеет соответствующий элементhostipv6
. Существует три.IPv4 IPv6 Употребление хостip (хостовый IP-адрес) hostipv6 Для отладки загрузочных процессов и ядра IP-адрес целевого хоста targethostipv6 Особенности отладки ядра hypervisorhostip hypervisorhostipv6 Для отладки Hyper-v Если вы указываете адрес в стиле
hostipv6
для любого из этих видов отладки, это означает, что вы хотите и получите IPv6.Если вы задаете адрес стиля
hostip
для любого из этих видов отладки, это означает, что вы хотите и получите IPv4.Целевой объект будет выполнять только IPv4 или IPv6, а не одновременно. Версия используемого IP-протокола управляется параметрами dbgsettings на целевой машине. Если задано
hostip
, целевой объект использует IPv4. Если заданоhostipv6
, целевой объект использует IPv6.Отладчик узла обычно автоматически выбирает использование IPv4 или IPv6. По умолчанию отладчик прослушивает как сокет IPv4, так и сокет IPv6 и автоматически подключается к целевому компьютеру.
Если вы хотите принудительно использовать IPv6 в отладчике на узле, но вы хотите, чтобы отладчик прослушивал подключение из целевого объекта, можно добавить
target=::
в командную строку отладчика.::
— это IPv6-адрес 0.Если вы хотите принудительно выполнить отладку IPv4 в отладчике на узле, но вы хотите, чтобы отладчик прослушивал подключение из целевого объекта, можно добавить
target=0.0.0.0
в командную строку отладчика.0.0.0.0
— это IPv4-адрес 0.Если указать
target=
в командной строке отладчика и использовать имя компьютера, отладчик преобразует это имя компьютера в IPv4-адрес и IPv6-адрес. Затем отладчик пытается подключиться к обоим.При указании
target=
в командной строке отладчика и использовании IP-адреса, если IP-адрес содержит любые : символы, отладчик предполагает, что это IPv6-адрес, и принудительно использовать IPv6 для этого подключения. Если IP-адрес содержит любой . символов отладчик предполагает, что это IPv4-адрес и принудительно использует IPv4 для этого подключения.Если вы настроили IPv6 в целевом объекте и принудительно используете IPv4 в командной строке отладчика, вы не получите подключение.
Если вы настроили IPv4 в целевом объекте и принудительно используете IPv6 в командной строке отладчика, вы также не получите подключение.