При замене материнской платы, сетевой карты, P2V миграции, холодном переносе виртуальных машин между различными типами гипервизоров, настройке VLAN на сетевом интерфейсе Windows вы можете столкнуться с проблемой наличия скрытых (невидимых) сетевых адаптеров. В результате вы не можете назначить старый статический IP адрес для нового сетевого интерфейса, так как старый IP был назначен ранее удаленному адаптеру.
Windows автоматически скрывает устройства, которые присутствуют в конфигурации Windows, но физически не подключены к компьютеру. Скрытый сетевой адаптер в системе остается, если вы физически отключили установленную ранее сетевую карту (это может быть, как физический NIC, так и виртуальная сетевая карта). Установленная ранее сетевая карта становится скрытой, и не доступна в диспетчере оборудования.
Ошибка: IP-адрес уже назначен другому сетевому адаптеру
Главная проблема со скрытыми сетевыми адаптерами – вы не сможете назначить IP адрес старого сетевого адаптера новой сетевой карте. При попытке назначить старый IP адрес появляется предупреждение:
Microsoft TCP/IP_x000D_IP-адрес 192.168.1.50, который вы задали для этого сетевого адаптера, уже назначен другому адаптеру. Если обоим устройствам назначен один и тот же адрес и оба адаптеры активны, только один из них сможет его использовать. Это может привести к неполадкам в работе системы._x000D__x000D_Вы хотите задать другой IP адрес для этого адаптера в списке IP-адресов в окне дополнительных параметров._x000D_
The IP address <IP address> you have entered for this network adapter is already assigned to another adapter (Intel Gigabit Network Connection) which is no longer present in the computer. If the same address is assigned to both adapters and they both become active, only one of them will use this address. This may result in incorrect system configuration._x000D__x000D_Do you want to remove the static IP configuration for the absent adapter?
Если попробовать задать IP адрес адаптера с помощью PowerShell , появится ошибка:
New-NetIPAddress –IPAddress 192.168.13.153 -DefaultGateway 192.168.13.1 -PrefixLength 24 -InterfaceIndex 22
New-NetIPAddress : The object already exists._x000D_Windows System Error 5010,New-NetIPAddress
С этой проблемой я часто сталкиваюсь в виртуальных машинах VMWare с виртуальным сетевым адаптером VMXNet3. Новая сетевая карта определяется как новое устройство (в отличии от vNIC типа E1000). Т.е. если вы удалили у ВМ VMWare сетевую карту (vNIC), а потом добавили новую, вы не сможете использовать старый IP адрес, назначенный удаленному сетевому интерфейсу.
Также проблема скрытых сетевых адаптеров появляется после выполнения миграции физического сервера в ВМ (Physical-to-Virtual — P2V), например с помощью VMware Converter . При миграции ОС остаются отключенные физические сетевые адаптеры, статические настройки IP адресов которых вам нужно использовать для новых vNIC.
Прежде чем назначить старый статический IP адрес новому сетевому адаптеру, нужно удалить конфигурацию отключенной сетевой карты.
Показать скрытые сетевые адаптеры в диспетчере оборудования Windows
Чтобы показать скрытые (отключенные физически) сетевые адаптеры в Windows нужно запустить консоль “Диспетчер устройств” (Device Manager) в специальном режиме.
Для этого в Windows 7 (и ниже):
- Нужно запустить командую строку с правами администратора;
- Выполните команду:
set devmgr_show_nonpresent_devices=1
- Запустите консоль Device Manager:
devmgmt.msc
В верхнем меню включите пункт Вид -> Показать скрытые устройства.
Разверните секцию Сетевые адаптеры (Network adapters). В списке должны появится скрытые сетевые карты (с бледными значками). Выберите сетевую карту, которую нужно удалить, ПКМ -> Удалить устройство (Uninstall Device). Можете сразу удалить драйвер , отметив опцию Delete the driver software for this device.
Как удалить скрытую сетевую карту из командной строки или PowerShell?
Вы можете вывести список скрытых сетевых адаптеров в Windows с помощью PowerShell:
Get-PnpDevice -class net | ? Status -eq Unknown | Select FriendlyName,InstanceId
Удалить такой сетевой адаптер можно по его InstanceId (скопируйте его значение из предыдущей команды):
$InstanceId = “PCIVEN_8086&DEV_10D3&SUBSYS_07D015AD&REV_00 00C29FFFF66A80700”
$RemoveKey = "HKLM:SYSTEMCurrentControlSetEnum$InstanceId"
Get-Item $RemoveKey | Select-Object -ExpandProperty Property | %{ Remove-ItemProperty -Path $RemoveKey -Name $_ -Verbose}
Можно удалить все скрытые сетевые адаптеры с помощью скрипта PowerShell:
$Devs = Get-PnpDevice -class net | ? Status -eq Unknown | Select FriendlyName,InstanceId
ForEach ($Dev in $Devs) { $RemoveKey = "HKLM:SYSTEMCurrentControlSetEnum$($Dev.InstanceId)" Get-Item $RemoveKey | Select-Object -ExpandProperty Property | %{ Remove-ItemProperty -Path $RemoveKey -Name $_ -Verbose }}
Для удаления устройств в Windows можно использовать утилиту DevCon.exe
(Device Consol). Утилита входит в состав Windows Driver Kit (WDK):
Вывести список всех сетевых адаптеров:
devcon findall =net
Скопируйте Device Instance ID сетевого адаптера, который вы хотите удалить:
devcon -r remove "@PCIVEN_8086&DEV_10D3&SUBSYS_07D015AD&REV_00 00C29FFFF66A80700"
@
перед ID устройства.
В Windows 10/11 и Windows Server 2022/2019/2016 вместо утилиты devcon.exe можно использовать встроенную команду PnPUtil.
Вывести список сетевых адаптеров:
pnputil /enum-devices /class net
Чтобы удалить устройство, выполните:
pnputil /remove-device "PCIVEN_8086&DEV_10D3&SUBSYS_07D015AD&REV_00 00C29FFFF66A80700"
Запустите диспетчер устройств, выберите в меню Actions -> Scan for hardware changes и проверьте, что скрытая сетевая карта была удалена.
Удаление конфигурации сетевой карты из реестра
Если после удаления отключенного сетевого устройства в диспетчере устройств, вы все еще не можете назначить старый IP адрес новому адаптеру, нужно удалить IP конфигурацию старой NIC в реестре.
Настройки IP адресов сетевых интерфейсов хранятся в ветке реестра HKLMSYSTEMCurrentControlSetServicesTcpipParametersInterfaces
.
В данной ветке находится несколько ключей вида {Interface GUID}. Проверьте их по очереди пока не найдете интерфейс, у которого значение IPAddress содержит IP адрес старого сетевого интерфейса.
Запомните имя ветки реестра (это идентификатор данного сетевого адаптера). Удалите эту ветку, а также ветки:
-
HKLMSYSTEMCurrentControlSetServicesTcpipParametersAdapters{ваш_NIC_ID}
-
HKLMSYSTEMCurrentControlSetServices{ваш_NIC_ID}
-
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNetwork{ваш_NIC_ID}
Перезагрузите компьютер и попробуйте назначить старый статический IP адрес новому сетевому адаптеру.
Также рекомендуется выполнить сбросить сетевые настройки . В Windows 10 и 11 этот пункт доступен в меню Параметры -> Сеть и Интернет -> Сброс сети .
А если вы у вас возникли проблемы после установки дополнительной сетевой карты, убедитесь, проверьте что встроенный LAN интерфейс отключен в BIOS/UEFI (пункт обычно называется Onboard Gbit NIC или Onboard LAN) .