Доступ к удалённому USB-устройству по сети
USB-устройство, вставленное в машину где-то ещё — флешку, лицензионный донгл, аппаратный ключ безопасности, программатор микроконтроллеров — можно подключить к вашему компьютеру по сети, и оно появится так, будто вставлено в ваш собственный порт. За это отвечает функция ядра USB/IP; она работает по обычному TCP на порту 3240, поэтому LRO переносит её так же, как переносит SSH или веб-панель.
usbip на обеих машинах — это вне LRO и не подделать. На Linux: установите утилиты (usbip / linux-tools) и загрузите usbip-core + usbip-host на удалённой машине, vhci-hcd на вашей. На Windows для экспортирующей стороны используйте usbipd-win. Шаги LRO ниже одинаковы в любом случае; только команды usbip зависят от ОС.-
Экспортируйте USB-устройство на удалённой машине
На машине, в которую вставлено устройство (на клиенте), запустите демон USB/IP, найдите bus id устройства и привяжите его, чтобы его можно было экспортировать.
usbipdслушает на127.0.0.1:3240.$ sudo usbipd -D # start the USB/IP daemon (port 3240) $ usbip list -l # find the busid of your device $ sudo usbip bind -b 1-1.2 # export it (use your busid)Держите привязку только к
127.0.0.1— выставлять порт 3240 в сеть не нужно. LRO дотягивается до него локально с той же машины. -
Добавьте эндпоинт USB/IP на агенте-клиенте
В панели Endpoints → Create endpoint (эндпоинты → создать эндпоинт). Выберите агента-клиента (машину с устройством), назовите его, например, Lab USB, и задайте target
127.0.0.1и port3240.
Рис. 1. Эндпоинт USB/IP живёт на агенте-клиенте — target 127.0.0.1:3240, локальный usbipd. -
Откройте туннель со своей машины
Tunnels → Add tunnel (туннели → добавить туннель). Выберите свой компьютер как агента-саппорта, укажите эндпоинт Lab USB и задайте локальный порт
3240— совпадение со стандартным портом USB/IP упрощает команду подключения. Создайте туннель; через мгновение он станет Active (активным).
Рис. 2. Активный туннель — ваша машина слушает на 3240 и пробрасывает на удалённый 127.0.0.1:3240. -
Подключите устройство через туннель
На вашем компьютере (на стороне саппорта) направьте
usbipна локальный порт. Поскольку туннель слушает на стандартном для USB/IP порту 3240, достаточно-r 127.0.0.1. Выведите список экспортированных устройств, затем подключите нужное:$ sudo usbip list -r 127.0.0.1 # see what the remote exports, through the tunnel $ sudo usbip attach -r 127.0.0.1 -b 1-1.2 $ lsusb | grep SanDisk # the remote device now shows up locally
Рис. 3. Экспорт на удалённой машине (сверху), подключение через туннель на вашей машине (снизу) — устройство появляется в lsusbтак, будто вставлено локально.Теперь устройство — обычное локальное USB-устройство: монтируйте флешку, читайте донгл, прошивайте плату. Когда закончите, отключите его, и порт освободится:
$ usbip port # list attached remote devices $ sudo usbip detach -p 00 # detach by port number
Заметки
- Обе стороны за NAT — не проблема. Каждый агент звонит наружу; порт 3240 USB/IP никогда не выставлен в интернет, только в локальный туннель.
- Ограничьте доступ — задайте Allowed addresses (ACL) на туннеле, чтобы до листенера могла дотянуться только ваша машина. USB-устройство, экспортированное не тому человеку, — это реальное устройство у него в руках.
- Задержка важна — USB/IP чувствителен к времени отклика. Флешки, донглы и последовательные программаторы работают хорошо; изохронные устройства (веб-камеры, аудио) — могут нет. Узкое место — сетевой канал, а не LRO.
- Экспорт с Windows —
usbipd-winпривязывает и шарит устройства; шаги с эндпоинтом и туннелем в панели не меняются. - Любой TCP-сервис — USB/IP — лишь один из протоколов поверх того же туннеля. Механика идентична доступу к SSH за NAT; меняются только порт и клиентская утилита.
Вставьте устройство где угодно — используйте его так, будто оно у вас на столе.
Создать аккаунт →