USB přes IP doma

Někdy vzniká touha pracovat s zařízením připojeným přes USB, aniž bychom ho měli na stole vedle notebooku. Mým takovým zařízením je čínský gravírovací stroj s laserem o výkonu 500 mW, což je poměrně nepříjemné při blízkém kontaktu. Kromě přímého nebezpečí pro oči se při práci s laserem uvolňují toxické produkty hoření, a proto by mělo zařízení být umístěno v dobře větraném prostoru, ideálně izolovaně od lidí. A jak takovým zařízením ovládat? Odpověď na tuto otázku jsem náhodou našel při procházení repozitáře OpenWRT v naději najít důstojné využití pro starý router D-Link DIR-320 A2. Pro připojení jsem se rozhodl použít to, co bylo dříve popsáno na Habr. USB over IP tunel, ale všechny návody k jeho instalaci již ztratily aktuálnost, a proto píšu svůj vlastní.

OpenWRT je operační systém, který nepotřebuje představení, takže jeho instalaci nebudu podrobně popisovat. Pro svůj router jsem vzal poslední stabilní verzi OpenWrt 19.07.3 a připojil ho k hlavnímu přístupovému bodu přes Wi-Fi jako klient, vybral jsem režim lan, abych nemusel mučit firewall.

Serverová část

Postupujeme podle oficiálního návodu. Po připojení přes ssh nainstalujeme potřebné balíčky.

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

Dále připojujeme k USB portu routeru naše zařízení (v mém případě zařízení: USB hub, flash disk, na který je připojena souborová struktura routeru (vzhledem k nedostatku místa na interním úložišti) a přímo gravírovací stroj).

Zkusíme vypsat seznam připojených zařízení:

root@OpenWrt:~# usbip list -l

Prázdno.

Cestou guglání jsem objevil viníka, kterým byla knihovna libudev-fbsd.
Ručně vytáhneme z repozitáře poslední funkční verzi libudev_3.2-1 z vydání OpenWRT 17.01.7 pro svou architekturu, v mém případě je to libudev_3.2-1_mipsel_mips32.ipk. Pomocí wget/scp ji nahrajeme do paměti routeru a přeinstalujeme

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 (dříve Feiya Technology Corp.) : Flash Drive (090c:1000)

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

Číňan, připojený do USB hubu, dostal bsuid 1-1.4. Zapamatovali jsme si to.

Nyní spouštíme 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

Ověřujeme, že vše funguje:

root@OpenWrt:/home# netstat -alpt
Aktivní internetová připojení (servery a připojení)
Proto Recv-Q Send-Q Lokální adresa           Cizí adresa         Stav       PID/Název programu
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               NASLOUŠÍ      1884/usbipd

Abychom mohli produkt dále automaticky připojit, upravíme /etc/rc.local, přidáním před exit 0 následující:

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

Klientská část

Zkusíme připojit zařízení k Windows 10 podle výše uvedeného návodu z openwrt.org. Hned říkám: pokus je odsouzen k neúspěchu. Za prvé se zvažuje pouze Windows 7 x64. Za druhé, je uveden odkaz na vlákno na sourceforge.net, kde je navrženo stáhnout z dropboxu opravený ovladač z roku 2014. Při pokusu o jeho spuštění pod Windows 10 a připojení k našemu zařízení dostáváme chybu:

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

*** CHYBA: nelze najít zařízení

To souvisí s tím, že klient nefunguje se serverem sestaveným pod jádrem starším než verze 3.14.
Server usbip na OpenWRT 19.07.3 je sestaven na jádru 4.14.180.

Pokračuji v hledání a narazím na aktuální vývoj klienta pro Windows na github. Dobrá, byla uvedena podpora pro Windows 10 x64, ale klient je výhradně testovací, takže má řadu omezení.

Nejprve je požadováno, abyste nainstalovali certifikát, a to dvakrát. Dobrá, umístíme ho do Důvěryhodných certifikačních autorit a Důvěryhodných vydavatelů.

Dále je třeba přepnout operační systém do testovacího režimu. To se provádí příkazem

bcdedit.exe /set TESTSIGNING ON

Napoprvé se mi to nepovedlo, překáželo mi secure boot. Abychom jej deaktivovali, je třeba se restartovat do UEFI a nastavit secure boot — zakázat. Na některých modelích notebooků může být nutné nastavit supervizní heslo.

Poté se spustíme do Windows a provedeme bcdedit.exe /set TESTSIGNING ON
Windows říká, že vše je v pořádku. Znovu se restartujeme a v pravém dolním rohu vidíme nápis Test Mode, verzi a číslo sestavení operačního systému.

Proč všechny tyto manipulace? Pro instalaci nepodepsaného ovladače USB/IP VHCI. To lze provést stažením souborů usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat a spuštěním s administrátorskými právy

usbip.exe install

nebo druhý způsob, instalace Legacy Hardware v ručním režimu. Zvolil jsem druhou možnost, dostal jsem upozornění na instalaci nepodepsaného ovladače a souhlasil s ním.

Dále ověřujeme, že máme možnost připojit se k vzdálenému USB zařízení pomocí příkazu:

usbip.exe list -r

dostáváme seznam zařízení:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: chyba: selhalo otevření usb id databáze
Exportovatelné USB zařízení
======================
 - 192.168.31.203
      1-1.4: neznámý výrobce : neznámý produkt (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : neznámá třída / neznámá podtřída / neznámý protokol (ff/00/00)

omlouvám se za chybu usbip: chyba: selhalo otevření usb id databáze nevěnujeme pozornost, na práci to nemá vliv.

Teď připojujeme zařízení:

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

Hotovo, Windows objevila nové zařízení, teď s ním můžeme pracovat, jako by bylo fyzicky připojeno k notebooku.

S čínským gravírováním jsem si dal trochu práce, protože při pokusu o instalaci jeho ovladače CH341SER přes přiložený instalátor (ano, gravírovač na Arduinu) se USB/IP VHCI zhroutilo do BSOD. Nicméně instalace ovladače CH341SER do připojení zařízení skrze usbip.exe problém vyřešila.

Výsledek: gravírovací stroj hučí a kouří v kuchyni při otevřeném okně a zavřených dveřích, já sleduji proces pálení z vedlejší místnosti přes původní software, který necítí žádné podezření.

Použité zdroje:

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

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster