USB over IP thuis

Soms heb je de behoefte om met een USB-apparaat te werken zonder het op je bureau naast je laptop te houden. Mijn apparaat is een Chinese gravuremachine met een laser van 500 mW, wat vrij onaangenaam is bij dichtbij contact. Naast het directe gevaar voor de ogen, worden er tijdens het werken met de laser toxische verbrandingsproducten afgegeven, dus het apparaat moet in een goed geventileerde ruimte staan en bij voorkeur geĆÆsoleerd van mensen. Maar hoe bedien je zo'n apparaat? Het antwoord op deze vraag vond ik toevallig terwijl ik de OpenWRT-repository doorzocht in de hoop een goede toepassing voor mijn oude D-Link DIR-320 A2-router te vinden. Voor de verbinding besloot ik de eerder op Habr beschreven methode te gebruiken. USB over IP-tunnel, maar alle instructies voor de installatie zijn inmiddels verouderd, dus schrijf ik mijn eigen.

OpenWRT is een besturingssysteem dat geen introductie nodig heeft, dus ik zal de installatie ervan niet beschrijven. Voor mijn router heb ik de laatste stabiele release van OpenWrt 19.07.3 genomen en deze met het belangrijkste toegangspunt verbonden via Wi-Fi als cliƫnt, in de modus gekozen lan, om de firewall niet te belasten.

De serverzijde

Laten we ons houden aan officiƫle instructie volgt. Na verbinding via ssh installeren we de benodigde pakketten.

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

Vervolgens sluiten we ons apparaat aan op de USB-poort van de router (in mijn geval zijn dit apparaten: USB-hub, een USB-stick waarop het bestandssysteem van de router is gemonteerd (vanwege gebrek aan ruimte op de interne opslag), en het gravureapparaat zelf).

Laten we proberen de lijst met aangesloten apparaten weer te geven:

root@OpenWrt:~# usbip list -l

Leeg.

Via Google vond ik de oorzaak, het bleek de bibliotheek te zijn libudev-fbsd.
We halen met de hand de laatste werkende versie op uit de repository libudev_3.2-1 uit de release OpenWRT 17.01.7 voor mijn architectuur, in mijn geval is dat libudev_3.2-1_mipsel_mips32.ipk. Met behulp van wget/scp uploaden we deze naar het geheugen van de router en installeren deze opnieuw

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

We controleren:

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

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

De Chinees die is aangesloten op de USB-hub kreeg busid 1-1.4. Onthouden.

Laten we nu de daemon starten:

root@OpenWrt:~# usbipd -D

en de Chinees binden

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

Laten we controleren of alles werkt:

root@OpenWrt:/home# netstat -alpt
Actieve internetverbindingen (servers en gevestigde)
Proto Recv-Q Send-Q Lokale adres           Buitenlands adres        Status      PID/Programmanaam
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Om het apparaat automatisch verder te binden, zullen we het aanpassen /etc/rc.local, door vóór exit 0 het volgende:

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

Clientdeel

We gaan proberen het apparaat te verbinden met Windows 10, gebruikmakend van de eerder genoemde instructies van openwrt.org. Ik zeg het meteen: dit idee is gedoemd om te mislukken. Ten eerste wordt alleen Windows 7 x64 behandeld. Ten tweede is er een link naar een thread op sourceforge.net, waarin wordt voorgesteld om een in 2014 gepatchte stuurprogramma van Dropbox te downloaden. Bij het proberen om het te starten onder Windows 10 en verbinding te maken met ons apparaat krijgen we de fout:

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

*** FOUT: kan apparaat niet vinden

Dit komt omdat de client niet werkt met de server die is gebouwd op een kernel ouder dan versie 3.14.
De usbip-server onder OpenWRT 19.07.3 is gebouwd op kernel 4.14.180.

Terwijl ik verder zoek, kom ik een actuele ontwikkeling tegen van de Windows-client op github. OkƩ, er wordt ondersteuning voor Windows 10 x64 aangekondigd, maar de client is uitsluitend een testversie, dus er zijn verschillende beperkingen.

Dus, eerst vragen ze om een certificaat te installeren, en dat twee keer. OkƩ, we plaatsen het in Trusted Root Certification Authority en Trusted Publishers.

Daarna moet het besturingssysteem in de testmodus worden gezet. Dit gebeurt met het commando

bcdedit.exe /set TESTSIGNING ON

Bij de eerste poging lukte het me niet, het werd in de weg gestaan door secure boot. Om dit uit te schakelen, moet je opnieuw opstarten in UEFI en secure boot instellen op -disable. Op sommige laptopmodellen kan het nodig zijn om een supervisor password in te stellen.

Daarna starten we Windows en doen we bcdedit.exe /set TESTSIGNING ON
Windows zegt dat alles ok is. We starten opnieuw op, en zien rechtsonder de tekst Test Mode, versie en buildnummer van het OS.

Waarom al deze handelingen? Voor de installatie van de niet-ondertekende stuurprogramma's USB/IP VHCI. Dit kan gedaan worden door de bestanden usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat te downloaden en uit te voeren met administratorrechten

usbip.exe install

of de tweede optie, installatie van Legacy Hardware in handmatige modus. Ik koos de tweede optie, kreeg een waarschuwing over de installatie van een niet-ondertekend stuurprogramma en stemde ermee in.

Dus controleren we of we in staat zijn om verbinding te maken met een extern USB-apparaat door het commando uit te voeren:

usbip.exe list -r

we krijgen de lijst met apparaten:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: fout: kon de usb-id-database niet openen
Exporteerbare USB-apparaten
=========================
 - 192.168.31.203
      1-1.4: onbekende leverancier : onbekend product (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : onbekende klasse / onbekende subklasse / onbekend protocol (ff/00/00)

op de fout usbip: fout: kon de usb-id-database niet openen negeer het, het heeft geen invloed op de werking.

We binden nu het apparaat:

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

Dat is het, Windows heeft een nieuw apparaat gedetecteerd, nu kan ik het gebruiken alsof het fysiek op de laptop is aangesloten.

Met de Chinese graveermachine was het even worstelen, want bij het proberen om de CH341SER-driver via de bijgeleverde installer (ja, de graveermachine is op Arduino gebaseerd) te installeren, zorgde USB/IP VHCI ervoor dat Windows in de BSOD viel. Toch loste de installatie van de CH341SER-driver tot de verbinding van het apparaat via usbip.exe het probleem op.

Resultaat: de graveermachine maakt geluid en rookt in de keuken met een open raam en gesloten deur, ik observeer het brandproces vanuit een andere kamer via de originele software die geen argwaan vermoedt.

Gebruikte bronnen:

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

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster