Windows ip over usb что это

Время на прочтение
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. Чтобы добавить для них драйверы, нужно использовать утилиту ручной настройки «Мастер установки оборудования».

Для этого необходимо:

  1. Зайти в диспетчер устройств → ДействиеУстановить старое устройство.
  2. Выбрать пункт с ручной установкой оборудования и вместо конкретного типа оборудования выбрать пункт Показать все устройства. Далее выбираем Установить с диска и выбираем USBIPEnum.Inf файл из распакованного архива.
  3. Мастер установки распознает оборудование 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 and usbip_vhci projects’ Target OS version to Windows 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.

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 and usbip_vhci projects
    • Right-click on the Project > Properties > Driver Signing > Test Certificate
    • Browse to driver/usbip_test.pfx (password: usbip)
  • 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
      1. «Trusted Root Certification Authority» in «Local Computer» (not current user) and
      2. «Trusted Publishers» in «Local Computer» (not current user)
  • 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
  • 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:
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 and usbip_stub.sys files should be in the same folder as usbip.exe
    • > usbip.exe bind -b 1-59
  • 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
      1. «Trusted Root Certification Authority» in «Local Computer» (not current user) and
      2. «Trusted Publishers» in «Local Computer» (not current user)
  • 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), copy usbip.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), copy usbip.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.
  • 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 only
      • PS> 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».
  • 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 message
      • TraceView.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 define DEBUG_PDU at the head of the file
  • compile usbip.exe or usbipd.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).

Установить 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

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.

Содержание

  1. Windows IP over USB PC Service: что это такое?
  2. Основные понятия и принципы работы
  3. Преимущества использования Windows IP over USB PC Service:
  4. Как настроить 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-подключение. Для настройки этой службы выполните следующие шаги:

  1. Подключите ваше устройство Windows Mobile или Windows Phone к компьютеру с помощью USB-кабеля.
  2. Откройте Панель управления и выберите «Сеть и интернет».
  3. В разделе «Просмотр состояния и задачи сети» выберите «Изменить параметры адаптера».
  4. Щелкните правой кнопкой мыши на соединении «Windows Mobile-based Internet Sharing Device» и выберите «Свойства».
  5. Перейдите на вкладку «Доступ» и установите флажок «Разрешить другим пользователям сети подключаться через этот компьютер в Интернет».
  6. Нажмите «ОК», чтобы сохранить настройки.

После выполненных действий ваше устройство Windows Mobile или Windows Phone будет настроено для подключения к Интернету через USB-подключение. Теперь вы можете использовать ваше устройство для доступа в Интернет на компьютере.

USB over IP для личного использования: организовываем клиент-серверный комплекс на Linux и Windows - 1

Привет! В прошлой статье мы рассмотрели историю и принцип работы технологии 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. Чтобы добавить для них драйверы, нужно использовать утилиту ручной настройки «Мастер установки оборудования».

Для этого необходимо:

  1. Зайти в диспетчер устройств → ДействиеУстановить старое устройство.
  2. Выбрать пункт с ручной установкой оборудования и вместо конкретного типа оборудования выбрать пункт Показать все устройства. Далее выбираем Установить с диска и выбираем USBIPEnum.Inf файл из распакованного архива.
  3. Мастер установки распознает оборудование 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 over IP для личного использования: организовываем клиент-серверный комплекс на Linux и Windows - 2

Автоматизация клиента и сервера


Каждый раз прописывать команды и организовывать связность устройств вручную как минимум муторно. Как максимум — невозможно: например, если конечный клиент — простой обыватель, не подозревающий о существовании подобной «магии». Поэтому в дополнение к классическому пробросу 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-устройства без лишних рисков и затрат на обслуживание, а также выполнять задачи, где нет альтернативных решений.

  • Windows internet explorer for windows 7 32 bit download
  • Windows iso downloader не работает
  • Windows ip forwarding windows 7
  • Windows internals 7th edition part 2
  • Windows insider service что это