Время на прочтение
7 мин
Количество просмотров 40K
Привет, Хабр! В прошлой статье мы рассмотрели историю и принцип работы технологии USB over IP, узнали, как ее применяют на базе готового аппаратного решения.
Для личного использования, однако, аппаратное решение скорее не подойдет: нужно приобретать дорогостоящее оборудование, что нецелесообразно. Поэтому под катом рассказываю, как организовать клиент-серверный комплекс USB over IP на современных ОС и автоматизировать этот процесс.
Итак, USBIP прекрасно работает не только на специализированном оборудовании, но и на современных операционных системах. Это позволяет недорого или вообще без денежных вложений решать небольшие кейсы.
В данной статье мы рассмотрим организацию клиент-серверного комплекса USB over IP. В качестве клиента выступит облачный сервер Selectel (ОС — Ubuntu 20.04), а сервером будет классический bare metal-сервер, с той же версией Ubuntu. Помимо облачного клиента на Linux, мы выполним проброс устройства на клиент Windows 10.
Настройка сервера
Для начала установим необходимые инструменты и модули для работы. Все необходимые модули входят в состав пакета linux-tools. Выполняем его установку (у меня версия 5.4.0-100-generic):
root@Descartes:~# apt-get install linux-tools-`uname -r`
Далее проверяем доступные для загрузки USBIP модули ядра:
root@Descartes:~# find /lib/modules/$(uname -r) -name '*.ko'| grep usbip
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/usbip-core.ko
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/usbip-host.ko
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/vhci-hcd.ko
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/usbip-vudc.ko
Для работы сервера нам потребуются:
- usbip-core — основа USBIP-сервера,
- usbip-host — управление USB-устройствами,
- vhci-hcd — модуль экспорта виртуальных USB-устройств.
Выполним запуск необходимых нам модулей:
root@Descartes:~# modprobe usbip-core
root@Descartes:~# modprobe usbip-host
root@Descartes:~# modprobe vhci-hcd
Чтобы не запускать данные модули вручную каждый раз, добавим их в конфигурационный файл modules.conf:
root@Descartes:~# vi /etc/modules-load.d/modules.conf
usbip-core
usbip-host
vhci-hcd
Чтобы USB-сервер работал в фоновом режиме, мы запустим его в качестве демона, а после проверим BusID подключенного накопителя. Этот ID понадобится нам позже для проброса ключей в клиентскую часть. Запускаем USB-сервер в качестве демона:
root@Descartes:~# usbipd -D
Проверяем список подключенных устройств:
root@Descartes:~# usbip list -l
- busid 1-1 (058f:6387)
unknown vendor : unknown product (058f:6387)
- busid 1-13.1 (0557:2419)
unknown vendor : unknown product (0557:2419)
где BusID 1-1 — это наш USB-накопитель, подключенный в сервер.
Так как теперь нам известен BusID флешки, которой мы хотим поделиться с внешним миром, выполним следующую команду:
root@Descartes:~# usbip bind -b 1-1
usbip: info: bind device on busid 1-1: complete
Теперь устройство готово быть подключенным к удаленным клиентским устройствам. Далее рассмотрим настройку клиентской части.
Настройка клиента на Linux
По аналогии с сервером нам потребуется пакет linux-tools под необходимую версию ядра. Выполняем установку:
root@Racio:~# apt-get install linux-tools-`uname -r`
Подключаем удаленное устройство:
root@Racio:~# usbip attach --remote=188.124.55.21 --busid=1-1
Находим подключенный девайс среди остальных блочных устройств. В клиентской системе девайс определился как sda4-устройство:
root@Racio:~# fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/sda4 * 256 31129599 31129344 14.9G c W95 FAT32 (LBA)
Настройка клиента на Windows
Одним из вариантов подключения устройств для Windows является использование отдельного ПО — VirtualHere USB Client. Эта программа практически исключает какую-либо настройку руками.
Но мы пойдем по более интересному пути, где для Windows-клиента проброс будет осуществлен с помощью пакета usbip-client. Этот пакет содержит необходимые конфигурационные файлы для работы, в том числе каталог безопасности. Благодаря нему в будущем у нас не возникнет проблем с сертификатами. Пакет работает с Windows 7 и 10, а также с Windows Server 2008 и 2021.
Распакованный usbip-client необходимо подключить к нашей ОС как виртуальное устройство. Windows не видит старые устройства, у которых нет поддержки технологии Plug-and-Play. Чтобы добавить для них драйверы, нужно использовать утилиту ручной настройки «Мастер установки оборудования».
Для этого необходимо:
- Зайти в диспетчер устройств → Действие → Установить старое устройство.
- Выбрать пункт с ручной установкой оборудования и вместо конкретного типа оборудования выбрать пункт Показать все устройства. Далее выбираем Установить с диска и выбираем USBIPEnum.Inf файл из распакованного архива.
- Мастер установки распознает оборудование USB/IP Enumerator, его и устанавливаем.
После этого в диспетчере устройств в системных устройствах мы увидим установленный и подписанный драйвер USB/IP Enumerator.
Проверяем доступные для подключения USB-устройства:
C:\Users\usbip usbip -l 188.124.55.21
1-1: Alcor Micro Corp. : Transcend JetFlash Flash Drive (058f:6387)
: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
где 1-1 – BusID удаленного девайса.
Подключаем девайс к системе:
C:\Users\usbip usbip -a 188.124.55.21 1-1
new usb device attached to usbvbus port 1
Автоматизация клиента и сервера
Каждый раз прописывать команды и организовывать связность устройств вручную как минимум муторно. Как максимум — невозможно: например, если конечный клиент — простой обыватель, не подозревающий о существовании подобной «магии». Поэтому в дополнение к классическому пробросу USB-ключа нам также стоит автоматизировать этот процесс и на стороне клиента, и на стороне сервера.
Рассмотрим, как реализовать это на практике.
Автоматизация серверной части
Аналогично разделу с базовой настройкой сервера необходимо добавить модули в автозапуск, без этого никуда:
root@Descartes:~# vi /etc/modules
usbip-core
usbip-host
vhci-hcd
Далее создаем юнит в systemd, который будет обращаться к скрипту usbipd и расшаривать наш USB-девайс автоматически после старта сетевых служб ОС:
root@Descartes:~# vi /etc/systemd/system/usbipd.service
[Unit]
Description=USBIPd
After=network.target
[Service]
ExecStart=/bin/sh /root/script/usbipd
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Обновляем конфигурацию systemd и добавляем юнит в автозапуск:
root@Descartes:~#systemctl daemon-reload
root@Descartes:~#systemctl enable usbipd
После чего создаем сам скрипт автообновления инструментов и расшаривания устройства usbipd:
root@Descartes:~# vi /scripts/usbipd
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
bindID='1-1' # BusID нашего USB-устройства на сервере
kernel_version=$(uname -r) - # создание переменной, содержащей текущую версию ядра системы
apt install linux-tools-$kernel_version # установка инструментов проброса для актуальной версии ядра
usbipd -D
sleep 1
usbip bind -b $bindID # делаем USB-устройство на сервере доступным для проброса
usbip attach --remote=localhost --busid=$bindID
sleep 3
usbip detach --port=00
Выдаем разрешение на запуск скрипта:
root@Descartes:~# chmod ugo+x usbipd
Последние три строки скрипта вынесены отдельно неслучайно. ПО на стороне сервера может работать неидеально. Иногда при попытке подключения устройства к клиенту под управлением ОС Windows может возникнуть проблема, когда клиент попросту не видит на сервере устройства с BusID 1-1:
usbip -a 188.124.55.21 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Проблема решается путем проброса USB-девайса сервера самому себе с его последующим отключением, что и содержится в последних трех строках скрипта.
Как можно было заметить, значения параметров BindID и port в скрипте являются статичными. Это связано с тем, что сервер изначально настраивается на проброс одного единственного USB-устройства, который будет получать одни и те же значения описанных выше параметров.
Автоматизация клиентской части (Windows)
Автоматизацию клиентской машины под управлением Windows мы осуществим за счет создания исполнительного bat-файла и планировщика заданий, который будет этот файл выполнять при запуске системы. В bat-файл добавляем инструкции, необходимые для подключения:
cd C:\Users\Makson\Desktop\usbip
usbip.exe -a 188.124.55.21 1-1
Запускаем планировщик заданий, где указываем следующие параметры:
- во вкладке Общие ставим галочку Выполнять с наивысшим приоритетом,
- во вкладке Триггеры указываем При запуске (либо любой другой),
- во вкладке Действия указываем путь до нашего bat-файла. В моем случае это C:\Users\Makson\Desktop\usbip\script.bat,
- во вкладке Условия снимаем галочку с пункта Останавливать задачу, выполняемую дольше.
Остальные настройки можно оставить по умолчанию.
Сохраняем, находим созданную задачу и выполняем ее ручной запуск для проверки работоспособности.
Автоматизация клиентской части (Linux)
Аналогично серверу создаем новый юнит для запуска автоматического подключения USB-устройства:
root@Descartes:~# vi /etc/systemd/system/usbip_client.service
[Unit]
Description=usbip_client
After=network.target
[Service]
ExecStart=/bin/sh /root/script/usbip_client
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Создаем скрипт подключения:
root@Descartes:~# vi /root/script/usbip_client
#!/bin/sh
apt-get install linux-tools-`uname -r` -y
sleep 1
usbip attach --remote=188.124.55.21 --busid=1-1
sleep 1
echo "Подключенные устройства:"
usbip port
Даем разрешение на запуск скрипта:
root@Descartes:~# chmod ugo+x usbip_client
Обновляем конфигурацию systemd и добавляем юнит в автозапуск:
root@Descartes:~#systemctl daemon-reload
root@Descartes:~#systemctl enable usbip_client
Как USBIP в очередной раз «спас мир»
Удаленный доступ к USB-устройствам по сети продолжает решать многие задачи в мире IT. Это может быть организация доступа к камере видеонаблюдения в серверной стойке современного дата-центра, где, как правило, запрещено размещать собственные точки Wi-Fi. Или же настройка удаленного доступа к аппаратным USB-ключам с дорогостоящими лицензиями проприетарного ПО, что защищает их от физического воздействия человека (поломки, утери и т.д.).
Методы, описанные в тексте, позволяют использовать USB-устройства без лишних рисков и затрат на обслуживание, а также выполнять задачи, где нет альтернативных решений.
USB/IP for Windows
- This project aims to support both a USB/IP server and a client on Windows platform.
Build
Notes
- Build is tested on Windows 10 x64 and the projects are configured for this target by default.
- x86/x64 platforms should be supported. However, we don’t have an x86 setup for testing at the moment.
- For Windows 7 users, change
usbip_stub
andusbip_vhci
projects’ Target OS version toWindows 7
.- Right-click on the
Project > Properties > Driver Settings > Target OS version > Windows 7
- The recent tag version which supports is v0.1.0. All versions after v0.1.0 do not support Windows 7 or 8 because usbip-win started to use kernel libraries of Windows 10.
- Right-click on the
Build Tools
- Visual Studio 2019 Community (v142)
- Build with VS 2017 (v141) is also possible if Platform Toolset in Setting is configured to v141.
- Windows SDK 10.0.18362.0 (recommended)
- VS 2019 (v142): requires >= 10.0.18xxx
- VS 2017 (v141): requires >= 10.0.17xxx
- Windows Driver Kit Windows 10, version 1903 (10.0.18362)
- WDK 10.0.17134 (1803), 10.0.17763 (1809) and 10.0.18346 are also tested.
Build Process
- Open
usbip_win.sln
- If VS 2017 is used, SDK version for userspace projects (
usbip
,usbip_common
,usbipd
,stubctl
) should be adjusted. - Set certificate driver signing for
usbip_stub
andusbip_vhci
projects- Right-click on the
Project > Properties > Driver Signing > Test Certificate
- Browse to
driver/usbip_test.pfx
(password: usbip)
- Right-click on the
- Build solution or desired project
- All output files are created under {Debug,Release}/{x64,x86} folder.
Install
Windows USB/IP server
- Prepare a Linux machine as a USB/IP client or Windows usbip-win VHCI client (tested on Ubuntu 16.04 with kernel 4.15.0-29 — USB/IP kernel module crash was observed on some other versions)
# modprobe vhci-hcd
- Install USB/IP test certificate
- Install
driver/usbip_test.pfx
(password: usbip) - Certificate should be installed into
- «Trusted Root Certification Authority» in «Local Computer» (not current user) and
- «Trusted Publishers» in «Local Computer» (not current user)
- Install
- Enable test signing
> bcdedit.exe /set TESTSIGNING ON
- reboot the system to apply
- Copy
usbip.exe
,usbipd.exe
,usb.ids
,usbip_stub.sys
,usbip_stub.inx
into a folder in target machine- You can find
usbip.exe
,usbipd.exe
,usbip_stub.sys
in the output folder after build or on release page. userspace/usb.ids
driver/stub/usbip_stub.inx
- You can find
- Find USB Device ID
- You can get id from usbip listing
> usbip.exe list -l
- Bus id is always 1. So output from
usbip.exe
listing is shown as:
- You can get id from usbip listing
usbip.exe list -l
- busid 1-59 (045e:00cb)
Microsoft Corp. : Basic Optical Mouse v2.0 (045e:00cb)
- busid 1-30 (80ee:0021)
VirtualBox : USB Tablet (80ee:0021)
- Bind USB device to usbip stub
- The next command replaces the existing function driver with usbip stub driver
- This should be executed using administrator privilege
usbip_stub.inx
andusbip_stub.sys
files should be in the same folder asusbip.exe
> usbip.exe bind -b 1-59
- The next command replaces the existing function driver with usbip stub driver
- Run
usbipd.exe
> usbipd.exe -d -4
- TCP port
3240
should be allowed by firewall
- Attach USB/IP device on Linux machine
# usbip attach -r <usbip server ip> -b 1-59
Windows USB/IP client
- Currently, there are 2 versions for a VHCI driver with different installation procedures:
vhci(wdm)
: original version, implemented via WDM (Windows Driver Model);vhci(ude)
: newly developed version to fully support USB applications and implemented via UDE (USB Device Emulation) which is MS provided USB virtualization framework over KMDF (Kernel-Model Driver Framework).
- Prepare a Linux machine as a USB/IP server or Windows usbip-win stub server — (tested on Ubuntu 16.04 (kernel 4.15.0-29), 18.04, 20.04)
# modprobe usbip-host
- You can use virtual usbip-vstub as a stub server
- Run usbipd on a USB/IP server (Linux)
# usbipd -4 -d
- Install USB/IP test certificate
- Install
driver/usbip_test.pfx
(password: usbip) - Certificate should be installed into
- «Trusted Root Certification Authority» in «Local Computer» (not current user) and
- «Trusted Publishers» in «Local Computer» (not current user)
- Install
- Enable test signing
> bcdedit.exe /set TESTSIGNING ON
- reboot the system to apply
- Copy VHCI driver files into a folder in target machine
- If you’re testing
vhci(ude)
, copyusbip.exe
,usbip_vhci_ude.sys
,usbip_vhci_ude.inf
,usbip_vhci_ude.cat
into a folder in target machine; - If you’re testing
vhci(wdm)
, copyusbip.exe
,usbip_vhci.sys
,usbip_vhci.inf
,usbip_root.inf
,usbip_vhci.cat
into a folder in target machine; - You can find all files in output folder after build or on release page.
- If you’re testing
- Install USB/IP VHCI driver
- You can install using
usbip.exe
or manually - Using
usbip.exe
install command- Run PowerShell or CMD as an Administrator
PS> usbip.exe install
- The previous command will install a UDE driver or a WDM driver depending on the available files
- (UDE version first)
PS> usbip.exe install -u
if UDE driver onlyPS> usbip.exe install -w
if WDM driver only
- Manual Installation for vhci(ude)
- Run PowerShell or CMD as an Administrator
PS> pnputil /add-driver usbip_vhci_ude.inf
- Start Device manager
- Choose «Add Legacy Hardware» from the «Action» menu.
- Select «Install the hardware that I manually select from the list».
- Click «Next».
- Click «Have Disk», click «Browse», choose the copied folder, and click «OK».
- Click on the «usbip-win VHCI(ude)», and then click «Next».
- Click Finish at «Completing the Add/Remove Hardware Wizard».
- Manual Installation for vhci(wdm)
- Run PowerShell or CMD as an Administrator
PS> pnputil /add-driver usbip_vhci.inf
- Start Device manager
- Choose «Add Legacy Hardware» from the «Action» menu.
- Select «Install the hardware that I manually select from the list».
- Click «Next».
- Click «Have Disk», click «Browse», choose the copied folder, and click «OK».
- Click on the «USB/IP VHCI Root», and then click «Next».
- Click Finish at «Completing the Add/Remove Hardware Wizard».
- You can install using
- Attach a remote USB device
PS> usbip.exe attach -r <usbip server ip> -b 2-2
- Uninstall driver
PS> usbip.exe uninstall
- Disable test signing
> bcdedit.exe /set TESTSIGNING OFF
- reboot the system to apply
Reporting Bugs
usbip-win
is not yet ready for production use. We could find the problems with detailed logs.
How to get Windows kernel log for vhci(wdm)
- Set registry key to enable a debug filter
usbip-win
uses DbgPrintEx API for kernel logging.- save following as
.reg
file and run or manually insert the registry key - reboot the system to apply
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"IHVDRIVER"=dword:ffffffff
- Run a debugging log viewer program before you test.
- DebugView is a good tool to view the logs.
- If your testing machine suffer from BSOD (Blue Screen of Death), you should get it via remote debugging.
WinDbg
on virtual machines would be good to get logs.
How to get Windows kernel log for vhci(ude)
- A new vhci(ude) implementation uses WPP SW tracing instead of DbgPrintEx.
DebugView.exe
cannot catch a VHCI debug messageTraceView.exe
is a good utility for a new approach, which is included in WDK.
usbip_vhci_ude.pdb
file is required to add a trace provider easily.- Create a new session log in
TraceView.exe
- Choose PDB file radio button in «Provider Control GUID Setup» popup dialog
- Specify
usbip_vhci_ude.pdb
as a PDB file
- You can send real-time trace messages to WinDbg by modifying in «Advanced Log Session Options«.
- If your testing machine suffer from BSOD (Blue Screen of Death), you should get it via remote debugging.
WinDbg
on virtual machines would be good to get logs
How to get usbip forwarder log
- usbip-win transmits usbip packets via a userland forwarder.
- forwarder log is the best to look into usbip packet internals.
- edit
usbip_forward.c
to defineDEBUG_PDU
at the head of the file - compile
usbip.exe
orusbipd.exe
debug_pdu.log
is created at the path where an executable runs.
How to get linux kernel log
- Sometimes Linux kernel log is required
# dmesg --follow | tee kernel_log.txt
This project was supported by Basic Science Research Program through the National Research Foundation of Korea(NRF) funded by the Ministry of Education(2020R1I1A1A01066121).
Невозможность пробросить подключенное 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).
После установки в Windows появится служба usbipd (USBIP Device Host).
Откройте командную строку и выведите список доступных USB устройств:
usbipd list
Чтобы предоставить общий доступ к USB устройству, выполните команду:
usbipd bind --busid <busid>
Например:
usbipd bind --busid=7-1
Теперь вы можете получить доступ к этому 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
Windows IP over USB PC Service это сервис, предоставляемый Windows, который позволяет передавать сетевой трафик между компьютером и устройствами, подключенными через USB-порт. Это особенно полезно для разработчиков, которые хотят отладить свое приложение на устройстве, не имеющем непосредственного доступа к сети.
Преимущество Windows IP over USB PC Service заключается в том, что он позволяет симулировать сетевое подключение даже в случаях, когда на устройстве отсутствует Wi-Fi или другой способ подключения к сети. Сервис выполняет функции моста между USB-портом на компьютере и USB-портом на устройстве, обеспечивая передачу IP-трафика.
Чтобы начать использовать Windows IP over USB PC Service, вам понадобится установить драйверы на компьютер и на устройство, а также настроить его для работы. Драйверы обычно предоставляются производителем устройства и доступны для скачивания с их веб-сайта. После установки драйверов и настройки, вы сможете подключить устройство через USB и использовать его в качестве сетевого интерфейса.
Windows IP over USB PC Service является мощным инструментом для разработчиков, позволяющим отлаживать и тестировать приложения на устройствах без доступа к сети. Он предоставляет симулированное сетевое подключение через USB-порт и обеспечивает передачу IP-трафика. Установка и настройка драйверов необходима для использования этой функции.
В заключение, Windows IP over USB PC Service значительно облегчает разработку и отладку приложений на устройствах, не имеющих непосредственного доступа к сети. Этот сервис позволяет передать сетевой трафик через USB-порт и симулировать сетевое подключение. Установка драйверов и настройка сервиса являются неотъемлемыми этапами работы с Windows IP over USB PC Service.
Содержание
- Windows IP over USB PC Service: что это такое?
- Основные понятия и принципы работы
- Преимущества использования Windows IP over USB PC Service:
- Как настроить Windows IP over USB PC Service
Windows IP over USB PC Service: что это такое?
Когда устройство, такое как смартфон, планшет или другое мобильное устройство, подключается к компьютеру через USB-порт, Windows IP over USB PC Service позволяет передавать данные и устанавливать соединение с сетью через эту USB-связь.
Это особенно полезно, когда устройство не имеет собственного Wi-Fi-модуля или сетевого порта Ethernet, и вы хотите подключить его к Интернету или локальной сети через компьютер.
Windows IP over USB PC Service использует протоколы TCP/IP для передачи данных через USB-соединение. Он позволяет устройству получать IP-адрес компьютера и использовать его для доступа к сети.
Чтобы использовать Windows IP over USB PC Service, вам необходимо установить специальное программное обеспечение на компьютере, которое обеспечивает поддержку этой функции. Обычно эта программа доступна на сайте производителя устройства.
Услуга Windows IP over USB PC облегчает установку сетевого соединения с устройством, не имеющим собственного интерфейса сети. Она позволяет передавать данные и устанавливать соединение с Интернетом или локальной сетью через компьютер, используя USB-соединение. Это удобное решение для подключения мобильных устройств к сети, когда другие способы подключения недоступны или неудобны.
Основные понятия и принципы работы
Основной принцип работы IPUSB заключается в установлении виртуального сетевого соединения между компьютером и устройством. Для этого необходимо, чтобы оба устройства поддерживали протокол IP over USB и были правильно настроены.
При подключении устройства к компьютеру через USB, IPUSB автоматически создает виртуальную сетевую карту, которая позволяет передавать данные между компьютером и устройством. Компьютер видит устройство как обычную сетевую карту и может использовать его для обмена данными.
IPUSB поддерживает различные протоколы сетевого взаимодействия, такие как IPv4 и IPv6, и может работать с различными устройствами, включая мобильные телефоны, планшеты и другие периферийные устройства.
Важно отметить, что IPUSB необходимо установить и настроить на компьютере, а также на устройстве, которое будет подключено к компьютеру. Это можно сделать с помощью специальной утилиты IPUSBConfig, которая поставляется вместе с сервисом.
Преимущества использования Windows IP over USB PC Service:
- Удобство и простота подключения: Windows IP over USB PC Service позволяет устанавливать соединение между компьютером и устройством через USB-порт без необходимости настройки дополнительных сетевых настроек.
- Высокая скорость передачи данных: благодаря использованию USB-интерфейса, передача данных происходит с высокой скоростью, что позволяет эффективно работать с приложениями, требующими большой пропускной способности.
- Надежность и безопасность: Windows IP over USB PC Service обеспечивает защиту данных при передаче между устройством и компьютером, что обеспечивает безопасность и сохранность личной информации.
- Универсальность: сервис Windows IP over USB PC Service совместим с большим количеством устройств, работающих под управлением операционной системы Windows, что позволяет использовать его для подключения разного рода устройств, включая смартфоны, планшеты, камеры и другие электронные устройства.
- Поддержка различных протоколов: Windows IP over USB PC Service поддерживает несколько протоколов, таких как TCP/IP и Multicast, что позволяет легко соединяться с нужными устройствами и использовать различные приложения.
- Отсутствие необходимости в дополнительных драйверах: для работы с Windows IP over USB PC Service не требуются специальные драйвера, что делает процесс установки и использования удобным и без лишних затрат времени.
Использование сервиса Windows IP over USB PC Service предоставляет ряд преимуществ, которые делают работу с устройствами, подключенными к компьютеру через USB-порт, удобной, эффективной и безопасной.
Как настроить Windows IP over USB PC Service
Настройка Windows IP over USB PC Service позволяет использовать устройства Windows Mobile и Windows Phone для подключения к Интернету через USB-подключение. Для настройки этой службы выполните следующие шаги:
- Подключите ваше устройство Windows Mobile или Windows Phone к компьютеру с помощью USB-кабеля.
- Откройте Панель управления и выберите «Сеть и интернет».
- В разделе «Просмотр состояния и задачи сети» выберите «Изменить параметры адаптера».
- Щелкните правой кнопкой мыши на соединении «Windows Mobile-based Internet Sharing Device» и выберите «Свойства».
- Перейдите на вкладку «Доступ» и установите флажок «Разрешить другим пользователям сети подключаться через этот компьютер в Интернет».
- Нажмите «ОК», чтобы сохранить настройки.
После выполненных действий ваше устройство Windows Mobile или Windows Phone будет настроено для подключения к Интернету через USB-подключение. Теперь вы можете использовать ваше устройство для доступа в Интернет на компьютере.
Привет! В прошлой статье мы рассмотрели историю и принцип работы технологии USB over IP, узнали, как ее применяют на базе готового аппаратного решения.
Для личного использования, однако, аппаратное решение скорее не подойдет: нужно приобретать дорогостоящее оборудование, что нецелесообразно. Поэтому под катом рассказываю, как организовать клиент-серверный комплекс USB over IP на современных ОС и автоматизировать этот процесс.
Итак, USBIP прекрасно работает не только на специализированном оборудовании, но и на современных операционных системах. Это позволяет недорого или вообще без денежных вложений решать небольшие кейсы.
В данной статье мы рассмотрим организацию клиент-серверного комплекса USB over IP. В качестве клиента выступит облачный сервер Selectel (ОС — Ubuntu 20.04), а сервером будет классический bare metal-сервер, с той же версией Ubuntu. Помимо облачного клиента на Linux, мы выполним проброс устройства на клиент Windows 10.
Настройка сервера
Для начала установим необходимые инструменты и модули для работы. Все необходимые модули входят в состав пакета linux-tools. Выполняем его установку (у меня версия 5.4.0-100-generic):
root@Descartes:~# apt-get install linux-tools-`uname -r`
Далее проверяем доступные для загрузки USBIP модули ядра:
root@Descartes:~# find /lib/modules/$(uname -r) -name '*.ko'| grep usbip
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/usbip-core.ko
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/usbip-host.ko
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/vhci-hcd.ko
/lib/modules/5.4.0-100-generic/kernel/drivers/usb/usbip/usbip-vudc.ko
Для работы сервера нам потребуются:
- usbip-core — основа USBIP-сервера,
- usbip-host — управление USB-устройствами,
- vhci-hcd — модуль экспорта виртуальных USB-устройств.
Выполним запуск необходимых нам модулей:
root@Descartes:~# modprobe usbip-core
root@Descartes:~# modprobe usbip-host
root@Descartes:~# modprobe vhci-hcd
Чтобы не запускать данные модули вручную каждый раз, добавим их в конфигурационный файл modules.conf:
root@Descartes:~# vi /etc/modules-load.d/modules.conf
usbip-core
usbip-host
vhci-hcd
Чтобы USB-сервер работал в фоновом режиме, мы запустим его в качестве демона, а после проверим BusID подключенного накопителя. Этот ID понадобится нам позже для проброса ключей в клиентскую часть. Запускаем USB-сервер в качестве демона:
root@Descartes:~# usbipd -D
Проверяем список подключенных устройств:
root@Descartes:~# usbip list -l
- busid 1-1 (058f:6387)
unknown vendor : unknown product (058f:6387)
- busid 1-13.1 (0557:2419)
unknown vendor : unknown product (0557:2419)
где BusID 1-1 — это наш USB-накопитель, подключенный в сервер.
Так как теперь нам известен BusID флешки, которой мы хотим поделиться с внешним миром, выполним следующую команду:
root@Descartes:~# usbip bind -b 1-1
usbip: info: bind device on busid 1-1: complete
Теперь устройство готово быть подключенным к удаленным клиентским устройствам. Далее рассмотрим настройку клиентской части.
Настройка клиента на Linux
По аналогии с сервером нам потребуется пакет linux-tools под необходимую версию ядра. Выполняем установку:
root@Racio:~# apt-get install linux-tools-`uname -r`
Подключаем удаленное устройство:
root@Racio:~# usbip attach --remote=188.124.55.21 --busid=1-1
Находим подключенный девайс среди остальных блочных устройств. В клиентской системе девайс определился как sda4-устройство:
root@Racio:~# fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/sda4 * 256 31129599 31129344 14.9G c W95 FAT32 (LBA)
Настройка клиента на Windows
Одним из вариантов подключения устройств для Windows является использование отдельного ПО — VirtualHere USB Client. Эта программа практически исключает какую-либо настройку руками.
Но мы пойдем по более интересному пути, где для Windows-клиента проброс будет осуществлен с помощью пакета usbip-client. Этот пакет содержит необходимые конфигурационные файлы для работы, в том числе каталог безопасности. Благодаря нему в будущем у нас не возникнет проблем с сертификатами. Пакет работает с Windows 7 и 10, а также с Windows Server 2008 и 2021.
Распакованный usbip-client необходимо подключить к нашей ОС как виртуальное устройство. Windows не видит старые устройства, у которых нет поддержки технологии Plug-and-Play. Чтобы добавить для них драйверы, нужно использовать утилиту ручной настройки «Мастер установки оборудования».
Для этого необходимо:
- Зайти в диспетчер устройств → Действие → Установить старое устройство.
- Выбрать пункт с ручной установкой оборудования и вместо конкретного типа оборудования выбрать пункт Показать все устройства. Далее выбираем Установить с диска и выбираем USBIPEnum.Inf файл из распакованного архива.
- Мастер установки распознает оборудование USB/IP Enumerator, его и устанавливаем.
После этого в диспетчере устройств в системных устройствах мы увидим установленный и подписанный драйвер USB/IP Enumerator.
Проверяем доступные для подключения USB-устройства:
C:Usersusbip usbip -l 188.124.55.21
1-1: Alcor Micro Corp. : Transcend JetFlash Flash Drive (058f:6387)
: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
где 1-1 – BusID удаленного девайса.
Подключаем девайс к системе:
C:Usersusbip usbip -a 188.124.55.21 1-1
new usb device attached to usbvbus port 1
Автоматизация клиента и сервера
Каждый раз прописывать команды и организовывать связность устройств вручную как минимум муторно. Как максимум — невозможно: например, если конечный клиент — простой обыватель, не подозревающий о существовании подобной «магии». Поэтому в дополнение к классическому пробросу USB-ключа нам также стоит автоматизировать этот процесс и на стороне клиента, и на стороне сервера.
Рассмотрим, как реализовать это на практике.
Автоматизация серверной части
Аналогично разделу с базовой настройкой сервера необходимо добавить модули в автозапуск, без этого никуда:
root@Descartes:~# vi /etc/modules
usbip-core
usbip-host
vhci-hcd
Далее создаем юнит в systemd, который будет обращаться к скрипту usbipd и расшаривать наш USB-девайс автоматически после старта сетевых служб ОС:
root@Descartes:~# vi /etc/systemd/system/usbipd.service
[Unit]
Description=USBIPd
After=network.target
[Service]
ExecStart=/bin/sh /root/script/usbipd
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Обновляем конфигурацию systemd и добавляем юнит в автозапуск:
root@Descartes:~#systemctl daemon-reload
root@Descartes:~#systemctl enable usbipd
После чего создаем сам скрипт автообновления инструментов и расшаривания устройства usbipd:
root@Descartes:~# vi /scripts/usbipd
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
bindID='1-1' # BusID нашего USB-устройства на сервере
kernel_version=$(uname -r) - # создание переменной, содержащей текущую версию ядра системы
apt install linux-tools-$kernel_version # установка инструментов проброса для актуальной версии ядра
usbipd -D
sleep 1
usbip bind -b $bindID # делаем USB-устройство на сервере доступным для проброса
usbip attach --remote=localhost --busid=$bindID
sleep 3
usbip detach --port=00
Выдаем разрешение на запуск скрипта:
root@Descartes:~# chmod ugo+x usbipd
Последние три строки скрипта вынесены отдельно неслучайно. ПО на стороне сервера может работать неидеально. Иногда при попытке подключения устройства к клиенту под управлением ОС Windows может возникнуть проблема, когда клиент попросту не видит на сервере устройства с BusID 1-1:
usbip -a 188.124.55.21 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Проблема решается путем проброса USB-девайса сервера самому себе с его последующим отключением, что и содержится в последних трех строках скрипта.
Как можно было заметить, значения параметров BindID и port в скрипте являются статичными. Это связано с тем, что сервер изначально настраивается на проброс одного единственного USB-устройства, который будет получать одни и те же значения описанных выше параметров.
Автоматизация клиентской части (Windows)
Автоматизацию клиентской машины под управлением Windows мы осуществим за счет создания исполнительного bat-файла и планировщика заданий, который будет этот файл выполнять при запуске системы. В bat-файл добавляем инструкции, необходимые для подключения:
cd C:UsersMaksonDesktopusbip
usbip.exe -a 188.124.55.21 1-1
Запускаем планировщик заданий, где указываем следующие параметры:
- во вкладке Общие ставим галочку Выполнять с наивысшим приоритетом,
- во вкладке Триггеры указываем При запуске (либо любой другой),
- во вкладке Действия указываем путь до нашего bat-файла. В моем случае это C:UsersMaksonDesktopusbipscript.bat,
- во вкладке Условия снимаем галочку с пункта Останавливать задачу, выполняемую дольше.
Остальные настройки можно оставить по умолчанию.
Сохраняем, находим созданную задачу и выполняем ее ручной запуск для проверки работоспособности.
Автоматизация клиентской части (Linux)
Аналогично серверу создаем новый юнит для запуска автоматического подключения USB-устройства:
root@Descartes:~# vi /etc/systemd/system/usbip_client.service
[Unit]
Description=usbip_client
After=network.target
[Service]
ExecStart=/bin/sh /root/script/usbip_client
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Создаем скрипт подключения:
root@Descartes:~# vi /root/script/usbip_client
#!/bin/sh
apt-get install linux-tools-`uname -r` -y
sleep 1
usbip attach --remote=188.124.55.21 --busid=1-1
sleep 1
echo "Подключенные устройства:"
usbip port
Даем разрешение на запуск скрипта:
root@Descartes:~# chmod ugo+x usbip_client
Обновляем конфигурацию systemd и добавляем юнит в автозапуск:
root@Descartes:~#systemctl daemon-reload
root@Descartes:~#systemctl enable usbip_client
Как USBIP в очередной раз «спас мир»
Удаленный доступ к USB-устройствам по сети продолжает решать многие задачи в мире IT. Это может быть организация доступа к камере видеонаблюдения в серверной стойке современного дата-центра, где, как правило, запрещено размещать собственные точки Wi-Fi. Или же настройка удаленного доступа к аппаратным USB-ключам с дорогостоящими лицензиями проприетарного ПО, что защищает их от физического воздействия человека (поломки, утери и т.д.).
Методы, описанные в тексте, позволяют использовать USB-устройства без лишних рисков и затрат на обслуживание, а также выполнять задачи, где нет альтернативных решений.