Тонкости desktop-виртуализации на windows-хостах

Мой хороший знакомый и тезка поделился парой нюансов по десктопной виртуализации.

Дисклаймер: отношение к разным ОС, схемам их лицензирования и доступности исходных кодов есть личное мнение автора.

Пролог (издалека)

Давным-давно, в далекой-далекой галактике … эээ … это уже было и это не то. Давным-давно, но бородато-пузатые дяди-админы в вытянутых свитерах с чертенком скажут, что я молокосос … так вот, решил я изучить linux…

(тут описание мук, связанных с выбором дистрибутива)…

и выбрал я FreeBSD. Попробовал – раза с третьего понравилось. И стал я говорить всем своим друзьям-админам что свободное ПО – это круто. Но на законный вопрос «А чем собственно открытое и бесплатное ПО лучше чем проприетарное?» у меня был только один ответ: «Оно открытое и бесплатное». Честно говоря я и себе задавал этот вопрос, но не мог внятно ответить на него, а со временем пришел к выводу, что все ОС и ПО для них одинаковые и в каждом конкретном случае надо выбирать правильный инструмент, пока не случилось ЭТО.

Глава 1. Почему открытое ПО лучше.

Так получилось, что у меня есть прапрадедушка всех современных планшетов. Модель не имеет значения, главное что на x86 – обычный писюк с пальцетыкательным экраном во всю морду и несколькими кнопочками по периметру. Родная ОСь – Windows XP tablet edition, инсталляционный диск которой давно и безвозвратно потерян. Поставил семерку, экран запустил с какими-то плясками, второй раз я этот фокус провернуть не смог – не работает пальцетыкалка. Поставил фряху, с экраном тоже пляски, затык был в том, что курсор откликается на нажатие, но мечется как угорелый. Закончилось тем, что поправил в коде драйвера 5 (пять) строчек и теперь всё работает.

Глава 2. Почему проприетарное ПО хуже.

А теперь собственно по теме. Меня, как домашнего пользователя, интересует desktop-виртуализация. Основная Ось – религиозно не верная W… от m$, но иногда надо ip-телефонию на asterisk посмотреть, прошивку для DIR-300 пересобрать, вот и нужны разные линуксы и BSD. Гипервизор в контексте возникших проблем  не важен, но для определенности будем иметь ввиду VMWare Player.

Так вот, возник вопрос как раз с ip-телефонией, вопрос рабочий, но кто из нас не таскает работу домой?

Теперь по настройкам и терминам, что бы было понятно и не путаться.

Сеть. Виндовый DHCP для компов. Активка – несколько cisco catalyst 3750. На каждом коммутаторе есть комповые VLANы и телефонные, между коммутаторами отдельные VLANы, маршрутизация проходит на каждом коммутаторе. Комповые VLANы – нативные, т.е. без тэга, телефония ходит с тэгом. Для телефонов на коммутаторах подняты свои DHCP.

Телефония. Телефония на базе Cisco Call Manager и аппаратов от cisco.

Хост. На хосте стоит Windows 7 и VMWare Player, который потом заменил на Workstation. Хост включен в обычный порт доступа, как и все пользовательские машины. Без дополнительного ПО сетевой интерфейс хоста будем называть – физический интерфейс хоста, после установки ПО от производителя сетевой карты для работы с VLANами появляется возможность создавать интерфейсы, которые будут принимать тэгированый трафик, их будем называть дочерние сетевые интерфейсы хоста. Те, кто ставил такое ПО, все поняли, остальные, надеюсь, поймут когда дойдем до соответствующего момента.

Виртуальная машина.
Ось – FreeBSD, из софта – только asterisk. Сетевой интерфейс в BSD будем называть физический интерфейс виртуальной машины или родительский интерфейс виртуальной машины, в зависимости от контекста. Физический интерфейс виртуальной машины = устройство, добавленное в оснастке VMWare Player.

Итак, поехали.
Сервера DHCP настроены и работают, сеть работает, компы в сети работают, телефония работает. Стоит простая задача: виртуальная машина с FreeBSD должна иметь доступ в комповую сеть и в сеть с телефонией. Задача простая, на всяких ESXi делалась не раз и проблем не возникало.

На физическом интерфейсе виртуальной машины сразу после загрузки подхватывается адрес с DHCP и трафик весело бегает, тут всё нормально. Не долго думая создаю дочерний сетевой интерфейс для трафика с тэгом, перезагружаюсь. Интерфейс есть, а вот траффика нет, т.е. адрес я не получил. Начинаю сниффать – с дочернего интерфейса пакеты уходят (DHCP запросы), а вот ответов нет. Смотрю трафик на родительском интерфейсе виртуальной машины – исходящий трафик с тэгом есть, входящего трафика с тэгом – нет. Ну думаю DHCP меня не признаёт (ну не спец я в cisco, может там только для телефонов счастье). Назначаю адрес руками, картина та же – arp запросы уходят, но ответов нет. Добавляю arp запись руками – ping пошел. Тогда начинаю сниффать трафик на физическом интерфейсе хоста. Траффика море, ну винда, что вы хотите, фильтр по MACу нас спасет. И вижу я занимательную картину – уходят пакеты с тэгом, а вот ответы возвращаются без тэга. Начинаю грешить на настройку коммутаторов, долго рыл – ни чего не нарыл, не помогли и бывшие коллеги cisco-спецы.

Workaround, а может и самое правильное решение: поставил софт от производителя сетевой карточки для работы с VLANами, создал дочерний сетевой интерфейс на хосте. Установил VMWare Workstation (сделал я это ещё раньше, грешил на бесплатный Player), добавил сеть, привязал ее к созданному дочернему сетевому интерфейсу хоста, добавил сетевую карту в виртуальную машину и привязал ее к только что созданной сети. В виртуалке появился физический интерфейс на который приходит трафик из нужного VLANа, но уже без тэга. Не знаю, есть необходимый функционал в Playerе или нет, не помню честно говоря.А теперь собственно причина всего этого безобразия. Пока разбирался с VLANами в cisco читал http://xgu.ru/wiki/VLAN . Когда все совсем уже стало не понятно прочитал всю статью, там есть кусочек про настройку VLAN в Windows:

В Windows нет встроенной поддержки VLAN. Нельзя создать интерфейс, который бы соответствовал отдельному VLAN’у, за исключением случаев, когда в системе есть специальный драйвер. В случае использования простых сетевых карт, например, Realtek RTL8139, трафик передаётся в неизменном виде, с тегами, в операционную систему и приложениям. Например, если запустить wireshark и направить его на соответствующий интерфейс, он увидит трафик с тегами. Более мощные сетевые карты обрабатывают теги 802.1Q. Они могут по-разному поступить с тегами: удалить теги, удалить тегированные фреймы или сделать что-нибудь ещё.

Так вот, видимо мне попалась более мощная сетевая карта, которая удаляет тэги.
Т.е. мало того что VLANы не работают без спец дров и софта (которых может и не быть для конкретной модели сетевухи), так ещё и не понятно как оно работает при стандартных дровах.

Эпилог.

А теперь собственно о message данного поста: теперь я знаю какой смысл вкладывается в фразу «свободное ПО лучше».

 P.S. Пост написан не холливара ради, а пользы для. Именно поэтому он публикуется в блоге, посвященном виртуализации.

4 thoughts on “Тонкости desktop-виртуализации на windows-хостах”

  1. С трудом осилил =)
    Итого: суть претензии – сетевой стек от MS. Это известная проблема и одна из самых старых граблей винды. Согласен – я тоже считаю это одним из основных препятствий для виртуализации. Причем абсурдно что это касается и Hyper-V. Реализовать сложную сеть на HV практически невозможно. Например, ppoe вы не поднимите на виртуалке HV наружу. “Разруливать сеть” нужно чем-то внешним.
    Это, также, одна из причин почему TMG (ISA) никогда не станет нормальным роутером.

    А вообще ощущения от статьи негативные – холиварные заголовки совсем не обоснованы текстом. “Тема не раскрыта” (с) =)))

  2. Претензий к сетевому стеку от Микрософт у меня нет. Скорее претензии к неоткрытому ПО, но это ИМХО. Да и стек тут не причем, опять же ИМХО. Микрософт отдала этот кусок производителям железа и дров. Разное железо ведет себя по-разному, значит виноваты железо или дрова. При этом под другой осью это железо работает предсказуемо, т.е. дело собственно в дровах. Код которых закрыт и является, возможно, коммерческой тайной.
    Про негатив и т.д. Да, это моё негативное отношение к закрытому и несвободному ПО. Ну а про холливар я писал, не ради него пост, надеюсь что кому-нибудь пригодится и грабли этот кто-то обойдет.
    Пост – это часть ответа на вопрос “А чем открытое и свободное ПО лучше проприетарного и, часто, платного?”.

  3. Лично меня всегда смешил аргумент “вы можете сами исправить код в открытом ПО”.
    Ну ладно, у Андрея стаж программирования скриптов на работе уже лет 5 будет, опыта работы с BSD не меньше.

    Но к примеру моей жене от компа нужен браузер, аська и кино смотреть. Как ты догадываешься, она править ядро и драйвера не будет 🙂

  4. Андрей, Саша … всё ж ИМХО. Я ответил на этот вопрос для себя. Да и сообщество иногда помогает (я буквально вчера решал проблему человека, которого ни разу не видел, на двоих мы ее решили), конечно это сообщество ни кому и ни чего не должно, можно попросить, но ответа может и не быть совсем. От крупного производителя рядовому пользователю чего-то добиться сложно, крупному предприятию проще, но тоже получается не всегда.
    Конечно приятно, когда всё работает из коробки, свободное ПО за последнее время сделало огромный шаг в эту сторону (аська, браузер – из коробки, кодаки для кино – в репозитории), но до финиша ещё очень далеко. Ну и вы знаете, что в корпоративном секторе (т.е. на своих работах) мы используем продукты Микрософт – интеграция сервисов очень приятная штука.

Leave a Reply

Your email address will not be published. Required fields are marked *