USB over IP у домашніх умовах

Іноді виникає бажання працювати з пристроєм, підключеним USB, не тримаючи його на столі поруч із ноутбуком. У мене таким пристроєм є китайський гравер із лазером на 500 мВт, штука досить неприємна при близькому контакті. Крім безпосередньої небезпеки для очей, в процесі роботи лазера виділяються токсичні продукти горіння, тому пристрій повинен знаходитися в приміщенні, що добре провітрюється, і бажано ізольовано від людей. А як же таким пристроєм керувати? Відповідь на це запитання я випадково знайшов, переглядаючи репозиторій OpenWRT в надії знайти гідне застосування старому роутеру D-Link DIR-320 A2. Для підключення вирішив використовувати описуваний на Хабре раніше USB over IP tunnelПроте всі інструкції з його встановлення встигли втратити актуальність, тому пишу свою.

OpenWRT - операційна система, яка не потребує представлення, тому її установку розписувати не буду. Для свого роутера взяв останній стабільний реліз OpenWrt 19.07.3 і підключив його до основної точки доступу по Wi-Fi як клієнта, вибравши режим ЛВС, щоб не мучити файрвол

Серверна частина

Діємо згідно офіційної інструкції. Після підключення з ssh встановлюємо необхідні пакети.

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-client

Далі підключаємо до USB-порту роутера наш пристрій (у моєму випадку пристрою: USB-хаб, флешку, на яку змонтована файлова система роутера (через брак місця на внутрішньому накопичувачі), і безпосередньо гравер).

Спробуємо вивести список підключених пристроїв:

root@OpenWrt:~# usbip list -l

Порожньо.

Шляхом гугленія було знайдено винуватця, ним виявилася бібліотека libudev-fbsd.
Витягуємо руками з репозиторію останню робочу версію libudev_3.2-1 з релізу OpenWRT 17.01.7 під свою архітектуру, в моєму випадку це libudev_3.2-1_mipsel_mips32.ipk. За допомогою wget/scp завантажуємо її в пам'ять роутера та встановлюємо заново

root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk

перевіряємо:

root@OpenWrt:~# usbip list -l
 - busid 1-1.1 (090c:1000)
   Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) : Flash Drive (090c:1000)

 - busid 1-1.4 (1a86:7523)
   QinHeng Electronics : HL-340 USB-Serial adapter (1a86:7523)

Китаєць, підключений до USB-хабу, отримав bsuid 1-1.4. Запам'ятали.

Тепер запускаємо демон:

root@OpenWrt:~# usbipd -D

і біндім китайця

root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: complete

Перевіряємо, що все працює:

root@OpenWrt:/home# netstat -alpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Щоб далі биндити девайс автоматично, підредагуємо /etc/rc.local, додавши перед вихід 0 наступне:

usbipd -D &
sleep 1
usbip bind -b 1-1.4

Клієнтська частина

Спробуємо підключити пристрій до Windows 10, використовуючи вищезгадану інструкцію з openwrt.org. Відразу скажу: витівка приречена на провал. По-перше, розглядається лише Windows 7 x64. По-друге, дане посилання на тред на sourceforge.net, в якому пропонується завантажити з дропбоксу патчений у 2014 році драйвер. При спробі запустити його під Windows 10 і підключитися до нашого пристрою отримуємо помилку:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip for windows ($Id$)

*** ERROR: cannot find device

Пов'язано це з тим, що клієнт не працює з сервером, зібраним під ядро ​​старше за версію 3.14.
Сервер usbip під OpenWRT 19.07.3 зібраний на ядрі 4.14.180.

Продовжуючи пошуки, натикаюсь на актуальну розробку віндового клієнта на GitHub. Ок, заявлена ​​підтримка Windows 10 x64, але клієнт виключно тестовий, тому є ряд обмежень.

Отже, спочатку просять встановити сертифікат, до того ж двічі. Ок, поміщаємо його в Trusted Root Certification Authority та Trusted Publishers.

Далі необхідно перевести операційну систему у тестовий режим. Робиться це командою

bcdedit.exe /set TESTSIGNING ON

З першого разу у мене не вийшло, завадив безпечного завантаження. Для його відключення необхідно перезавантажитись у UEFI, і виставити secure boot — disable. На деяких моделях ноутбуків може знадобитися встановлення supervisor password.

Після цього завантажуємось у Windows і робимо bcdedit.exe /set TESTSIGNING ON
Вінда каже, що все прибл. Знову перезавантажуємося, і бачимо у правому нижньому кутку напис Test Mode, версію та номер білда ОС.

Навіщо всі ці маніпуляції? Для встановлення непідписаного драйвера USB/IP VHCI. Зробити це пропонується, завантаживши файли usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat, та виконавши з правами адміністратора

usbip.exe install

або другий спосіб, встановлення Legacy Hardware в ручному режимі. Я вибрав другий варіант, отримав попередження про встановлення непідписаного драйвера та погодився з ним.

Далі перевіряємо, що ми маємо можливість підключитися до віддаленого USB-пристрою, виконуючи команду:

usbip.exe list -r <ip вашего роутера>

отримуємо список пристроїв:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: error: failed to open usb id database
Exportable USB devices
======================
 - 192.168.31.203
      1-1.4: unknown vendor : unknown product (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : unknown class / unknown subclass / unknown protocol (ff/00/00)

на помилку usbip: error: failed to Open usb id database не звертаємо уваги, на роботу не впливає.

Тепер біндім пристрій:

c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4

Все, вінда виявила новий пристрій, тепер з ним можна працювати так, ніби він фізично підключений до ноутбука.

З китайським гравером довелося трохи помучитися, так як при спробі встановити його драйвер CH341SER через інсталятор, що додався до гравера (так, гравер на Ардуїно), USB/IP VHCI роняв вінду в BSOD. Однак встановлення драйвера CH341SER до Підключення пристрою через usbip.exe вирішувало проблему.

Підсумок: гравер шумить і димить на кухні при відкритому вікні та зачинених дверях, я спостерігаю за процесом випалювання з іншої кімнати через рідну софтину, яка не відчуває каверзи.

Використані джерела:

https://openwrt.org/docs/guide-user/services/usb.iptunnel
https://github.com/cezanne/usbip-win

Джерело: habr.com

Додати коментар або відгук