USB/IP juhtimine

Regulaarselt tekib vajadus ĂŒhendada USB-seade kaug-PCS kohaliku vĂ”rgu kaudu. Allpool jagan oma otsingute lugu ja teed avatud koodiga projekti pĂ”hjal valminud lahenduse juurde. USB/IP kirjeldades erinevate inimeste seatud takistusi ja viisid nende ĂŒletamiseks.

Esimene osa, ajalugu

Kui masin on virtuaalne, pole see sugugi keeruline. USB ĂŒlekande funktsioon hostist virtuaalmasinasse ilmus juba VMWare 4.1-s. Kuid minu puhul oli turvaviis, mida tuntakse WIBU-KEY-na, vaja ĂŒhendada erinevates masinates erinevatel aegadel, ja mitte ainult virtuaalsetes.
Esimene otsing 2009. aastal viis mind seadmeni nimega TrendNet TU2-NU4
Plussid:

  • mĂ”nikord töötab isegi

Miinused:

  • kuid ei tööta alati. Ütleme, et turvaviis Guardant Stealth II ei tööta selle kaudu, andes vea 'seadet ei saa kĂ€ivitada'.
  • Halvasti toimiv tarkvara (loe: USB-seadmete monteerimine ja demonteerimine) on ÀÀrmiselt halb. KĂ€skude reĆŸiim, automatiseerimine — ei, sellest pole teada. KĂ”ik toimub ainult kĂ€sitsi. KĂ”he.
  • Halduse programm otsib seadet vĂ”rgus laiekandega, seetĂ”ttu töötab see ainult ĂŒhe laiekande vĂ”rgu segmendi piires. Seadet ei saa kĂ€sitsi IP-aadressiga mÀÀrata. Seade on teises alvĂ”rgus? Siis on see probleem.
  • Arendajad on seadme maha kandnud, vigade raportite saatmine on mĂ”ttetu.

Teine ring juhtus juba mitte nii kauges minevikus ja viis mind artikli teema juurde — USB/IP projekt. See paelub oma avatusega, eriti kuna poisid ReactOS on vĂ€lja andnud draiveri Windowsile, nii et nĂŒĂŒd töötab kĂ”ik isegi x64 keskkonnas ilma igasuguste lahendusteta nagu testreĆŸiim. Suur tĂ€nu ReactOS meeskonnale! KĂ”ik kĂ”lab hĂ€sti, proovime jĂ€rele, kas see on tĂ”si? Kahjuks on projekt ise ĂŒsna unustatud ja toetust oodata ei saa — aga kus meie ei suuda, allikakood on olemas, saame hakkama!

Teine osa, serveri-linuxi

USB/IP server, mis jagab USB-seadmeid vĂ”rgus, saab ĂŒles seada ainult Linuxi-pĂ”histel operatsioonisĂŒsteemidel. Noh, kui Linux, siis Linux, installime virtuaalmasinale Debian 8 minimaalses konfiguratsioonis, tavaline kĂ€eliigutus:

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

Olen mÀÀrĂ€nnyt. Edelleen internet ilmoittaa, ettĂ€ usbip-moduuli tulisi ladata, mutta — tervetuloa ensimmĂ€iset kompastuskivet. TĂ€llainen moduuli ei ole kĂ€ytettĂ€vissĂ€. TĂ€mĂ€ johtuu siitĂ€, ettĂ€ suurin osa oppaista verkossa liittyy vanhempaan 0.1.x-versioon, kun taas viimeisimmĂ€ssĂ€ 0.2.0-versiossa usbip-moduuleilla on toiset nimet.

SeetÔttu:

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

LisÀtÀÀn /etc/modules-tiedostoon seuraavat rivit, jotta ne latautuvat automaattisesti jÀrjestelmÀn kÀynnistyessÀ:

usbip-core
usbip-host
vhci-hcd

KÀynnistetÀÀn usbip-palvelin:

sudo usbipd -D

Seuraavaksi koko maailman tieto osoittaa meille, ettĂ€ usbip:n mukana tulee skriptejĂ€, joiden avulla voimme hallita palvelinta — nĂ€yttÀÀ, mikĂ€ laite jaetaan verkossa, tarkistaa tila ja niin edelleen. TĂ€ssĂ€ odottaa meitĂ€ vielĂ€ yksi työkalu — nĂ€mĂ€ skriptit 0.2.x-versiossa on nimetty uudelleen. Saat luettelon komennoista kĂ€yttĂ€mĂ€llĂ€

sudo usbip

Kun luet komennojen kuvauksen, kĂ€y ilmi, ettĂ€ usbip haluaa tietÀÀ vaaditun USB-laitteen Bus ID:n jakamista varten. Arvoisat katsojat, areenalla on kolmonen kompastuskivistĂ€: se Bus ID, jonka saamme lsusb (tundub, et kĂ”ige ilmselgem tee) — see ei sobi! Asi on selles, et sellised seadmed nagu USB-hubid usbip ignoreerib. SeetĂ”ttu kasutame sisseehitatud kĂ€sku:

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

MĂ€rkus: sellest ja edaspidi kirjeldan ma loetelusid minu konkreetse USB-ĆŸelatiini nĂ€itel. Teie seadme nimi ja paar VID:PID vĂ”ivad erineda. Minu seadme nimi on Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

NĂŒĂŒd saame oma seadet jagada:

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

Hurraa, tovarischid!

user@usb-server:~$ sudo usbip list -r localhost
Exportable USB devices
======================
 - 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 / unknown subclass / unknown protocol (ff/00/ff)

Kolmekordne hurraa, tovarischid! Server jagas seadet vĂ”rgu kaudu, ja me saame selle ĂŒhendada! JÀÀnud on ainult kirjutada usbip deemon autostardiks /etc/rc.local

usbipd -D

Kolmas osa, kliendipoolne ja segane

Ühendasin vĂ”rgu kaudu jagatud seadme masina kĂŒlge, mis töötab Debianil, ja kĂ”ik ĂŒhendas kenasti:

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

Liigume Windowsi suunas. Minu puhul oli see Windows Server 2008R2 Standard Edition. Ametlik juhend soovitab esmalt installida draiveri. Protseduur on kenasti kirjeldatud Windowsi kliendi kasutusjuhendis, teeme kÔik nagu on kirjutatud, kÔik Ônnestub. XP peal töötab samuti probleemideta.

PÀrast kliendi lahzipimist proovime meie vÔtme paigaldada:

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) ei leita seadet

Oh-oh. Miski lĂ€ks valesti. Kasutame Google'i oskust. Tekkivad katkendlikud mainimised, et seal on midagi valesti konstantidega, serveripoolsete arendajate juures muudeti protokolli versioon 0.2.0 peale, kuid Windowsi kliendis unustati see teha. Soovitatav lahendus on — muudame lĂ€htekoodis konstantide vÀÀrtused ja kompileerime kliendi uuesti.

Aga ma ei taha Visual Studio nimel selle protseduuri jaoks alla laadida. KĂŒll aga on mul vana hea Hiew. LĂ€htekoodis on konstant mÀÀratletud kui kahekordne sĂ”na. Otsime failist 0x00000106, vahetades 0x00000111 vastu. Ära unusta, et baitide jĂ€rjestus on vastupidine. Tulemus — kaks vastet, patĆĄime:

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

Ja
 jah!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
uus usb-seade on ĂŒhendatud usbvbus pordiga 1

Sellele oleks vÔinud lÔpetada, kuid muusika ei mÀnginud kaua. Serverit taaskÀivitades avastasin, et seade kliendil ei monteeru!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip viga: usbip_windows.c: 829 (attach_device) seadet ei leitud

Ja kĂ”ik. Sellele ei suutnud vastata isegi kĂ”ikteadja Google. Samas kĂ€sk, mis kuvab serveris saadaval olevad seadmed, nĂ€itab tĂ€iesti Ă”igesti — siin see on, vĂ”tme tĂŒkk, monteerige. Proovin monteerida Linuxist — töötab! Aga kui nĂŒĂŒd proovida Windowsist? O kohutav — see töötab!

Viimased takistused: serveri koodis on midagi puudu. Seadet jagades ei loeta USB-deskriptorite arvu. Kuid kui seade monteeritakse Linuxist, tĂ€idetakse see vĂ€li. Kahjuks olen Linuxi arendusega tuttav ainult tasemel "make && make install". Seega, probleem lahendati suhteliselt rĂ€pase hackiga — lisati /etc/rc.local

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

LÔpposa

PĂ€rast mĂ”ningaid katsumusi töötab see. Soovitud on saavutatud, nĂŒĂŒd saab vĂ”tme liita mis tahes arvutiga (ja loomulikult ka eemaldada), sealhulgas ka vĂ€ljaspool kohaliku vĂ”rgu leviala. Kui soovite, saab seda teha kĂ€surea skripti abil. Mis on tore — see on tĂ€iesti tasuta.
Loodan, et minu kogemus aitab Habr'tel vÀltida neid peavalu tekitavaid hetki, mis mul ette tulid. AitÀh tÀhelepanu eest!

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster