USB über IP zu Hause

Manchmal hat man den Wunsch, mit einem Gerät, das über USB angeschlossen ist, zu arbeiten, ohne es direkt neben dem Laptop auf dem Tisch zu halten. Ich habe so ein Gerät – einen chinesischen Gravierer mit einem 500 mW Laser, was bei engem Kontakt ziemlich unangenehm ist. Neben der direkten Gefährdung der Augen entstehen beim Betrieb des Lasers toxische Verbrennungsprodukte, daher sollte das Gerät in einem gut belüfteten Raum und möglichst isoliert von Menschen aufgestellt werden. Aber wie steuert man ein solches Gerät? Auf diese Frage stieß ich zufällig, als ich das OpenWRT-Repository durchstöberte, in der Hoffnung, eine sinnvolle Verwendung für meinen alten D-Link DIR-320 A2 Router zu finden. Für die Verbindung entschied ich mich für die bereits auf Habr beschriebene USB über IP-Tunnel, aber leider sind alle Anleitungen zur Installation inzwischen veraltet, weshalb ich meine eigene schreibe.

OpenWRT ist ein Betriebssystem, das keiner Vorstellung bedarf, daher werde ich die Installation nicht im Detail beschreiben. Für meinen Router wählte ich die neueste stabile Version von OpenWrt 19.07.3 und verband ihn als Client mit meinem Hauptzugangspunkt über WLAN, wobei ich den Modus auswählte lan, um die Firewall nicht zu belasten.

Server-Seite

Wir verfahren gemäß offiziellen Anleitung. Nach der Verbindung über SSH installieren wir die erforderlichen Pakete.

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

Jetzt schließen wir unser Gerät an den USB-Anschluss des Routers an (in meinem Fall sind das Geräte: USB-Hub, ein Flash-Laufwerk, auf dem das Dateisystem des Routers gemountet ist (wegen Platzmangels im internen Speicher), und das Gravurgerät).

Lassen Sie uns die angeschlossenen Geräte auflisten:

root@OpenWrt:~# usbip list -l

Leer.

Durch Googeln wurde der Übeltäter gefunden, es war die Bibliothek libudev-fbsd.
Wir entnehmen manuell aus dem Repository die letzte funktionierende Version libudev_3.2-1 aus der OpenWRT-Version 17.01.7 für meine Architektur, in meinem Fall ist das libudev_3.2-1_mipsel_mips32.ipk. Mit wget/scp laden wir sie in den Speicher des Routers und installieren sie neu.

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

Überprüfen wir:

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

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

Der Chinese, der am USB-Hub angeschlossen ist, hat die bsuid erhalten. 1-1.4. Merk dir das.

Jetzt starten wir den Dienst:

root@OpenWrt:~# usbipd -D

und binden den Chinesen

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

Wir prüfen, ob alles funktioniert:

root@OpenWrt:/home# netstat -alpt
Aktive Internetverbindungen (Server und etablierte Verbindungen)
Proto Recv-Q Send-Q Lokale Adresse           Fremde Adresse         Status      PID/Programmnamen
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Um das Gerät zukünftig automatisch zu binden, editieren wir /etc/rc.local, indem wir vor exit 0 das Folgende hinzu:

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

Client-Seite

Wir versuchen, das Gerät mit Windows 10 zu verbinden, indem wir die oben erwähnte Anleitung von openwrt.org verwenden. Ich sage gleich: Dieses Vorhaben ist zum Scheitern verurteilt. Erstens wird nur Windows 7 x64 betrachtet. Zweitens gibt es einen Link zu einem Thread auf sourceforge.net, in dem ein 2014 gepatchter Treiber aus Dropbox heruntergeladen werden soll. Beim Versuch, ihn unter Windows 10 zu starten und eine Verbindung zu unserem Gerät herzustellen, erhalten wir den Fehler:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip für Windows ($Id$)

*** FEHLER: Gerät nicht gefunden

Das liegt daran, dass der Client nicht mit einem Server funktioniert, der für ein Kernel älter als Version 3.14 kompiliert wurde.
Der usbip-Server unter OpenWRT 19.07.3 ist auf Kernel 4.14.180 kompiliert.

Auf der Suche nach Alternativen stoße ich auf eine aktuelle Entwicklung des Windows-Clients auf github. Okay, Unterstützung für Windows 10 x64 wurde angekündigt, aber der Client ist ausschließlich testweise, daher gibt es einige Einschränkungen.

Zuerst wird darum gebeten, ein Zertifikat zu installieren, und zwar gleich zweimal. In Ordnung, wir fügen es in die vertrauenswürdige Stammzertifizierungsstelle und die vertrauenswürdigen Herausgeber ein.

Danach muss das Betriebssystem in den Testmodus versetzt werden. Dies geschieht mit dem Befehl

bcdedit.exe /set TESTSIGNING ON

Beim ersten Mal hat es bei mir nicht geklappt, das hat gestört secure boot. Um es zu deaktivieren, müssen wir ins UEFI neu starten und secure boot auf disable setzen. Bei einigen Laptop-Modellen könnte es nötig sein, ein Supervisor-Passwort festzulegen.

Danach laden wir Windows und führen aus bcdedit.exe /set TESTSIGNING ON
Windows sagt, dass alles in Ordnung ist. Wir starten erneut und sehen in der rechten unteren Ecke den Hinweis Testmodus, die Version und die Buildnummer des Betriebssystems.

Warum all diese Schritte? Um einen nicht signierten Treiber zu installieren, USB/IP VHCI. Dies wird empfohlen, indem die Dateien usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat heruntergeladen und mit Administratorrechten ausgeführt werden,

usbip.exe install

oder die zweite Methode, das Installieren von Legacy Hardware im manuellen Modus. Ich habe die zweite Variante gewählt, erhielt eine Warnung über die Installation des nicht signierten Treibers und stimmte zu.

Dann prüfen wir, ob wir die Möglichkeit haben, eine Verbindung zu einem Remote-USB-Gerät herzustellen, indem wir den Befehl ausführen:

usbip.exe list -r

Wir erhalten eine Liste der Geräte:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: Fehler: Datenbank für USB-IDs konnte nicht geöffnet werden
Exportierbare USB-Geräte
======================
 - 192.168.31.203
      1-1.4: unbekannter Hersteller: unbekanntes Produkt (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : unbekannte Klasse / unbekannte Unterklasse / unbekanntes Protokoll (ff/00/00)

auf den Fehler usbip: Fehler: Datenbank für USB-IDs konnte nicht geöffnet werden wir ignorieren es, es hat keinen Einfluss auf die Arbeit.

Jetzt binden wir das Gerät:

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

Alles, Windows hat ein neues Gerät erkannt, nun können wir damit arbeiten, als ob es physisch mit dem Laptop verbunden wäre.

Mit dem chinesischen Gravurgerät hatte ich etwas zu kämpfen, da beim Versuch, den CH341SER-Treiber über den zum Gravurgerät gehörenden Installer (ja, der Gravurgerät ist auf Arduino-Basis) zu installieren, USB/IP VHCI Windows in den BSOD brachte. Allerdings löste die Installation des CH341SER-Treibers bis zu die Verbindung des Geräts über usbip.exe das Problem.

Fazit: Der Gravurgerät macht Lärm und raucht in der Küche bei offenem Fenster und geschlossener Tür, ich beobachte den Brandprozess aus einem anderen Raum über die originale Software, die keinen Verdacht schöpft.

Verwendete Quellen:

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

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster