Как технология USB over IP позволила людям забыть о расстоянии

image-loader.svg

Источник изображения
Сегодня быстрыми темпами роста количества устройств сети Интернет и интернета вещей уже никого не удивишь. Существует множество различных протоколов и технологий, на которых основана обработка и обмен информацией между устройствами и, собственно, сама связь этих устройств.

Некоторые технологии являются своеобразными канонами: используются уже не один десяток лет и постоянно совершенствуются. А есть и такие, которые уже либо вымерли, либо же родились, но так и попали в массы ввиду своего несовершенства, низкой релевантности в отношении требований рынка и прочего.

В этой статье речь пойдет о технологии, не относящейся ни к одной, ни к другой группе. Без нее компьютерные сети смогли бы существовать без особых проблем, но при этом она способна значительно упростить работу и снизить затраты на эксплуатацию у крупных предприятий, небольших организаций и даже домашних пользователей.

История появления технологии USB over IP


Сложно сказать когда именно появилась данная технология в том виде, в каком ее используют сейчас. Вероятнее всего с развитием возможностей программных компонентов Linux, ростом потребностей рынка и изобретательности энтузиастов и появилась современная технология проброса USB-девайсов через сеть.

В наши же дни существуют два популярных инструмента для трассировки USB-устройств: usbip и usbip-win. Оба из них нацелены на совместное использование USB устройств через IP-сеть за счет обработки USB I/O сообщений, их инкапсуляции в TCP/IP и последующей передачи передачи между устройствами сети типа «клиент-сервер». В такой схеме устройства подключаются к серверу и на нем же запускается необходимый демон.

На машине клиента, как правило, запускается любое приложение, которое не умеет работать с сетью, зато прекрасно справляется с USB-девайсами. Технология проброса как раз позволяет эмулировать локальное подключение USB-устройств на клиентской машине.

  • usbip был разработан проектом «USB/IP» еще в 2009 девятом году и благодаря успеху был добавлен в сборки Linux-ветки операционных систем и все-еще развивается. Поддержка же Windows клиента была остановлена в 2013 году на выпущенной подписанной двоичной цифровой подписи драйвера.
  • usbip-win же является аналогичным проектом, умеющим работать с Windows 10. Более того, он позволяет поднимать на Windows 10 не только клиентскую, но и серверную часть, а также совместим с Linux-версией.


Кому это интересно и где применяется


Преимущества сетевого проброса USB-устройств:

  • Безопасность. Возможность изолированного размещения USB девайсов от их конечного пользователя, шифрование и контроль доступа к устройствам, защита от человеческого фактора (кражи или утраты устройства).
  • Мониторинг. Использование протокола SMTP и сценариев SNTP для отслеживания состояния устройств.
  • Доступность и мультитенантность. USB устройства доступны для неограниченного числа пользователей (с возможностью создания групповых политик и уровней доступа) без необходимости физического переключения из любой точки мира.
  • Централизованное администрирование. Удобство в управлении каждым USB-устройством, подключенным в концентратор.


Недостатки:

  • Работоспособность полностью зависит от стабильной работы сети.
  • Высокая стоимость аппаратных решений (управляемых USB-хабов с большим количеством портов).
  • Не все USB-устройства могут работать через сеть штатно по причине увеличенного времени отклика.


Используемые технологии и оборудование


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

image-loader.svg

Подключение локальных и удаленных устройств
Когда приложения отправляют запрос на конечное устройство, USB PDD (USB Personal Device Driver) преобразует запросы ввода-вывода в серию команд понятных для USB, а затем отправляет их через драйвер шины (связующее звено между драйвером устройства и конечным устройством) в виде блоков USB-запросов на конечное устройство.

Способы проброса аппаратных ключей


Персональный драйвер устройства (PDD), как ни странно, отвечает за управление отдельными USB-устройствами. PDD отправляет запросы в виде специальных блоков запросов URB (USB Request Block), которыми он обменивается данными с ядром USB (USB Core) — отдельной подсистемой внутри ОС, выполняющей роль поддержки USB-устройств и контроллеров.

image-loader.svg

Модель обмена данными между USB устройствами и конечным пользователем
Для реализации проброса протокола USB через IP — сеть была разработана сущность, называемая виртуальным интерфейсом хост-контроллера, он же Virtual Host Controller Interface (VHCI). VHCI относится к виртуальному контроллеру и способен экспортировать виртуальные USB-устройства, не поддерживаемые физическими устройствами. В Linux контроллеры VHCI используются для доступа к USB-устройствам с удаленных машин, подключенных по уже известному нам протоколу USBIP.

VHCI является эквивалентом драйвера хост-контроллера (HCD) и отвечает за обработку URB-запросов. И VHCI, и HCD отвечают за обработку URB-запросов, полученных от ядра и делят их на более простые запросы, именуемые как Transfer Descriptions (дескрипторы передачи TD) для их дальнейшей передачи на хост-контроллер интерфейса, он же USB-контроллер (Host Controller Interface HCI). Данный интерфейс работает на уровне физических регистровых передач и обеспечивает коммуникацию с периферийными устройствами, подключенными к USB.

Теперь о том, как USB попадает в сеть. Блок запросов URB преобразуется в блок запроса USB / IP драйвером VHCI и отправляется на удаленный компьютер. Драйвер заглушки также добавлен как новый тип USB PDD. Драйвер-заглушка отвечает за декодирование входящих USB / IP-пакетов с удаленных машин, извлечение URB и последующую отправку их на локальные USB-устройства.

image-loader.svg


Модуль ядра vhci-hcd — это только виртуальный хост-контроллер, к которому вы можете подключить виртуальные устройства.

Как это устроено в Selectel


image-loader.svg


Рассмотрим работу с USB-концентратором на примере устройства DistKontrolUSB-16. Для того, чтобы пробросить USB-устройство с порта концентратора, необходимо:

  1. Создать USB-устройство, указав его Vendor/ProductID (VID/PID) и серийный номер. Именно по нему концентратор будет проводить отбор подключенных устройств:
    image-loader.svg
  2. Указать внешний IP-адрес клиента, который будет подключаться к USB-концентратору и указать разрешенные для подключения порты:
    image-loader.svg
  3. В клиентском приложении найти необходимое устройство и отправить команду на его использование. После этого девайс будет доступен словно физически подключенное устройство.
    image-loader.svg


Заключение


Описанная технология способна обеспечить необходимую масштабируемость и гибкость в современной, постоянно изменяющейся среде. Проброс USB-устройств через сеть также обеспечивает надежность за счет ограничения физического доступа к устройствам.

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

Снижение рисков и затрат на обслуживание, удобство совместного использования ресурсов между рабочими станциями — все это делает технологию usbip конкурентоспособной в отношении безопасной авторизации и передачи данных (с TOTP/HOTP, OCRA) и применимой для решения широкого спектра задач IT.

1hdqmj1bvguax5hnugdz0ci_jbw.jpeg

© Habrahabr.ru