USB over IP i hjemmet

Nogle gange opstår der et ønske om at arbejde med en enhed tilsluttet via USB, uden at holde den på bordet ved siden af laptoppen. Min enhed er en kinesisk lasergraver på 500 mW, hvilket er temmelig ubehageligt ved tæt kontakt. Udover den direkte fare for øjnene, frigives der toksiske forbrændingsprodukter under laserens drift, så enheden skal være i et godt ventileret rum og helst isoleret fra mennesker. Men hvordan kan man styre sådan en enhed? Svaret på dette spørgsmål fandt jeg tilfældigvis ved at gennemgå OpenWRT-repositoriet i håbet om at finde en værdig anvendelse til min gamle D-Link DIR-320 A2-router. Til tilslutning valgte jeg at bruge det, der tidligere blev beskrevet på Habr. USB over IP tunnel, men alle installationsvejledningerne er blevet forældede, så jeg skriver min egen.

OpenWRT er et operativsystem, der ikke behøver nogen introduktion, så jeg vil ikke gå i detaljer med installationen. Til min router tog jeg den seneste stabile version OpenWrt 19.07.3 og tilsluttede den til hovedadgangspunktet via Wi-Fi som klient, og valgte tilstanden lan, så jeg ikke plager firewallen.

Serverdelen

Følg den officielle vejledning. Efter tilslutning via ssh installerer vi de nødvendige pakker.

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

Derefter tilslutter vi vores enhed til routerens USB-port (i mit tilfælde enheder: USB-hub, et USB-drev, som har routerens filsystem monteret (på grund af mangel på plads på den interne lagringsenhed), og selve graverens enhed).

Lad os prøve at vise listen over tilsluttede enheder:

root@OpenWrt:~# usbip list -l

Tom.

Ved at google fandt jeg synderen, som viste sig at være biblioteket libudev-fbsd.
Vi henter manuelt den seneste fungerende version fra repositoriet libudev_3.2-1 fra OpenWRT 17.01.7 til vores arkitektur, i mit tilfælde libudev_3.2-1_mipsel_mips32.ipk. Vi bruger wget/scp til at uploade den til routerens hukommelse og geninstallerer

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

Vi tjekker:

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

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

Kineseren, der er tilsluttet USB-hubben, fik bsuid 1-1.4. Husk det.

Nu starter vi dæmonen:

root@OpenWrt:~# usbipd -D

og binder kineseren

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

Lad os tjekke, om alt fungerer:

root@OpenWrt:‍/home# netstat -alpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

For automatically binding the device further, we will edit /etc/rc.local, adding before exit 0 følgende:

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

Klientdelen

Let's try to connect the device to Windows 10 using the aforementioned instructions from openwrt.org. I must say right away: the endeavor is doomed to failure. Firstly, it only considers Windows 7 x64. Secondly, there is a link to a thread on sourceforge.net, suggesting to download a patched driver from Dropbox from 2014. When attempting to run it on Windows 10 and connect to our device, we get the error:

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

*** ERROR: cannot find device

This is related to the fact that the client does not work with a server built on kernels older than version 3.14.
The usbip server on OpenWRT 19.07.3 is built on kernel 4.14.180.

Continuing my search, I come across an up-to-date development of a Windows client on github. Okay, Windows 10 x64 support is claimed, but the client is purely experimental, so there are a number of limitations.

So, first they ask to install the certificate, and surprisingly, twice. Okay, we place it in Trusted Root Certification Authority and Trusted Publishers.

Next, it is necessary to switch the operating system to test mode. This is done with the command

bcdedit.exe /set TESTSIGNING ON

I didn't succeed the first time, it was interfered by secure boot. To disable it, it is necessary to reboot into UEFI and set secure boot — disable. On some models of laptops, setting a supervisor password may be required.

After that, we boot into Windows and do bcdedit.exe /set TESTSIGNING ON
Windows says everything is okay. We reboot again and see in the bottom right corner the inscription Test Mode, version, and OS build number.

What are all these manipulations for? To install an unsigned driver USB/IP VHCI. It is suggested to do this by downloading the files usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat, and executing with administrator rights

usbip.exe install

or the second method, installing Legacy Hardware manually. I chose the second option and received a warning about installing an unsigned driver and agreed to it.

Next, we check that we have the opportunity to connect to the remote USB device by executing the command:

usbip.exe list -r

we get the list of devices:

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)

om fejlen usbip: error: failed to open usb id database vi ignorerer det, det påvirker ikke arbejdet.

Nu binder vi enheden:

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

Færdig, Windows har opdaget en ny enhed, nu kan den bruges som om den var fysisk tilsluttet til bærbaren.

Jeg har haft lidt problemer med den kinesiske gravør, da installationen af dens driver CH341SER gennem den vedlagte installer (ja, gravøren er på Arduino) fik USB/IP VHCI til at crashe Windows med BSOD. Men installationen af driveren CH341SER op til tilslutning af enheden via usbip.exe løste problemet.

Resultatet: gravøren brummer og ryger i køkkenet med vinduet åbent og døren lukket, jeg overvåger brændingsprocessen fra et andet rum gennem den oprindelige software, der ikke mistænker noget.

Brugte kilder:

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

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster