USB over IP acasă

Uneori, te poți simți tentat să lucrezi cu un dispozitiv conectat prin USB fără să-l ții pe masă lângă laptop. Dispozitivul meu este un gravator chinezesc cu laser de 500 mW, care poate fi destul de neplăcut la contact apropiat. Pe lângă pericolul direct pentru ochi, în timpul funcționării laserului se emit produse toxice de ardere, așa că dispozitivul trebuie să se afle într-un spațiu bine ventilat și, de preferat, izolat de oameni. Dar cum poți controla un astfel de dispozitiv? Răspunsul la această întrebare l-am descoperit întâmplător, navigând prin repository-ul OpenWRT în speranța de a găsi o utilizare demnă pentru un router D-Link DIR-320 A2 mai vechi. Am decis să folosesc tunnel USB over IP, dar toate instrucțiunile pentru instalarea acestuia au devenit învechite, așa că scriu propriile mele instrucțiuni.

OpenWRT este un sistem de operare care nu mai are nevoie de prezentare, așa că nu voi detalia instalarea acestuia. Pentru routerul meu, am folosit ultima versiune stabilă OpenWrt 19.07.3, și l-am conectat la punctul de acces principal prin Wi-Fi în calitate de client, alegând modul lan, pentru a nu agasa firewall-ul.

Partea serverului

Acționăm conform instrucțiunile oficiale. După conectarea prin ssh, instalăm pachetele necesare.

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

Apoi conectăm dispozitivul nostru la portul USB al routerului (în cazul meu, dispozitivele sunt: un hub USB, un stick USB pe care este montată sistemul de fișiere al routerului (din cauza lipsei de spațiu pe stocarea internă), și, în mod direct, gravatorul).

Încercăm să afișăm lista dispozitivelor conectate:

root@OpenWrt:~# usbip list -l

Gol.

Prin căutare pe Google am găsit vinovatul, care s-a dovedit a fi biblioteca libudev-fbsd.
Extragem manual din repository ultima versiune funcțională libudev_3.2-1 din versiunea OpenWRT 17.01.7 pentru arhitectura mea, în cazul meu aceasta este libudev_3.2-1_mipsel_mips32.ipk. Folosind wget/scp, o încărcăm în memorie routerului și reinstalăm

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

Verificăm:

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

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

Chinezul conectat în hub-ul USB a primit bsuid 1-1.4. Am reținut.

Acum lansăm daemon-ul:

root@OpenWrt:~# usbipd -D

și legăm chinezul

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

Verificăm dacă totul funcționează:

root@OpenWrt:/home# netstat -alpt
Conexiuni active la Internet (servere și stabilite)
Proto Recv-Q Send-Q Adresă locală           Adresă străină         Stare       PID/Numele programului
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Pentru a lega automat dispozitivul mai departe, să facem câteva modificări /etc/rc.local, adăugând înainte exit 0 the following:

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

Partea clientului

Vom încerca să conectăm dispozitivul la Windows 10, folosind instrucțiunile menționate pe openwrt.org. Voi spune imediat: ideea este condamnată la eșec. În primul rând, doar Windows 7 x64 este menționat. În al doilea rând, există un link către un thread pe sourceforge.net, unde se sugerează să descărcăm un driver patchuit din 2014 de pe Dropbox. Când încercăm să-l lansăm pe Windows 10 și să ne conectăm la dispozitivul nostru, primim o eroare:

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

*** EROARE: nu se poate găsi dispozitivul

Acest lucru se datorează faptului că clientul nu funcționează cu serverul compilat pe un kernel mai vechi de versiunea 3.14.
Serverul usbip pe OpenWRT 19.07.3 este compilat pe kernel 4.14.180.

Continuând căutările, dăruiesc de o dezvoltare actuală a clientului pentru Windows pe github. Ok, suportul pentru Windows 10 x64 este declarat, dar clientul este exclusiv testat, deci există o serie de limitări.

Așadar, inițial se cere instalarea certificatului, și asta de două ori. Ok, îl vom plasa în Autoritatea de Certificare a Rădăcinii de Încredere și în Editorii de Încredere.

Apoi, sistemul de operare trebuie trecut în modul de testare. Acest lucru se face prin comanda

bcdedit.exe /set TESTSIGNING ON

Din prima încercare nu am reușit, a intervenit secure boot. Pentru a-l dezactiva, trebuie să repornim în UEFI și să setăm secure boot — disable. Pe unele modele de laptopuri, poate fi necesară setarea parolei de supervisor.

După aceasta, pornim Windows-ul și facem bcdedit.exe /set TESTSIGNING ON
Windows spune că totul este ok. Ne repornim din nou și vedem în colțul din dreapta jos mesajul Test Mode, versiunea și numărul construcției OS.

Pentru ce sunt toate aceste manevre? Pentru a instala un driver nesemnat USB/IP VHCI. Acest lucru se sugerează să fie realizat descărcând fișierele usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat și executând cu privilegii de administrator

usbip.exe install

sau o a doua metodă, instalarea Hardware Legacy în mod manual. Am ales a doua variantă, am primit un avertisment despre instalarea unui driver nesemnat și am fost de acord cu el.

Apoi, verificăm dacă avem posibilitatea să ne conectăm la un dispozitiv USB de la distanță, executând comanda:

usbip.exe list -r

primim lista dispozitivelor:

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)

la eroare usbip: error: failed to open usb id database nu ne preocupăm, nu afectează funcționarea.

Acum legăm dispozitivul:

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

Totul, Windows a detectat un nou dispozitiv, acum poate fi folosit ca și cum ar fi conectat fizic la laptop.

Cu gravatorul chinezesc a fost nevoie de puțin mai mult efort, deoarece la încercarea de a instala driverul CH341SER prin installerul furnizat (da, gravatorul este pe Arduino), USB/IP VHCI făcea ca Windows să cadă în BSOD. Totuși, instalarea driverului CH341SER la prin conexiunea dispozitivului prin usbip.exe rezolva problema.

Rezultatul: gravatorul face zgomot și fumează în bucătărie cu fereastra deschisă și ușa închisă, eu observ procesul de ardere din cealaltă cameră prin software-ul de bază, care nu suspectează nimic.

Surse utilizate:

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

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster