Hyper-V и диапазоны MAC-адресов. Как избежать конфликтов?


С ростом популярности Hyper-V, увеличением числа серверов виртуализации на предприятиях и количества используемых виртуальных машин становится актуальным вопрос сохранения уникальности используемых виртуальными машинами MAC-адресов. Как быть уверенным в том, что конфликтов из-за совпадения MAC-адресов у разных виртуальных машин не будет? Конечно, вы можете вручную задавать MAC-адрес для каждой сетевой карты каждой виртуальной машины — а также виртуальных адаптеров, подключающих «родительский» раздел к виртуальным сетям). Такой адрес называется «статическим» (Static). Но этот способ трудоёмок, слабоэффективен и подвержен челвеческим ошибкам. Для устранения этой проблемы в Windows Server 2008 и 2008 R2 существует механизм, автоматически задающий для виртуальных адаптеров последовательные MAC-адреса из специального диапазона. Однако по умолчанию этот диапазон ограничен лишь 256 значениями и не может гарантировать уникальность MAC-адресов ВМ, запущенных на разных серверах. Как же правильно спланировать инфраструктуру?


Способ первый. Ручная настройка серверов виртуализации


В Windows Server 2008 и 2008 R2 диапазоны MAC-адресов виртуальных машин Hyper-V задаются значениями MinimumMacAddress и MaximumMacAddress ключа реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\Virtualization. В Windows Server 2008 R2 нет нужды просматривать и редактировать эти значения напрямую в реестре — они были добавлены в интерфейс диалогового окна «Virtual Network Manager» (Диспетчер виртуальных сетей).



Эти значения генерируются ОС при установке роли Hyper-V. Первые три октета являются идентификатором (00-15-5d), закреплённым за Microsoft как производителем сетевой карты (хоть она и виртуальная). Следующие два октета берутся из второй половины IP-адреса первого сетевого адаптера родительского сервера. На рисунке выше это 0b-27, потому что единственный IP-адрес моего сервера равен 192.168.11.39. Последний октет у значения MinimumMacAddress по умолчанию равен нулю, а у значения MaximumMacAddress равен FF — то есть на 256 больше начального.


Важно понимать, что диапазоны адресов генерируются только при установке роли Hyper-V и не сбрасываются при выполнении команды SysPrep. Так что если вы не используете SCVMM для управления инфраструктурой виртуализации (об этом см. ниже) и развёртываете серверы с помощью клонирования (например, используя MDT) — то выполняйте установку роли Hyper-V уже после применения образа, либо сами изменяйте диапазоны MAC адресов (вручную или сценарием). Не забывайте при этом проверять, чтобы диапазоны на разных серверах виртуализации не пересекались. Альтернативным вариантом будет перед запуском утилиты SysPrep удалить из реестра значения MinimumMacAddress и MaximumMacAddress. После развёртывания из образа система сгенерирует их автоматически при следующем запуске службы VMMS.


Динамический MAC-адрес присваивается виртуальному адаптеру при первом включении виртуальной машины и остаётся в свойствах ВМ до её удаления (или смены MAC-адреса на статический). Это верно как для унаследованных (Legacy), так и для синтетических (Synthetic) сетевых адаптеров, вне зависимости от того, подключены они к внешней (External), внутренней (Internal) или частной (Private) виртуальной сети. С настройками по умолчанию вам гарантирована уникальность 256 MAC-адресов, что дает возможность запустить 256 виртуальных машин, имеющих по одному сетевому интерфейсу. Или всего 64 виртуальных машины с четырьмя интерфейсами в каждой. Или любую комбинацию при условии, что суммарное количество интерфейсов запущенных виртуальных машин не превысит 256. Если вам требуется обеспечить возможность одновременной работы на одном узле большего числа виртуальных машин, потребуется расширить на этом узле диапазон MAC-адресов. Технически вы можете задать для него любые значения. Во избежание конфликтов с MAC-адресами физического оборудования рекомендется придерживаться диапазона, зарегистрированного за Microsoft (00-15-5D). Например, установив значение MinimumMacAddress в 00-15-5D-01-80-00 и MaximumMacAddress в 00-15-5D-01-8F-FF, вы получите диапазон из 4096 уникальных MAC-адресов на узле. И можете сделать аналогичные настройки на 4095 других узлах, задавая непересекающиеся диапазоны, начинающиеся на 00-15-5D.


Способ второй. System Center Virtual Machine Manager


Установив SCVMM и развернув его агентов на всех серверах виртуализации, создавая виртуальные машины и меняя их сетевые настройки из консоли администратора SCVMM, вы автоматически решаете задачу уникальности MAC-адресов виртуальных машин. SCVMM контролирует диапазоны динамических адресов на всех управляемых узлах, а при указании статических MAC-адресов проверяет их уникальность.


Для всех управляемых из SCVMM виртуальных машин на базе Hyper-V, VS2005 или VMware ESX зарегистрирован глобальный диапазон из 3998719 уникальных MAC-адресов в от 1D-D8-B7-1C-00 до 00-1D-D8-F4-1F-FF. Вы можете изменить этот диапазон, зайдя в представление «Administration» консоли администратора VMM, выбрав пункт «Networking» и управляя значениями полей «Global Static MAC Address Range». При этом следует соблюдать два правила.



  • Первые три октета для начального и конечного значения диапазона MAC-адресов должны быть одинаковыми.

  • Нельзя использовать диапазоны, уже зарегистрированные за Microsoft и VMware. Их список можно посмотреть в статье «How to Set the Static MAC Address Range for Virtual Network Devices» из официальной документации по SCVMM.

Следует понимать, что при создании виртуальных машин из консоли SCVMM или его же коммандлетов Powershell, сетевые интерфейсы ВМ получат статические MAC-адреса из диапазона, указанного в настройках VMM (Global Static MAC address Range). Если же вы создадите виртуальную машину вручную через консоль (или API) Hyper-V Manager, то она получит динамический MAC-адрес из диапазона, заданного локально на узле, — согласно правилам, указанным в описании первого способа.


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

Comments (11)

  1. Alex A says:

    Гм.

    Динамический МАС никак к сетевому оборудованию не привязан. Он привязан к хосту.

    Если машина вживую переносится на другой узел (с другими диапазонами), то никакого отключения адаптера не будет. Мак сменится при холодной перезагрузке ВМ.

    Проблема решается использованием SCVMM, имеющим единый пул адресов.

    Действительно, в случаях, когда логика сервиса работает с МАК адресами (например NLB или другие балансировщики) разумнее ставить статический адрес. НЕ из диапазона Hyper-V.

  2. Alex A says:

    Всё впереди 🙂

  3. Anonymous says:

    Добрый день.Денис Дягилев посоветовал обратиться с моим вопросом в данный блог.

    Имеется 3-х нодовый кластер Hyper-V на Windows Server  R2 Enterprise. Каждая нода имеет 4 физических интерфейса, которые попартно затимены (1 тим интерфейс используется для внутренних нужд кластер, второй для виртуальных машин и управления нодами).

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

    Обычно данная проблема решается удалением и последующим добавлением сетевого интерфейса в виртуальную машину.

    На уровне сети данные проблемы мне неясны, поэтому я грешу на сетевую подсистему гипервизора.

    Исходя из постов на форуме Technet я вижу 2 возможные проблемы:

    1.1. Машины имеют динамические MAC адреса. В постах видел рекомендации по отключению динамической MAC адресации.

    2.2. На разных нодах настроены разные MAC адрес пулы. К сожалению не нашел Best Practices по настройке данного параметра в кластере Hyper-V

    В своем посте вы написали о использовании динамических MAC адресов. Насколько использование динамических адресов оправдано в кластерной среде? И если ли вменяемая документация по использованию динамических маков в кластере. К примеру для нормальной работы NLB (Exchnage CAS) необходимо указать статический MAC и включить функцию спуфинга.

    Пока SCVMM нет, его внедрение планируется в течении 2 месяцев.

    Спасибо.

  4. Dmitry Lykov says:

    Было бы логично включить службу управления mac-адресами в виде клиента и/или сервера в дистрибутив Hyper-V.

  5. Очевидный минус динамических MAC – возможная их привязка к сетевому оборудованию. Более того, виртуальная машина (с автоматически генерируемым МАС) будет получать его каждый при обнаружении гипервизором выхода адреса из имеющегося диапазона. И виртуальный сетевой адаптер будет отключен до того момента, пока не произойдет перезагрузка ВМ, т.к. Hyper-V не может изменить МАС на работающей ОС.

  6. Alex A says:

    Формально, динамический МАК может измениться при каждом рестарте.

    Обычно хост пробует оставить за ВМ её МАК по возможности.

    Если нужно более четко, прописывайте статику, или ставьте SCVMM

  7. Под привязкой я имел в виду возможную зависимость трафика от вышестоящего сетевого оборудования, осуществляющее маршрутизацию, при наличии на нем ACL и т.п.

  8. По поводу NLB рекомендовал обратиться к данной статье support.microsoft.com/…/953828

  9. Anonymous says:

    По поводу NLB  у меня вопросов нет. Я просто привел его в качестве примера когда использование динамических MAC адресов вредно. До перестройки у меня тоже возникали проблемы с сетью на NLB виртуальных машинах,сейчас их нет. Поэтому хотелось бы знать в каких случаях вредно использование динамических MAC адресов?

    Спасибо.

  10. Igor says:

    Кстати, о присвоении динамических МАК-ов. Наблюдал следующий случай. Кластер виртуальных машин из двух серверов. Одна ВМ создана в кластере на одном из серверов, на другом ни разу не побывала. На этом сервере произошел сбой, и он был жестко выключен. При запуске ВМ на другом сервере кластера, сетевые адаптеры этой ВМ получили новые динамические МАК-адреса. Т.е. не только первое включение ВМ?

  11. Igor says:

    Собственно, я как раз к этому и написал – что, похоже, не "от первого запуска и на всю жизнь, до удаления", есть исключения. А создавалась/стартовалась ВМ именно через SCVMM.

    Со статикой и так ясно – тут же на нее и перевели Линукс-ВМ, которые к МАК-у критичны.

Skip to main content