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: зняволены да 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

Дадаць каментар