Виртуальные машины и сети
Для грамотного управления виртуальной инфраструктурой необходимо иметь представление о том, как организуется сетевое взаимодействие виртуальных машин между собой, с хостовой ОС (parent partition в терминологии MS), и с самой локальной сетью. В этой статье я постараюсь объяснить в меру своих возможностей тонкости работы виртуальных машин с сетью. Тем, кто уже работал с другими платформами виртуализации (VMWare, Virtual Server, etc.) все, о чем я буду писать, скорее всего, уже известно, тем не менее, на уровне терминологии вполне возможны некие различия.
Работа с виртуальными сетями
Все сетевое взаимодействие в среде Microsoft Hyper-V осуществляется через виртуальные сети (Virtual Networks). Де-факто виртуальная сеть – это виртуальный коммутатор, работающий на 2м уровне модели OSI. К этому виртуальному коммутатору в дальнейшем могут подсоединяться сетевые адаптеры: как виртуальные, так и физические. Тем не менее, надо отметить, что взаимодействовать между собой виртуальные сети не могут. Для такого взаимодействия необходимо некое внешнее устройство. Я все же надеюсь, что в одной из следующих версий появятся полноценные виртуальные сети с виртуальными коммутаторами – например такие, как в VMWare ESX.
В Hyper-V существует три типа виртуальных сетей:
- External – эта виртуальная сеть имеет выход «наружу». Это означает, что к виртуальному коммутатору будет подключен порт физического сетевого адаптера, и виртуальные машины, подключенные к сети смогут работать с сетью точно так же, как обычные физические машины, подключенные к сети.
- Internal – внутренняя сеть. Виртуальные машины, подключенные к такой сети, могут взаимодействовать только между собой и с хостовой ОС. Во «внешний мир» они выходить не смогут.
- Private – «еще более внутренняя сеть». Виртуальные машины могут взаимодействовать только между собой, к хостовой ОС и к общей сети доступа нет.
Создание новых виртуальных сетей, а так же изменение параметров уже созданных осуществляется через Virtual Network Manager (в правой колонке консоли Hyper-V Manager). Чтобы создать новую сеть – нужно выбрать New virtual network, затем выбрать тип сети и нажать Add.

Окно Virtual Network Manager
После нажатия Add в списке виртуальных сетей появляется новая, с дефолтным именем «New Virtual Network». Выбрав ее, можно задать новое имя сети (рекомендуется давать понятные имена – например External, Internal и т.д.). Здесь же можно поменять тип сети на другой или включить идентификацию VLAN (подробнее о VLAN – далее). Если выбран тип сети External – то здесь же можно выбрать физический сетевой адаптер, к которому эта сеть будет подсоединена. Это может быть важно, если сервер имеет несколько физических сетевых адаптеров.
Переходим к виртуальным машинам...
Логично, что для того, чтобы работать с сетью, виртуальная машина должна иметь как минимум один виртуальный сетевой адаптер. Все создаваемые виртуальные машины по умолчанию комплектуются одним сетевым адаптером. При создании виртуальной машины можно выбрать, к какой из созданных виртуальных сетей он будет подключен. Если виртуальная машина должна иметь несколько сетевых адаптеров – их необходимо добавить вручную в свойствах виртуальной машины. Разумеется, виртуальная машина должна быть в выключенном состоянии (Off), чтобы иметь возможность добавления новых «виртуальных железок». В Hyper-V есть два типа сетевых адаптеров: Network Adapter и Legacy Network Adapter. Network Adapter – работает на скорости 1Гбит/с, и требует для своей работы установленных Integration Services. Legacy Network Adapter эмулирует работу 100Мбит/с сетевого адаптера Intel 21140-based PCI Fast Ethernet Adapter. Рекомендуется использовать Network Adapter, так как он работает намного быстрее. Использовать Legacy Network Adapter имеет смысл в двух случаях:
- Если версия ОС, установленная на виртуальной машине, не позволяет установить Integration Services.
- Если на виртуальной машине будет использоваться удаленная загрузка ОС (к примеру – установка Windows c сервера RIS/WDS).
У любого виртуального сетевого адаптера, независимо от его типа, есть некотрые настройки.

Свойства виртуального сетевого адаптера
Самое, пожалуй, главное здесь — выбор виртуальной сети, к которой наш адаптер будет подключен. Так же здесь можно задать адаптеру определенный MAC-адрес (мне еще ни разу не пригодилось) и присвоить адаптеру определенный VLAN ID.
А как же хост?
Как уже писалось, в некоторых случаях виртуальные сети могут взаимодействовать так же и с хостовой ОС, установленной на физическом сервере. Как это происходит? Очень просто. Допустим, у нас создана одна виртуальная сеть типа External (Ext), одна — типа Internal (Int), и одна — типа Private (Pvt). Заглянем в управление сетевыми адаптерами (Control Panel — Network and Sharing Center — Manage Network Connections). 
Сетевые адаптеры на хосте
В нашем случае — у сервера появилось три сетевых адаптера. Слева — направо:
- «Железный» сетевой адаптер, установленный в сервер. Играет исключительно роль «моста» между гипервизором и сетью, если открыть его свойства — все протоколы 3го уровня и выше на нем отключены, включен только Microsoft Virtual Network Switching Protocol (думаю, понятно и без перевода).
- Виртуальный адаптер для External-сети (именно на нем прописаны IP-адрес, под которым наш сервер присутствует в сети, DNS, etc.). Взаимодействует хостовая ОС с сетью именно через этот виртуальный адаптер, и уже с него пакеты переправляются в сеть через физический адаптер.
- Виртуальный адаптер для Internal-сети. Используется для связи виртуальной сети и хостовой ОС, с физическими сетевыми адаптерами не связан.
Для виртуальной сети типа Private никакие виртуальные сетевые адаптеры, естественно, не создаются. В Private-сети виртуальные машины взаимодействуют исключительно между собой.
Масло масляное, или виртуальная сеть внутри виртуальной сети
Аббревиатура VLAN расшифровывается как Virtual Local Area Network. К сожалению, понятие «виртуальная сеть» мы уже использовали, так что прошу не путать «виртуальную сеть» и VLAN. Итак, что же такое VLAN? VLAN – это расширение 2 уровня OSI, заключающееся в пометке пакетов специальным номером (VLAN ID). Каждому сетевому адаптеру, входящему в VLAN, присваивается одинаковый VLAN ID. Адаптер, отправляющий пакет, помечает его своим VLAN ID. Коммутаторы (виртуальные сети, и физические коммутаторы, поддерживающие VLAN) хранят таблицу соответствия МАС-адресов сетевых адаптеров и VLAN ID, и благодаря этому к адаптерам, имеющим VLAN ID, попадают только те пакеты, которые помечены соответствующим номером, то есть, даже будучи подключенными к одному и тому же коммутатору, сетевые адаптеры могут быть разнесены по разным VLANам и таким образом находится в разных широковещательных доменах. То есть фактически – это «сеть внутри сети». В нашем случае получается еще смешнее: виртуальная сеть внутри виртуальной сети.
Проиллюстрировать принцип работы VLANов можно следующей картинкой:

Иллюстрация работы VLAN'ов
На рисунке мы видим 3 виртуальные машины внутри одного хоста. Физически они соединены с одним виртуальным коммутатором. Тем не мене, логически – только адаптеры внутри одного VLAN могут обмениваться пакетами друг с другом.
Надеюсь, что я объяснял не слишком сумбурно, и этой статьи достаточно, чтобы понять, как организуется сетевое взаимодействие в среде Hyper-V. Если я что-то упустил – смело скажите об этом в комментариях, я обязательно поправлю.


Не совсем понятен пункт
«... Тем не менее, надо отметить, что взаимодействовать между собой виртуальные сети не могут. Для такого взаимодействия необходимо некое внешнее устройство. Я все же надеюсь, что в одной из следующих версий появятся полноценные виртуальные сети с виртуальными коммутаторами — например такие, как в VMWare ESX...»
В ESX виртуальные коммутаторы точно так же между собой взаимодействовать не могут.
Или есть еще какие то отличия, делающие вКоммутаторы Hyper-V неполноценными?
К сожалению, сейчас нет ESX под рукой, чтобы проверить. И работал я с ним давно. И мне казалось что там вроде бы можно было соединять Virtual Switches между собой.
Извиняюсь, если я ошибся — проверим и поправим
можете не проверять
Да, Михаил, если такой человек как вы говорит что это не возможно, значит так оно и есть
Рад что вам интересен наш проект
Хороший проект
буду читать, следить чтобы ESX не обижали слишком сильно
Да кто ж его обижает!
Очень хороший продукт, Microsoft'у есть чему поучиться
Автор можно увидеть эту статью в .pdf формате?
Господа, может быть я что-то не совсем понимаю, но в ESXi есть такая штука как dvSwitch... разве это не оно?
В ESX для взаимодействия двух виртуальных свитчей можно использовать маааленький роутер — виртуальную машинку с 32МБ оперативки и линуксом, помещающимся на виртуальной же дискете
Зачем напрямую связывать два виртуальых свитча средствами гипервизора (виртуальным патчкордом)? Это же можно петлю получить. А вдруг у нас коммутаторы STP не поддерживают? Конфуз будет
А нужен вообще виртуальный патчкорд для виртуальных свитчей? Так можно и «петлю» получить, конфуз будет.
Для связи виртуальных свитчей можно использовать маленькие виртуалки-роутеры.
c виртуализацией на Hyper-V столкнулись недавно.
и сразу косяк:
1) в диспечере вирт сетей создаем сеть.
2) в настройках вирт машины в Сетевом адаптере указываем это подключение.
при запуске Вирт машины (установлен вин серв 2003) никаких сетевых адаптеров нет.
из неопознанных устройств VMBUS/4&4B018EB&0
как настроить или установить сеть?
Ответ прост: установить набор доп. драйверов (Integration Services ). Для Windows 2003 это обязательно.
www.virtualizationadmin.c...218103222045.gif
Или достаточно установить Устаревший сетевой адаптер, но лучше поставить IS
А какие настройки забиваются на втором физическом адаптере, когда его забирает виртуальная сеть? У меня сервер сам на себя откликается на 169.254.ххх.ххх, вместо того что бы отдавать с первого и главного адаптера его 192.168.1.10. Если забивать адрес из 192.168 подсети, то днс на сервере каталогов регистрирует второй адрес на не 1.10 как мне нужно.
У меня такая же проблема. Физический адаптер который используется только для моста виртуальной сети каким-то образом получает адрес от DHCP, в итоге сервер откликается на этот адрес, а не на реальный другого сетевого адаптера. Хотя если сделать ipconfig /all, то этого моста не видно, а только мой сетевой адаптер.
Как решить проблему?
В WS2008R2 в свойствах виртуальной сети есть галочка, позволяющая External-сети быть «невидимой» для хостовой ОС.
Александр, спасибо! Как сразу не заметил
нужно просто убрать галку с «Allow managment operating system to share this network adapter» в Virtual Network Manager