Hantering av USB/IP

Det uppstÄr regelbundet behov av att koppla en USB-enhet till en fjÀrr-PC via det lokala nÀtverket. Under rubriken finns en berÀttelse om mina sökningar i detta avseende och vÀgen till en fÀrdig lösning baserad pÄ ett open-source-projekt. USB/IP med beskrivning av de hinder som omtÀnksamt stÀllts av olika mÀnniskor lÀngs vÀgen, samt sÀtt att kringgÄ dem.

Del ett, historisk

Om maskinen Àr virtuell Àr allt detta inte sÄ svÄrt. Funktionaliteten för att vidarebefordra USB frÄn vÀrden till virtuella maskiner kom redan i VMWare 4.1. Men i mitt fall behövde nyckeln för skydd, som identifieras som WIBU-KEY, kopplas till olika maskiner vid olika tidpunkter, och inte bara virtuella.
Den första vÀndan av sökningen 2009 ledde mig till en enhet kallad TrendNet TU2-NU4
Fördelar:

  • ibland fungerar det till och med

Nackdelar:

  • fungerar inte alltid. Anta att skyddet Guardant Stealth II inte startar genom den, och ger ett felmeddelande "enheten kan inte startas".
  • Programvaran för hantering (lĂ€s - montering och avmontering av USB-enheter) Ă€r usel i högsta grad. Kommandoradsnycklar, automatisering - nej, det har de inte hört talas om. Allt mĂ„ste göras för hand. En mardröm.
  • den styrande programvaran letar efter sjĂ€lva enheten i nĂ€tverket genom broadcast, sĂ„ det fungerar endast inom ett broadcast-segment av nĂ€tverket. Det gĂ„r inte att manuellt ange IP-adressen för enheten. Är enheten i ett annat subnĂ€t? DĂ„ har du ett problem.
  • utvecklarna har slutat bry sig om enheten, det Ă€r meningslöst att skicka buggrapporter.

Den andra vÀndan intrÀffade under en tid som inte var sÄ avlÀgsen, och ledde mig till Àmnet för artikeln - USB/IP-projektet. Det lockar med sin öppenhet, sÀrskilt eftersom killarna frÄn ReactOS har skrivit drivrutinen för Windows, sÄ nu fungerar allt Àven pÄ x64 utan nÄgra konstigheter som testlÀge. Stort tack till ReactOS-teamet! Det lÄter allt vackert, lÄt oss se om det verkligen Àr sÄ. TyvÀrr har sjÀlva projektet ocksÄ fÄtt stÄ tillbaka, sÄ man kan inte förvÀnta sig support - men vad gör vi inte för en utmaning, koden finns dÀr, vi ska nog klara av det!

Del tvÄ, server- och Linuxbaserad

USB/IP-servern som delar USB-enheter över nÀtverket kan endast stÀllas upp pÄ Linux-baserade OS. NÄvÀl, Linux Àr Linux, vi installerar Debian 8 i minimal konfiguration pÄ en virtuell maskin, standardhandgrepp:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip

Vi har installerat. Nu föreslĂ„r internet att vi bör ladda ner usbip-modulen, men — hej, hĂ€r Ă€r första hindret. Det finns ingen sĂ„dan modul. Och allt beror pĂ„ att de flesta guider pĂ„ nĂ€tet hĂ€nvisar till en Ă€ldre version 0.1.x, medan i den senaste versionen 0.2.0 har usbip-modulerna andra namn.

DÀrför:

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip

Och vi lÀgger till dessa rader i /etc/modules för att ladda dem automatiskt vid systemstart:

usbip-core
usbip-host
vhci-hcd

Vi startar usbip-servern:

sudo usbipd -D

DĂ€refter föreslĂ„r den kollektiv intelligensen att usbip medföljer skript som lĂ„ter oss hantera servern — visa vilket enhet den kommer att dela över nĂ€tverket, kolla status med mera. HĂ€r stöter vi pĂ„ ytterligare ett hinder — dessa skript i version 0.2.x har Ă„terigen bytt namn. För att fĂ„ en lista med kommandon kan vi anvĂ€nda

sudo usbip

Efter att ha lĂ€st kommandobeskrivningarna blir det klart att för att dela den önskade USB-enheten vill usbip veta dess Bus ID. KĂ€ra tittare, hĂ€r Ă€r hinder nummer tre: det Bus ID som kommer att ges oss av lsusb (som verkar vara den mest uppenbara vĂ€gen) — passar inte! Det beror pĂ„ att hĂ„rdvaror som USB-hubbar ignoreras av usbip. SĂ„ vi anvĂ€nder kommandot inbyggt:

user@usb-server:~$ sudo usbip list -l
 - busid 1-1 (064f:0bd7)
   WIBU-Systems AG : BOX/U (064f:0bd7)

Obs: hÀr och framöver kommer jag att beskriva allt med mitt specifika USB-minne som exempel. Ditt hÄrdvarunamn och din VID:PID kan skilja sig Ät. Mitt heter Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Nu kan vi dela vÄr enhet:

user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete

Hurra, kamrater!

user@usb-server:~$ sudo usbip list -r localhost
Exportabla USB-enheter
======================
 - localhost
        1-1: WIBU-Systems AG : BOX/U (064f:0bd7)
           : /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1
           : Vendor Specific Class / okÀnd underklass / okÀnd protokoll (ff/00/ff)

Tre gÄnger hurra, kamrater! Servern har delat enheten över nÀtverket, och vi kan ansluta den! Kvar Àr att lÀgga till att demon usbip ska starta automatiskt i /etc/rc.local

usbipd -D

Del tre, klient och snÄrig

Jag försökte ansluta den delade enheten över nÀtverket till en maskin som kör Debian direkt pÄ samma server, och allt kopplade perfekt:

sudo usbip attach --remote=localhost --busid=1-1

Vi gÄr vidare till Windows. I mitt fall var det Windows Server 2008R2 Standard Edition. Den officiella manualen ber oss först installera drivrutinen. Proceduren beskrivs bra i README-filen som följer med Windows-klienten, vi gör allt som stÄr dÀr, och det fungerar. Det fungerar ocksÄ utan problem pÄ XP.

Efter att ha packat upp klienten försöker vi montera vÄr nyckel:

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip_windows.c: 756 (query_interface0) recv op_common
usbip err: usbip_windows.c: 829 (attach_device) kan inte hitta enhet

Oj oj. NÄgot gick fel. Vi anvÀnder Googles kunskaper. Det finns sporadiska omnÀmnanden om att nÄgot inte stÀmmer med konstanterna, i serverdelen Àndrade utvecklarna protokollversionen vid övergÄngen till version 0.2.0, men i klienten för Windows glömdes det att göra det. Föreslaget lösning Àr att Àndra konstanten i kÀllkoden och kompilera klienten igen.

Jag vill dock verkligen inte ladda ner Visual Studio för denna procedur. Men jag har den gamla, goda Hiew. I kĂ€llkoden deklareras konstanten som ett dubbelt ord. Vi letar i filen 0x00000106, ersĂ€tter med 0x00000111. Glöm inte att byteordningen Ă€r omvĂ€nd. Resultat — tvĂ„ trĂ€ffar, vi patchar:

[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11

Och jaaa!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
ny usb-enhet ansluten till usbvbus port 1

Detta skulle kunna vara slutet pÄ berÀttelsen, men musiken spelades inte lÀnge. NÀr servern startades om upptÀckte jag att enheten inte monteras pÄ klienten!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) kan inte hitta enhet

Och det Ă€r allt. Till och med den allvetande Google kunde inte svara pĂ„ detta. ÄndĂ„ visar kommandot för att visa tillgĂ€ngliga enheter pĂ„ servern helt korrekt — dĂ€r Ă€r den, nyckeln, du kan montera den. Jag försöker montera frĂ„n Linux — det fungerar! Men vad hĂ€nder om jag försöker frĂ„n Windows? Oh skrĂ€ck — det fungerar!

De sista hindren: nĂ„got saknas i serverkoden. NĂ€r enheten delas ut lĂ€ser den inte antalet USB-deskriptorer. Men nĂ€r enheten monteras frĂ„n Linux, fylls detta fĂ€lt. TyvĂ€rr kĂ€nner jag till utveckling pĂ„ Linux pĂ„ nivĂ„n "make && make install". DĂ€rför löses problemet med en ganska skitig hack — genom att lĂ€gga till i /etc/rc.local

usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00

Avslutande del

Efter vissa vedermödor fungerar detta. Det önskade resultatet Àr uppnÄtt, nu kan nyckeln monteras pÄ vilken dator som helst (och avmonteras, naturligtvis, ocksÄ), inklusive utanför det breda nÀtverkssegmentet. Om man vill kan detta göras med hjÀlp av ett kommandorads-skript. Det som Àr trevligt Àr att nöjet Àr helt gratis.
Jag hoppas att min erfarenhet hjÀlper hÀngivna lÀsare att undvika de hinder som jag har mött. Tack för ert intresse!

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster