RemoteFX. Часть 5 — перенаправление USB, теория


Мы уже говорили о том, как RemoteFX обеспечивает возможности работы с трёхмерной графикой, приложениями DirectX и мультимедиа через протокол «Удалённого рабочего стола» (RDP). Однако кроме этого, RemoteFX имеет ещё одну восхитительную возможность — низкоуровневую поддержку перенаправления любых устройств USB с клиентских рабочих мест в виртуальные машины Hyper-V.

Ещё со времён RDP 5.1 в Windows XP появилась возможность высокоуровнего перенаправления некоторых классов устройств (таких, например, как принтеры). Со временем набор этих классов расширялся — например, добавились смарт-карты. Но всё равно — это единичные случаи самых распространённых и востребованных классов. А ведь всего одних только классов (не устройств!) сейчас в мире насчитывается более 9000 (в данном случае — это число, близкое к действительности, а не фигура речи). Что же значит «высокоуровневное перенаправление» (High-Level Device Redirection)? Для каждого из поддерживаемых устройств на сервере создаётся соответствующее «виртуальное устройство» (Virtual Device) — например «обычная клавиатура» или «обычный монитор». Приложение, запущенное на сервере, обращается к этому виртуальному устройству с командой, например: «прочитать данные» или «распечатать изображение». Однако поскольку устройство «виртуальное» и «обычное» — оно ничего не знает про специфику работы вашего конкретного физического устройства, которое подключено к клиентскому рабочему месту. Поэтому роль виртуального устройства сводится к тому, чтобы передать эти команды по сети через RDP на клиентское рабочее место. А затем эти команды обрабатываются драйвером вашего специфического устройства, который запущен в ОС на клиентском рабочем месте. Этот драйвер превращает команды в сигналы, специфические уже для данного конкретного устройства. И эти сигналы передаются в стек USB, полностью принадлежащий ОС на клиентском рабочем месте.

Сейчас, в RDP 7.1 с RemoteFX для сценариев VDI появляется возможность работы с любыми устройствами на низком уровне (Low-Level Device Redirection). Что это значит? Приложение, запущенное в удалённой виртуальной машине, по-прежнему отправляет команды драйверу. Однако этот драйвер запущен в той же виртуальной машине. И по сети через RDP на клиентское рабочее место передаётся (конечно, сжатым — как и всё в мире RDP) уже результат работы этого драйвера — так называемые сигналы USB Request Block (URB). Это — «наибольший общий знаменатель», т.е. самый высокий уровень, который общий для всех устройств USB. А значит — на стороне клиента не нужны специфические драйверы. Их подменяет собой единый «Remote FX Generic USB Driver», который позволяет для любых устройств выполнить одно простое действие — а именно: передать URB, полученный из удалённого сеанса, и отправить обратно ответ устройства. По замыслу разработчиков, весь процесс установки сессии (равно как и отключения) не должен занимать больше 25 секунд.

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

 

Низкоуровневое перенаправление устройств USB с использованием RemoteFX

Высокоуровневое перенаправление устройств USB с использованием виртуальных устройств

Необходимость в драйверах для устройства в ОС на клиентском рабочем месте

Нет

Да

Необходимость в драйверах для устройства в ОС на стороне сервера (виртуальной машины VDI)

Да

Нет

Поддержка любых устройств USB

Да

Нет

Возможность использовать одно устройство с несколькими сеансами (удалёнными и локальным)

Нет

Да

Возможность подключать и отключать устройства без необходимости переподкючения «Удалённого рабочего стола»

Нет

Да

Работает в сценариях RDSH (Remote Desktop Session Host, ранее известные как Terminal Services), а также с физическми компьютерами на стороне сервера

Нет

Да

Требования к каналам связи

Высокие, рекомендуется использование через LAN (как и для графики через RemoteFX)

Низкие, работает как по каналам LAN, так и WAN

Из этой таблицы становится очевидно, что низкоуровневое перенаправление RemoteFX подходит далеко на для всех устройств. Например, клавиатура должна одновременно работать как в локальном сеансе, так и в удалённом (даже в сценарии с тонким клиентом!). Поэтому клавиатура всегда будет перенаправляться через «виртуальное устройство». Другой, не столь очевидный пример — смарт-карты. Дело в том, что по соображениям безопасности, перенаправление устройств не начнёт работать до тех пор, пока не завершатся все процессы аутентификации. Смарт-карты — единственное исключение из этого правила, и они тоже должны быть доступны в нескольких сеансах одновременно.

Поэтому важно понимать, что оба типа перенаправления устройств — RemoteFX и «виртуальные устройства» — могут (и должны!) работать параллельно. Часть устройств будет использовать один метод, а часть другой. Более того, сложные, «составные» устройства (например: принтер-сканер-факс-кард-ридер или клавиатура-тачпад-считыватель отпечатков пальцев) будут логически представлены как отдельные устройства, которые могут одновременно использовать разные методы перенаправления.

Рассмотрим вкратце основные преимущества, приносимые RemoteFX в мир сценариев VDI.

  • Надежность:
    • установка и настройка драйверов, потенциальные проблемы с совместимостью касаются лишь виртуальных машин, а не серверов и клиентских ПК;
    • приложения не отличают локальных устройств от перенаправленных;
    • используется инфраструкрутра PnP, проверенная годами в Windows.
  • Безопасность:
    • драйверы устройств изолированы от серверов виртуализации;
    • все сигналы URB, передающиеся по сети, проверяются на соответствие заявленным ID и спецификации USB 2.0. При обнаружении любой аномалии (что может быть как попыткой скомпрометировать систему, так и проблемой совместимости) устройство отключается от удалённой виртуальной машины и поступает в распоряжение ОС на клиентском рабочем месте;
    • групповые политики позволяют гибко контроллировать список перенаправляемых устройств.
  • Совместимость:
    • поддерживаются драйверы как KMDF (режима ядра), так UMDF (пользовательского режима);
    • поддерживаются как синхронные (например, веб-камеры), так и асинхронные устройства (например, сканеры). В частности — те, которые требуют создания отдельных служб ОС.

Для того, чтобы объяснить принцип работы перенаправления USB, для начала рассмотрим — как вообще работает подключение устройств USB в пределах локальной ОС (без использования перенаправления в удалённую систему).

 

Очевидно, что в сценарии «Удалённого рабочего стола» — когда устройство физически подключено к одному компьютеру, а использоваться должно в другой ОС — всё будет сложнее. Рассмотрим аналогичную схему для соединения RDP с использованием RemoteFX. Вот что происходит со стороны клиентского устройства.

 

А вот, что в это время происходит внутри виртуальной машины, к которой мы подключаемся.

 

Надеемся, что мы довольно подробно раскрыли архитектуру перенаправления устройств USB с помощью RemoteFX. Завтра мы расскажем о том, как это применить на практике и попробовать самостоятельно.

Comments (8)

  1. Alex A says:

    Давайте перейдем в почту (кнопка EMail Blog Author вверху справа) - напишите максимально полно на английском, приготовьте скриншоты (если возможно, то с английским UI), я запрошу помощи у разработчиков.

  2. Alex A says:

    Денис, по второму вашему пункту комментарий:

    Для RemoteFX есть два режима

    1) Установка драйвера на тонком клиенте или ПК, и перенаправление высокоуровнего устройства

    2) Низкоуровневое перенаправление и установка драйвера только в виртуальной машине.

    Я не уверен, что рутокен поддерживается высокоуровневым RDP, он все-таки не смарт-карта, хотя вам виднее. Если он работал в терминалах и без RemoteFX, то будет работать и с ним.

    Очевидно, что программные ключи для виртуализации удобнее. Вопрос к разработчику/дистрибьютеру.

  3. Alex A says:

    В "терминальную" (RDSH) нельзя, а в виртуальную машину Win7SP1/R2_SP1 на базе Hyper-V R2 SP1 - можно, если на клиенте стоит RDC 7.1 (Win7SP1 или в будущем клиент для Vista)

    Win7 внутри ВМ может быть PRO/ENT/ULT, также внутри ВМ может быть WS08R2_SP1

  4. Alex A says:

    Да, всё верно.

    Про цветность - посмотрите Hardware ID вашей видеокарты в диспетчере устройств (VEN_abc&DEV_xyz) и бинганите эту комбинацию, найдете драйвер.

  5. Stas Pavelko says:

    Алексей, спасибо за столь подробное объяснение, перечитал несколько раз, но так и не нашел для себя ответ на простой вопрос:

    - Можно ли в терминальную сессию "пробросить" аппаратный ключ защиты, например клиент-банка или 1С ?

    Если "да", то как я понял из статьи это возможно только в сценарии VDI (клиент Win 7 Sp1) и виртуальная Win 7 Sp1 Ent) ?

  6. Stas Pavelko says:

    Алексей, спасибо за ответ.

    Чтобы у меня окончательно сложилось в голове, в эксплуатации находятся:

    1. Серверы HP Proliant DL 160 G6 (вы уже отвечали, что VM поддерживает 32 бита цветность, но мне больше 16 видеть не приходилось, грешу на недостаточно производительный графический адаптер сервера. Специализированных драйверов нет, а в ОС хоста она определяется как Cnfylfhnysq VGA адаптер), на которых установлен W2K8 R2 с единственной ролью Hyper V.

    2. Развернуты RDSH серверы, на которых работают пользователи.

    3. Есть необходимость использовать в таком удаленном режиме аппаратные ключи защиты. Для этого, насколько я понял, мне необходимо:

    а) Установить на Hyper-V SP1

    б) Установить VM Win 7 Pro

    в) Обновить в VM компоненты интеграции или установить внутри VM SP1

    г) Установить на Win 7 Pro с которой пользователь подключается по RDP к VM также SP1, сделать необходимые настройки в свойствах mstsc

    д) Подключиться по RDP к VM, если устройство поддерживается, установить в VM необходимые драйверы ?

    Очень нужен удаленный доступ к Клиент-банку. Желание достаточно простое, реализация сложная, так как используется аппаратный ключ защиты RuToken

    Правильно написал сценарий для тестирования?

    Спасибо

  7. Stas Pavelko says:

    Спасибо за наводку, нашел: matrox g200e serverengines, установил драйверы, перезагрузил hyper-v сервер. цветность без изменений. В какую сторону "копать", Алексей ? Есть какая-то зависимость между цветностью внутри VM и гипервизором ?

  8. Denis says:

    Добрый день, большое спасибо за статью. Попробую подсказать ответ Стату, хотя он  и не касается RemoteFX

    1. Для 1С можно запросить программный ключ вместо аппаратного (хотя это не афишируется), уточните у своего поставщика на крайний случай на самом сайте 1С, если существуют сомнения

    2. Из данной статьи следует, что драйвера ключ рутокена будет корректно работать если на оконечном (тонком клиенте или откуда вы там запускаете) стоит драйвер. Практика: Терминал на 2008 R2Б клиенты Win 7 Pro (без сп), второй клиент тонкий клиент от хп вроде с рдп 7 тоже. Для банка москвы банк клиент явовский (запускаемый через сайт) нормально работает, аппаратный ключ iBank 2 (ООО Бифит).

Skip to main content