Проблемы с сетевыми адаптерами vmxnet3 в Windows (2008 R2 и 7) после установки обновлений KB4088875 и KB4088878

Новые кумулятивные обновления безопасности Microsoft — KB4088875 (Monthly Quality Rollup) и KB4088878 (Security Only Update) для Windows 7 SP1 и Windows Server 2008 R2, выпушенные 13 марта 2018, вызывают серьезные проблемы с сетевыми адаптерами виртуальных машин VMware. Данные обновления приводят к пересозданию сетевых интерфейсов vNIC и сбросу сетевых настроек гостевых ОС, как следствие, после установки обновлений виртуальная машина теряет заданный статический IP адрес и становится не доступной по сети.

Происходит это из-за того, что в системе добавляется новая сетевая карта активный, а старый сетевой адаптер становится скрытым и неактивным. Новая сетевая карта настроена на динамическое получение IP адреса от DHCP сервера. В том случае, если попытаться вручную выставить старый IP адрес для новой сетевой карты, появляется ошибка:

The IP address X.X.X.X you have entered for this network adapter is already assigned to another adapter (vmxnet3 Ethernet adapter) which is no longer present in the computer. If the same address is assigned to both adapters and they become active, only one of them will use this address. This may result in incorrect system configuration. Do you want to enter a different IP address for this adapter in the list of IP addresses in the advanced dialog box?
The IP address X.X.X.X you have entered for this network adapter is already assigned to another adapter (vmxnet3 Ethernet adapter) which is no longer present in the computer

IP-адрес X.X.X.X, указанный для этого сетевого адаптера, уже назначен другому адаптеру vmxnet3 Ethernet. Если обоим адаптерам назначен один и тот же адрес, и оба адаптера становятся активными, то только одно из них сможет его использовать. Это может привести к неполадкам в работе системы. Ввести другой IP-адрес для этого адаптера в список IP-адресов в окне дополнительных параметров?

После установки данных обновлений виртуальный сервер теряет назначенный ему IP адрес, пытаясь получить новый адрес от DHCP сервера. При этом создается новый сетевой интерфейс в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces. Старая сетевая карта при этом скрывается.

Проблема проявляется только на виртуальных машинах с Windows 7 / 2008R2 с виртуальным сетевым адаптером типа vmxnet3.

Таким образом старый IP адрес все еще считается используемым и его нужно освободить.

Чтобы вручную исправить ошибку нужно удалить скрытый сетевой адаптер в списке оборудования. Для того, чтобы отобразить скрытую сетевую карту в диспетчере устройств, нужно выполнить команды

set devmgr_show_nonpresent_devices=1
start devmgmt.msc

set devmgr_show_nonpresent_devices=1

Выберите пункт меню View -> Show Hidden Devices. И разверните секцию Network Adaters.

После этого в диспетчере устройств нужно удалить скрытые сетевые карты vmxnet3 Ethernet Adapter #x. После этого старый IP адрес можно будет назначить новой сетевой карте.

скрытый сетевой адаптер Ethernet типа vmxnet3 в Windows 2008 R2 / WIn 7

Теперь откройте панель управления сетевыми подключениями и отредактируйте IP настройки нового адаптера. Сохраните изменения (перезагрузка не потребуется).

Для автоматического исправления данной проблемы Microsoft предлагает воспользоваться следующим VBS скриптом (https://support.microsoft.com/en-us/help/3125574/convenience-rollup-update-for-windows-7-sp1-and-windows-server-2008-r2), который нужно запустить до или после установки обновлений.

Перед выполнением скрипта рекомендуется создать резервную копию следующей ветки реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI .

Код скрипта fixPCI.vbs

Option Explicit
Const HKEY_LOCAL_MACHINE = &H80000002
Dim oReg : Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Dim oShell : Set oShell = CreateObject("WScript.Shell")
Dim sPath, aSub, sKey, aSubToo, sKeyToo, dwValue, Result, SaveResult
Dim NotDeleted
NotDeleted = 0
' Get all keys within sPath
sPath = "SYSTEM\CurrentControlSet\Enum\PCI"
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath, aSub


' Loop through each key
For Each sKey In aSub
' Get all subkeys within the key 'sKey'
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath & "\" & sKey, aSubToo
For Each sKeyToo In aSubToo
Result = oReg.DeleteKey(HKEY_LOCAL_MACHINE, sPath & "\" & sKey & "\" & sKeyToo & "\" & "\Device Parameters" & "\SlotPersistentInfo")
' Allow failure only if key never existed
If (Result = 1) Or (Result > 2) Then
NotDeleted = 1
SaveResult = Result
End If
Next
Next

If (NotDeleted > 0) Then
Wscript.Echo "One or more SlotPersistentInfo keys still exist under HKLM\System\CurrentControlSet\Enum\PCI\\\Device Parameters. Please delete manually. Result = " & Result
End If

В общем-то аналогичные действия можно выполнить с помощью одной команды PowerShell:
Get-ChildItem “HKLM://System/CurrentControlSet/Enum/PCI/*/*/DeviceParameters/SlotPersistentInfo” | Remove-Item

Чтобы найти все виртуальные машины с адаптером Vmxnet3, можно воспользоваться PowerCLI.
Для этого, подключится к серверу vSphere.
Connect-VIServer -Server vsphere65 -User corp\username

Connect VIServer

Теперь выведем список всех виртуальных машин с ОС и используемыми версиями виртуальных сетевых карт.

PowerCLI C:\> Get-VM |Select Name,PowerState,Guest, @{N=’NetworkAdapter’;E={[string]::Join(‘,’,(Get-NetworkAdapter -Vm $_ | Select-Object -ExpandProperty Type))}}

powercli вывод списка типов адаптеров всех виртуальных машинtypes

Для удобства анализа данную таблицу можно экспортировать в Excel, добавив | Export-Csv C:\PS\vNICrep.csv –NoTypeInformation


Предыдущая статья Следующая статья

Комментариев: 8 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)