Prosljeđivanje USB uređaja preko mreže pomoću USB mrežnih vrata. USB preko mreže u virtualizaciji.

Danas postoji dosta načina za prijenos USB uređaja na drugo računalo ili virtualni stroj putem mreže.
Najpopularniji su hardverski proizvodi kao što je AnywhereUSB i čisti softverski proizvodi, od onih koje sam sam isprobao: USB Redirector i USB/IP.
Želio bih vam reći o još jednoj zanimljivoj metodi koja radi izravno s QEMU emulatorom.
Također je dio spice projekta, koji službeno podržava RedHat.

UsbRedir je otvoreni protokol za prosljeđivanje USB uređaja preko TCP-a na daljinski virtualni poslužitelj, razvijen uz podršku RedHat-a u sklopu projekta spice. Ali kako se pokazalo, možete ga vrlo uspješno koristiti i bez začina. Uloga poslužitelja je usbredirserver, koji šalje USB uređaj na određeni port, a klijent je sam QEMU, koji emulira spajanje eksportiranog USB uređaja na određeni USB kontroler vašeg virtualnog stroja. Zahvaljujući ovom pristupu, apsolutno bilo koji OS može se koristiti kao gostujući sustav, jer on čak i ne zna da je uređaj proslijeđen na daljinu, a sva logika pada na QEMU.

Prvo, nekoliko riječi o gore navedenim rješenjima

  • AnywhereUSB je prilično dobro rješenje, ali skupo, i ima neugodne kvarove, na primjer, ako dijeljeni flash disk otpadne, možete ga ponovno spojiti samo fizičkim uklanjanjem i umetanjem.
  • USB/IP - OpenSource projekt. Izgleda kao da je napušteno. Zapravo, dosta je bugovit. Kada se veza izgubi, stroj se često potpuno zamrzne, a Windows prikazuje BSOD
  • USB Redirector - prekrasan softver. Za dijeljenje uređaja s Linuxa na Linux je besplatan, u svim ostalim slučajevima već košta, ne toliko kao AnywhereUSB, ali nije besplatan kao što bismo htjeli :)
Kao što vidite, postoji mnogo toga za izabrati, ali hajde da konačno isprobamo drugu metodu - UsbRedir?

Postavljanje virtualnog stroja

Kako biste imali gdje spojiti izvezene uređaje, morate kreirati potrebne USB kontrolere na virtualnom računalu:

  • uhci - za USB1.0
  • ehci - za USB2.0
  • xhci - za USB3.0
Za qemu (bez libvirta)

Dodajte opcije naredbi za pokretanje virtualnog stroja:
-uređaj ich9-usb-ehci1,id=ehci,addr=1d.7,multifunction=on -uređaj ich9-usb-uhci1,id=uhci-1,addr=1d.0,multifunction=on,masterbus=ehci.0 ,firstport=0 -uređaj ich9-usb-uhci2,id=uhci-2,addr=1d.1,multifunction=on,masterbus=ehci.0,firstport=2 -uređaj ich9-usb-uhci3,id=uhci-3 ,addr=1d.2,multifunction=on,masterbus=ehci.0,firstport=4

Za libvirt
U konfiguracijskoj datoteci izvornog virtualnog stroja u čvoru <uređaji> uklonite sve USB kontrolere i dodajte sljedeći blok:

Usput, ako koristite spice, onda dodavanjem još 3 posebna uređaja na kontrolere, bit će moguće proslijediti USB uređaje sa spice klijenta na poslužitelj.

Primjer ispod spojlera

Za qemu
Dodajemo sljedeće opcije naredbi za pokretanje virtualnog stroja, uz kontrolere koje smo definirali ranije:
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -uređaj usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=3 -chardev spicevmc,name=usbredir,id=usbredirchardev2 -uređaj usb-redir,chardev=usbredirchardev2,id =usbredirdev2,debug=3 -chardev spicevmc,name=usbredir,id=usbredirchardev3 -usb-redir uređaja,chardev=usbredirchardev3,id=usbredirdev3,debug=3
Za libvirt
U početnoj konfiguracijskoj datoteci virtualnog stroja u čvoru <devices> dodajemo sljedeće opcije, uz kontrolere koje smo definirali ranije:

Sada je sve spremno za prosljeđivanje.

Pokretanje poslužitelja

Paket usbredirserver može se pronaći u standardnim spremištima gotovo svih popularnih distribucija Linuxa.

Umetnite USB flash pogon u računalo, pogledajte izlaz USB uređaja:
$ lsusb ... Bus 003 uređaj 011: ID 125f:c82a A-DATA Technology Co., Ltd. ...

Vidimo da je par vendorid:prodid jednak 125f:c82a, a kernel je identificirao flash disk kao 003-001 usbbus-usbaddr.

Sada ga podijelimo na portu 4000:

# Korištenje para vendorid:prodid $ usbredirserver -p 4000 125f:c82a # Korištenje para usbbus-usbaddr $ usbredirserver -p 4000 003-011

Povezivanje uređaja s virtualnim strojem

Kroz opcije prilikom pokretanja VM-a

Uređaj koji se treba spojiti na VM može se odrediti pri pokretanju dodavanjem sljedećih opcija u naredbu za pokretanje

Za qemu
-chardev utičnica,id=usbredirchardev1,port=4000,host=192.168.1.123 -uređaj usb-redir,chardev=usbredirchardev1,id=usbredirdev1,bus=ehci.0,debug=4
Za libvirt
Ovaj blok se postavlja ispred oznake </uređaji>, pored kontrolera koje smo ranije definirali:
Može se izvršiti i naredbom virsh pričvrsni uređaj

Ili putem qemu-monitora

Idemo u hipervizor i izvršavamo sljedeće naredbe u qemu-monitoru našeg stroja:
# Dodajte naš uređaj chardev-add socket,id=usbredirchardev1,port=4000,host=192.168.1.123 # Spojite ga na ehci kontroler (USB-2.0) device_add usb-redir,chardev=usbredirchardev1,id=usbredirdev1,bus=ehci 0,debug=4
Da biste onemogućili flash pogon, samo upotrijebite sljedeću naredbu:
uređaj_del usbredirdev1

To je sve, nakon ovih koraka vaš VM će vidjeti vaš flash pogon i moći će raditi s njim nativno.

Ako postoji mnogo uređaja i svi su isti

Ovdje se pojavio zanimljiv problem: kako proslijediti nekoliko identičnih uređaja različitim VM-ovima?
Istovremeno, vrijedi napomenuti da svi uređaji imaju isti par vendorid:prodid, a par usbbus-usbaddr nije nimalo konstantan, čim izvadite i umetnete uređaj, on će odmah promijeniti svoj usbaddr.

Riješio sam to koristeći udev.
Usput, ako ne razumijete baš kako udev radi, ima jedan cool na Debian Wikiju

I zato počnimo

Prvo, moramo saznati serijski broj našeg uređaja, po kojem ćemo ga identificirati u udev:

Pokrenimo udev monitor:
$ udevadm monitor --okoliš --udev
I umetnite naš uređaj, nakon toga ćemo odmah vidjeti popis varijabli ovog uređaja koje je udev ljubazno inicijalizirao za nas:
... UDEV add /devices/virtual/bdi/8:16 (bdi) ACTION=dodaj DEVPATH=/devices/virtual/bdi/8:16 ID_SERIAL_SHORT=11C130317234004B SEQNUM=4352 SUBSYSTEM=bdi USEC_INITIALIZED=189056149826 ...
Informacije o serijskom broju i drugim atributima mogu se dobiti i na drugi način, ali vrijedi uzeti u obzir da ćemo za pisanje pravila koristiti varijable iz gornje naredbe, a ne atribute iz donje naredbe. U suprotnom, okidač za uklanjanje neće se aktivirati kada se uređaj odspoji.
$ udevadm info -a -n /dev/bus/usb/003/011 | grep "(serijski)"

Kreirajmo sada datoteku /etc/udev/rules.d/99-usb-serial.rules i u nju upišimo sljedeća pravila:
ACTION=="dodaj", ENV(ID_SERIAL_SHORT)="11C130317234004B", RUN+="/usr/bin/usbredirserver -p 4000 $attr(busnum)-$attr(devnum)" ACTION=="ukloni", ENV(ID_SERIAL_SHORT )="11C130317234004B", RUN+="/usr/bin/fuser -k 4000/tcp"

Ponovno učitajmo udev pravila:
$ udevadm kontrola --reload-rules
Gotovo, sada kada spojimo naš uređaj, on će automatski tražiti port koji nam treba, a kada odspojimo usbredirserver prestat će raditi.
Po analogiji dodajemo i druge uređaje.

To je sve. Hvala vam na vašem interesu:)

Vrlo moćan alat u pravim rukama. Iz različitih tehničkih razloga, virtualno računalo prema zadanim postavkama nema izravan pristup USB disku. U ovom ćemo članku pogledati kako prenijeti USB pogon na Hyper-V virtualni stroj. Implementacija ideje bit će jednostavna, moglo bi se reći, u dva klika. Nikakvi dodatni programi, kako ponekad savjetuju “gurui” iz fotelje, nisu potrebni, koristimo se vlastitim rukama i ništa više.

VAŽNO. Nećemo moći prenositi removable, odnosno uklonjive uređaje u VM, iako postoje neki trikovi po tom pitanju, ali nije to sada o tome. Naš algoritam radi samo za USB-ove koji se prikazuju kao fiksni. Za takve diskove nećemo moći napraviti snimku.

Počnimo s manipulacijom




VAŽNO. Uopće nije potrebno isključiti VM prije dodavanja tvrdog diska. U tu svrhu postoji posebna tehnologija vrućeg dodavanja i vrućeg uklanjanja.

  1. Spajamo se na VM putem rdp-a ili jednostavno otvorimo konzolu. Idemo na upravljanje diskom. Ako je novi postavljen, onda sve radimo kako treba. Provjerimo je li na mreži. Ako ne, onda to popravljamo, kao i prije, pozivom kontekstni izbornik. Naše particije nemaju točke montiranja i slova, to treba ispraviti. Pritisnite bilo koji od odjeljaka desni klik i odaberite “Promijeni slovo pogona ili put do njega...”. Biramo bilo koju slobodnu.

USB prosljeđivanje na virtualni stroj Hyper-V je gotov, sada ga možemo koristiti za naše potrebe.

USB Network Gate je program koji korisnicima omogućuje povezivanje USB uređaji i povezan s drugim računalima pomoću IP kanala.

Postoje različite izvedbe daljinskog USB veze uređaja, hardvera i softvera. Neki od njih zahtijevaju od korisnika određena znanja i vještine; u nekim slučajevima postavljanje može potrajati dosta vremena. USB Network Gate me iznenadio svojom jednostavnošću. Skinuo sam program, instalirao ga, kliknuo gumb Share i uređaj je odmah bio dostupan za povezivanje na udaljenom računalu s instaliranim klijentom.

USB mrežna vrata mogu biti nezamjenjiva, na primjer, pri korištenju USB tokeni na RDP poslužitelju, program vam omogućuje konfiguriranje ekskluzivnog pristupa uređajima za pojedinog korisnika udaljene radne površine, izolirajući ga od ostalih korisnika. Program se također može koristiti u virtualnom okruženju ako se iz nekog razloga uređaj ne može izravno spojiti. Postoje verzije za Windows, Linux (RPM i Deb paketi), Apple OS X i, što je najzanimljivije, za Android. Sada razgovarajmo o tome kako to funkcionira.

poslužitelj

Program je i poslužitelj i klijent. Kada se pokrene, prema zadanim postavkama prikazuje sve USB uređaje spojene na računalo. Ali možete prikazati i prilagoditi opći pristup u sve luke.

Moguće je zasebno konfigurirati vezu za svaki uređaj ili priključak, dopuštajući veze samo za određenu adresu. Za zaštitu veze omogućena je autorizacija i enkripcija.


Klijent

Na koristeći USB Network Gate kao klijent, aplikacija skenira lokalna mreža Za prisutnost poslužitelja, prikazuje sve uređaje dostupne za povezivanje. Ako je poslužitelj na drugoj podmreži, na primjer kada se povezujete putem VPN-a, možete ga dodati pomoću gumba "Dodaj poslužitelj". Nakon što sam podijelio pisač, pojavio se na popisu dostupnih veza na mom MacBooku. Osim printera, spojio sam USB HDD s HFS+ particijama, također se povezao, ali particijama je trebalo oko tri minute da se montiraju, očito zbog njihove velike veličine.

Sažetak

Probna verzija omogućuje vam otvaranje pristupa samo jednom uređaju, registrirana verzija - ovisno o razini licence, od jedne do $89, 95 do neograničeno za $699,95 . Ako trebate brzo spojiti uređaj preko mreže, USB Network Gate je ono što vam treba, pogotovo ako nemate dobro znanje o hardveru računala.

Ove upute su točne počevši od verzije 2.

Čini se da zašto pisati išta drugo kad postoji službene upute? Međutim, ovdje postoji nešto čega nema.

Postoje dvije opcije za prijenos USB uređaja u sustav za goste:

  • prijenos određenog uređaja na "gosta";
  • prenijeti USB priključak na koji je ovaj uređaj spojen.

Prosljeđivanje USB uređaja

Ako imate USB sigurnosni ključ ili vanjska pohrana, tada je prikladnije prenijeti sam uređaj izravno u sustav za goste, bez obzira na koji je USB priključak ovaj uređaj fizički spojen. Uostalom, tijekom održavanja, sljedeći put ga možemo spojiti na drugi konektor.

# lsusb Bus 002 Uređaj 002: ID 8087:8000 Intel Corp. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:8008 Intel Corp. Bus 001 UREĐAJI 001: ID 1D6B: 0002 Linux Foundation 2.0 BUSA ROOT HUB 004 UREĐAJI 001: ID 1D6B: 0003 Linux Foundation 3.0 Root Hub Bus 004: ID 051D: 0002 Američka konverzija Power NeimumriphipItble Awards Fundie 003: ID uređaja 003: :0002 American Power Conversion sabirnica za neprekidno napajanje 003 uređaj 002: ID 046d:c00c Logitech, Inc. Optical Wheel Mouse Bus 003 Uređaj 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Pronalazimo uređaj koji nam treba i uzimamo njegov ID koji ćemo koristiti.

Moj zadatak je bio proslijediti UPS.
(Situacija zapravo nije tipična, više kao da ne bi trebala biti ovakva: poslužiteljska i mrežna oprema opremljeni su s 2 najjednostavnija besprekidna napajanja za radne stanice. UPS se pokazao osjetljivim i počeo vrištati s ili bez razloga. Da im brzo prekinem glas i još nisam shvatio kako upravljati UPS-om iz Debiana i odlučeno je spojiti dva besprekidna napajanja na Windows goste.)

U ovoj sam fazi otkrio da oba uređaja koja su mi trebala imaju isti ID... Ali pokušajmo.

Proslijeđeni uređaji registrirani su u konfiguracijska datoteka odgovarajući virtualni stroj.

# nano /etc/pve/qemu-server/101.conf usb0: host=051d:0002

Ponovno pokretanje. Uređaj je podignut, činilo se da je sve u redu. Ali onda se sjetimo da drugi uređaj ima isti identifikator. Kako ih razlikovati? I doista, iskustvo je pokazalo da ako dodijelite isti identifikator dvjema virtualnim računalima, oni će uzeti isti uređaj jedan od drugoga kada se uključe. Unatoč činjenici da glavni sustav ima nekoliko USB uređaja s ovim identifikatorom.

Ovdje se sjećamo da postoji još jedan način prosljeđivanja.

Prosljeđivanje USB priključka

Moramo odrediti na koji priključak je spojen uređaj koji nam je potreban.

Prvi način:

# lsusb -t /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M |__ Port 4: Dev 2, Ako je 0, Class=HID, Driver=usbhid, 1.5M |__ Port 7: Dev 3, If 0, Class=HID, Driver=usbfs, 12M |__ Port 8: Dev 4, If 0, Class=HID, Driver=usbfs, 12M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/ 8p, 480M /: Bus 01. Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M

Kako se kasnije pokazalo, uređaji koji su mi trebali bili su na sabirnici 3, priključci 7 i 8. Ali za sada nam to nije očito, a evo druge opcije:

Qm monitor qm> info usbhost Bus 3, Addr 4, Port 8, Speed ​​​​12 Mb/s Class 00: USB uređaj 051d:0002, Back-UPS XS 650CI FW:892.R2.I USB FW:R2 Bus 3, Addr 3 , Port 7, Brzina 12 Mb/s Klasa 00: USB uređaj 051d:0002, Back-UPS XS 650CI FW:892.R2.I USB FW:R2 Bus 3, Addr 2, Port 4, Brzina 1,5 Mb /s Klasa 00: USB uređaj 046d:c00c, USB optički miš

Ovdje se jasno vidi tko je tko. A sad hrabro:

# nano /etc/pve/qemu-server/101.conf usb0: host=3-7

Za potpunu sliku, nadopunit ću upute primjerom iz službene dokumentacije.

Moguća je sljedeća opcija:

Qm monitor qm> info usbhost Bus 3, Addr 2, Port 1.2, Speed ​​​​1.5 Mb/s Specifično za dobavljača: USB uređaj 0529:0001, HASP 2.17