Проброс usb по сети windows

Невозможность пробросить подключенное USB устройство с хоста Hyper-V в виртуальную машину является одним из существенных недостатков гипервизора Microsoft. Для решения этой проблемы можно использовать open-source проект usbipd-win (https://github.com/dorssel/usbipd-win). Утилита usbipd-win позволяет пробросить по сети любое USB устройство или ключ (в том числе HASP) с хоста Windows в любую виртуальную машину Hyper-V, удаленный компьютер с Linux, Windows или в WSL2.

Утилита usbipd-win реализует протокол USB over IP для перенаправления USB устройств по сети.

Вы можете установить серверную часть usbipd-win на компьютере Windows с помощью менджера пакетов WinGet:

winget install --id=dorssel.usbipd-win -e

Также можно скачать и установить MSI пакет вручную. Например, usbipd-win_2.4.1.msi (https://github.com/dorssel/usbipd-win/releases).

Установить dorssel.usbipd-win в Windows 10

После установки в Windows появится служба usbipd (USBIP Device Host).

Откройте командную строку и выведите список доступных USB устройств:

usbipd list

Чтобы предоставить общий доступ к USB устройству, выполните команду:

usbipd bind --busid <busid>

Например:

usbipd bind --busid=7-1

usbipd - вывести список подключенных USB устройств

Теперь вы можете получить доступ к этому USB устройству по сети с другого Linux или Windows хоста. Для подключения используется порт TCP 3240 (проверьте, что он открыт в Windows Defender Firewall).

Если вы хотите пробросить USB устройства с Windows хоста на Linux, нужно установить пакеты: ():

$ sudo apt install usbip hwdata usbutils (для Ubuntu и Debian)
$ sudo yum install kmod-usbip usbip-utils hwdata (для RPM дистрибутивов CentOS/RHEL/Oracle Linux)

Теперь вы можете вывести список USB устройств, опубликованных на удаленном компьютере:

$ usbip list --remote=192.168.0.10

Чтобы подключить (пробросить) определенное устройство USB устройство по сети на ваш хост, выполните:

$ sudo usbip attach -remote=192.168.0.10 --busid=7-1

Если вам нужно пробросить USB устройство в WSL 2, сначала установите необходимые пакеты в вашем дистрибутиве WSL (например для Ubuntu):

$ sudo apt install linux-tools-5.4.0-77-generic hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

используйте команды:

usbipd wsl list
usbipd wsl attach --busid 7-1

Проверьте, что USB устройство доступно:

$ lsusb

Чтобы отключить USB устройство:

usbipd wsl detach --busid 7-1

Если нужно пробросить USB устройство по сети на другой Windows хост, нужно установить на нем специальный агент usbip.exe (https://github.com/cezanne/usbip-win)

Для автоматического подключение USB устройства по сети при загрузке Windows, добавьте в планировщик Windows Scheduler команду:

usbip.exe attach -r 192.168.0.10 -b 7-1

Время на прочтение
7 мин

Количество просмотров 40K

Когда человек много лет рыл бункер и запасал там продукты, он должен испытывать глубокое моральное удовлетворение, если бункер понадобился. Он будет довольный заявлять: «А я говори-и-и-ил!» То же касается и того, кто делал запасы продуктов в кладовой, когда все закупались в магазинах только на сегодня. А вот с нашим комплексом для удалённой работы Redd как-то и не хочется злорадствовать. Он проектировался для удалёнки в мирное время. И использовался задолго до первых новостей из Китая.

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

Но так как сейчас удалёнка у всех на устах, возникло желание поделиться одной наработкой, которая может кому-то помочь. Это не наша разработка, я проводил исследования в рамках работы над сервисом удаленной работы с отладочными платами All-Hardware. Вот их результаты сейчас и опишу. Проект USB/IP известен многим. Но он давно свёрнут авторами. Самые свежие драйверы были под WIN7. Сегодня я опишу, где скачать вариант для WIN10, и покажу, как я его проверял. Кроме того, разработчики современного аналога уверяют, что у них сделан не только Windows-клиент, но и Windows-сервер (правда, в этом режиме я тестирование не вёл: задача того не требовала). Но кому-то это тоже может оказаться полезным.

Введение

Сначала краткий рассказ, что такое USB/IP. Это комплекс программ, которые позволяют пробросить USB-устройство через сеть. Само устройство подключено к серверу. Клиент располагается на другой машине. При этом на клиентской машине имеется приложение, совершенно не рассчитанное на работу с сетью. Оно хочет настоящее USB-устройство. И оно получает информацию, что это устройство подключено. На это устройство встаёт штатный драйвер. В общем, клиент считает, что он работает с локальным USB-устройством.

Кто-то так пробрасывает ключи защиты. Мы же проверяли возможность удалённого доступа к JTAG-адаптеру.

Проект USB/IP активно развивался до 2013 года. Затем Windows-ветка остановилась. В целом, был выпущен даже двоичный подписанный драйвер. Но он был под Windows 7. Linux-ветка же продолжила развитие, и этот сервис оказался встроенным в саму операционную систему. По крайней мере, в сборку Debian он точно встроен. Причём для Linux имеется и клиент, и сервер, а для Windows исходно был сделан только клиент. Сервер под Windows сделан не был.

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

Вариант под актуальную версию Windows

Но как бы ни была хороша Windows 7, а она уже мертва. В рамках работ над All-Hardware мы рассматривали разные варианты решения одной из проблем, и надо было просто проверить ряд альтернатив по принципу «подойдёт — не подойдёт». Тратить много человеко-часов на проверку было невозможно. А переделка драйвера под Windows 10 могла затянуть в себя. Поэтому был проведён поиск в сети, который вывел на проект usbip-win. На момент его обнаружения свежий вариант был датирован 23 февраля 2020 года, то есть проект живой. Он может быть собран и под WIN7, и под WIN10. К тому же, в отличие от оригинального проекта, может быть собран не только Windows-клиент, но и Windows-сервер.

Я проверил, проект прекрасно собирается и устанавливается, поэтому дальнейшая работа велась с ним. В файле readme есть ссылка на готовый двоичный код для тех, кто не хочет самостоятельно производить сборку.

Грустная часть проверки: серверная часть

Сначала я расскажу, как проводилась проверка в рамках нашего проекта. Там всё кончилось не очень хорошо. Проверяли адаптер ST-LINK, установленный в корпус комплекса Redd, благо я уже отмечал, что в комплексе используется ОС Linux сборки Debian, а эта сборка содержит встроенный сервис USB/IP.

Согласно статье, устанавливаем сервис:

sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install usbip

Дальше в статье подробно рассказано, как автоматизировать процесс загрузки сервиса. Как я разбираюсь в Линуксе, я уже многократно писал. Плохо разбираюсь. У меня нет привычки с умным лицом цитировать чужие тексты, слабо понимая суть. Поэтому я ещё раз напомню ссылку на замечательную статью, где всё рассказано, а сам покажу, что делал я при каждом старте ОС (благо всё было нужно только для проверки):

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo usbipd -D

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

Теперь смотрим, как зовут устройство:

user@redd:~$ sudo usbip list -l
- busid 1-3 (046d:082d)
   Logitech, Inc. : HD Pro Webcam C920 (046d:082d)

 - busid 1-4 (1366:0101)
   SEGGER : J-Link PLUS (1366:0101)

 - busid 1-5.1 (067b:2303)
   Prolific Technology, Inc. : PL2303 Serial Port (067b:2303)

 - busid 1-5.4.1.1 (0483:5740)
   STMicroelectronics : STM32F407 (0483:5740)

 - busid 1-5.4.1.3 (0483:3748)
   STMicroelectronics : ST-LINK/V2 (0483:3748)
<...>

Получается, что нам нужно устройство и busid, равным 1-5.4.1.3.

Даём команду:

sudo usbip bind --busid=1-5.4.1.3

Всё, сервер готов к работе.

Грустная часть проверки: клиентская часть

В Windows устанавливаем драйвер (делаем это только один раз, дальше он будет всегда установлен). Для этого запускаем от имени администратора файл usbip.exe с аргументом install:

usbip.exe install

Теперь смотрим, доступно ли нам устройство:

usbip.exe list --remote=192.168.10.123

Убеждаемся, что оно присутствует в списке. Ну, и подключаем его:

usbip.exe attach --remote=192.168.10.123 --busid=1-5.4.1.3

В менеджере устройств появляется новое USB-устройство, Keil его прекрасно видит…

Но на этом всё приятное кончается. Небольшая программа заливается во флэшку около минуты. Попытки шагать по строкам идут от 5 до 20 секунд на каждую строку. Это неприемлемо. Во время паузы в обе стороны идёт трафик примерно 50 килобит в секунду. Долго и вдумчиво идёт.

Честно говоря, ограничение по времени привело к тому, что я только предполагаю, почему всё было так плохо. Подозреваю, что там по сети бегает JTAG-трафик. А он бегает небольшими пакетами в обе стороны, отсюда и проблемы. Так было завершено исследование с результатом: «Для проекта не подходит».

Более весёлая часть: подготовка

Ещё тогда мне запало в голову, что я краем глаза видел, что в JTAG-адаптере CMSIS DAP по USB ходит не чистый JTAG-трафик, а команды. Сам JTAG-трафик формируется уже внутри адаптера. Давно хотел проверить это, да всё руки не доходили. Массовый перевод на удалёнку заставил это сделать (возникла задачка). Что такое CMSIS DAP? Это JTAG-адаптер, рекомендованный самой компанией ARM для контроллеров Cortex-M. Исходные коды для разных контроллеров выложены на GitHub, можно спаять адаптер на базе любого из них. Я сейчас дам ссылку на клон проекта, адаптированный под макетную плату «Голубая пилюля»: https://github.com/x893/CMSIS-DAP, но поисковые системы могут вывести и на официальный аккаунт ARM.

Чтобы не тратить на сервер целую PC, для проверки, я сделал этакий комплекс Yelloww (чисто по цвету пластика, из которого сделан корпус):

Роль сервера выполняет Raspberry Pi с установленной ОС Raspbian (это тот же Debian, а значит, там имеется требуемый сервер). Одна из «голубых пилюль» выступает в роли адаптера CMSIS DAP, вторая — в роли отлаживаемого устройства.

Точно так же ставим и настраиваем сервис. Разве что здесь список устройств, допустимых к экспорту, намного скромнее:

pi@raspberrypi:~ $ sudo usbip list -l
 - busid 1-1.1 (0424:ec00)
   Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00)

 - busid 1-1.4 (c251:f001)
   Keil Software, Inc. : unknown product (c251:f001)

Понятно, что здесь экспортируем и импортируем устройство busid=1-1.4.

И вот тут конкретно с CMSIS DAP у меня периодически возникает небольшая проблемка. В менеджере устройств я вижу такую неприятность:

Напомню, что статья пишется по принципу «Лучше неплохая, но сегодня, чем идеальная, но завтра». Проблемы удалённой работы возникают прямо сейчас. Надеюсь, в обозримом будущем они уже будут не актуальны. А пока актуальны — показываю, как я обхожу данную проблему вручную. Сначала я отключаю устройство:

Затем сразу же включаю:

И оно начинает работать без проблем. В Keil меняем отладчик на CMSIS DAP:

И вот он:

При работе по локальной сети всё просто летает. Но понятно, что локальная сеть никому не интересна. Я попробовал пробросить порт устройства у себя дома, а затем удалённо зайти на машину на работе и потрассировать «прошивку» оттуда. Связь у моего домашнего провайдера весьма и весьма тормозная, особенно — от меня наружу. Прошивается контроллер примерно втрое медленнее, чем при прямом подключении к USB. Трассировка… Ну около секунды на строку, точно не больше. В общем, терпимо. С хорошими провайдерами, надеюсь, будет лучше.

Заключение

Проект usbip-win является современной заменой для проекта USB/IP. Он живёт и развивается. При этом он предоставляет для ОС Windows не только функцию клиента, но и функцию сервера. Совместимость с Linux-версией сохранена.

Устойчивость работы удалённого USB-устройства неожиданно поразила. Я был уверен, что возникнут таймауты. Возможно, где-то они и возникнут, но для JTAG-адаптеров не было замечено ни одного сбоя. К сожалению, не все USB-устройства могут быть проброшены через сеть по причине низкого быстродействия получившейся системы. Но в случае с JTAG-адаптерами можно рассмотреть альтернативные вещи. В частности, CMSIS-DAP вместо ST-LINK.

Оба рассмотренных проекта (usbip-win и CMSIS-DAP) могут быть скачаны с GitHub в виде исходных кодов.

Если это поможет кому-то организовать удалённый доступ к оборудованию, я буду рад. Использование Raspberry Pi позволит бросить оборудование в произвольных местах.

1. Share USB Device with USB over Network Server

Run USB over Network Server program.
Select USB device you want to share and click Share Device Share Device button.

Quick Start

Now USB device is shared and ready for use by USB over Network Client.

2. Connect remote USB Device with USB over Network Client

Run USB over Network Client program and click Add Server Add Server button.

Quick Start 1

Click Browse to select remote
computer with shared USB devices and click OK.
As a result, specified USB over Network Server will be added to the list of servers. If the server is active at the moment, the program will show real-time list of USB devices shared on the server.

Quick Start 2

Now, select USB device and click Connect Connect button.
If the selected device is available on the server, it will be connected
to your computer over the network. If the device cannot be connected for
some reason, you will be notified.

Now remote shared USB device is ready for use on your local computer.

В эпоху гипервизоров редко когда под какой-то сервер приложений или баз данных выделяют отдельный физический сервер. Очень часто такие сервера работают в качестве гостевой операционной системы виртуальной машины на одном из гипервизоров. Обычно в 80-90% случаев это так (данные взять на основе сугубо моего личного опыта). Проброс USB устройств в таком случае не всегда является тривиальной задачей.

Если у вас, скажем, гипервизор ESXi, то задача может быть решена без помощи стороннего ПО. Проброс USB в Hyper-V все еще не завезли.

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

Я хочу поделиться с одним из возможных решений данной проблемы.

Краткое описание задачи

Задача, собственно, проста. Есть порядка 5-10 USB устройств, которые будут периодически подключаться к разным клиентам. Соответственно, все эти USB устройства физически должны быть подключены к какому-то одному устройству, которое будет доступно всем клиентам. Клиенты же уже в порядке живой очереди будут “разбирать” пул доступных устройств.

В силу особенностей работы 1 USB устройство в один момент времени будет подключено только к одному клиенту.

Если у вас исключительно Linux окружение, то вы можете использовать встроенное решение USB/IP.

Выбор решения

Программного обеспечения, которое может обеспечить проброс USB устройств по сети, очень много. После долгих сравнений набора возможностей, стоимости и предлагаемого набора клиентов решение было выбрано – VirtualHere.

Скажу сразу – решение платное (49$). Однако, лицензируется сервер целиком, т.е. нет ограничений на количество подключенных устройств. Без лицензии в один и тот же момент времени можно использовать только одно USB устройство. Для настройки PoC (Proof of Concept) решения этого достаточно. Вы сможете проверить – подойдет ли вам этот продукт или нет.

Почему VirtualHere?

Аргументы в сторону выбора этого решения:

  1. Большой выбор серверной части – Window, Linux, Android, OSX.
  2. До безобразия простая настройка сервера.
  3. Достаточно большой набор клиентов. Есть клиент под Windows, Linux, Mac OS и Android.
  4. Клиент может быть запущен как сервис.
  5. У клиента есть как графический вариант, так и консольный аналог.
  6. У клиента есть свой API.
  7. Относительно гуманная стоимость – 49$.
ВАЖНО: В Linux CentOS 8 и 9 из коробки нет модуля vhci_hcd. Поэтому нужно либо добавлять этот модуль вручную. Либо использовать контейнеры. Признаюсь честно, я потратил около 2-х часов на то, чтобы попробовать реализовать какой-то из этих вариантов, но из этого толком ничего не получилось. Пробовал даже сторонний модуль vhci_hcd от elrepo. Насколько я понял, модуль от elrepo не работает на ядре 4.18.0-394, а рассчитан на работу с более старой версией ядра. Но это только мои догадки - не так много у меня опыта работы с Linux. Если у кого-то получилось запустить клиент на CentOS 8 или 9 - поделитесь в комментариях опытом.

В качестве физической коробки, к которой будут подключены устройства будет выступать небольшой неттоп. Можно использовать любое практически любое физическое устройство, т.к. ресурсов серверу много не нужно. Можно даже использовать Raspberry Pi.

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

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

Настройка сервера

Мы будем использовать вариант с Linux сервером. Наш дистрибутив – Ununtu 20.04. Вы можете использовать любой дистрибутив. Но у меня под рукой для написания статьи был только этот 🙂

Если у вас абсолютно новая установка Ubuntu, то предварительно необходимо установить curl:

apt update
apt install curl

При наличии на сервере прямого выхода в Интернет установка производится в одну команду:

curl https://raw.githubusercontent.com/virtualhere/script/main/install_server | sudo sh

Теперь проверим статус нашего сервера:

systemctl status virtualhere.service

Серсив запущен и готов принимать клиентские подключения. Клиентский трафик прослушивается на порту TCP/7575:

netstat -tulpn

Клиент для Windows

Сначала я покажу, как выглядит клиент для Windows. Скачиваем его с сайта проекта.

Запускаем клиент:

Если вы находитесь в одной подсети с сервером, то клиент скорее всего найдет его автоматически. Если сервер автоматически не найдет, то нужно подсказать клиенту, по какому IP-адресу находится сервер:

Теперь мы видим все подключенные к серверу USB устройства и можем примонтировать одно из них:

Также можем зарегистрировать клиент в качестве службы Windows:

Работу клиента я проверил на следующих серверных ОС: Windows Server 2008 R2, 2012 R2, 2016 и 2019 и соответствующим им клиентским ОС – Windows 7, 8.1, 10 + Windows 11.

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

vhui64.exe -t list

Клиент для Linux

Теперь я покажу, как выглядит клиент для Linux. Скачиваем его с сайта проекта.

Разрешаем выполнение:

chmod +x vhuit64

И запускаем клиент.

sudo ./vhuit64

В остальном работа Linux клиента аналогична работе Windows клиента. Также нужно указать расположение сервера:

Теперь мы можем увидеть перечень устройств и подключить одно из них:

Стоит отметить, что для Linux есть отдельный консольный клиент для тех случае, если вы будите использовать клиент, например, на Linux сервере.

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

Как оказалось, уже давно созданы как программы, так и отдельные железки, позволяющие пробросить любое USB устройство по сети, но цена коммерческого решения оказалась несколько великоватой — в магазине нам озвучили цену за мультихостовый девайс 1000 долларов, и жать его поставки Украину нужно будет три недели. Поэтому было решено попробовать решить задачу, используя бесплатное ршение USBIP, процедуру установки и настройки которого я и рассмотрю в данном материале.

Программа USBIP позволяет подключать USB устройства по сети, будь то Windows или Linux клиент. К сожалению данный проект не так активно развивается, как хотелось-бы, но спасибо разработчикам и за то что есть — продукт вполне рабочий, исходники есть, так что если у вас есть силы и желание — помогите проекту, а не можете, или не хотите помогать — пользуйтесь тем что есть, или покупайте коммерческие более функциональные продукты.

Итак, давайте рассмотрим по порядку процесс настройки и проброса USB устройств по сети при помощи USBIP.

Установка Linux

Для настройки серверной части USBIP, понадобится установить Linux. Разработчики проекта ограничились написанием серверной части только для Linux. Клиентская часть есть как для Linux, так и для Windows.

В даной статье я буду устанавливать Debian 7.9, так как после долгих разбирательств удалось получить рабочее решение на базе Дебиана, а дальше тратить время не было возможности, потому остановился на том что есть. Рассказывать как устанавливать Linux не буду, есели вы интересуетесь вопросом проброса USB устройств по сети на базе USBIP, процедура установки Linux должна быть для вас также прозрачна. В случае, если ищете решение, устанавливаемое нажатием пары кнопок мыши, следует повернуть свой взор в сторону платных продуктов, но там уже нужно платить денежки.

Установка сервера USBIP

Обновляем систему, устанавливаем пакет USBIP и загружаем модули ядра, необходимые для работы программы:

sudo apt-get update &amp;&amp; sudo apt-get dist-upgrade -y

sudo apt-get install usbip -y

sudo modprobe usbip-core
sudo modprobe usbip-host

Теперь, нужно сделать так, чтоб эти модули загружаилсь при старте системы. В файл /etc/modules и добавьте две строчки, по одной для каждого загружаемого модуля:

sudo echo "usbip-core" &gt;&gt; /etc/modules
sudo echo "usbip-host" &gt;&gt; /etc/modules

Для того, чтоб после запуска системы сервер USBIP стартовал автоматом, нужно добавить init.d скрипт. Для этого скопируйте файл /etc/init.d/skeleton:

sudo cp /etc/init.d/skeleton /etc/init.d/usbipd

Далее отредактируйте файл /etc/init.d/usbipd, поменяйте параметры описание, имя демона и аргументы, как приведено ниже:

DESC="usbip service"
NAME=usbipd
DAEMON_ARGS="-D"

Сделайте файл исполняемым:

sudo chmod 755 /etc/init.d/usbipd

Ну и на последок запустите команду update-rc.d, после чего usbip готов для атоматического запуска. Запускаем программу:

sudo update-rc.d usbipd defaults
sudo /etc/init.d/usbipd start

Если нет ошибок, то все настроено правильно и сервер готов расшаривать USB девайсы

Список доступных к расшариванию устройств можно посмотреть выполнив команду usbip list -l. Параметр -l говорит программе, что нужно вывести локальные устройства. Программа должна вернуть список устройтв следующего вида:

okovtun@debian:~$ sudo usbip list -l
Local USB devices
=================
 - busid 1-4 (8564:1000)
         1-4:1.0 -&gt; usb-storage

Если устройств перечислено несколько, определите какое именно устройство вам нужно проброить по сети и запомите его идентификатор, в моем случае, мне нужно пробросить устройство с идентификатором 1-4. Далее, выполняем команду:

okovtun@debian:~$ sudo usbip bind -b 1-4
bind device on busid 1-4: complete

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

Если на вашем компьютере настроена фильтрация пакетов, то добавьте порт 3240 в разрешенные для подключения извне:

iptables -I INPUT -p tcp -m tcp --dport 3240 -j ACCEPT

Вот и все. Серверная часть настроена. Теперь будет самое интересное — подключить к серверу клиента и увидеть флешку, воткнутую в удаленном компьютер, но отображаемую, как будто она подключена непосредственно к вашему компьютеру.

Установка USBIP клиента под Windows

Откройте странцу USBIP на  сайте Sourceforge, и загрузите клиент USBIP последней версии. Распакуйте содержимое архива, например в папку c:\usbip

Установка драйвера.

Откройте диспетчер устройств, выберите корневой элемент дерева, нажмите правой кнопкой мыши и в контекстном меню выберите пункт Установить старое устройство.

Первый шаг пропускаем

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

Следующий шаг пропускаем, просто нажимаем Далее

На следующем шаге нажимаем кнопку Установить с диска, выбираем файл драйвера устройства USBIPEnum.inf.

В итоге видим драйвер USB/IP Enumerator, выбираем его и нажимаем кнопку Далее

Соглашаемся с предложением установить новое оборудование и нажимаем кнопку Далее.

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

В Диспетчере устройств появилось новое системное устройство USB/IP Enumerator.

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

Подключаем удаленное USB устройство

Открываем командную строку, устанавливаем текущей директорию, c:\usbip. Если выполнить команду без параметров, будет выведена справка.

PS C:\&gt; cd C:\usbip\

PS C:\usbip&gt; .\usbip.exe
usbip for windows ($Id$)

Usage: C:\usbip\usbip.exe [options]
        -a, --attach [host] [bus_id]
                Attach a remote USB device.

        -x, --attachall [host]
                Attach all remote USB devices on the specific host.

        -d, --detach [ports]
                Detach an imported USB device.

        -l, --list [hosts]
                List exported USB devices.

        -p, --port
                List virtual USB port status.

        -D, --debug
                Print debugging information.

        -v, --version
                Show version.

        -h, --help
                Print this help.

Запрашиваем список расшаренных USB устройств на удаленном компьютере. Для этого нужно запустить usbip.exe с параметром -l, —list [адрес-хоста]:

PS C:\usbip&gt; .\usbip.exe -l 10.125.2.28
usbip for windows ($Id$)

- 10.125.2.28
     1-4: unknown vendor : unknown product (8564:1000)
        : /sys/devices/pci0000:00/0000:00:1a.7/usb1/1-4
        : (Defined at Interface level) (00/00/00)
        :  0 - unknown class / unknown subclass / unknown protocol (08/06/50)

PS C:\usbip&gt;

Видим устройство 1-4, расшаенное ранее. Теперь, чтоб его подключить нужно запустить usbip.exe с параметром -a, —attach [адрес-хоста] [id устройства]

PS C:\usbip&gt; .\usbip.exe -a 10.125.2.28 1-4
usbip for windows ($Id$)

new usb device attached to usbvbus port 1

Receive sequence:    8100

После непродолжительного ожидания (все-таки подключение производится не к локальному девайсу, а проброшенному через сеть), система запустит мастер установки драйверов оборудования. В конце сообщит вам об успешной установке устройства.

В результате устройство будет отображено у вас в системе и с ним можно работать как с обычным локальным устройством.

Если у вас есть замечания, или дополнения к материалу — буду рад, если поделитесь ими в комметариях.

  • Проверка винчестера на битые сектора windows 10
  • Проверка windows server 2016 на ошибки
  • Пробный период windows 10 pro
  • Принудительное завершение программы на windows сочетание клавиш
  • Проверка вашего компьютера windows 10 долго