Работа с дублированием пула MAC-адресов в Hyper-V

Опубликовано: 23 Апреля, 2023

Windows Server 2008 Hyper-V предоставляет виртуальным машинам пул адресов управления доступом к среде (MAC) при установке Hyper-V. В Hyper-V есть алгоритм для работы с дубликатами MAC-адресов на одном хосте, но не на нескольких хостах. В этой статье описывается, как пулы MAC-адресов работают в Hyper-V, как можно случайно развернуть узлы с повторяющимися пулами MAC-адресов, как изменить пул по умолчанию, как определить, возникает ли ситуация с дублированием MAC-адресов на виртуальных машинах, и как использование SCVMM 2008 для управления хостами Hyper-V может предотвратить дублирование MAC-адресов.



Введение в пулы MAC-адресов


Hyper-V позволяет создать виртуальную машину со статическим или динамическим MAC-адресом. Статический MAC-адрес — это адрес, который администратор Hyper-V назначает виртуальной машине. Динамический адрес — это адрес, который Hyper-V назначает из своего пула MAC-адресов.


Когда Hyper-V установлен, пул MAC-адресов создается и сохраняется в реестре по адресу

HKLMSoftwareMicrosoftWindows NTCurrentVersionVirtualization

Он хранится в виде диапазона из 256 значений, определяемых двумя ключевыми значениями: MinimumMacAddress и MaximumMacAddress.


MAC-адрес состоит из двух частей: OEM-идентификатора и уникального значения. Чтобы предоставить MAC-адреса, Microsoft пришлось зарегистрироваться, чтобы получить собственный идентификатор (00-15-5d), поэтому все диапазоны MAC-адресов Hyper-V начинаются с этих трех октетов. Остальные три октета генерируются с использованием последних двух октетов IP-адреса первой пронумерованной сетевой карты на узле Hyper-V, преобразованных в шестнадцатеричный формат. Таким образом, если IP-адрес первой перечисленной сетевой карты был 192.168.1.133, последние два октета преобразуются в шестнадцатеричное число 1,133, становятся 01-85 и используются в качестве следующих двух октетов в MAC-адресе. Это дает 00-15-5d-01-85 в качестве первых пяти октетов. Чтобы установить диапазон из 256 адресов, последний октет MinimumMacAddress устанавливается равным 00, а последний октет MaximumMacAddress устанавливается равным FF. Это устанавливает диапазон пула MAC-адресов от 00-15-5d-01-85-00 до 00-15-5d-01-85-FF.


Изображение 28304
фигура 1


При первом включении виртуальной машины и ее настройке для использования динамического MAC-адреса ей назначается следующее доступное значение в диапазоне пула MAC-адресов. Если у виртуальной машины было несколько активных сетевых адаптеров, то каждый адаптер получает MAC-адрес из пула. Кроме того, при создании внутренних виртуальных сетей виртуальный адаптер, созданный на узле Hyper-V, использует MAC-адрес из пула. По умолчанию может быть всего 256 устройств, использующих MAC-адреса из динамического пула. Это означает, что у вас может быть 256 виртуальных машин с одним сетевым адаптером, 128 виртуальных машин с двумя сетевыми адаптерами, 126 виртуальных машин с двумя сетевыми адаптерами и 4 определенными внутренними сетями, а также любая другая комбинация, равная 256 устройствам. После назначения динамического MAC-адреса он не изменяется.


По мере назначения MAC-адресов в конечном итоге 256 MAC-адресов в пуле раздаются виртуальным машинам. Если виртуальная машина удалена, MAC-адрес становится доступным для повторного использования. Когда раздаются все 256 MAC-адресов, поиск доступного адреса начинается с первого адреса в пуле. Если адрес активно используется, он будет пропущен и будет использован следующий доступный адрес. Если поиск MAC-адреса проходит полный цикл без нахождения доступного адреса, будет выдано сообщение об отсутствии доступных MAC-адресов.


Изменение пула MAC-адресов на узле Hyper-V


Наличие 256 активных MAC-адресов на одном хосте удовлетворит большинство потребностей развертывания. Если вы считаете, что превысите лимит MAC-адресов, вы можете изменить значения реестра, чтобы расширить диапазон. Вы можете использовать дополнительный октет или часть октета, чтобы увеличить количество доступных адресов. Чтобы использовать неполный октет, измените значения MinimumMacAddress и MaximumMacAddress, чтобы использовать последние три шестнадцатеричных цифры для диапазона адресов.

МинимальныйMacAddress = 00-15-5d-01-80-00
МаксимальныйMacAddress = 00-15-5d-01-8F-FF

Внесение этого изменения обеспечит пул из 4096 MAC-адресов. Вы захотите сделать это перед созданием каких-либо виртуальных машин или внутренних сетей.


Ошибки развертывания, приводящие к дублированию пулов MAC-адресов


Поскольку пул MAC-адресов создается при установке роли Hyper-V, попытка установить роль и образ физической машины приведет к тому, что каждый сервер Hyper-V, развернутый с использованием образа, будет иметь один и тот же пул MAC-адресов. Даже если вы выполните sysprep перед созданием образа, значения реестра не сбрасываются.


Есть несколько способов обойти эту проблему:




  1. Не устанавливайте роль Hyper-V перед системной подготовкой машины, а установите ее как часть процесса после мини-настройки.


  2. Прежде чем выполнять sysprep для машины, удалите следующие два значения ключа в разделе HKLMSoftwareMicrosoftWindows NTCurrentVersionVirtualization.



    1. МинимумMacAddress


    2. МаксимальныйMacAddress

Использование первого варианта приведет к принудительному использованию уникальных значений для пула MAC-адресов при установке роли Hyper-V. Использование второго варианта приведет к принудительному воссозданию ключей при запуске службы VMMS во время загрузки.


SCVMM 2008 и глобальные пулы статических MAC-адресов


System Center Virtual Machine Manager 2008 использует другой подход к управлению виртуальными машинами и MAC-адресами, используя статические MAC-адреса из определенного пула. Этот пул используется на всех хостах, которыми он управляет, независимо от типа хоста (Virtual Server 2005 R2 SP1, Hyper-V или VMware). По умолчанию пул находится в диапазоне от 00-1D-D8-B7-1C-00 до 00-1D-D8-F4-1F-FF для 3 998 719 доступных MAC-адресов. Вы можете определить свой собственный диапазон, если хотите, но вы должны следовать следующим правилам:




  1. Первые три октета должны быть одинаковыми для минимального и максимального адресов.


  2. Вы не можете использовать октеты, которые уже используются Microsoft или VMware.

Чтобы изменить диапазон по умолчанию в System Center Virtual Machine Manager 2008, выполните следующие действия.



  1. Откройте консоль администрирования SCVMM.
  2. Нажмите на кнопку просмотра Администрирование.
  3. Щелкните Сеть.
  4. Нажмите Глобальный диапазон статических MAC-адресов.
  5. На панели действий щелкните Изменить.
  6. Измените значения диапазона.
  7. Нажмите «ОК».

Теперь все виртуальные машины, развернутые с помощью административной консоли System Center Virtual Machine Manager 2008 или с помощью командлетов SCVMM PowerShell, получат статический MAC-адрес из глобального пула.


Примечание:
Если вы развертываете виртуальную машину с помощью MMC Hyper-V Manager на узле, управляемом SCVMM, виртуальная машина не будет использовать пул статических MAC-адресов SCVMM, а будет использовать локально определенный пул динамических MAC-адресов на узле Hyper-V.


Обнаружение конфликтов MAC-адресов


Коллизии MAC-адресов — странные звери для обнаружения. Если вы развертываете виртуальные машины с разных хостов и у вас возникает непоследовательное поведение при эхо-запросе между машинами, у вас могут быть дубликаты MAC-адресов на ваших виртуальных машинах. Как правило, конфликт MAC-адресов приводит к тайм-аутам запросов во время эхо-запросов, ошибкам недостижимости хоста назначения и несогласованным результатам при входе в систему или доступе к файловому ресурсу. Например, вы можете без проблем пропинговать несколько раз, а затем сразу же последует тайм-аут.


Чтобы определить, есть ли у вас повторяющиеся MAC-адреса, вы можете проверить значения с хоста Hyper-V или из гостей. Чтобы выполнить проверку с узла Hyper-V, просмотрите параметры обеих виртуальных машин, выберите сетевой адаптер и сравните MAC-адрес, отображаемый в пользовательском интерфейсе.


Изображение 28305
фигура 2


Для проверки из гостевой ОС откройте командную строку в гостевой ОС и выполните команду ipconfig /all. Вы можете увидеть MAC-адрес сетевого адаптера. Сравните эти значения с другими виртуальными машинами, чтобы определить, есть ли повторяющийся MAC-адрес.


Вывод


Для развертывания узлов Hyper-V с использованием образа требуется либо установить роль Hyper-V после развертывания образа на физических машинах, либо удалить ключи MinimumMacAddress и MaximumMacAddress из реестра и перезапустить службу VMMS, чтобы гарантировать, что каждый хост получает уникальный диапазон MAC-адресов. Использование SCVMM для управления фермой узлов и предоставления новых виртуальных машин устраняет необходимость в управлении диапазоном MAC-адресов, созданным Hyper-V.