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

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

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

Отже, маємо віртуальні машини – сервери 1С, підняті на MSWindowsServer 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-диска за промовчанням. У цій статті розуміємо, як прокинути USB-диск у віртуальну машину Hyper-V. Реалізація задуму буде нескладною, можна сказати, у два кліки. Жодних додаткових програмЯк іноді радять дивані «гуру» не потрібно, використовуємо свої особисті руки і нічого більше.

ВАЖЛИВО. Змінні, тобто removable-пристрою ми прокинути у ВМ не зможемо, хоча і є деякі хитрощі щодо цього, але зараз не про це. Наш алгоритм працює тільки для USB, які показуються як fixed. Ми не можемо зробити снапшот для таких дисків.

Приступаємо до маніпуляцій




ВАЖЛИВО. Не обов'язково відключати ВМ перед додаванням жорсткого диска. Для цього існує спеціальна технологія гарячого додавання та гарячого видалення.

  1. Підключаємось до ВМ через RDP або просто відкриваємо консоль. Заходимо в керування дисками. Якщо новий на місці, то ми все робимо правильно. Перевіряємо в мережі чи він. Якщо ні, то виправляємо це, як і раніше, викликом контекстного меню. Точка монтування і букв наші розділи не мають, треба цю справу виправляти. Клікаємо на будь-який розділ правою кнопкоюта вибираємо пункт «Змінити букву диска або шлях до нього…». Вибираємо будь-яку вільну.

Прокидання USB у віртуальну машину Hyper-V закінчено, тепер ми можемо його використовувати для своїх цілей.

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 те, що вам потрібно, особливо якщо у вас немає сильних знань в області комп'ютерного обладнання.

Дані інструкції вірні починаючи з 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 :0002 American Power Conversion Відсутня відсутність 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, 48 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

Ноутбуки