- •Включение Hyper-V с помощью CMD и DISM
- •Запуск и завершение работы виртуальных машин
- •Создание контрольной точки виртуальной машины
- •Создание новой виртуальной машины
- •Подведение итогов и справочные материалы
- •Общий доступ к дискам и устройствам
- •Общий доступ к хранилищу и USB-устройствам
- •Совместное использование звуковых устройств (динамиков и микрофона)
- •Повторный запуск параметров подключения
- •Проверка типа сеанса
- •Предварительные условия
- •Настройка вложенной виртуализации
- •Отключение вложенной виртуализации
- •Изменение размера динамической памяти и памяти для среды выполнения
- •Параметры сетей
- •Спуфинг MAC-адресов
- •Преобразование сетевых адресов (NAT)
- •Принцип работы вложенной виртуализации
- •Архитектура коллекции
- •Создание виртуальных машин, совместимых с коллекцией
- •Проверка нового образа виртуальной машины
- •Создание нового источника коллекции
- •Подключение коллекции к пользовательскому интерфейсу коллекции виртуальных машин
- •Поиск и устранение неисправностей
- •Проверка наличия ошибок при загрузке коллекции
- •Ресурсы
- •Сторонние приложения виртуализации
- •Обзор NAT
- •Создание виртуальной сети NAT
- •Соединение с виртуальной машиной
- •Пример конфигурации: подключение виртуальных машин и контейнеров к сети NAT
- •Docker для Windows (для виртуальных машин Linux) и компонент контейнеров Windows
- •Несколько приложений, использующих одну систему NAT
- •Диагностика
- •Несколько сетей NAT не поддерживается.
- •Начало работы
- •Регистрация нового приложения
- •Создание сокета Hyper-V
- •Привязка к сокету Hyper-V
- •Подстановочные знаки для идентификатора виртуальной машины
- •Поддерживаемые команды сокета
- •Полезные ссылки
- •Примеры MSDN
- •Примеры в блогах
- •Высокоуровневый обзор того, что мы делаем и почему
- •Создание узла
- •Создание второго сетевого интерфейса
- •Настройка Hyper-V
- •Создание виртуального коммутатора
- •Установка и настройка DHCP
- •Установка удаленного доступа
- •Настройка удаленного доступа
- •Создание таблицы маршрутов в Azure
- •Настройка таблицы маршрутов
- •Справочник по конфигурации конечного состояния
- •Заключение
- •Требования к операционной системе
- •Требования к оборудованию
- •Проверка совместимости оборудования
Создание сокета Hyper-V
В большинстве случаев, чтобы определить сокет, требуется семейство адресов, тип соединения и протокол.
Вот простое определение сокета
Пример:
// Windows
SOCKET WSAAPI socket( _In_ int af,
_In_ int type, _In_ int protocol
);
// Linux guest
int socket(int domain, int type, int protocol);
Для сокета Hyper-V:
•Семейство адресов— AF_HYPERV (Windows) или AF_VSOCK (гостевая ОС Linux)
•Тип— SOCK_STREAM
•Протокол— HV_PROTOCOL_RAW (Windows) или 0 (гостевая ОС Linux)
Пример объявления или создания экземпляра:
// Windows
SOCKET sock = socket(AF_HYPERV, SOCK_STREAM, HV_PROTOCOL_RAW);
// Linux guest
int sock = socket(AF_VSOCK, SOCK_STREAM, 0);
Привязка к сокету Hyper-V
Привязка связывает сокет со сведениями о подключении.
Определение этой функции скопировано ниже для удобства. Подробнее о привязке см. здесь.
Пример :
// Windows |
|
int bind( |
|
_In_ SOCKET |
s, |
_In_ const struct sockaddr *name, |
|
_In_ int |
namelen |
); |
|
// Linux guest
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
В отличие от адреса сокета (sockaddr) для стандартного семейства адресов протокола IP (AF_INET), который состоит из IP-адреса хост-компьютера и номера порта на этом узле, адрес сокета для AF_HYPERV использует для подключения идентификатор виртуальной машины и описанный выше идентификатор приложения. При привязке через гостевую ОС Linux AF_VSOCK использует svm_cid
и svm_port.
Так как сокеты Hyper-V не зависят от сетевого стека, TCP/IP, DNS ит.д., для конечной точки сокета требуется формат, не использующий протокол IP и имя узла, но однозначно описывающий подключение.
Вот определение адреса сокета Hyper-V:
Пример :
// Windows
struct SOCKADDR_HV
{
ADDRESS_FAMILY Family; USHORT Reserved;
GUID VmId;
GUID ServiceId;
};
//Linux guest
//See include/uapi/linux/vm_sockets.h for more information. struct sockaddr_vm {
svm_family; svm_reserved1;
unsigned int svm_port; unsigned int svm_cid;
unsigned char svm_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - sizeof(unsigned short) -
sizeof(unsigned int) - sizeof(unsigned int)];
};
Вместо протокола IP или имени узла конечные точки AF_HYPERV используют два кода GUID:
•ИД ВМ— это уникальный идентификатор виртуальной машины. Его можно узнать с помощью следующего фрагмента кода PowerShell.
PowerShell (Get-VM -Name $VMName).Id
•Идентификатор службы— код GUID, описанный выше, под которым приложение зарегистрировано в реестре узла Hyper-V.
Кроме того, для идентификатора виртуальной машины доступен ряд подстановочных знаков.
Подстановочные знаки для идентификатора виртуальной машины
Название |
Код GUID |
Описание |
|
|
00000000-0000- |
Прослушиватели необходимо привязать к этому |
|
HV_GUID_ZERO |
0000-0000-0000 |
идентификатору виртуальной машины, чтобы |
|
|
00000000 |
принимать подключения от всех разделов. |
|
HV_GUID_WILDC |
00000000-0000- |
Прослушиватели необходимо привязать к этому |
|
0000-0000-0000 |
идентификатору виртуальной машины, чтобы |
||
ARD |
|||
00000000 |
принимать подключения от всех разделов. |
||
|
|||
HV_GUID_BROAD |
FFFFFFFF-FFFF- |
|
|
FFFF-FFFF- |
|
||
CAST |
|
||
FFFFFFFFFFFF |
|
||
|
|
||
|
|
Адрес из подстановочных знаков для дочерних |
|
HV_GUID_CHILDR |
90db8b89-0d35- |
элементов. Прослушиватели необходимо привязать |
|
EN |
4f79-8ce9-49ea0 |
к этому идентификатору виртуальной машины, |
|
ac8b7cd |
чтобы принимать подключения от дочерних |
||
|
|||
|
|
элементов. |
|
HV_GUID_LOOPB |
e0e16197- |
Петлевой адрес. При использовании этого адреса |
|
dd56-4a10-9195 |
|||
ACK |
-5ee7a155a838 |
выполняется подключение к разделу соединителя. |
|
|
|
||
|
a42e7cda- |
Адрес родительского элемента. При использовании |
|
HV_GUID_PARENT |
d03f-480c-9cc2- |
этого адреса выполняется подключение к |
|
|
a4de20abb878 |
родительскому разделу соединителя*. |
* HV_GUID_PARENT Родительский элемент виртуальной машины— это ее узел.
Родительский элемент контейнера— это узел контейнера. При подключении из контейнера, запущенного в виртуальной машине, будет выполнено подключение к виртуальной машине, в которой размещен контейнер. Прослушивание для этого VmId поддерживает подключение от (в контейнерах): узла контейнера. (В виртуальной машине: узел контейнера или без контейнера): узла виртуальной машины. (Не в виртуальной машине: узел контейнера или без контейнера): не поддерживается.