Porównanie programów do przekierowania sieci USB. Korzystanie z bezpłatnego pakietu USBIP do przekazywania USB do maszyn wirtualnych. Jeśli jest wiele urządzeń i wszystkie są takie same.

Dzień dobry, amigos, cieszę się, że spojrzeliście na moją stronę, dzisiaj rozważymy takie pytanie, jak zorganizować USB w sieci i jak go wykorzystać w wirtualizacji. Temat jest dość istotny, a takie zadanie napotyka się coraz częściej.

uSB przez sieć

Jak już wiesz, wirtualizacja wkroczyła w nasze życie na długi czas i na długi czas. Możliwości serwerów rosną i naturalnie pojawiły się technologie ich racjonalnego wykorzystania, co oznacza izolację i normalne wykorzystanie zasobów, co spowodowało powstanie maszyn wirtualnych, które są już używane w hostingu i centrach danych. Mówiłem już o tym wszystkim, jeśli jesteś zainteresowany, spójrz na linki po lewej i powyżej.

Wirtualizacja, czyli technologia umożliwiająca tworzenie wirtualnej wersji urządzenia lub zasobu, takiego jak serwer, urządzenie magazynujące, sieć, a nawet system operacyjny, istnieje od wielu lat. Oferuje wiele korzyści, które trudno sobie wyobrazić, kiedy kiedyś żyliśmy w „świecie fizycznym”. Ale uważaj - wirtualizacja ma również pewne wady.

Konfigurowanie maszyny wirtualnej

Istnieją dwa główne sposoby rozwiązania tego problemu.


Jeśli podłączysz urządzenie do hosta, gdy maszyna wirtualna jest uruchomiona, a jej okno jest aktywne, urządzenie automatycznie łączy się z systemem gościa, a nie z hostem. Umożliwi to odłączenie jednego z już podłączonych urządzeń, aby zwolnić port dla nowo włożonego urządzenia lub zignorować nowe urządzenie. Jeśli wybierzesz tę drugą opcję, urządzenie zostanie połączone z hostem.

Jak wiesz, czasami niektóre programy licencjonowane wymagają do działania klucza USB. Wcześniej w wersji klasycznej, kiedy istniały tylko serwery fizyczne, nie było problemów z działaniem takiego schematu, ale wraz z pojawieniem się wirtualizacji pojawił się.

Niestety, niektóre hiperwizory nie mają możliwości przesyłania dalej bezpośrednio z serwera Urządzenia USB... Przykładem jest Hyper-V Microsoftu, który od 208 nadal nie ma takiej możliwości, w przeciwieństwie do vMvare, który na to pozwala, a już opisałem jak przekierować modem USB do vmware esxi.

Jeśli do łączenia urządzeń z hostem używany jest koncentrator, nie zobaczysz koncentratora, a jedynie urządzenia wirtualne.





Jeśli Mój komputer nie wyświetla go jako pamięci wymiennej, może to być spowodowane odłączeniem dysku. Rozwiń Pamięć i wybierz Zarządzanie dyskami. Gdy dysk będzie w trybie online, zostanie mu przypisana litera dysku.

Umieść wskaźnik myszy na jednym z tych elementów, aby wyświetlić kaskadowe menu urządzeń podłączonych do komputera i dostępnych do użytku. Jeśli fizycznie podłączasz nowe urządzenie do komputera hosta, a funkcja automatycznego łączenia nie łączy się z maszyną wirtualną, urządzenie początkowo łączy się z hostem.

Nie spiesz się, aby się zdenerwować, zwolennicy giganta z Redmond, technologia przychodzi ci na ratunek USB over IP lub AnywhereUSB. USB over IP umożliwia połączenie uSB przez sieć.

AnywhereUSB to mały sieciowy koncentrator USB. Poniżej przykłady modeli dostępnych na rynku.

  • Wszędzie USB / 2 - 2 porty USB


Następnie możesz zawiesić lub odłączyć maszynę wirtualną lub odłączyć urządzenie od sieci. Stacja robocza utrzymuje połączenie, zapisując wpis automatycznego łączenia w pliku konfiguracyjnym maszyny wirtualnej. Jedną z głównych cech wirtualizacji jest abstrakcja sprzętu. Zasoby te są współdzielone nawet w systemach niezwirtualizowanych. Wiele innych komponentów sprzętowych jest bardziej złożonych, ponieważ zwykle nie są one współdzielone, nawet w plikach aplikacje indywidualne... Stanowi to szczególne wyzwanie w świecie wirtualizacji.

  • Wszędzie USB / 5 - 5 portów USB


  • Wszędzie USB / 14 - 14 portów USB



Uwagi: Napotkane problemy i rozwiązania

Jeśli masz problemy, spodziewaj się wszystkich odpowiedzi ode mnie: „Tak powiedziałem”. W hiperwizorze typu 2 sterujący system operacyjny jest instalowany bezpośrednio na sprzęcie, a hiperwizor to kolejna aplikacja, która działa w jego wnętrzu.

Przykład pod spojlerem

Hiperwizory typu 1 nie są aplikacjami. To są jądra niebędące gośćmi system operacyjnyo. Hiperwizor typu 2 to w zasadzie podkładka aplikacyjna, która udaje, że zapewnia zrootowane urządzenie sprzętowe, co jest świetne, ponieważ nie wymaga takiego samego stopnia izolacji jak hiperwizor typu 1. W teorii brzmi to jak coś do zrobienia, chociaż brzmi to również jak brudny włamanie i ryzyko pęknięcia izolacji. Ale wykonalność techniczna nie ma znaczenia.

Konfiguracja AnywhereUSB

Przyjrzyjmy się, jak sprzęt jest skonfigurowany w celu uzyskania dostępu USB przez sieć.

Tak to będzie wyglądać.


Istnieje kilka interfejsów do konfiguracji i zarządzania urządzeniem:
• Interfejs sieciowy do konfiguracji, monitorowania i administracji;
• Narzędzie konfiguracyjne AnywhereUSB;
• Interfejs wiersza poleceń Telnet;
• Prosty protokół zarządzania siecią (SNMP).

To nie jest idealne rozwiązanie, ale warunki licencyjne są korzystne dla większości i spełnia swoje zadanie. Uwaga. Czwartą opcją, której nie omówiono w tym artykule, jest rozwiązania programowe... Czytelnik Tim zasugerował jedną z tych aplikacji, a także opowiedział o swoich doświadczeniach z nią. Nigdy nie będziesz mieć żadnych gwarancji, gdzie maszyna wirtualna będzie działać od chwili do chwili. W sekcji „Migracja na żywo bez ogólny dostęp»Nawet brak klastra nie blokuje już maszyny wirtualnej dla określonego hosta.

Metoda 2: protokół pulpitu zdalnego




Gdy system operacyjny jest zainstalowany na maszynie wirtualnej, jest bardzo podobny do maszyny fizycznej. W ten sposób można włączyć połączenia pulpitu zdalnego w oknie właściwości systemu.




Jest też świetne narzędzie o nazwie Remote Desktop Connection Manager. Jest trochę wadliwy i niestabilny, ale jego zdolność do przechowywania wielu unikalnych ustawień połączenia dla zdalnych hostów w hierarchicznym drzewie sprawia, że \u200b\u200bjest wart drobnych trudności.

Aby skonfigurować urządzenie, rozważ interfejs WWW jako najwygodniejszą i najprostszą opcję.

Zarządzanie adresami IP

Istnieje kilka opcji przypisywania adresu IP do AnywhereUSB:
• Stałe IP;
• Dynamiczne przypisywanie adresu IP - przy użyciu protokołu dynamicznej konfiguracji hosta (DHCP);
• Automatyczne prywatne adresowanie IP (APIPA), najlepiej znane jako Auto-IP;

Jak włączyć tryb sesji rozszerzonej




Funkcjonalnie nie różni się to od sposobu, w jaki łączymy urządzenia w sesjach zdalnych przez bardzo długi czas.







Nie wymaga połączenia sieciowego bezpośrednio od gościa, tylko dla gospodarza. ... Może się okazać, że niektóre urządzenia nie działają tak dobrze, jak z hiperwizorami typu 2; Inne mogą w ogóle nie działać. W tych systemach operacyjnych jest on domyślnie wyłączony. Aby włączyć tryb sesji rozszerzonej.

Jak możesz sobie wyobrazić, najbardziej poprawnym sposobem jest statyczny adres IP. Ustawia się go w pozycji Konfiguracja sieci.


W tym samym mnu bardzo wygodnie jest ustawić dostępne w nim usługi sieciowe.


Zalecenia dotyczące zakupów - narzędzia do monitorowania wydajności sieci

Wybierz zasób lokalny, którego chcesz użyć. ... Aby wybrać lokalny zasób, taki jak dysk. Jeśli nadal będziesz obsługiwać urządzenia peryferyjne. Pobierz bezpłatny przewodnik. Rozwiązania do monitorowania wydajności sieci muszą sprostać rosnącej złożoności sieci oraz zwiększonym wymaganiom użytkowników i aplikacji.

Najpierw kilka słów o powyższych rozwiązaniach.

  • Zapomniałeś wpisać swój adres e-mail.
  • Ten adres e-mail jest nieprawidłowy.
  • Osiągnąłeś maksymalną liczbę znaków.
  • Wprowadź adres e-mail swojej firmy.
Jeśli znajdujesz się poza Stanami Zjednoczonymi, zgadzasz się, że Twoje dane osobowe zostaną przesłane do Stanów Zjednoczonych i tam przetwarzane. Obsługa tych urządzeń peryferyjnych jest niezwykle ważna, aby w pełni wykorzystać możliwości wirtualnych pulpitów. Bez dostępu do znanych drukarek, portów i innych urządzeń peryferyjnych ustanowienie odbioru dla wirtualnych pulpitów staje się trudne.


Na karcie Zarządzanie połączeniami możesz zobaczyć bieżące połączenia.



Jeśli jest wiele urządzeń i wszystkie są takie same

Jako administrator musisz wiedzieć, jakie urządzenia zewnętrzne są dostępne na rynku i jak możesz je wspierać. Jednak z tą funkcją należy zachować ostrożność. Każdy główny produkt do wirtualizacji desktopów ma nieco inną obsługę urządzeń peryferyjnych.

Ta technologia może być używana z wieloma opcjami sieciowymi. W medycynie obsługiwane są również monitory ciśnienia krwi, czujniki tętna i inne urządzenia peryferyjne. Należą do nich klawiatury, myszy i karty inteligentne. Nie ma znaczenia, w jaki sposób te urządzenia łączą się z klientem. Te urządzenia peryferyjne działają po prostu w sesjach pulpitu wirtualnego, ponieważ podstawowy protokół zapewnia ich obsługę.

Teraz, co dalej trzeba zrobić na maszynie wirtualnej, wszystko jest skandalicznie logiczne, trzeba tam zainstalować sterowniki z AnywhereUSB i ustawić adres IP urządzenia. Jak widać podłączyłem już go i ma wewnętrzny adres IP.


Za pomocą specjalnego narzędzia Anywhere View możesz sprawdzić dostępność i zajętość wszystkich urządzeń. Być może jest to najprostsza i najbardziej niezawodna metoda przekazywania tokenów, pendrive'ów i różnych modemów na swoje maszyny wirtualne, same urządzenia kosztują inaczej, ale jeśli już wydałeś pieniądze na oprogramowanie i hiperwizory, myślę, że jeśli trzeba, kup to :).

Możliwe jest również wykorzystanie technologii dostarczonych przez producenta, które są mniej obciążone w sieci. Pulpit wirtualny może nie być w stanie poradzić sobie z dużym opóźnieniem w dostępie do tych urządzeń. To z kolei prowadzi do błędów, przekroczenia limitów czasu i niestabilności.

Niestabilne wirtualne pulpity to takie, w których sesja jest „usuwana” po wylogowaniu użytkownika. Informacje z ostatniej sesji nie są zapisywane. Ta okoliczność ma wpływ na serwer i odpowiadające mu podsystemy. W przypadku trwałych pulpitów wirtualnych użytkownik jest zawsze przypisywany do tej samej maszyny wirtualnej podczas logowania.


Obecnie istnieje wiele sposobów na przekazanie urządzenia USB do innego komputera lub maszyny wirtualnej przez sieć.
Najpopularniejsze są produkty sprzętowe, takie jak AnywhereUSB i produkty czysto programowe, z których sam wypróbowałem: USB Redirector i USB / IP.
Chciałbym opowiedzieć o innym ciekawym sposobie, który działa bezpośrednio z emulatorem QEMU.
Jest to również część projektu przypraw oficjalnie prowadzonego przez RedHat.

Niektóre zwirtualizowane środowiska komputerowe obsługują skanery, które umożliwiają tworzenie cyfrowych kopii dokumentów i zdjęć. Mogą być przesyłane przez sieć. Dzięki temu jest niezależne od tego, czy klient jest bezpośrednio podłączony do urządzenia, czy nie. Drukowanie osiągnęło ogromny postęp, ale nadal jest to problem z wirtualnymi pulpitami. Jednym z rozwiązań jest przekierowanie drukarki. Mapuje drukarkę klienta bezpośrednio lub pośrednio, a następnie kopiuje ją do sesji wirtualnego pulpitu.

Gdy tylko użytkownicy zaczną drukować ze swojego wirtualnego pulpitu, zadanie drukowania jest przesyłane do klienta i drukarki. Istnieje wiele dźwigni, które są wprawiane w ruch podczas procesu drukowania i oczywiście niektóre rzeczy mogą się nie udać. Sterowniki drukarek mogą łatwo odmówić usługi lub usługa buforu wydruku może ulec awarii na wirtualnym kliencie lub sesji pulpitu. Oto setki lub tysiące kierowców w grze. Istnieje jednak mniej złożona alternatywa.

UsbRedir to otwarty protokół do przekazywania urządzeń USB przez tcp do zdalnego serwera wirtualnego, opracowany przy wsparciu RedHat w ramach projektu spice. Ale jak się okazało, można go z powodzeniem stosować bez przypraw. Serwer to usbredirserver, który przegląda urządzenie USB na określonym porcie, a klientem jest sam QEMU, który emuluje połączenie wyeksportowanego urządzenia USB z określonym kontrolerem USB maszyny wirtualnej. Dzięki takiemu podejściu absolutnie każdy system operacyjny może być używany jako system gościa, ponieważ nawet nie wie, że urządzenie jest przekazywane zdalnie, a cała logika leży w QEMU.

Dodatkowe uwagi dotyczące urządzeń peryferyjnych

Zastępuje to określone sterowniki dla odpowiednich drukarek. Jednak te alternatywy mają również wady. Oczywiście nie obsługują wszystkich funkcji każdej dostępnej drukarki. Jeśli drukarka ma funkcję, której ogólny sterownik nie może ominąć, po prostu nie ma zastosowania. Ma to tę zaletę, że zadanie drukowania jest kompresowane, a tym samym zmniejsza obciążenie sieci. Wiele urządzeń, które mogą być używane jako klienci pulpitu wirtualnego, ma ekrany wielodotykowe.

Najpierw kilka słów o powyższych rozwiązaniach.

  • AnywhereUSB to całkiem dobre rozwiązanie, ale drogie i ma paskudne usterki, na przykład, jeśli udostępniony dysk flash odpadnie, możesz go ponownie podłączyć tylko poprzez fizyczne usunięcie i włożenie.
  • USB / IP - projekt OpenSource. Wygląda na to, że został opuszczony. W rzeczywistości jest dość wadliwy. Kiedy połączenie jest zerwane, maszyna często przechodzi w stan całkowitego zawieszenia, a system Windows pokazuje BSOD
  • Redirector USB - świetne oprogramowanie. Do udostępniania urządzeń z Linuksa na Linuksa jest darmowy, we wszystkich innych przypadkach kosztuje, nie tak dużo jak AnywhereUSB, ale nie darmowy, jak byśmy chcieli :)
Jak widać, jest w czym wybierać, ale w końcu spróbujmy innego sposobu - UsbRedir?

Konfigurowanie maszyny wirtualnej

Aby mieć gdzie podłączyć wyeksportowane urządzenia, musisz utworzyć niezbędne kontrolery USB na maszynie wirtualnej:

  • uhci - dla USB1.0
  • ehci - dla USB2.0
  • xhci - dla USB3.0
Dla qemu (bez libvirt)

Dodaj opcje do polecenia, aby uruchomić maszynę wirtualną:
-urządzenie ich9-usb-ehci1, id \u003d ehci, addr \u003d 1d.7, wielofunkcyjne \u003d na -urządzeniu ich9-usb-uhci1, id \u003d uhci-1, addr \u003d 1d.0, wielofunkcyjne \u003d wł., masterbus \u003d ehci.0 , firstport \u003d 0 -urządzenie ich9-usb-uhci2, id \u003d uhci-2, addr \u003d 1d.1, wielofunkcyjne \u003d wł., masterbus \u003d ehci.0, firstport \u003d 2 -urządzenie ich9-usb-uhci3, id \u003d uhci-3 , addr \u003d 1d.2, wielofunkcyjne \u003d wł., masterbus \u003d ehci.0, port pierwszy \u003d 4

W przypadku libvirt
W oryginalnym pliku konfiguracyjnym maszyny wirtualnej na hoście & ltdevices & gt usuń wszystkie kontrolery USB i dodaj następujący blok:

Nawiasem mówiąc, jeśli używasz spice, to dodając 3 kolejne specjalne urządzenia do kontrolerów, możliwe będzie przekazywanie urządzeń USB z klienta spice na serwer.

Przykład pod spojlerem

Dla qemu
Dodajemy do polecenia uruchamiającego maszynę wirtualną, oprócz kontrolerów, które zdefiniowaliśmy wcześniej:
-chardev spicevmc, name \u003d usbredir, id \u003d usbredirchardev1 -device usb-redir, chardev \u003d usbredirchardev1, id \u003d usbredirdev1, debug \u003d 3 -chardev spicevmc, name \u003d usbredir, id \u003d usbredirchardev2 -device usb-redir, chardev2 \u003d usbredirdev2, debug \u003d 3 -chardev spicevmc, name \u003d usbredir, id \u003d usbredirchardev3 -device usb-redir, chardev \u003d usbredirchardev3, id \u003d usbredirdev3, debug \u003d 3
W przypadku libvirt
W pliku konfiguracji początkowej maszyny wirtualnej w węźle & ltdevices & gt, oprócz kontrolerów, które zdefiniowaliśmy wcześniej, dodaj następujące opcje:

Teraz wszystko jest gotowe do przekazania.

Uruchomienie serwera

Pakiet usbredirserver można znaleźć w standardowych repozytoriach w prawie wszystkich popularnych dystrybucjach Linuksa.

Wkładamy dysk flash USB do komputera, spójrz na wyjście urządzeń USB:
$ lsusb ... Urządzenie Bus 003 011: ID 125f: c82a A-DATA Technology Co., Ltd. ...

Widzimy, że para vendorid: prodid jest równa 125f: c82a, a jądro zidentyfikowało odpowiednio dysk flash 003-001 usbbus-usbaddr.

Teraz udostępnijmy to na porcie 4000:

# Używanie pary vendorid: prodid $ usbredirserver -p 4000 125f: c82a # Używanie pary usbbus-usbaddr $ usbredirserver -p 4000003-011

Podłączanie urządzenia do maszyny wirtualnej

Poprzez opcje przy uruchamianiu VM

Urządzenie, które ma być podłączone do maszyny wirtualnej, można określić podczas uruchamiania, dodając następujące opcje do polecenia uruchamiania

Dla qemu
-chardev gniazdo, id \u003d usbredirchardev1, port \u003d 4000, host \u003d 192.168.1.123 -device usb-redir, chardev \u003d usbredirchardev1, id \u003d usbredirdev1, bus \u003d ehci.0, debug \u003d 4
W przypadku libvirt
Ten blok jest umieszczony przed tagiem & lt / devices & gtobok kontrolerów, które zdefiniowaliśmy wcześniej:
Można to również wykonać poleceniem virsh attach-device

Lub przez qemu-monitor

Wchodzimy do hiperwizora i na monitorze qemu naszej maszyny wykonujemy następujące polecenia:
# Dodaj nasze urządzenie chardev-add socket, id \u003d usbredirchardev1, port \u003d 4000, host \u003d 192.168.1.123 # Podłącz je do kontrolera ehci (USB-2.0) device_add usb-redir, chardev \u003d usbredirchardev1, id \u003d usbredirdev1, bus \u003d ehci. 0, debugowanie \u003d 4
Aby wyłączyć dysk flash, wystarczy następujące polecenie:
device_del usbredirdev1

To wszystko, po tych krokach Twoja maszyna wirtualna zobaczy Twój dysk flash USB i będzie mogła z nim pracować natywnie.

Jeśli jest wiele urządzeń i wszystkie są takie same

Tu pojawiło się ciekawe zadanie, jak przekazać kilka identycznych urządzeń do różnych maszyn wirtualnych?
Jednocześnie należy zauważyć, że wszystkie urządzenia mają tę samą parę sprzedawca: prodid, a para usbbus-usbaddr nie jest w ogóle stała, jak tylko wyjmiesz i włożesz urządzenie, natychmiast zmieni swoje usbaddr.

Rozwiązałem to za pomocą udev.
Nawiasem mówiąc, jeśli nie do końca rozumiesz, jak działa udev, na Debian Wiki jest fajny

A więc zaczynajmy

Najpierw musimy znaleźć numer seryjny naszego urządzenia, po którym zidentyfikujemy je w udev:

Zacznijmy monitor udev:
$ udevadm monitor --environment --udev
I włóż nasze urządzenie, po czym natychmiast zobaczymy listę zmiennych dla tego urządzenia, które udev uprzejmie zainicjowało dla nas:
... UDEV add / devices / virtual / bdi / 8:16 (bdi) ACTION \u003d add DEVPATH \u003d / devices / virtual / bdi / 8:16 ID_SERIAL_SHORT \u003d 11C130317234004B SEQNUM \u003d 4352 SUBSYSTEM \u003d bdi USEC_INITIALIZED \u003d 189056149826 ...
Informacje o parametrach seryjnych i innych atrybutach można uzyskać w inny sposób, należy jednak pamiętać, że do pisania reguł będziemy używać zmiennych z polecenia powyżej, a nie atrybutów z polecenia poniżej. W przeciwnym razie wyzwalacz usuwania nie zostanie uruchomiony po odłączeniu urządzenia.
$ udevadm info -a -n / dev / bus / usb / 003/011 | grep „(serial)”

Teraz stwórzmy plik /etc/udev/rules.d/99-usb-serial.rules i zapiszmy w nim następujące reguły:
ACTION \u003d\u003d "add", ENV (ID_SERIAL_SHORT) \u003d "11C130317234004B", RUN + \u003d "/ usr / bin / usbredirserver -p 4000 $ attr (busnum) - $ attr (devnum)" ACTION \u003d\u003d "remove", ENV (ID_SERIAL_SHORT ) \u003d "11C130317234004B", RUN + \u003d "/ usr / bin / fuser -k 4000 / tcp"

Załaduj ponownie zasady udev:
$ udevadm control --reload-rules
Gotowe, teraz, gdy podłączymy nasze urządzenie, automatycznie wyszuka potrzebny nam port, a po odłączeniu usbredirserver przestanie działać.
Dodajemy inne urządzenia przez analogię.

To wszystko. Dziękuję za zainteresowanie:)