Недавно у меня появилась задача “вжиться в шкуру пользователя” и на деле проверить, как работается на бесплатном Microsoft Hyper-V Server 2012.
Да-да, бесплатный сыр есть не только в мышеловке, но и у Майкрософта. Если вы хотите виртуализовать сервера или хотя бы ваш старый ноутбук, но при этом не хотите платить дополнительные деньги за гипервизор, то Hyper-V Server — это то, что нужно попробовать. Почему? Во-первых, он по-настоящему бесплатен – все функции, включая даже «энтерпрайзные», доступны пользователям сразу и без каких-либо оговорок, во-вторых, он поддерживается и развивается большой компанией, и, в-третьих, это просто старый добрый Windows, хоть и немного обрезанный до Server Core.
Под катом вас ждет рассказ о том, как установить и настроить Hyper-V Server и элегантно обойти ограничения этой платформы при помощи Линукса.
Установка
Все стандартно настолько, что даже писать не о чем. ISO образ берем отсюда по горделивой ссылке «Free Download».
Весь процесс установки занимает несколько минут и оканчивается стандартным приглашением для администратора. После задания пароля открывается непривычно голый десктоп с двумя окнами консоли.
В принципе, если вдуматься, это не так уж и страшно: ведь задача нашего сервера — запускать виртуальные машины, а пасьянс можно и где-нибудь в другом месте разложить.
Конфигурирование: система
С помощью синей консоли задаем необходимые параметры — имя, сетевые адреса, включаем RDP и автообновления.
Кстати об обновлении системы: обрезание до Server Core было сделано для сокращения attack surface, другими словами уменьшения количества сервисов и программных компонент, которые могут содержать уязвимости, а соответственно должны регулярно патчиться. А поскольку установка патчей часто требует перезагрузки сервера, то уменьшение количества обновляемых компонент сервера будет вести не только к увеличению его безопасности, но и доступности.
Конфигурирование: Hyper-V
По каким-то причинам во время установки не создается никаких виртуальных свитчей, так что виртуальные машины по умолчанию не имеют связи с внешним миром. Исправим это — создадим простейший свитч-бридж к физическому адаптеру.
Запустим powershell во второй консоли. Да, обрезание сервера до консольных программ заставляет идти на жертвы, но ведь мы преследуем благородные цели (см. выше).
1) Узнаем под какими именами фигурируют адаптеры. Для этого выполним команду Get-NetAdapter
PS C:UsersAdministrator> Get-NetAdapter
Name InterfaceDescription ifIndex Statu
s
---- -------------------- ------- -----
Ethernet 5 Broadcom BCM5708C NetXtreme II Gi...#47 16 Up
Ethernet 4 Intel(R) PRO/1000 PT Dual Port Ser...#2 15 Di...
Ethernet 3 Intel(R) PRO/1000 PT Dual Port Serve... 14 Di...
Ethernet 2 Broadcom BCM5708C NetXtreme II Gi...#49 13 Up
2) Создадим виртуальный свитч привязанным к адаптеру Ethernet 5
PS C:UsersAdministrator> New-VMSwitch -Name "bridged" -NetAdapterName "Ethernet 5"
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
bridged External Broadcom BCM5708C NetXtreme II GigE (NDIS VBD Client) #47
Для создания виртуальной машины — все готово.
Создание виртуальной машины
Скорее всего нам понадобится ISO образ для установки операционной системы, его мы копируем привычным для Windows способом — по сети через долларовые шары на нашем сервере.
Теперь создадим машину.
PS C:UsersAdministrator> New-VM -Name "test1" -Path C:vmstest1 -MemoryStartupBytes 2GB -NewVHDPath C:vmstest1disk1.vhdx -NewVHDSizeBytes 40GB -SwitchName "bridged"
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
test1 Off 0 0 00:00:00 Operating normally
Небольшая тонкость есть в выборе типа сетевого адаптера — если выбор операционной пал на Windows 2012, то можно выбирать стандартный адаптер, но если что-либо другое лучше выбрать «legacy» тип адаптера. Это можно сделать, передобавив адаптер к виртуальной машине с ключиком -IsLegacy 1
Remove-VMNetworkAdapter -VMName test1
Add-VMNetworkAdapter -VMName test1 -IsLegacy 1 -SwitchName «bridged»
Вставим в созданный по умолчанию DVD дисковод ISO образ
PS C:UsersAdministrator> Set-VMDvdDrive -VMName test1 -Path C:isoen_windows_server_2012_vl_x64_dvd_917758.iso
На будущее — когда потребуется вытащить диск из виртуального дисковода нужно выполнить Set-VMDvdDrive -VMName <имя машины> -Path $null
Ну вроде, все… Можно запускать!
PS C:UsersAdministrator> Start-VM test1
Мммм, пробежал прогресс вверху окна powershell, видимо все запустилось. Проверим командой Get-VM
PS C:UsersAdministrator> Get-VM test1
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
test1 Running 0 2048 00:01:30 Operating normally
Все хорошо — машинка работает.
Однако, как же взглянуть на экран?!
Секундочку… а как-же посмотреть на экран установки, куда мышкой тыкать? В общем — где консоль? локально — никак: ее нет на сервере!
Что предлагает Microsoft — вы можете поставить RSAT (remote system administration tools) на клиентскую станцию. При помощи этих инструментов можно подключаться к консоли виртуальных машин, и, кстати, оттуда-же создавать и запускать виртуальные машины через mmc snap-in Hyper-V. Однако есть интересные особенности:
- RSAT для Windows 8 работает только с Windows 2012
- RSAT для Windows 7 Sp1 работает только с Windows 2008 R2 SP1
По-моему, не дело из-за смены версии сервера менять клиентскую ось! Куда смотрят продуктовые менеджеры в Майкрософт?! Как же мне зайти на консоль?
Идея пришла откуда не ждали… Почему-бы не использовать виртуальную машину с Linux в качестве RDP-прокси?
Подарок для всех
В итоге я на основе CentOS сделал виртуальую машину, на которую можно зайти по RDP, авторизоваться и далее в простеньком интерактивном скрипте запускать консоли на любые виртуальные машины на данном или вообще любом Hyper-V сервере в сети.
Вы можете скачать образ данной машины (371MB) и развернуть его с помощью бесплатной версии Veeam Backup & Replication на Hyper-V сервер. Пользователь root имеет пароль 123qweASD. Для смены пароля нужно запустить сначала passwd, а потом не забыть vncpasswd.
После запуска машины вы можете узнать IP адрес этой машины, выполнив данную команду на сервере Get-VM <имя машины> | select -ExpandProperty NetworkAdapters | select Ipaddresses. Вам необходимо иметь DHCP сервер в сети.
PS C:UsersAdministrator> get-vm rdpproxy | select -ExpandProperty NetworkAdapters | select IPaddresses
IPAddresses
-----------
{192.168.1.8, fe80::215:5dff:fe01:6703}
Используя RDP клиента, заходим на данную машину, добавляем Hyper-V сервер, выбираем виртуальную машину и… voilà — теперь можно продолжить установку операционной системы
Как это работает
Основную работы сделали классные ребята из FreeRDP. Нет — ну они, правда, классные, так как поддержали протокол RDP даже лучше, чем в Майкрософт. Там есть поддержка RemoteFX, add-in-ов, кэшей, перенаправлять аудио и clipboard… в общем всего того, что им позволяет подключаться не только к разным версиям Windows, но и к виртуальным машинам напрямую через специально открытый для этого на Hyper-V server порт 2179.
Все последние протоколы необходимые для работы с Hyper-V есть только в бете 1.1.0 версии. Я немного доработал версию только для того чтобы переопределить посылание Ctrl+Alt+Del на сочетание Ctrl+Alt+Insert, а то Linux прокси первым его обрабатывал и зайти в Windows виртуалку не было никакой возможности. Как честный человек — выложил исходники здесь: https://github.com/VeeamSoftware/FreeRDP
В качестве RDP сервера используется xrdp.
Скрипт опроса хостов и запуска консолей написан на Bash. Писал на нем впервые — прошу снисхождения к корявостям.
Опрос хостов на наличие запущенных виртуальных машин и их идентификаторов сделан через WMI. Спасибо утилите wmic, написанной на основе библиотеки от Samba 4.
CentOS 6.4 имеет внутри себя часть Integration Services, которые сообщают по каналу хост-виртуальная машина о себе некоторую информацию, из которой нам необходимы только IP адреса.
Кое-что про будущее
Не очень хорошая новость, в пятницу только вышла новая версия Hyper-V Server 2012 R2, я попробовал запуститься на ее Preview, но интеграционные сервисы CentOS не смогли прокинуть IP адрес на хост. Видимо Майкрософт опять что-то поменяли/расширили без обратной совместимости. Подождем немного выхода Intergation Services for Linux и поддержим и эту версию.
Заключение
Hyper-V Server – хорошая система чтобы начинать развитие ИТ небольшой компании. Полная бесплатность – хорошее подспорье когда бюджет ограничен. И в дальнейшем этот гипервизор позволит легко и без лишних расходов добавлять «энтерпрайзные» возможности: развивать мощность добавляя новые сервера, внедрять более хитрые сетевые схемы, предоставлять отказоустойчивость через кластеризацию и т.п.
Надеюсь, что этот рассказ и апплаинс помогут вам использовать эту платформу эффективно с первых шагов.
Полезные ссылки
- Что нового нас ожидает в Hyper-V 2012 R2 (статья на TechNet на англ. языке)
- Видео ретроспектива всех фичей Hyper-V от первой до только что выпущенной версии с демо (47 мин, на англ. языке)
- Бесплатный бакап для Hyper-V от нашей компании
- Бесплатный мониторинг от нас же
- Hyper-V 2012 R2 постеры (на англ. языке)
Автор: avas