Новые кумулятивные обновления безопасности Microsoft — KB4088875 (Monthly Quality Rollup) и KB4088878 (Security Only Update) для Windows 7 SP1 и Windows Server 2008 R2, выпушенные 13 марта 2018, вызывают серьезные проблемы с сетевыми адаптерами виртуальных машин VMware. Данные обновления приводят к пересозданию сетевых интерфейсов vNIC и сбросу сетевых настроек гостевых ОС, как следствие, после установки обновлений виртуальная машина теряет заданный статический IP адрес и становится не доступной по сети.
Происходит это из-за того, что в системе добавляется новая сетевая карта активный, а старый сетевой адаптер становится скрытым и неактивным. Новая сетевая карта настроена на динамическое получение IP адреса от DHCP сервера. В том случае, если попытаться вручную выставить старый 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
Выберите пункт меню View -> Show Hidden Devices. И разверните секцию Network Adaters.
После этого в диспетчере устройств нужно удалить скрытые сетевые карты 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
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
Теперь выведем список всех виртуальных машин с ОС и используемыми версиями виртуальных сетевых карт.
PowerCLI C:\> Get-VM |Select Name,PowerState,Guest, @{N=’NetworkAdapter’;E={[string]::Join(‘,’,(Get-NetworkAdapter -Vm $_ | Select-Object -ExpandProperty Type))}}
Для удобства анализа данную таблицу можно экспортировать в Excel, добавив
| Export-Csv C:\PS\vNICrep.csv –NoTypeInformation
Спасибо.
Пока не заметил, но на 2008R2 только 1С крутится, а ее обновляет 1С админ.
Предупрежу его.
На самом деле vmxnet3 адаптеры по умолчанию не используются. Этот тип адаптера выбирается вручную. У меня из 100+ ВМ с 2008 R2 адаптер vmxnet3 обнаружился только в 5, но критичных (Exchange). Причем во всех случаях это ВМ с двумя сетевыми интерфейсами.
У меня был какой-то гимор с адаптерами E1000. Виртуалки просто теряли сеть. Непредсказуемо.
Поэтому я прошелся по виртуалкам и все сетевухи, принудительно, установил VMXNET3
А вот серверов 2008R2, по счасть, всего пара штук среди полсотни виртуальных серверов.
Правда оба критичные 🙁 1C и ее SQL
Шо, опять? Мы же в декабре 17го это всё уже проходили. Номера патчей не помню, искать надо.
Да, уже была такая проблема. Если вы уже запускали этот VBS скрипт, повторится не должно. Если откатывали патч — будет.
В коде скрипта двойные кавычки » превратились в «елочки» «».
О! Спасибо. Не заметил. Поправил в сохраненной копии.
Спасибо, поправил! Это извечная проблема импорта word -> wordpress