USB over IP mājas apstākļos

Reizēm rodas vēlme strādāt ar ierīci, kas pieslēgta pa USB, to neturēt uz galda blakus klēpjdatoram. Man šādas ierīces ir ķīniešu gravieris ar 500 mW lāzeri, kas ir diezgan nepatīkama, ja ar to kontaktējas tuvu. Bez tiešas bīstamības acīm, strādājot ar lāzeru izdalās toksiskas degošo vielu paliekas, tādēļ ierīcei jāatrodas labi vēdināmā telpā un vēlams, izolētā no cilvēkiem. Bet kā tad vadīt šādu ierīci? Atbilde uz šo jautājumu es nejauši atradu, apskatot OpenWRT repozitoriju, cerot atrast cienījamu pielietojumu vecajam D-Link DIR-320 A2 maršrutētājam. Savienojumam nolēmu izmantot to, kas iepriekš tika aprakstīts Habrā. USB pār IP tunelis, tomēr visas instrukcijas tās uzstādīšanai bija zaudējušas aktuālumu, tāpēc rakstu savas.

OpenWRT ir operētājsistēma, kurai nav nepieciešams ievads, tāpēc tās uzstādīšanu neizklāstīšu. Savejamā maršrutētājam es paņēmu pēdējo stabilo OpenWrt 19.07.3 versiju un savienoju to ar galveno piekļuves punktu pa Wi-Fi kā klientu, izvēloties režīmu lan, lai nepiespiestu ugunsmūri.

Servera daļa

Rīkojamies saskaņā ar oficiālo instrukciju. Pēc savienojuma pa ssh uzstādām nepieciešamās paketes.

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

Pēc tam pieslēdzam mūsu ierīci USB portam, (manā gadījumā ierīces: USB hub, zibatmiņa, kurā ir maršrutētāja failu sistēma (dēļ trūkstošā vietas iekšējā atmiņā), un tieši gravieris).

Mēģinām izvadīt pieslēgto ierīču sarakstu:

root@OpenWrt:~# usbip list -l

Tukšs.

Gūstot Google, tika atrasts vainīgais – tā bija bibliotēka libudev-fbsd.
Izvilkām roku darbs no repozitorija pēdējo darboties spējīgo versiju libudev_3.2-1 no OpenWRT 17.01.7 izlaiduma savai arhitektūrai, manā gadījumā tā ir libudev_3.2-1_mipsel_mips32.ipk. Ar wget/scp palīdzību lejuplādējam to maršrutētāja atmiņā un pārinstalējam

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

Pārbaudām:

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

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

Ķīniešu ierīce, kas pieslēgta USB hub, ir saņēmusi busid 1-1.4. Atcerējāmies.

Tagad palaižam demonus:

root@OpenWrt:~# usbipd -D

un piesaistām ķīniešu ierīci

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

Pārbaudām, vai viss darbojas:

root@OpenWrt:/home# netstat -alpt
Aktīvās interneta savienojumi (serveri un izveidotie)
Proto Recv-Q Send-Q Vietējā adrese           Sveša adrese         Stāvoklis       PID/Programmas nosaukums
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Lai turpmāk automātiski piesaistītu ierīci, rediģēsim /etc/rc.local, pievienojot pirms exit 0 nākamo:

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

Klienta daļa

Mēģināsim pieslēgt ierīci pie Windows 10, izmantojot iepriekš minēto instrukciju no openwrt.org. Uzreiz saku: šī iecere ir lemta neveiksmei. Pirmkārt, tiek apskatīta tikai Windows 7 x64. Otrkārt, ir sniegtas saite uz tēmu sourceforge.net, kurā ieteikts lejupielādēt no Dropbox labotu 2014. gadā draiveri. Mēģinot to palaist zem Windows 10 un pieslēgties mūsu ierīcei, saņemam kļūdu:

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

*** KĻŪDA: nevar atrast ierīci

Tas saistīts ar to, ka klients nestrādā ar serveri, kas veidots uz kodola, kas ir vecāks par versiju 3.14.
usbip serveris uz OpenWRT 19.07.3 ir veidots uz kodola 4.14.180.

Turpinot meklējumus, saskaros ar aktuālo Windows klienta izstrādi uz github. Ok, deklarēta atbalsts Windows 10 x64, bet klients ir tikai testēšanas variants, tāpēc ir vairāki ierobežojumi.

Tātad vispirms prasa instalēt sertifikātu, turklāt divas reizes. Ok, ievietojam to Trusted Root Certification Authority un Trusted Publishers.

Tālāk ir jāizdara operētājsistēmas pāreja uz testēšanas režīmu. To var izdarīt ar komandu

bcdedit.exe /set TESTSIGNING ON

Pirmajā reizē man neizdevās, traucēja secure boot.Lai to izslēgtu, nepieciešams restartēt UEFI un iestatīt secure boot — disable. Dažiem klēpjdatoru modeļiem var būt nepieciešama administratora parole.

Pēc tam ieejam Windows un veicam bcdedit.exe /set TESTSIGNING ON
Windows saka, ka viss ir kārtībā. Atkal restartējam, un redzam labajā apakšējā stūrī uzrakstu Test Mode, versiju un operētājsistēmas būvnumuru.

Kāpēc tad visas šīs manipulācijas? Lai instalētu neparakstītu draiveri USB/IP VHCI.Tā darīšana tiek piedāvāta, lejupielādējot failus usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat, un izpildot ar administratora tiesībām

usbip.exe install

vai otrais veids, izmantojot Legacy Hardware manuāli. Es izvēlējos otro variantu, saņēmu brīdinājumu par neparakstīta draivera instalēšanu un piekritu tam.

Tālāk pārbaudām, vai mums ir iespēja pieslēgties attālinātam USB ierīcei, izpildot komandu:

usbip.exe list -r

saņemam ierīču sarakstu:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: kļūda: neizdevās atvērt usb id datu bāzi
Eksportējami USB ierīces
======================
 - 192.168.31.203
      1-1.4: nezināms piegādātājs : nezināms produkts (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : nezināma klase / nezināma apakšklase / nezināma protokols (ff/00/00)

par kļūdu usbip: kļūda: neizdevās atvērt usb id datu bāzi nerūpējamies, tas neietekmē darbu.

Tagad piesaistām ierīci:

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

Viss, Windows atklāja jaunu ierīci, tagad ar to var strādāt tā, it kā tas fiziski būtu pieslēgts pie klēpjdatora.

Ar ķīniešu gravētāju nācās nedaudz pacīnīties, jo mēģinot instalēt tā draiveri CH341SER, izmantojot pievienoto gravētāja instalētāju (jā, gravētājs uz Arduino), USB/IP VHCI izsita Windows BSOD. Tomēr CH341SER draivera instalēšana līdz ierīces pieslēgšana, izmantojot usbip.exe, atrisināja problēmu.

Rezultāts: gravētājs trokšņo un dūmo virtuvē ar atvērtu logu un aizvērtām durvīm, es vēroju izdedzināšanas procesu no otras istabas, izmantojot dzimto programmatūru, kas nejūt viltību.

Izmantotie avoti:

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

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster