USB üle IP kodustes tingimustes

Mõnikord on soov töötada USB kaudu ühendatud seadmega, hoides seda laua ääres koos sülearvutiga. Minu seadme puhul on tegemist Hiina lasergrafeeriga 500 mW, mis on üsna ebameeldiv lähedases kontaktis. Kõrvaltoimetena on silmade jaoks otsene oht ning laseri töö käigus eralduvad mürgised põletustooted, seega peaks seade asuma hästi ventileeritud ruumis ning soovitatavalt eraldi inimeste eest. Kuidas aga sellist seadet juhtida? Vastuse sellele küsimusele leidsin juhuslikult, vaadates OpenWRT hoidlat, lootes leida väärikas rakendus vanale D-Link DIR-320 A2 ruuterile. Ühenduse loomiseks otsustasin kasutada kokkuvõtet, mis oli varem kajastatud Хабр-is USB üle IP tunnel, kuid kõik selle paigaldamise juhised on ajakohasuse kaotanud, seega kirjutan oma.

OpenWRT on operatsioonisüsteem, mis ei vaja tutvustamist, seega ei hakka ma selle paigaldamisest rääkima. Oma ruuteri jaoks võtsin viimase stabiilse OpenWrt 19.07.3 versiooni ja ühendasin selle peamise pääsupunktiga Wi-Fi kaudu kliendirežiimis, valides režiimi lan, et tulemüüri mitte piinata.

Serveripool

Töötame vastavalt ametlikule juhendile. Pärast SSH kaudu ühenduse loomist installime vajalikud paketid.

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

Seejärel ühendame ruuteri USB-porti meie seadme (minu juhul seadmed: USB-hub, mälupulk, millel on ruuteri failisüsteem (tänu sisemise salvestusruumi puudumisele), ja just grafeer).

Proovime saada nimekirja ühendatud seadmetest:

root@OpenWrt:~# usbip list -l

Tühi.

Google'iga otsides leidsin süüdlase, kelleks osutus teek libudev-fbsd.
Tõmbame kätega hoidlast viimase töötava versiooni libudev_3.2-1 OpenWRT 17.01.7 väljaandest oma arhitektuuri jaoks, minu puhul on see libudev_3.2-1_mipsel_mips32.ipk. Kasutades wget/scp, laadime selle ruuteri mällu ja uuesti installime

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

Kontrollime:

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

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

Hiinlane, mis on ühendatud USB-hubi, sai bsuid 1-1.4. Meeles pidama.

Nüüd käivitame deemon:

root@OpenWrt:~# usbipd -D

ja bindime hiinalase

root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: seade seondus busid 1-1.4: lõpetatud

Kontrollime, et kõik töötab:

root@OpenWrt: /home# netstat -alpt
Aktiivsed internetiühendused (serverid ja kehtivad)
Proto Vastuvõt-Q Saatmise-Q Kohalik aadress           Välis aadress         Oleku       PID/Programmi nimi
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Automaatseks seadme bindimiseks toimetame /etc/rc.local, lisades enne exit 0 järgmist:

usbipd -D &
ööbime 1
usbip bind -b 1-1.4

Kliendi osa

Proovime seadme ühendamist Windows 10-ga, kasutades ülaltoodud juhendit openwrt.org-ist. Ütleme kohe: katse on määratud ebaõnnestuma. Esiteks, käsitletakse ainult Windows 7 x64. Teiseks, on antud link thread'ile sourceforge.net-is, kus pakutakse alla laadida Dropboxist 2014. aastal patchitud draiverit. Kui proovime seda Windows 10 all käivitada ja meie seadmele ühendada, saame vea:

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

*** VIGA: seadet ei leitud

See on seotud sellega, et klient ei tööta serveriga, mis on kokku pandud kerneliga, mis on vanem kui versioon 3.14.
Server usbip OpenWRT 19.07.3 on kokku pandud kernelil 4.14.180.

Otsuste jätkamise käigus satun aktuaalsele Windowsi kliendi arendusele github. Okei, lubatud on Windows 10 x64 tugi, kuid klient on rangelt katsetusversioon, seega on mitmeid piiranguid.

Nii et esmalt palutakse installida sertifikaat, ja seda kahel korral. Okei, paigutame selle Trusted Root Certification Authority ja Trusted Publishers.

Edasi tuleb operatsioonisüsteem viia testrežiimi. Seda tehakse käsuga

bcdedit.exe /set TESTSIGNING ON

Esimese korraga ei õnnestunud mul, takistuseks oli secure boot. Selle keelamiseks peab taas käivituma UEFI-s ja seadistama secure boot — keelatud. Mõnedes sülearvuti mudelites võib olla vajalik turvaparooli seadmine.

Pärast seda käivitame Windowsi ja teeme bcdedit.exe /set TESTSIGNING ON
Windows ütleb, et kõik on korras. Taas käivitame ja näeme paremas alumises nurgas tekstiga Test Mode, versiooni ja OS-i build'i numbrit.

Milleks on kõigi nende manööverduste eesmärk? Allekandmata draiveri paigaldamiseks USB/IP VHCI. Seda tehakse, laadides alla failid usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat ja käivitades need administraatori õigustega

usbip.exe install

või teine meetod, Legacy Hardware käsitsi installimine. Valisin teise variandi, sain teate alla kirjutamata draiveri installimise kohta ja nõustusin sellega.

Kontrollime, kas saame kaugseadmest USB-seadet ühendada, käivitades käsu:

usbip.exe list -r

saame seadmete nimekirja:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: viga: ei saanud avada usb id andmebaasi
Eksportimiseks mõeldud USB seadmed
======================
 - 192.168.31.203
      1-1.4: tundmatu tootja : tundmatu toode (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : tundmatu klass / tundmatu alamsort / tundmatu protokoll (ff/00/00)

veale usbip: viga: ei saanud avada usb id andmebaasi ignoreerime, see ei mõjuta tööd.

Nüüd sidume seadme:

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

Kõik, Windows tuvastas uue seadme, nüüd saab sellega töötada nagu oleks see füüsiliselt sülearvutiga ühendatud.

Hiina graveerijaga tuli veidi vaeva näha, kuna katse paigaldada selle draiver CH341SER koos graveerijaga kaasasoleva installeriga (jah, graveerija on Arduinoga), USB/IP VHCI kukutas Windowsi BSOD-ile. Kuid draiveri CH341SER kuni ühendamine seadme kaudu usbip.exe lahendas probleemi.

Kokkuvõte: graveerija müriseb ja suitsutab köögis avatava akna ja suletud ukse juures, mina jälgin põletamisprotsessi teisest toas oma lemmikprogrammi kaudu, mis ei kahtlusta midagi.

Kasutatud allikad:

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

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster