Проброс usb по сети с минимальными задержками. Железкой по сети. Пробрасываем USB-устройства, видеокарту, звуковуху и диски на удаленную машину. Установка Usb Newtork Gate

Очень мощный инструмент в умелых руках. По различным техническим причинам виртуальная машина не имеет прямого доступа к USB-диску по умолчанию. В этой статье разбираемся, как пробросить USB-диск в виртуальную машину Hyper-V. Реализация задумки будет несложной, можно сказать, в два клика. Никаких дополнительных программ , как иногда советуют диванные «гуру» не потребуется, используем свои личные руки и ничего более.

ВАЖНО. Сменные, то есть removable-устройства мы прокинуть в ВМ не сможем, хотя и есть некоторые ухищрения на этот счёт, но сейчас не об этом. Наш алгоритм работоспособен только для USB, которые показываются как fixed. Мы не сможем сделать снапшот для таких дисков.

Приступаем к манипуляциям


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

  1. Подключаемся к ВМ через rdp или просто открываем консоль. Заходим в управление дисками. Если новый на месте, значит мы всё делаем правильно. Проверяем в сети ли он. Если нет, то исправляем это, как и раньше, вызовом контекстного меню . Точек монтирования и букв наши разделы не имеют, надо это дело исправлять. Кликаем на любой из разделов правой кнопкой и выбираем пункт «Изменить букву диска или путь к нему…». Выбираем любую свободную.

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

На сегодняшний день существет довольно много способов пробросить 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 будет прекращать свою работу.
По аналогии добавляем и остальные устройства.

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

Один из читателей блога - 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, которая декларируется как наименее требовательная к ресурсам) как наиболее простую (для меня) систему: ставится без каких-либо проблем, автоматически подцепляет новые подключаемые USB устройства, после установки по умолчанию инсталлированы необходимые компоненты, кроме того, 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 a 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. «Мастер готов к установке нового оборудования» -> Выбрать «Далее» -> Готово».

Для Window 7 (и 2008r2):

1. Для разрешения установки неподписанных драйверов: запускаем cmd от
администратора и выполняем «bcdedit /settestsigningon».

2. Распаковываем файлы в локальную папку..

3. Открываем «Диспетчер Устройств».

4. Правой кнопкой на «имя компьютера» -.«Установить старое устройство» (или выбрать в меню «Действие»).

5. В открывшемся Окне Приветствия Мастера жмем «Далее».

6. Выбрать «Установка оборудования, выбранного из списка вручную» -> «Далее».

8. Выбрать «Установить с диска», -> «Просмотр», выбрать папку с разархивированным драйвером -> «ОК».

10. «Мастер готов к установке нового оборудования» -> Выбрать «Далее» -> «Готово».

Все указанные действия также описаны в идущем с пакетом USBIP файле «usage» на английском языке.

· Подключаем 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. Устройств может быть и больше.

path - to - usbip :> 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С иногда не получается подключить к нему некоторые из ключей – выдает ошибки. Возможно, это связано с зависшими на сервере HASP сессиями обмена с usb-устройствами. Лечится перезагрузкой сервера HASP и повторным пробросом ключей на клиент.

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 American Power Conversion Uninterruptible Power Supply Bus 003 Device 003: ID 051d: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, 480M |__ Port 4: Dev 2, If 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

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

Добрый день, амигос, рад, что ты заглянул ко мне на сайт, сегодня мы рассмотрим такой вопрос, как организовать usb по сети и, как это использовать в виртуализации. Тема довольно актуальная, и встречается такая задача все чаще. Особенно у тех компаний, где есть инфраструктура удаленных рабочих столов RDS с 1С приложениями, Directum или Tessa.

Usb через сеть

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

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

К сожалению, у некоторых гипервизоров, нет возможности пробрасывать на прямую с сервера USB устройства. Примером может служить Hyper-V от компании Microsoft, который с 2008 года до сих пор не несет в себе такую возможность в Windows Server 2008R2, хотя в 2012 R2, попытки уже предприняты, в отличии от компании vMvare, которая это позволяет и я уже рассказывал как пробросить USB модем в vmware esxi .

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

Суть проброса USB по локальной сети. Есть устройство AnywhereUSB - это небольшой сетевой usb хаб. Ниже примерные модели, представленные на рынке.

  • AnywhereUSB /2 – 2 порта USB, самая простая из модельного ряда

  • AnywhereUSB/ 5 – 5 портов USB, тут уже может удовлетворить потребности средней компании.

  • AnywhereUSB /14 – 14 портов USB, самая топовая мне она нравится больше всего, но и она не лишена своих косяков. Бывают случаи, что она может зависнуть, и представьте, что все 14 USB-токенов, становятся не доступными, народ на терминальных фермах негодует, бизнес теряет деньги, или вот еще распространенная ошибка, когда у вас в системе не происходит подключение к ключу, и вы видите в утилите сообщение с содержимым " ". Но все же аппаратные решение предоставления USB по локальной сети, в разы стабильнее, программных.

Подключение USB через сеть, можно так же осуществлять и через немецкое оборудование компании SEH, например, но в отличии от DIGI, оно еще работает и с LINUX платформами, я таким образом пробрасывал токен в CentOS 7, очень удобно. Он стоит чуток подороже, своего конкурента, но оно того стоит. Его внешний вид представлен на фото ниже. Он так же имеет до 14 USB портов.

Настройка AnywhereUSB

Давайте рассмотрим, как настраивается железка, для того, чтобы сделать доступ юсб по сети. Вот, как это будет выглядеть схематично. У вас есть разного рода USB устройства или ключи безопасности, которые вы подключаете в один из 14 портов, далее устройство проксирует трафик по локальной сети до них, с помощью специального программного обеспечения, на стороне клиента.

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

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

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

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

Как понимаете самый правильный способ это статический ip адрес. Задается он в пункте Network Configuration. Заведите себе правило, везде на серверах использовать статику, чтобы все ваши клиенты подключив USB Токен по сети, не бегали в догонялки за ним, если вдруг на сервере стоит динамическая адресация.

В этом же мню очень удобно задавать сетевые службы, доступные на нем. Обратите внимание на стандартные порты подключения. При желании вы их можете переназначить. По опыту могу сказать, что Telnet работает стабильнее, чем тот же ssh. Вообще старайтесь, минимизировать количество служб управления, либо же изолируйте ее с помощью VLAN .

Самым важным шагом в настройке USB-ключей предоставляемых по сети различным серверам, это задание порт-групп (RealPort USB). По сути RealPort USB это группы объединяющие физические порты с USB ключами в логические группы, для проброса нескольких токенов на один сервер или виртуальную машину. Без создания RealPort групп, вы не сможете подключить ни одного клиента к вашему USB хабу.

Создаются они в меню "Applications - RealPort USB". Сам алгоритм, очень простой, слева у вас будут реальные USB порты, идущие по порядку, чуть правее, вы указываете в какой группе по счету должен быть, тот или иной порт. Не забываем вписывать описание, оно очень пригодится, можно задавать, только латинские буквы. После этого, вы можете считать, что проброс USB по локальной сети, осуществлен процентов на 80.

Не забывайте включать галку "Dynamic Group Assignment (DGA)", чтобы порты применялись сразу, без перезагрузки DIGI.

На вкладке "Conection Management" можно посмотреть текущие подключения. По сути это все клиенты, кто подключил ваш USB девайс по локальной сети.

Для увеличения безопасности, вы можете включить защиту паролем (Секретный ключ), можно это сравнить с двухфакторной аутентификацией. Делается это в пункте "RealPort", включите функцию "Enable RealPort Authentication" и введите секретное слово в Shared Secret.

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

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

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

Регулярно возникает задача подключения USB-устройства к удаленному ПК через локальную сеть. Под катом изложена история моих поисков в этом направлении, и путь к готовому решению на базе open-source проекта с описанием заботливо установленных различными людьми на этом пути препятствий, а также способов их обхода.

Часть первая, историческая

Если машина виртуальная - всё это несложно. Функционал проброса USB от хоста в виртуалку появился еще в VMWare 4.1. Но в моём случае ключик защиты, опознающийся как WIBU-KEY, нужно было в разное время подключать к разным машинам, и не только виртуальным.
Первый виток поиска в далеком 2009-м году привел меня к железке под названием TrendNet TU2-NU4
Плюсы:
  • иногда даже работает
Минусы:
  • работает не всегда. Допустим, ключ защиты Guardant Stealth II через неё не заводится, ругаясь ошибкой «устройство не может быть запущено».
  • ПО для управления (читай - монтирования и размонтирования USB-устройств) убого до крайности. Ключи командной строки, автоматизация - не, не слышали. Всё только руками. Кошмар.
  • управляющее ПО ищет саму железку в сети широковещанием, поэтому работает это только в пределах одного broadcast-сегмента сети. Указать IP-адрес железки руками нельзя. Железка в другой подсети? Тогда у вас проблема.
  • разработчики забили на устройство, слать баг-репорты бесполезно.
Второй виток случился во времена уже не столь отдаленные, и привел меня к теме статьи - . Привлекает открытостью, тем более, что ребята из ReactOS подписали им драйвер для Windows, так что теперь даже на x64 всё работает без всяких костылей вроде тестового режима. За что команде ReactOS огромное спасибо! Звучит всё красиво, попробуем пощупать, так ли оно на деле? К сожалению, сам проект тоже подзаброшен, и на поддержку рассчитывать не приходится - но где наша не пропадала, исходник есть, разберемся!

Часть вторая, серверно-линуксовая

Сервер USB/IP, расшаривающий USB-девайсы по сети, может быть поднят только в Linux-based OS. Ну что ж, линукс так линукс, устанавливаем на виртуалку Debian 8 в минимальной конфигурации, стандартное движение руками:

Sudo apt-get update sudo apt-get upgrade sudo apt-get install usbip
Установились. Дальше интернет подсказывает, что нужно бы загрузить модуль usbip, но - здравствуйте, первые грабли. Нет такого модуля. А всё оттого, что большинство руководств в сети относятся к более старой ветке 0.1.x, а в крайней 0.2.0 модули usbip имеют другие названия.

Поэтому:

Sudo modprobe usbip-core sudo modprobe usbip-host sudo lsmod | grep usbip
Ну и добавим в /etc/modules такие строки, чтобы загружать их автоматически при старте системы:

Usbip-core usbip-host vhci-hcd
Запустим сервер usbip:
sudo usbipd -D
Дальше всемирный разум нам подсказывает, что в комплекте с usbip идут скрипты, позволяющие нам управлять сервером - показать, какое устройство он будет расшаривать по сети, посмотреть статус, и так далее. Тут нас поджидает еще один садовый инструмент - эти скрипты в ветке 0.2.x, опять же, переименованы. Получить список команд можно с помощью

Sudo usbip
Почитав описание команд, становится понятно, что для того, чтобы расшарить требуемый USB-девайс, usbip хочет узнать его Bus ID. Уважаемые зрители, на арене грабли номер три: тот Bus ID, который выдаст нам lsusb (казалось бы, самый очевидный путь) - ей не подходит! Дело в том, что железки вроде USB-хабов usbip игнорирует. Поэтому, воспользуемся встроенной командой:

User@usb-server:~$ sudo usbip list -l - busid 1-1 (064f:0bd7) WIBU-Systems AG: BOX/U (064f:0bd7)
Примечание: здесь и далее в листингах я буду всё описывать на примере моего конкретного USB-ключа. Ваши название железки и пара VID:PID могут и будут отличаться. Моя называется Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Теперь мы можем расшарить наше устройство:

User@usb-server:~$ sudo usbip bind --busid=1-1 usbip: info: bind device on busid 1-1: complete
Ура, товарищи!

User@usb-server:~$ sudo usbip list -r localhost Exportable USB devices ====================== - localhost 1-1: WIBU-Systems AG: BOX/U (064f:0bd7) : /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1: Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)
Троекратное ура, товарищи! Сервер расшарил железку по сети, и мы можем её подключать! Осталось только дописать автозапуск демона usbip в /etc/rc.local

Usbipd -D

Часть третья, клиентская и запутанная

Подключить расшаренное устройство по сети к машине под управлением Debian я попробовал сразу же на том же сервере, и всё прекрасно подключилось:

Sudo usbip attach --remote=localhost --busid=1-1
Переходим к Windows. В моем случае это был Windows Server 2008R2 Standard Edition. Официальное руководство просит сначала установить драйвер. Процедура прекрасно описана в прилагаемом к windows-клиенту readme, делаем всё как написано, всё получается. На XP тоже работает без каких-либо трудностей.

Распаковав клиент, пробуем примонтировать наш ключик:

C:\Program Files\USB-IP>usbip -a %server-ip% 1-1 usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1 usbip err: usbip_windows.c: 756 (query_interface0) recv op_common usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Ой-ой. Что-то пошло не так. Используем навык гугла. Встречаются отрывочные упоминания, что что-то там не так с константами, в серверной части разработчики при переходе на версию 0.2.0 изменили версию протокола, а вот в клиенте под Win сделать это забыли. Предлагаемое решение - поменяйте константу в исходнике и пересоберите клиент.

Вот только очень мне не хочется качать Visual Studio ради этой процедуры. Зато у меня есть старый-добрый Hiew. В исходнике константа объявлена как двойное слово. Поищем в файле 0х00000106, заменяя на 0х00000111. Не забываем, порядок байт обратный. Итог - два совпадения, патчим:

00000CBC: 06 11 00000E0A: 06 11
Ииии… да!

C:\Program Files\USB-IP>usbip -a %server-ip% 1-1 new usb device attached to usbvbus port 1
На этом можно было бы закончить изложение, но музыка играла недолго. Перезагрузив сервер, я обнаружил, что устройство на клиенте не монтируется!

C:\Program Files\USB-IP>usbip -a %server-ip% 1-1 usbip err: usbip_windows.c: 829 (attach_device) cannot find device
И всё. На это мне не смог ответить даже всезнающий гугл. А при этом команда отобразить доступные на сервере устройства вполне корректно показывает - вот он, ключ, можете монтировать. Пробую примонтировать из-под Linux - работает! А если теперь попробовать из-под Windows? О ужас - это работает!

Грабли последние: что-то там в коде сервера не дописано. При расшаривании устройства он не считывает с него количество USB-дескрипторов. А при монтировании устройства из-под Linux, это поле заполняется. К сожалению, с разработкой под Linux я знаком на уровне «make && make install». Поэтому проблема решена с помощью довольно грязного хака - добавлением в /etc/rc.local

Usbip attach --remote=localhost --busid=1-1 usbip port usbip detach --port=00

Часть заключительная

После некоторых мытарств, это работает. Желаемое получено, теперь ключ можно примонтировать к любому ПК (и размонтировать, конечно же, тоже), в том числе - за пределами широковещательного сегмента сети. Если хочется - можно это сделать с помощью скрипта командной оболочки. Что приятно - удовольствие абсолютно бесплатное.
Надеюсь, что мой опыт поможет хабражителям обойти те грабли, которые отпечатались у меня на лбу. Спасибо за внимание!

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

В этой статье мы рассмотрим несколько программ позволяющих реализовать такую возможность. Одной из них будет USB Network Gate. Это платная программа, но она позволяет расшарить устройства usb по сети в Linux очень быстро и просто. У программы удобный графический интерфейс и очень простая настройка. Также рассмотрим свободную альтернативу usbip, с помощью которой можно расшарить usb по сети в терминале. Начнем с коммерческой программы.

Usb Network Gate - это программа от Elitma Software, позволяющая получить доступ к любым USB устройствам подключенным к вашему компьютеру через сеть. При чем это может быть не только локальная сеть но и интернет.

У программы кроме версии для Linux есть версии для Windows, Mac и даже приложение для Android. Лицензия с возможностью передать по сети один USB порт стоит $89.99 но у нее есть пробный период размером 14 дней. После окончанию пробного периода вы не можете расшаривать свои устройства, но зато можете подключать уже розданные.

Установка Usb Newtork Gate

Установка USB Network Gate в Linux выполняется очень просто. Скачать установочный пакет для своего дистрибутива можно на официальном сайте .

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

После завершения загрузки, для установки перейдите в папку с файлом и выполните:

dpkg -i usb_network_gate.deb

Для Ubuntu или:

rpm -i usb_network_gate.rpm

Для RedHat и других использующих rpm систем. Возможно для работы программы понадобится библиотека libudev.so.0, если такой версии библиотеки нет в вашей системе создайте ссылку на libudev.so.1 следующей командой:

ln -s /usr/lib/libudev.so.1 /usr/lib/libudev.so.0

Раздача USB устройств по сети

Запустить программу можно из главного меню или выполнив в терминале:

Главное окно программы выглядит вот так:

Чтобы расшарить USB устройство по сети достаточно кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт Share.

В открывшимся окне можно увидеть информацию об устройстве и указать дополнительные настройки, например стоит ли использовать шифрование, сжатие или пароль для аутентификации соединения:

На удаленной машине, чтобы подключить наше устройство, сначала нужно его найти. Для этого перейдите на вкладку Remote USB Devices и нажмите кнопку Find:

В открывшимся окне, если компьютеры находятся в локальной сети можно просто нажать Find All, если же нет нужно указать ip адрес компьютера на котором расшаренно USB устройство, а затем нажать кнопку Find :

Чтобы подключить USB просто выберите в контекстном меню опцию Connect:

Чтобы его отключить просто выберите опцию Disconnect .

USBIp

Это бесплатная утилита с открытым исходным кодом для доступа к USB устройствам по сети. Она во многом проигрывает USB Network Gate, в основном через отсутствие графического интерфейса и сложной настройки.

Установка usbip

Устанавливается программа из официальных репозиториев:

sudo apt-get install linux-tools-generic

Или для Red Hat:

sudo yum install usbip

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

Настройка сервера

Загрузим нужные модули ядра:

sudo modprobe usbip-host

$ sudo modprobe usbip-core

Запускаем демон:

Программа готова к использованию. Теперь с помощью lsusb находим наше устройство:

Bus 002 Device 014: ID 13fe:5500 Kingston Technology Company Inc

Нам нужна пара VendorID:DeviceID, вот она: 13fe:5500

Теперь выполните:

sudo usbip list -l

Busid 2-2 (13fe:5500)
2-2:1.0 -> usb-storage

Busid 4-1 (0458:0708)
4-1:1.0 -> usbhid
4-1:1.1 -> usbhid

Busid 4-3 (09da:9090)
4-3:1.0 -> usbhid
4-3:1.1 -> usbhid
Программа просканирует все подключенные устройства и покажет и в нужном формате, вместе с их busid. Опция -l указывает что нужно сканировать локальные устройства. Как видите наше USB устройство первое в списке.

Теперь, когда мы знаем busid можно расшарить USB устройство по сети в Linux:

usbip bind -b 2-2

usbip: info: bind device on busid 2-2: complete

Готово, наше USB устройство расшарено, осталось подключить его на клиентской машине. Смотрим список доступных устройств:

sudo usbip list -r 192.168.56.1

Exportable USB devices
======================
- 192.168.56.1
2-2: Kingston Technology Company Inc. : unknown product (13fe:5500)
: /sys/devices/pci0000:00/0000:00:13.2/usb2/2-1
: (Defined at Interface level) (00/00/00)

После -r нужно указать ваш ip адрес. Осталось подключить наше устройство:

sudo usbip attach -r 192.168.56.1 -b 2-2

Чтобы отключить устройство нужно сначала узнать его порт:

Затем отключаем:

sudo usbip detach 00

И прекращаем шаринг устройства по сети на сервере:

sudo usbip unbind -b 2-2

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

Целый класс подобных устройств существует очень давно. Ещё лет десять назад с технологией USB-over-IP можно было столкнуться в некоторых домашних роутерах, где она использовалась для удалённого доступа к принтеру. Именно в таком качестве они нередко предлагаются и сейчас, благо USB 2.0 и стомегабитной сети хватает для этих нужд. Есть и чисто программные решения, которые пробрасывают USB-порты той машины, где запущен сервер. Удивляет этот сегмент двумя явлениями. Во-первых, цена за порт в среднем составляет около $50 и для программных, и для аппаратных решений. Во-вторых, почти нет устройств с USB 3.0.

Вообще говоря, проброс по сети USB-интерфейса, особенно современных стандартов, не такая уж тривиальная задача. Сама шина требовательна даже не к полосе пропускания — всё равно всё упрётся в сетевой интерфейс до 1 Гбит/с (125 Мбайт/с), а к задержкам, которые во внешней сети контролировать трудно. Так что организовать USB-over-IP просто, а вот сделать это качественно — уже нет. Компания SEH давно работает над этой задачей. SEH myUTN-2500 — это трёхпортовый сервер, который предоставляет удалённый доступ по локальной и глобальной (так заявляется) сети к портам USB 3.0. Кроме того, он имеет множество функций, необходимых в корпоративной среде: контроль доступа и шифрование, мониторинг и удалённое управление, совместимость с целым зоопарком ОС и широкие сетевые возможности.

⇡ Комплектация и внешний вид

SEH myUTN-2500 внешне представляет собой небольшую лёгкую коробочку из матового синего пластика с габаритами 99 × 140 × 32 мм и массой 160 г. Вентиляционных отверстий нет, но устройство во время работы всё равно сильно не греется. Оно предназначено только для использования внутри помещений с температурой окружающей среды от 5 до 40 °C и относительной влажностью 20-80 %. На передней панели находятся семь светодиодов, указывающих на состояние устройства в целом и активность сети и портов USB. Все индикаторы маленькие и неяркие. На днище есть информационная наклейка, а также очень небольшие, но на удивление цепкие резиновые ножки по углам.

Сзади находятся три порта USB 3.0, разъём RJ-45 для гигабитного сетевого подключения, утопленная внутрь корпуса кнопка сброса настроек и гнездо для кабеля питания. Третий USB-порт также можно использовать для подзарядки других устройств, он отдаёт ток 1,5 А. SEH myUTN-2500 поддерживает одновременную работу до 12 USB-устройств, но тут есть одна особенность — для составных USB-устройств или хабов нельзя выбрать отдельные VID/PID для проброса клиенту: будет отдан именно физический порт USB целиком, а вместе с ним и все его «подчинённые», виртуальные и реальные. Одновременно myUTN-2500 могут использовать до 16 пользователей, что явно избыточно.

Вместе с устройством поставляется стандартный набор: документация, гарантийный талон и блок питания. БП довольно крупный (98 × 49 × 33 мм), зато универсальный: вход AC 100-240 В, 50/60 Гц; выход DC 12 В, 3 А. У блока есть стандартное гнездо C8, в комплекте идёт подходящий кабель длиной 1,7 м с вилкой типа C на конце, а от самого БП тянется шнур длиной чуть больше метра. В режиме ожидания myUTN-2500 потребляет от блока питания около 0,2 А, а при полной нагрузке на все три USB-порта — около 2,4 А. Формально производитель предоставляет на устройство гарантию 3 года, а ещё 2 года сверх этого можно получить при регистрации на сайте, но в России, видимо, придётся уточнять гарантийные обязательства у продавца.

⇡ Технические характеристики

Технические характеристики SEH myUTN-2500 USB Deviceserver
Чипсет/контроллер н/д
Память н/д
Интерфейсы 1 × 10/100/1000 Мбит/с Ethernet, 3 × USB 3.0 / 1 × CDP
Скорость 1 × USB до 100 Мбайт/с; 3 × USB до 30 Мбайт/с каждый
Устройства До 12 устройств, включая составные; до 16 пользователей
Индикаторы Питание, состояние, активность, сеть
Аппаратные кнопки Сброс настроек
Размеры (Ш × Д × В) 99 × 140 × 32 мм
Масса 160 г
Питание DC 12 В 3 А
Условия t от 5 до 40 °C; отн. влажность 20-80%; только внутри помещений
Гарантия 3 года
Цена € 200
Возможности
Сеть Static IP/DHCP/BOOTP/Zeroconf (Bonjour); IPv4/IPv6; VLAN; SNMPv1/v3
Доступ Ключ USB-порта; логин/пароль или 802.1x EAP-MD5/TLS/TTLS/FAST/PEAP
Защита Фильтр VLAN, IP, MAC, VID/PID; блокировка HID-USB
Шифрование Трафик: SSL 3.0, TLS 1.0/1.1/1.2; импорт сертификатов S/MIME, CA, PKCS#12
Управление/уведомления Веб-интерфейс; SNMPv1/v3 MD5/SHA + DES/AES, MIB; SMTP/POP3 (с ЭЦП)
Мин. версия ОС Windows XP/Server 2003; MacOS X 10.8.x; Linux 2.6.32

⇡ Веб-интерфейс и настройки

Управление устройством осуществляется в первую очередь через веб-интерфейс, который доступен на нескольких языках, но вот русского среди них нет. Для каждого параметра есть пусть и краткое, но понятное описание во . IP-адрес устройство получает автоматически по DHCP/BOOTP или посредством Bonjour (Zeroconf). По умолчанию интерфейс доступен по HTTP и по HTTPS, но без авторизации. На главной странице собраны основные сведения о состоянии myUTN-2500: адрес, версия прошивки, имя, список устройств и подключённых к ним клиентов. Для удобства можно присвоить собственное имя каждому USB-порту, а также указать имя хоста, его короткое описание и контактные данные (техподдержки или сетевого администратора, например). Все настройки можно сохранить в отдельный файл, а потом при необходимости импортировать его.

Базовые настройки SEH myUTN-2500

SEH myUTN-2500 поддерживает работу в сетях IPv4 и IPv6. Для IPv4 также доступна работа в VLAN, причём отдельно можно запретить или разрешить управление настройками только через ту же VLAN, где находится устройство. Отдельно можно указать до трёх VLAN-сетей, где размещены клиенты. Причём доступ к конкретному USB-порту сервера можно специально разрешить только из одной VLAN-сети, запретив таким образом обращения от любых других клиентов. Есть и традиционные белые списки из IP-адресов или подсетей и MAC-адресов — всего до 16 правил в сумме. Для SNMPv3 отдельно задаются права чтения/записи плюс можно выбрать защиту MD5/SHA + DES/AES. Для массового управления устройствами по SNMP SEH предлагает отдельную утилиту NetTool и готовые MIB-файлы.

Настройки сети SEH myUTN-2500

Для базовых событий — перезагрузки устройства, подключения/отключения USB-устройства и (дез)активации порта USB — предусмотрена рассылка уведомлений по e-mail (POP3 и SMTP) и SNMP. Кроме того, myUTN-2500 может регулярно отправлять по почте отчёт о своём текущем состоянии двум получателям. Для писем также доступны шифрование и цифровая подпись. Сертификаты S/MIME, CA, PKCS#12 можно импортировать, так как изначально устройство содержит только самоподписанные от производителя. Контроль доступа возможен либо встроенными средствами (администратор и обычный пользователь с паролями), либо через внешний RADIUS-сервер по EAP-MD5/TLS/TTLS/FAST/PEAP.

Настройки безопасности SEH myUTN-2500

Для защиты работы непосредственно с USB-устройствами есть несколько функций. Во-первых, весь трафик между клиентом и myUTN-2500 может быть зашифрован с помощью SSL 3.0 или TLS 1.0/1.1/1.2. Конкретный набор алгоритмов и длины ключей задать нельзя, доступен только выбор уровня шифрования — малый, средний, высокий. Во-вторых, для каждого USB-порта можно задать собственный ключ доступа (по сути — пароль) и/или разрешить работу только с конкретными VID и PID USB-устройств, а также разрешить доступ из одной конкретной VLAN-сети, о чём уже говорилось выше. В-третьих, для всех USB-портов разом есть опция запрета использования HID-устройств, что очень важно, так как позволяет избежать атак, когда к порту подключается, например, эмулятор клавиатуры, имитирующий набор текста и ввод сочетаний клавиш.

⇡ Работа с устройством

Работа с myUTN-2500 после первоначальной настройки в веб-интерфейсе проста донельзя. Достаточно установить программу SEH UTN Manager, с GUI или без. Дополнительно будут установлены служба и драйвер. Программа имеет версии для Windows XP/Vista/7/8/10 и серверных вариантов Windows, для Mac OS X начиная с OS X 10.8, а также DEB- и RPM-пакеты для дистрибутивов Linux с ядром 2.6.32 или более новым. Отдельно оговаривается, что для OS X старше 10.11.2 поддержка USB-устройств ограничена. Впрочем, с каждым новым релизом ПО разработчики улучшают совместимость.

После запуска UTN Manager автоматически сканирует сети на всех доступных интерфейсах и предлагает запомнить список всех обнаруженных устройств myUTN. Для каждого из них показывается список подсоединённых USB-устройств и их состояние. За пару кликов можно подключить любое из них. Сама ОС определит новое подключённое устройство так, будто оно было воткнуто в реальный USB-порт ПК или сервера, — останется только доустановить необходимые драйверы и начать работу с ним.

Программа UTN Manager, как и веб-интерфейс, не имеет поддержки русского языка, хотя в данном случае это не проблема, так как настроек и функций в программе минимум. Доступно автомонтирование USB-устройств, в том числе при подключении к другому порту myUTN. Есть возможность простейшей автоматизации — например, монтирование USB с одновременным (или с заданной задержкой) запуском выбранного пользователем исполняемого файла и автоматическое размонтирование после завершения работы программы. Можно и просто задать период автоотключения порта.

⇡ Тестирование

В последней версии прошивки и ПО для Windows, которые вышли пару месяцев назад, была значительно переработана архитектура драйверов. В частности, добавилась поддержка чувствительных к задержке и полосе пропускания USB-устройств для передачи, к примеру, аудио- или видеопотока. Увы, выяснилось, что единственный более-менее подходящий кандидат на роль тестового образца — веб-камера производства Microsoft — самой Microsoft давно не поддерживается и драйверов для Windows 10 не имеет. Что ж, воспользуемся для проверки стандартным накопителем, который применяется в тестах роутеров: SSD Kingston SSDNow V+200 с одним NTFS-томом в боксе USB 3.0 LanShuo INIC-4009. К обычному домашнему роутеру myUTN-2500 и был подключён. Никаких настроек QoS или шейпинга не было.