Прокидання USB пристроїв по мережі за допомогою USB Network Gate.

💖 Подобається?Поділися з друзями посиланням

Доброго дня, амігос, радий, що ти заглянув до мене на сайт, сьогодні ми розглянемо таке питання, як організувати usb по мережі і як це використовувати у віртуалізації. Тема досить актуальна, і зустрічається таке завдання дедалі частіше.

usb через мережу

Як ви вже знаєте у наше життя, давно і на довго увійшла віртуалізація. Потужності серверів зростають, і природно з'явилися технології раціонального їх використання, що мають на увазі ізоляцію та нормальну утилізацію ресурсів, що породило віртуальні машини, які вже використовують і на хостингах та дата центрах. Я вже розповідав про все це, якщо цікаво подивіться на посилання зліва і вище.

Як ви знаєте іноді деякі ліцензійні програми, Вимагаю для роботи usbключ. Раніше у класичному варіанті, коли були лише фізичні сервери, з роботою такої схеми проблем не було, але з появою віртуалізації вона випливла на рушницю.

На жаль, у деяких гіпервізорів немає можливості прокидати на пряму з сервера. USB пристроїва. Прикладом може бути Hyper-V від компанії Microsoft, Який з 208 року досі не несе в собі таку можливість, на відміну від компанії vMvare, яка це дозволяє і я вже розповідав як прокинути USB модем у vmware esxi.

Не поспішайте засмучуватися, адепти редмондського гіганта, на виручку вам приходить технологія USB over IP або AnywhereUSB. USB over IP дозволяє підключити usb через мережу.

AnywhereUSB це невеликий мережевий usbхаб. Нижче зразкові моделі, представлені на ринку.

  • AnywhereUSB /2 – 2 порти USB


  • AnywhereUSB/ 5 – 5 портів USB


  • AnywhereUSB /14 – 14 портів USB



Налаштування AnywhereUSB

Давайте розглянемо як налаштовується залізниця, щоб зробити доступ юсб по мережі.

Ось як це виглядатиме.


Для налаштування та керування пристроєм передбачено кілька інтерфейсів:
• Web інтерфейс для налаштування, моніторингу та адміністрування;
• AnywhereUSB утиліта конфігурування;
• Telnet Command-Line Interface;
• Simple Network Management Protocol (SNMP).

Для налаштування пристрою розглянемо Web-інтерфейс - як найбільш зручний і простий варіант.

Управління IP адресою

Існує кілька варіантів присвоєння IP адреси AnywhereUSB:
• Статичний ІР;
• Динамічне присвоєння IP - Using Dynamic Host Configuration Protocol (DHCP);
• Auto Private IP Addressing (APIPA), найбільш відомий як Auto-IP;

Як знаєте самий правильний спосібце статична IP адреса. Задається він у пункті Network Configuration.


В цьому ж мені дуже зручно задавати мережеві служби, доступні на ньому.



На вкладці Conection Management можна переглянути поточні підключення.



Тепер, що далі потрібно зробити на віртуальній машині, тут все до неподобства логічно, потрібно поставити там драйвера від AnywhereUSB і задати IP адресу пристрою. Як бачите, я вже підключив її і в неї є внутрішній IP адресу.


За допомогою спеціальної утиліти, Anywhere View можна перевірити доступність та зайнятість всіх пристроїв. Мабуть, це найпростіший і надійніший метод прокидання токенів, флешок і різних модемів у ваші віртуальні машини, самі пристрої стоять по-різному, але якщо ви вже витратилися на софт і гіпервізори, думаю при необхідності купіть і це:).


Дані інструкції вірні починаючи з 2 версій.

Начебто, навіщо ще щось писати, коли є офіційна інструкція? Однак тут є дещо, чого там немає.

Є два варіанти передачі USB-пристрою в гостьову систему:

  • передати «гостю» певний пристрій;
  • передати USB-порт, до якого пристрій підключено.

Прокидання USB-пристроїв

Якщо є USB ключ захисту, або зовнішній накопичувач, то зручніше передавати в гостьову систему безпосередньо сам пристрій, незалежно від того, до якого USB-порту цей пристрій підключено фізично. Адже при обслуговуванні ми можемо наступного разу підключити до іншого роз'єму.

# lsusb Bus 002 Device 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 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 004: ID 051d:0002 American 0 1d :0002 American Power Conversion Uninterruptible Power Supply Bus 003 Device 002: ID 046d:c00c Logitech, Inc. Optical Wheel Mouse Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Знаходимо потрібний нам пристрій і беремо його ID, який будемо використовувати.

У мене стояло завдання прокинути UPS.
(Ситуація, насправді не типова, скоріше із серії як не повинно бути: На сервер і мережеве обладнанняпоставлені 2 найпростіші безперебійники для робочих станцій. UPS виявилися ніжними і починали голосити з приводу і без. Щоб швидко підрізати їм голос і поки не розбиратися з управлінням ДБЖ з Debian і було вирішено підчепити два безперебійники до Windows-гостям.)

На цьому етапі я виявив, що обидва потрібні мені пристрої мають однакові ID… Але пробуємо.

Прокидаються пристрої прописуються в конфігураційному файлівідповідної віртуальної машини.

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

Перезавантажив. Пристрій підчепився, начебто все добре. Але тут згадуємо, що другий пристрій із таким самим ідентифікатором. Як їх розрізняти? Досвід показав, що якщо в дві віртуальні машини прописати один ідентифікатор, то вони при включенні будуть відбирати один у одного один і той же пристрій. Незважаючи на те, що в host-системі є кілька USB-пристроїв із таким ідентифікатором.

Ось тут ми і згадуємо, що є інший спосіб прокидання.

Прокидання USB-портів

Необхідно визначити, до якого саме порту підключено потрібний нам пристрій.

Перший спосіб:

# 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, 480 Port 4: Dev 2, If 0, Class = HID, Driver = usbhid, 1.5M | Port 7: Dev 3, If 0, Class = HID, Driver = usbfs, 12M | 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

Як пізніше з'ясувалося, потрібні пристрої сидять на шині 3, порти 7 і 8. Але поки нам це не очевидно і ось варіант другий:

Qm monitor qm> info usbhost Bus 3, Addr 4, Port 8, Speed ​​12 Mb/s Class 00: USB device 051d:0002, Back-UPS XS 650CI FW:892.R2.I USB FW:R2 Bus 3, Addr 3, Port 7, Speed ​​12 Mb/s Class 00: USB device 051d:0002, Back-UPS XS 650CI FW:892.R2.I USB FW:R2 Bus 3, Addr 2, Port 4, Speed ​​1.5 Mb/s Class 00: USB device 046d:c00c, USB Optical Mouse

Тут ми наочно бачимо, хто є хто. І тепер сміливо:

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

Для повноти картини доповню інструкцію прикладом з офіційної документації.

Можливий такий варіант:

Qm monitor qm> info usbhost Bus 3 , Addr 2, Port 1.2 , Speed ​​1.5 Mb/s Vendor Specific: USB device 0529:0001, HASP 2.17

Один із читачів блогу - Vovets666 випробував безкоштовне ПО USBIP і запропонував написати про нього статтю.

Дисклаймер:
все описане нижче – моє особисте бачення проблеми та способів її вирішення, яке не є істиною в останній інстанції. Цілком можливо, існують інші варіанти, я із задоволенням про них послухаю. Як інструкція з роботи з ПЗ використані матеріали, знайдені в інтернеті, вже й не пам'ятаю де… Крім того, будучи адміном — віндузятником, з Linux я знайомий досить поверхово, працював в умовах дедлайну та часу на вивчення матчасті/танці з бубнами особливо багато не мав, тому описую, як зробив, щоб працювало, та впевнений, що є й інші способи.

Отже, маємо віртуальні машини – сервери 1С, підняті на MSWindows Server 2008R2. Для роботи ПЗ необхідні підключені до них серверні HASP-ключі. Безпосередньо підключити їх на ВМ Hyper-V, як відомо, не можна. Завдання: якось прокинути HASP-ключі на віртуальні машини, бажано з використанням мінімуму додаткового заліза та вартості ліцензій.

(Оффтоп: у 1С Останнім часомз'явилася можливість програмного ліцензування, без використання HASP-ключів (щось на зразок активації з використання пін-кодів). Але є нюанси: обмін на ліцензію з програмною активацією не безкоштовний, при зміні конфігурації машини потрібна повторна активація, після закінчення певного ліміту дозвіл на активацію залишається на розсуд техпідтримки, що зовсім не айс. Тому було вирішено використати старий спосібз HASP-ключами).

Розглядалися варіанти:

- спосіб, що надається компанією Мікрософт (щоправда, для інших цілей):
RemoteFX+RDP7.1. Не влаштував з причин: необхідно обладнання з підтримкою RemoteFX, на сервері 1С повинні бути підняті додаткові сервіси (служба доступу до віддаленого робочого столу), з хоста на віртуалку повинна постійно висіти сесія RDP, через яку прокидається ключ, потрібна клієнтська ліцензія на доступ до RDS . Можливо, в якомусь із пунктів цього списку я й помиляюся, але загальна їхня кількість зарубала спосіб на корені.

- Апаратні пристрої сторонніх виробників. Недоліки: коштують грошей, до того ж у деяких пристроїв спостерігалися проблеми із сумісністю з ОС (наприклад, Ubox 4100, який у нас є) і які виробник вирішувати не збирався. Наразі проблеми начебто вирішені (в інших моделях), але осад залишився.

- ПО сторонніх виробників. Недоліки: вимагають наявності окремої машини для роботи як сервер USB-пристроїв і, як правило, платні. Після пошуку
прийнятного софту виявилося, що з усього виявленого програмного забезпечення безкоштовним для комерційного застосування є тільки пакет USBIP. На ньому й зупинився.

Сама по собі установка та налаштування ПЗ великих проблем не викликала, у комплекті до пакету був короткий мануал, плюс – інтернет.

Пакет USBIP () для роботи потребує наявності 2х налаштованих машин: сервера (до нього безпосередньо підключається ключ) та клієнта (на нього цей ключ прокидається). Серверна
частина USBIP існує лише під Linux, клієнтська – під Linux та Windows (включаючи 7 та 2008R2).

1) Встановлення сервера (машини, до якої підключено USB-пристрій).

Як сервер використовуємо машину з встановленим Linux. Я використовував Linux Ubuntu v.11.04 (збірка Lubuntu, яка декларується як найменш вимоглива до ресурсів) як найпростішу (для мене) систему: ставиться без будь-яких проблем, автоматично підчіплює нові пристрої, що підключаються, після установки за замовчуванням інстальовані необхідні компоненти, крім того, USBIP присутній у репозитарії. З метою економії на обладнанні ця машина створена як віртуальна, піднята на існуючому хості ESXi 4.1 і в неї в свою чергу прокинутий ключ HASP з стандартним хоста для ESXi способом.

Встановлення проблем не викликало: ставимо систему, підключаємо до мережі, видаємо IP, через менеджер пакетів встановлюємо USBIP та необхідні для роботи компоненти. Крім того, були встановлені VMware tools (бо дана машина – ВМ на ESXi).

Про всяк випадок нагадаю, як це робиться:

З оснастки VMware підключаємо диск з ПЗ (Inventory -> Virtual Machine -> Guest -> Install/Upgrade VMware Tools). З цього диска розпаковуємо архів з програмного забезпечення на робочий стіл. Запускаємо термінал і в ньому набираємо:

<имя пользователя>@<имя машины>:~$ sudo<путь до файла>\vmware-install.pl -default

2) Налаштування сервераUSBключів.

Запускаємо термінал. Подальші дії- З командного рядка.

· Завантажуємо наступні модулі.

<имя пользователя>@<имя машины>:~$ sudo modprobe usbip

<имя пользователя>@<имя машины>:~$ sudo modprobe usbip_common_mod

· Запускаємо usbip як системний демон:

<имя пользователя>@<имя машины>:~$ sudo usbipd D

отримуємо:

Bind usbip.ko to usb device to be exportable!

<имя пользователя>@<имя машины>:~$

Увага! Необхідно спочатку запустити демон, а потім підключати пристрої, інакше можуть виникнути помилки на клієнті при підключенні. (Див. примітки)

· Для перегляду підключених USB пристроїв виконуємо команду

<имя пользователя>@<имя машины>:~$ lsusb

отримуємо список підключених USB пристроїв з їх ідентифікаторами:

Bus XXX Device YYY: ID VendorID: DeviceID< назва пристрої>

щось на зразок:

Bus 002 Device 004: ID 0529:0001 Aladdin Knowledge Systems HASP v0.06

Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Запам'ятовуємо поєднання VendorID:DeviceID

· Виконуємо команду:

<имя пользователя>@<имя машины>:~$ sudo usbip_bind_driver -list

USBIP перевіряє список підключеного обладнання та виводить його із зазначенням їх bus-ID виду:

- busid 2-1 (0529:0001)

2-1:1.0 -> none

- busid 2-2 (0e0f:0002)

2-2:1.0 -> hub

……..

В даному випадку bus-ID, що вказує на потрібний нам USB-пристрій: «2-1».

· Тепер підключаємо пристрій до сервера. Набираємо:

<имя пользователя>@<имя машины>::~$ sudo usbip_bind_driver -usbip 2-1

отримуємо:

** (process:1483): DEBUG: 2-1:1.0 -> none

** (process:1483): DEBUG: write «add 2-1» to /sys/bus/usb/drivers/usbip/match_busid

** Message: bind 2-1 to usbip, complete!

Пристрій підключено до USBIP, доступ з локальної машини-сервера до нього втрачається.

· Також можна подивитися, які пристрої підключені до USBIP Наразі. Для цього набираємо:

<имя пользователя>@<имя машины>:~$ sudo usbip_bind_driver -list

Отримуємо:

- busid 2-1 (0529:0001)

2-1:1.0 — > usbip

- busid 2-2 (0e0f:0002)

2-2:1.0 -> hub

Пристрій із bus-ID 2-1 підключено до USBIP. Система може передавати дані про цей USB-пристрій з вашої системи віддаленим клієнтам.

Налаштування сервера завершено. У разі потреби можна додавати та прибирати
експортовані пристрої.

ПараметриUSBIP – linuxсервера Usage: usbip_bind_driver

-?, -help виклик
довідки
-usbip busid make a device exportable
-other busid use a device by a local
driver
-list print usb devices and their
drivers
-list2 print usb devices and their
drivers in parseable mode
-allusbip make all devices exportable

3) Налаштування клієнта MS Windows

· Завантажуємо дистрибутив. Нам знадобляться обидві версії – 0.1 та 0.2.

· Встановлюємо USB/IPEnumenator. Він встановлюється як довільний системний пристрій із драйверами на диску. Драйвера беремо з дистрибутива версії 0.2:

Для Windows XP:

1. Розпаковуємо файли у локальну папку.

2. У Панелі Управління тиснемо «Установка Обладнання», у вікні Вітання Майстра, що відкрилося, тиснемо «Далі».

3. Вибрати "Так, пристрій вже під'єднано" -> "Далі".

4. Вибрати "Додавання нового пристрою"-> "Далі".

5. Вибрати "Встановлення обладнання, вибраного зі списку вручну" -> "Далі".

7. Вибрати "Встановити з диска", -> "Перегляд", вибрати папку з розархівованим драйвером -> "ОК".

9. "Майстер готовий до встановлення нового обладнання" -> Вибрати "Далі" -> Готово».

Для Windows 7 (і 2008r2):

1. Для дозволу встановлення непідписаних драйверів: запускаємо cmd від
адміністратора та виконуємо "bcdedit /settestsigningon".

2. Розпаковуємо файли в локальну папку.

3. Відкриваємо «Диспетчер пристроїв».

4. Правою кнопкою на "ім'я комп'ютера" -. "Встановити старий пристрій" (або вибрати в меню "Дія").

5. У Вікні Вітання Майстра, що відкрилося, тиснемо «Далі».

6. Вибрати "Встановлення обладнання, вибраного зі списку вручну" -> "Далі".

8. Вибрати "Встановити з диска", -> "Перегляд", вибрати папку з розархівованим драйвером -> "ОК".

10. "Майстер готовий до встановлення нового обладнання" -> Вибрати "Далі" -> "Готово".

Всі зазначені дії також описані в файлі «usage», що йде з пакетом USBIP, англійською мовою.

· Підключаємо USB пристрої, позначені як експортовані на потрібному сервері. Для підключення використовуємо USBIP із дистрибутива версії 0.1

Запускаємо cmd. Дивимося, які пристрої готові до підключення:

path-to-usbip :> usbip.exe -l

(server-ip – IP адреса сервера USB пристроїв із пункту 2)

C:\ usbip> usbip l 192.168.1.13

usbip dbg: usbip_network.c: 229 (tcp_connect) trying 192.168.1.13 port 3240

usbip dbg: usbip_network.c: 249 (tcp_connect) connected to 192.168.1.13:3240

— 192.168.1.13

usbip dbg: usbip.c: 423 (query_exported_devices) exportable 2 devices

2-1: unknown vendor: unknown product (0529:0001)

: /sys/devices/pci0000:00/0000:00:11.0/0000:02:02.0/usb2/2-1

: unknown class / unknown subclass / unknown protocol (ff/00/00)

: 0 - unknown class / unknown subclass / unknown protocol (ff/00/00)

В результаті бачимо, що на сервері 192.168.1.13 готовий до підключення пристрій з bus-ID 2-1 - те, що ми налаштували в пункті 2. Пристроїв може бути і більше.

pathtousbip:> usbip . exe a < server ip > USB ID

USB-ID у разі 2-1.

Отримуємо багатобукв (листинг параметрів) та на завершення:

New usb device attached to usbvbus port 2

USB-пристрій має з'явитися в системі клієнта. Вікно терміналу бажано не зачиняти.

ПараметриUSBIP – windowsклієнта Usage: usbip

a, -attach Attach a remote USB device
-x, -attachall Attach all remote USB
devices on the specific host
-d, -detach Detach an imported USB
device
-l, -list List exported USB devices
p, -port List virtual USB port status
-D, -debug Print debugging information
-v, -version Show version
-?, -h, -help Print this help

Примітки: Виникли проблеми та їх вирішення:

1. Я використав версію системи 11.04 на ядрі 2.6. Після оновлення системи до версії 11.10 (ядро 3.0.4) usbip працювати перестав - видав помилку, що компонент не знайдено. Довелося відновлювати машину та відмовлятися від оновлень. З іншого боку, оскільки це службова вузькоспеціалізована машина та доступ до неї обмежений, це було визнано не критичним.

2. Спершу hasp-ключі відмовлялися підключатися до клієнта, видаючи помилку. У ході експериментів було встановлено, що спочатку необхідно запустити usbip-демон, а вже потім під'єднувати до машини ключі. Надалі помилки зникли, підключатись ключі стали в будь-якому порядку, повторити помилки не вдалося. Це якраз одна з тих дивин, про які я згадував.

3. Після перезавантаження ВМ клієнта - сервера 1С іноді не вдається підключити до нього деякі ключі - видає помилки. Можливо, це пов'язано з сесіями обміну з usb-пристроями, що зависли на сервері HASP. Лікується перезавантаженням сервера HASP та повторним прокиданням ключів на клієнт.

На сьогоднішній день існує досить багато способів прокинути USB-пристрій на інший комп'ютер або віртуалку через мережу.
З найбільш популярних - залізничні такі як AnywhereUSB і чисто програмні продукти, з яких я спробував сам: USB Redirector і USB/IP.
Я хотів би розповісти вам ще про одне цікавий спосібщо працює безпосередньо з емулятором QEMU.
Він також є частиною проекту spice, що офіційно підтримується RedHat.

UsbRedir, це відкритий протокол для прокидання usb-пристроїв tcp на віддалений віртуальний сервер, розроблений за підтримки RedHat у рамках проекту spice. Але як виявилося ним, можна цілком успішно користуватися і без spice. У ролі сервера виступає usbredirserver, який нишпорить usb-пристрій на певний порт, а як клієнт сам QEMU, який емулює підключення експортованого usb-пристрою в певний usb-контролер вашої віртуальної машини. Завдяки такому підходу як гостьова система може використовуватися абсолютно будь-яка ОС, так як вона навіть не знає, що пристрій є прокинутим віддалено, а вся логіка лягає на QEMU.

Для початку кілька слів про вищезазначені рішення

  • AnywhereUSB - досить непогане рішення, але дороге, і має неприємні глюки, наприклад буває якщо розшарована флешка відвалюється, то перепідключити її можна тільки фізично вийнявши і вставивши її.
  • USB/IP - OpenSource проект. Начебто був закинутий. За фактом, глючить досить сильно. При розриві з'єднання, машина частенько йде в цілковитий freezee, а windows показує BSOD
  • USB Redirector - чудова софтина. Для розшарування пристроїв з linux на linux безкоштовна, в інших випадках вже коштує грошей, не так багато як AnywhereUSB, але і не безкоштовно як хотілося б:)
Як видно є з чого вибрати, але ж нарешті спробуємо ще один спосіб - UsbRedir?

Налаштування віртуальної машини

Для того, щоб було куди підключати експортовані пристрої, на віртуальній машині потрібно створити необхідні usb-контролери:

  • uhci - для USB1.0
  • ehci - для USB2.0
  • xhci - для USB3.0
Для qemu (без libvirt)

Додати опції в команду запуску віртуальної машини:
-device ich9-usb-ehci1,id=ehci,addr=1d.7,multifunction=on -device ich9-usb-ehci1,id=uhci-1,addr=1d.0,multifunction=on,masterbus=ehci.0 ,firstport=0 -device ich9-usb-uhci2,id=uhci-2,addr=1d.1,multifunction=on,masterbus=ehci.0,firstport=2 -device ich9-usb-uhci3,id=uhci-3 ,addr=1d.2,multifunction=on,masterbus=ehci.0,firstport=4

Для libvirt
У вихідному файлі конфігурації віртуальної машини у вузлі <devices>видаляємо всі USB контролери та додаємо наступний блок:

До речі, якщо ви використовуєте spice, то додавши до контролерів ще 3 спеціальних девайса, стане можливе прокидання usb-пристроїв з клієнта spice на сервер.

Приклад під спойлером

Для qemu
Додаємо наступні опції до команди запуску віртуальної машини, крім контролерів, визначених нами раніше:
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=3 -chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev= =usbredirdev2,debug=3 -chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3,debug=3
Для libvirt
У вихідному файлі конфігурації віртуальної машини у вузлі <devices> додаємо наступні опції, крім контролерів, визначених нами раніше:

Тепер все готове для здійснення прокидання.

Запуск сервера

Пакет usbredirserver можна знайти у стандартних репозиторіях практично у всіх популярних дистрибутивах linux.

Вставляємо флешку в комп'ютер, дивимося висновок usb-пристроїв:
$ lsusb ... Bus 003 Device 011: ID 125f:c82a A-DATA Technology Co., Ltd. ...

Бачимо, що пара vendorid:prodid дорівнює 125f:c82a, а ядро ​​визначило флешці 003-001 usbbus-usbaddr відповідно.

Тепер давайте розшаримо її на 4000 портів:

# Використовуючи пару vendorid:prodid $ usbredirserver -p 4000 125f:c82a # Використовуючи пару usbbus-usbaddr $ usbredirserver -p 4000 003-011

Підключення пристрою до віртуальної машини

Через опції під час запуску ВМ

Пристрій, який потрібно підключити до ВМ, можна вказати при запуску, додавши наступні опції в команду запуску.

Для qemu
-chardev socket,id=usbredirchardev1,port=4000,host=192.168.1.123 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,bus=ehci.0,debug=4
Для libvirt
Цей блок розміщується перед тегом </devices>, поруч із контролерами визначеними нами раніше:
Його так само можна виконати командою virsh attach-device

Або через qemu-monitor

Заходимо на гіпервізор і в qemu-monitor нашої машини виконуємо наступні команди:
# Додаємо наш пристрій chardev-add socket, id = usbredirchardev1, port = 4000, host = 192.168.1.123 # Підключимо його в ehci контролер (USB-2.0) device_add usb-redir, chardev = usbredirchardev1, id = usbre 0, debug = 4
Щоб відключити флешку достатньо такої команди:
device_del usbredirdev1

На цьому все, після цих кроків ваша ВМ побачить вашу флешку і зможе з нею працювати.

Якщо пристроїв багато і всі вони однакові

Ось тут виникло цікаве завдання, як прокинути кілька однакових девайсів на різні ВМ?
При цьому, варто відзначити, всі пристрої мають однакову пару vendorid: prodid, а пара usbbus-usbaddr зовсім не постійна, варто тільки вийняти і вставити пристрій, так він відразу поміняє свій usbaddr.

Я вирішив її за допомогою udev.
До речі, якщо ви не зовсім розумієте як працює udev, на Debian Wiki є класна

І так приступимо

Для початку нам треба дізнатися серійник нашого пристрою, за яким і ідентифікуватимемо його в udev:

Запустимо udev-монітор:
$ udevadm monitor --environment --udev
І вставимо наш пристрій, після цього ми відразу побачимо список змінних цього пристрою, які udev люб'язно ініціалізував для нас:
... UDEV add /devices/virtual/bdi/8:16 (bdi) ACTION=add DEVPATH=/devices/virtual/bdi/8:16 ID_SERIAL_SHORT=11C130317234004B SEQNUM=4352 SUBSYSTEM=bdi USEC_IN
Інформацію про серійник та інші атрибути можна отримати й іншим способом, але варто враховувати, що для написання правил ми будемо використовувати саме змінні з команди вище, а не атрибути з команди нижче. В іншому випадку не буде відпрацьовувати тригер remove при відключенні пристрою.
$ udevadm info -a -n /dev/bus/usb/003/011 | grep "(serial)"

Тепер створюємо файл /etc/udev/rules.d/99-usb-serial.rules і запишемо в нього такі правила:
ACTION=="add", ENV(ID_SERIAL_SHORT)="11C130317234004B", RUN+="/usr/bin/usbredirserver -p 4000 $attr(busnum)-$attr(devnum)" ACTION=="remove", ENVID )="11C130317234004B", RUN+="/usr/bin/fuser -k 4000/tcp"

Перезавантажимо udev-правила:
$ udevadm control --reload-rules
Готово, тепер при підключенні нашого пристрою, воно буде автоматично нишпорити на потрібний нам порт, а при відключенні usbredirserver буде припиняти свою роботу.
За аналогією додаємо й інші пристрої.

На цьому все. Дякую за проявлений інтерес:)

USB Network Gate — програма, яка дозволяє користувачам підключати USB-пристрої, підключені до інших комп'ютерів, використовуючи канали IP.

На ринку існують різні реалізації віддаленого підключення USBпристроїв, як апаратні, і програмні. Деякі з них вимагають від користувачів певних знань та навичок, в деяких випадках налаштування може тривати багато часу. USB Network Gate здивував мене простотою. Скачав програму, встановив, натиснув кнопку Share і пристрій відразу доступно для підключення на віддаленій машині зі встановленим клієнтом.

USB Network Gate може виявитися незамінним, наприклад при використанні USB токенівна сервері RDP програма дозволяє налаштувати монопольний доступ до пристроїв для окремого користувача віддаленого робочого столу, ізолюючи його від інших користувачів. Програму можна також використовувати у віртуальному середовищі, якщо з якихось причин пристрій неможливо підключити безпосередньо. Існують версії для Windows, Linux (RPM та Deb пакети), Apple OS X і що особливо цікаво для Android. Тепер про те, як це працює.

Сервер

Програма є одночасно сервером і клієнтом. При запуску за промовчанням показує всі USB-пристрої, підключені до комп'ютера. Але можна відображати та налаштовувати загальний доступдо всіх портів.

Є можливість налаштування з'єднання окремо для кожного пристрою чи порту, дозволити з'єднання лише для певної адреси. Для захисту з'єднання передбачено авторизацію та шифрування.


Клієнт

При використанні USB Network Gate як клієнта, програма сканує локальну мережуна наявність серверів відображає всі доступні для підключення пристрою. Якщо сервер знаходиться в іншій підмережі, наприклад, при з'єднанні через VPN, можна додати його за допомогою кнопки “Add server”. Після того, як я відкрив доступ до принтера, він з'явився у списку доступних для підключення на моєму MacBook. Крім принтера, я підключав USB жорсткий дискз розділами HFS+, він також підключився, але розділи монтувалися близько трьох хвилин, мабуть через їх великий обсяг.

Резюме

Trial версія дозволяє відкрити доступ тільки до одного пристрою, зареєстрована - залежно від рівня ліцензій, від одного за $89, 95 до необмеженого за $699,95 . Якщо у вас є необхідність швидко підключити пристрій через мережу, USB Network Gate те, що вам потрібно, особливо якщо у вас немає сильних знань в області комп'ютерного обладнання.



Розповісти друзям