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

Нови кумулативни актуализации за сигурност на Microsoft - KB4088875 (Месечен качествен сбор) и KB4088878 (Актуализация само за сигурност) за Windows 7 SP1 и Windows Server 2008 R2, публикувана на 13 март 2018 г., причиняват сериозни проблеми с мрежовите адаптери на виртуални машини VMware. Тези актуализации водят до възстановяване на мрежовите интерфейси на vNIC и нулиране на мрежовите настройки на гостната ОС, в резултат на това, след като актуализациите са инсталирани, виртуалната машина губи посочения статичен IP адрес и става недостъпна по мрежата.

Това се случва поради факта, че към системата се добавя нова активна мрежова карта, а старият мрежов адаптер става скрит и неактивен. Новата мрежова карта е конфигурирана за динамично получаване на IP адрес от DHCP сървър. Ако се опитате ръчно да зададете стария IP адрес за новата мрежова карта, се появява грешка:

IP адресът X.X.X.X, който сте въвели за този мрежов адаптер, вече е присвоен на друг адаптер (vmxnet3 Ethernet адаптер), който вече не присъства в компютъра. Ако един и същ адрес е присвоен на двата адаптера и те станат активни, само един от тях ще използва този адрес. Това може да доведе до неправилна конфигурация на системата. Искате ли да въведете различен IP адрес за този адаптер в списъка с IP адреси в разширения диалогов прозорец?

IP адресът X.X.X.X, посочен за този мрежов адаптер, вече е присвоен на друг vmxnet3 Ethernet адаптер. Ако и на двата адаптера е назначен един и същ адрес и двата адаптера стават активни, тогава само един от тях ще може да го използва. Това може да доведе до неизправности в системата. Въведете друг IP адрес за този адаптер в списъка с IP адреси в прозореца за разширени настройки?

След инсталирането на тези актуализации виртуалният сървър губи определения си IP адрес, опитвайки се да получи нов адрес от DHCP сървъра. Това създава нов мрежов интерфейс в клона HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Параметри \ Интерфейси. Старата мрежова карта се крие.

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

Така старият IP адрес все още се счита за използваем и трябва да бъде освободен..

За да коригирате ръчно грешката, трябва да изтриете скрития мрежов адаптер в списъка на хардуера. За да покажете скрита мрежова карта в диспечера на устройства, трябва да стартирате командите

задайте devmgr_show_nonpresent_devices = 1
стартирайте devmgmt.msc

Изберете елемент от менюто View -> Показване на скрити устройства. И разширете секцията Мрежови адаптери.

След това в диспечера на устройства трябва да премахнете скритите мрежови карти vmxnet3 Ethernet Adapter #x. След това старият IP адрес може да бъде присвоен на новата мрежова карта.

Сега отворете контролния панел за мрежова връзка и редактирайте 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

Вариант изрично
Const HKEY_LOCAL_MACHINE = & H80000002
Dim oReg: Задайте oReg = GetObject ("winmgmts: impersonationLevel = impersonate! \\. \ Root \ default: StdRegProv")
Dim oShell: Задайте oShell = CreateObject ("WScript.Shell")
Dim sPath, aSub, sKey, aSubToo, sKeyToo, dwValue, Резултат, SaveResult
Dim notDeleted
NotDeleted = 0
„Вземете всички ключове в sPath
sPath = "SYSTEM \ CurrentControlSet \ Enum \ PCI"
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath, aSub


„Провеждайте през всеки ключ
За всеки sKey In aSub
„Вземете всички ключове в ключа„ sKey “
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath & "\" & sKey, aSubToo
За всеки sKeyToo In aSubToo
Резултат = oReg.DeleteKey (HKEY_LOCAL_MACHINE, sPath & "\" & sKey & "\" & sKeyToo & "\" & "\ Device Parameters" & "\ SlotPersistentInfo")
„Разрешаване на грешка само ако ключ никога не е съществувал
Ако (Резултат = 1) Или (Резултат> 2) Тогава
NotDeleted = 1
SaveResult = Резултат
Край ако
до
до

Ако (NotDeleted> 0), тогава
Wscript.Echo "Един или повече SlotPersistentInfo ключове все още съществуват под HKLM \ System \ CurrentControlSet \ Enum \ PCI \\ Параметри на устройството. Моля, изтрийте ръчно. Result =" & Result
Край ако

По принцип подобни действия могат да се извършват с помощта на една команда PowerShell:
Get-ChildItem “HKLM: // Система / CurrentControlSet / Enum / PCI / * / * / DeviceParameters / SlotPersistentInfo” | Remove-т

Можете да използвате PowerCLI, за да намерите всички виртуални машини с Vmxnet3 адаптер..
За да направите това, свържете се с vSphere сървъра.
Connect-VIServer -Server vsphere65 -User corp \ username

Сега ще изброим всички виртуални машини с ОС и използвани версии на виртуални мрежови карти.

PowerCLI C: \> Get-VM | Изберете Име, PowerState, Гост, @ N = 'NetworkAdapter'; E = [string] :: Join (',', (Get-NetworkAdapter -Vm $ _ | Select-Object -ExpandProperty Type))

За по-лесен анализ тази таблица може да бъде експортирана в Excel чрез добавяне | Export-Csv C: \ PS \ vNICrep.csv -NoTypeInformation