USB over IP v domácich podmienkach

Niekedy sa objaví túžba pracovať s zariadením pripojeným cez USB, bez toho, aby ste ho mali na stole vedľa svojho notebooku. Môj prípad je čínsky gravírovací stroj so 500 mW laserom, ktorý nie je príjemný na blízky kontakt. Okrem bezprostredného nebezpečenstva pre oči, pri práci s laserom sa uvoľňujú toxické produkty horenia, takže zariadenie musí byť umiestnené v dobre vetranej miestnosti, a ideálne izolované od ľudí. A ako teda s takým zariadením pracovať? Odpoveď na túto otázku som náhodou našiel pri prezeraní repozitára OpenWRT v nádeji nájsť vhodné využitie pre starší router D-Link DIR-320 A2. Na pripojenie som sa rozhodol použiť spôsob popísaný na Habr. USB over IP tunel, ale všetky inštrukcie na jeho inštaláciu sa stihli stať neaktuálnymi, preto píšem svoj vlastný.

OpenWRT je operačný systém, ktorý netreba predstavovať, preto nebudem podrobne opisovať jeho inštaláciu. Pre svoj router som zvolil poslednú stabilnú verziu OpenWrt 19.07.3 a pripojil ho k hlavnej prístupovej ponuke cez Wi-Fi ako klient, zvolil režim lan, aby som netrápil firewall.

Serverová časť

Postupujeme podľa oficiálnych pokynov. Po pripojení cez ssh nainštalujeme potrebné balíky.

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

Ďalej pripojíme k USB portu routera naše zariadenie (v mojom prípade sú to zariadenia: USB hub, flash disk, na ktorý je pripojený súborový systém routera (z dôvodu nedostatku miesta na internom úložisku) a priamo gravírovací stroj).

Skúsime vytvoriť zoznam pripojených zariadení:

root@OpenWrt:~# usbip list -l

Prázdne.

Cestou gúglenia bol nájdený vinník, ktorým sa ukázala knižnica libudev-fbsd.
Ručne vytiahneme z repozitára poslednú funkčnú verziu libudev_3.2-1 z vydania OpenWRT 17.01.7 pre svoju architektúru, v mojom prípade to je libudev_3.2-1_mipsel_mips32.ipk. S pomocou wget/scp ju nahráme do pamäte routera a preinštalujeme

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

Kontrolujeme:

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

 - busid 1-1.4 (1a86:7523)
   QinHeng Electronics : HL-340 USB-Serial adaptér (1a86:7523)

Číňan pripojený v USB hube dostal bsuid 1-1.4. Zapamätali sme si to.

Teraz spúšťame démon:

root@OpenWrt:~# usbipd -D

a bindujeme Číňana

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

Kontrolujeme, či všetko funguje:

root@OpenWrt:‍/home# netstat -alpt
Aktívne internetové pripojenia (servery a nadviazané)
Proto Recv-Q Send-Q Lokálna adresa           Cudzia adresa         Stav       PID/Program názov
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Aby sme mohli zariadenie automaticky pripojiť, upravíme /etc/rc.local, pridaním pred exit 0 nasledujúce:

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

Klientska časť

Skúsime pripojiť zariadenie k Windows 10 pomocou vyššie uvedenej inštrukcie z openwrt.org. Hneď poviem: projekt je odsúdený na neúspech. Po prvé, zvažuje sa iba Windows 7 x64. Po druhé, je poskytnutý odkaz na vlákno na sourceforge.net, kde sa odporúča stiahnuť z Dropboxu patchnutý ovládač z roku 2014. Pri pokuse spustiť ho pod Windows 10 a pripojiť sa k nášmu zariadeniu dostávame chybu:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip pre Windows ($Id$)

*** CHYBA: nemožno nájsť zariadenie

Je to spôsobené tým, že klient nepracuje so serverom zostaveným na jadre staršom ako verzia 3.14.
Server usbip pod OpenWRT 19.07.3 je zostavený na jadre 4.14.180.

Pokračujúc v hľadaní, narážam na aktuálny vývoj klienta pre Windows na github. Okej, deklarovaná podpora Windows 10 x64, ale klient je len testovací, takže sú prítomné určité obmedzenia.

Takže najprv požadujú nainštalovať certifikát, a to dvakrát. Okej, umiestňujeme ho do Dôveryhodnej koreňovej certifikačnej autority a Dôveryhodných vydavateľov.

Ďalej je potrebné prepnúť operačný systém do testovacieho režimu. Robí sa to príkazom

bcdedit.exe /set TESTSIGNING ON

Prvýkrát sa mi to nepodarilo, prekážal mi secure boot. Pre jeho vypnutie je potrebné reštartovať do UEFI a nastaviť secure boot - disable. Na niektorých modeloch notebookov môže byť potrebné nastaviť administrátorské heslo.

Potom sa spustíme do Windows a vykonáme bcdedit.exe /set TESTSIGNING ON
Windows hovorí, že všetko je v poriadku. Znova reštartujeme a vidíme v pravom dolnom rohu nápis Test Mode, verziu a číslo buildu OS.

Na čo sú všetky tieto manipulácie? Na inštaláciu nepodpísaného ovládača USB/IP VHCI. Umožňuje sa to stiahnutím súborov usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat a ich vykonaním s oprávneniami administrátora

usbip.exe install

alebo druhý spôsob, inštalácia Legacy Hardware ručne. Zvolil som druhú možnosť, dostal som varovanie o inštalácii nepodpísaného ovládača a súhlasil som s ním.

Potom kontrolujeme, či máme možnosť pripojiť sa k vzdialenému USB zariadeniu, vykonaním príkazu:

usbip.exe list -r

dostávame zoznam zariadení:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: chyba: zlyhal som otvorit usb id databázu
Exportovateľné USB zariadenia
======================
 - 192.168.31.203
      1-1.4: neznámy predajca : neznámy produkt (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : neznáma trieda / neznáma podtrieda / neznámy protokol (ff/00/00)

na chybu usbip: chyba: zlyhal som otvorit usb id databázu neobávajte sa, nemá to vplyv na prácu.

Teraz pripájame zariadenie:

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

Hotovo, Windows zistil nové zariadenie, teraz s ním môžeme pracovať tak, ako by bolo fyzicky pripojené k notebooku.

S čínskym gravírovačom som sa musel trochu trápiť, pretože pri pokuse nainštalovať jeho ovládač CH341SER cez dodávaný inštalátor (áno, gravírovač je na Arduine), USB/IP VHCI zhadzoval Windows do BSOD. Avšak inštalácia ovládača CH341SER do pripojenia zariadenia cez usbip.exe problém vyriešila.

Výsledok: gravírovač hučí a dymí v kuchyni pri otvorenom okne a zatvorených dverách, sledujem proces vypaľovania z inej miestnosti cez natívny softvér, ktorý necíti žiadny podvod.

Použité zdroje:

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

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster