Usb проброс по сети сравнение программ. Использование бесплатного пакета USBIP для проброса USB внутрь виртуальных машин. Если устройств много и все они одинаковые.

Добрый день, амигос, рад что ты заглянул ко мне на сайт, сегодня мы рассмотрим такой вопрос, как организовать 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



Примечания: Возникавшие проблемы и их решение

Если у вас есть проблемы, ожидайте от меня всех ответов: «Я так сказал». В гипервизоре типа 2 операционная система управления устанавливается непосредственно на аппаратное обеспечение, а гипервизор - это еще одно приложение, которое работает внутри него.

Пример под спойлером

Гипервизоры типа 1 не являются приложениями. Это ядра, отличные от ядер в гостевых операционных системах. Гипервизор типа 2 представляет собой, по сути, прокладку приложения, которая притворяется, что обеспечивает корневое аппаратное устройство, что прекрасно, потому что оно не требует такой же степени изоляции, как гипервизор 1-го типа. Теоретически это звучит как нечто, что можно сделать, хотя это также похоже на грязный взлом и риск разделения изоляции. Но техническая осуществимость не имеет значения.

Настройка AnywhereUSB

Давайте рассмотрим как настраивается железка, для того чтобы сделать доступ юсб по сети.

Вот как это будет выглядеть.


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

Это не идеально, но лицензионные условия благоприятны для большинства, и он выполняет свою работу. Примечание. Четвертая опция, не изученная в этой статье, - это программные решения. Читатель Тим предложил одно из таких приложений, а также рассказал о своем опыте с ним. У вас никогда не будет никаких гарантий, где виртуальная машина будет работать от момента к моменту. В режиме «Живая миграция без общего доступа» даже отсутствие кластера больше не блокирует виртуальную машину для определенного хоста.

Способ 2: Протокол удаленного рабочего стола




Когда на виртуальной машине установлена ​​операционная система, она очень похожа на физическую машину. Таким образом, вы можете включить подключения удаленного рабочего стола в окне свойств системы.




Также есть отличный инструмент под названием «Диспетчер подключения к удаленному рабочему столу». Это своего рода багги и нестабильность, но его способность сохранять множество уникальных настроек соединения для удаленных хостов в иерархическом дереве делает его достойным второстепенных трудностей.

Для настройки устройства рассмотрим Web интерфейс - как наиболее удобный и простой вариант.

Управление IP адресом

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

Как включить расширенный режим сеанса




Это не функционально отличается от того, как мы подключаем устройства в сеансах удаленных сеансов в течение очень долгого времени.







Не требует подключения к сети непосредственно у гостя, только для хоста. . Вы можете обнаружить, что некоторые устройства не работают так же хорошо, как с гипервизорами типа 2; Другие могут вообще не работать. Он по умолчанию отключен для этих операционных систем. Чтобы включить расширенный режим сеанса.

Как понимаете самый правильный способ это статический ip адрес. Задается он в пункте Network Configuration.


В этом же мню очень удобно задавать сетевые службы, доступные на нем.


Рекомендации по покупке - инструменты для мониторинга производительности сети

Выберите локальный ресурс, который вы хотите использовать. . Чтобы выбрать локальный ресурс, например диск. Если вы продолжаете поддерживать периферийные устройства. Загрузить бесплатное руководство. Решения для мониторинга производительности сети должны соответствовать повышенной сложности сетей и повышенным требованиям пользователей и приложений.

Для начала несколько слов о вышеперчисленных решениях

  • Вы забыли ввести свой адрес электронной почты.
  • Этот адрес электронной почты не является действительным.
  • Вы достигли максимального количества символов.
  • Укажите адрес электронной почты компании.
Если вы находитесь за пределами Соединенных Штатов, вы соглашаетесь с тем, что ваша личная информация будет передана в Соединенные Штаты и обработана там. Поддержка таких периферийных устройств чрезвычайно важна для максимально комфортной работы с виртуальными рабочими столами. Без доступа к известным принтерам, портам и другим периферийным устройствам становится трудно установить прием для виртуальных рабочих столов.


На вкладке Conection Management можно посмотреть текущие подключения.



Если устройств много и все они одинаковые

Как администратор, вам нужно знать, какие внешние устройства находятся на рынке и как вы можете их поддерживать. Однако вы должны выполнять эту функцию с осторожностью. Каждый крупный продукт для виртуализации настольных компьютеров немного отличается поддержкой периферийных устройств.

Эта технология может использоваться с множеством сетевых опций. В медицинской области также поддерживаются мониторы артериального давления, датчики сердечного ритма и другие периферийные устройства. К ним относятся клавиатуры, мыши и смарт-карты. Неважно, как эти устройства подключаются к клиенту. Эти периферийные устройства просто работают в сеансах виртуального рабочего стола, потому что базовый протокол обеспечивает их поддержку.

Теперь, что дальше нужно сделать на виртуальной машине, тут все до безобразия логично, нужно поставить там драйвера от AnywhereUSB и задать ip адрес устройства. Как видите я уже подключил ее и у нее есть внутренний Ip адрес.


С помощью специальной утилиты, Anywhere View можно проверить доступность и занятость всех устройств. Пожалуй это самый простой и надежный метод проброса токенов, флешек и различных модемов в ваши виртуальные машины, сами устройства стоят по разному, но если вы уж потратились на софт и гипервизоры, думаю при необходимости купите и это:).

Также возможно использование технологий, предоставляемых производителем, которые менее напряжены в сети. Виртуальный рабочий стол может не справиться с большими задержками при доступе к этим устройствам. Это, в свою очередь, приводит к ошибкам, таймаутам и нестабильности.

Нестабильные виртуальные рабочие столы называются теми, где сеанс «удален» при выходе пользователя из системы. Информация из последнего сеанса не сохраняется. Это обстоятельство поражает сервер и соответствующие подсистемы. Для постоянных виртуальных рабочих столов пользователю всегда назначается одна и та же виртуальная машина при входе в систему.


На сегодняшний день существет довольно много способов пробросить 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-uhci1,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=usbredirchardev2,id=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=usbredirdev1,bus=ehci.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_INITIALIZED=189056149826 ...
Информацию о серийнике и других аттрибутах можно получить и другим способом, но стоит учитывать что для написания правил мы будем использовать именно переменные из команды выше, а не аттрибуты из команды ниже. В противном случае не будет отрабатывать триггер 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", ENV{ID_SERIAL_SHORT}="11C130317234004B", RUN+="/usr/bin/fuser -k 4000/tcp"

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

На этом все. Спасибо за проявленный интерес:)