- Настройка USB-сервера Ubuntu на базе usbip
- Установка и запуск
- Настройка клиента
- Автозапуск
- Автозапуск сервера
- Автозапуск клиента Windows
- Возможные проблемы
- 1. usbip_common_mod.ko and usbip.ko must be loaded
- 2. /usr/sbin/usbipd: No such file or directory
- 3. usbip: error: failed to open /usr/share/hwdata//usb.ids
- 4. usbip err . recv op_common
- 5. (attach_device) cannot find device
- 6. udev_device_new_from_subsystem_sysname failed
- USB over IP — аппаратное решение. Обзор и настройка.
- Обзор аппаратных устройств USBoverIP
- Обзор модельного ряда Digi AnywhereUSB
- Спецификация устройств, отличия
- Первоначальная настройка и управление устройствами
- Заключение
Настройка USB-сервера Ubuntu на базе usbip
В инструкции описан процесс настройки бесплатного решения для редиректа USB устройства с сервера на любой другой компьютер сети. Это может пригодиться, например, для проброса USB токена на виртуальную машину или несетевого принтера. В рамках примера сервер будет на Linux Ubuntu, клиент — на Windows (проверено на 7, 10, Server 2008 и 2012).
Установка и запуск
В Ubuntu установка инструмента проброса USB выполняется следующей командой:
apt-get install linux-tools-`uname -r`
* в моем случае была выполнена установка linux-tools-4.4.0-128-generic, где 4.4.0-128-generic — версия ядра, используемого в Ubuntu.
Подгружаем модули драйверов USB:
Запускаем usbip в качестве демона:
Смотрим список подключенных USB устройств:
root@usb:/usr/src# usbip list -l
— busid 2-1.3 (8564:1000)
Transcend Information, Inc. : JetFlash (8564:1000)
— busid 2-1.4 (1c4f:0026)
SiGma Micro : Keyboard (1c4f:0026)
Теперь можно расшарить флешку:
usbip bind -b 2-1.3
Должны увидеть на подобие:
usbip: info: bind device on busid 2-1.3: complete
Настройка клиента
Выполним настройку на базе операционной системы Windows.
Скачиваем драйвер и утилиту для Windows. Распаковываем архив usbip.zip.
Открываем диспетчер устройств (команда devmgmt.msc или правой кнопкой по Этот компьютер в проводнике — Управление — Диспетчер устройств).
Кликаем по Действие — Установить старое устройство:
Выбираем ручную установку устройства — показать все устройства — Установка с диска и выбираем файл USBIPEnum.inf (находится в каталоге usbip, который мы распаковали ранее).
Будет обнаружено устройство USB/IP Enumerator — кликаем Далее, чтобы его установить. Мы должны его увидеть среди системных устройств.
Теперь открываем командную строку (cmd.exe) и переходим в распакованный каталог, например:
* где C:\Users\user\Downloads\usbip — полный путь до папки.
Смотрим список расшаренных USB устройств на сервере:
usbip -l 192.168.0.15
* где 192.168.0.15 — IP-адрес сервера USB.
Мы получим ответ, на подобие этого:
C:\Users\user\Downloads\usbip>usbip -l 192.168.0.15
— 192.168.0.15
2-1.3: unknown vendor : unknown product (8564:1000)
: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3
: (Defined at Interface level) (00/00/00)
Теперь можно примонтировать устройство:
usbip.exe -a 192.168.0.15 2-1.3
* если увидим ошибку . cannot find device, переходим к решению.
Автозапуск
Данная инструкция предполагала разовый запуск как сервера, так и клиента. После перезапуска системы, работоспособность будет потеряна до повторного ввода команд. Попробуем настроить автоматический запуск сервера и клиента.
Автозапуск сервера
Добавляем модули в автозапуск:
usbip-core
usbip-host
vhci-hcd
Создаем юнит в systemd:
[Service]
ExecStart=/scripts/usbipd
Type=oneshot
RemainAfterExit=yes
Перечитываем конфигурацию systemd и разрешаем запуск созданного нами юнита:
systemctl enable usbipd
Создаем каталог хранения скрипта и сам скрипт:
usbipd -D
usbip bind -b $bindID
usbip attach —remote=localhost —busid=$bindID
sleep 2
usbip detach —port=00
Разрешаем запуск скрипта:
chmod +x /scripts/usbipd
systemctl start usbipd
systemctl status usbipd
Для окончательного тестирования можно перезагрузить сервер.
Автозапуск клиента Windows
Пишем небольшой батник:
cd C:\Users\user\Downloads\usbip
usbip.exe -a 192.168.0.15 2-1.3
* C:\Users\user\Downloads\usbip — путь, где хранится распакованная утилита; 192.168.0.15 — адрес сервера USB; 2-1.3 — идентификатор USB устройства на сервере.
Сохраняем скрипт с расширением bat или cmd. Запускаем планировщик заданий и добавляем новую задачу.
На вкладке Общие отмечаем Выполнять вне зависимости от регистрации пользователя и ставим галочку Выполнить с наивысшими правами:
В триггерах выбираем При запуске системы:
На вкладке Действия выбираем Запуск программы и прописываем путь до скрипта, который мы сохранили ранее:
На вкладке Параметры ставим галочку При сбое выполнения перезапускать через и снимаем галочку Останавливать задачу, выполняемую дольше:
Для проверки, можно запустить вручную задачу на исполнение или перезагрузить компьютер.
Возможные проблемы
1. usbip_common_mod.ko and usbip.ko must be loaded
Ошибка появляется при попытке выполнить usbipd -D.
Причина: был установлен пакет usbip вместо linux-tools- .
Решение: удаляем usbip:
apt-get remove usbip
Ставим нужный пакет:
apt-get install linux-tools-`uname -r`
2. /usr/sbin/usbipd: No such file or directory
Данная ошибка также появляется при попытке выполнить usbipd -D.
Причина: Нужный бинарник для запуска находится по другому пути — /usr/bin/usbipd.
Решение: создаем симлинк:
ln -s /usr/bin/usbipd /usr/sbin/usbipd
3. usbip: error: failed to open /usr/share/hwdata//usb.ids
Выскакивает при попытке посмотреть список устройств командой usbip list -l.
Причина: необходимый файл usb.ids находится в другой директории.
Решение: создаем каталог /usr/share/hwdata:
Создаем симлинк на существующий файл:
ln -s /usr/share/misc/usb.ids /usr/share/hwdata/usb.ids
4. usbip err . recv op_common
При попытке запустить утилиту в командной строке Windows получаем ошибки:
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip.c: 216 (query_exported_devices) recv op_common
usbip err: usbip.c: 288 (show_exported_devices) query
Причина: ошибка в бинарном файле для Windows.
Решение: открыть exe-файл в HEX редакторе, например, HxD. И в адресах смещения 00000CBC и 00000E0A заменить 06 на 11:
5. (attach_device) cannot find device
При попытке монтирования устройства в Windows, выскакивает ошибка с похожим текстом:
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Причина: недоработка серверного ПО — при расшаривании USB не считывается количество дескрипторов.
Решение: примонтировать устройство на сервере с последующим отмонтированием:
usbip attach —remote=localhost —busid=2-1.3
* в моем случае устройство имеет идентификатор 2-1.3.
* смотрим номер порта, на котором висит наше примонтированное устройство.
usbip detach —port=00
6. udev_device_new_from_subsystem_sysname failed
При попытке монтирования устройства на клиенте получаем ошибку с текстом:
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: query
Причина: не подключен модуль vhci-hcd.
Решение: разово выполняем команду:
и добавляем в файл /etc/modules строку vhci-hcd.
USB over IP — аппаратное решение. Обзор и настройка.
Всем привет! В этой статье я хочу рассказать о технологии USB поверх IP (USB over IP). Что это такое, зачем нужно, какие сценарии и варианты у этой технологии востребованы на сегодняшний день.
Итак, господа, если вы плотно используете виртуализацию, не важно где – на работе или дома (если вы энтузиаст) и различные системы управления этой самой виртуализацией – Hyper-V, Xen, VMware, то сталкивались с ситуацией, когда необходимо пробросить USB-порт на виртуальную машину. Но в виду ограничений гипервизоров виртуальных машин сделать это проблематично, так как USB-порты на виртуальных машинах отсутствуют. А что делать, если нужно подключить USB-ключ защиты программного обеспечения, токен с криптозащитой и тому подобные нужные вещи? Если с физическим сервером проблем не было, то с виртуальным встает простой вопрос: как это сделать?!
Вот тут на помощь и приходит технология USB over IP. Не нужно ломать голову, все уже придумали. Забегая вперед скажу, что есть как аппаратные средства проброса USB по IP, так и программные.
Под катом детальный обзор и много интересного…
Обзор аппаратных устройств USBoverIP
И у тех и у других есть как преимущества, так и недостатки. Давайте рассмотрим преимущества аппаратных устройств USB over IP перед программными:
- Высокая надежность и отказоустойчивость;
- Низкое энергопотребление;
- Высокая скорость развертывания и простота настройки;
Минусы аппаратных устройств USB over IP:
- Более высокая стоимость по сравнению с программными средствами эмуляции.
Более подробно про программные эмуляторы USB портов я расскажу в одной из следующих статей.
Однажды передо мной встала задача проброса USB HASP ключей на виртуальный кластер 1С Предприятие. После обзора и просмотра большого количества решений, как программных, так и аппаратных выбор пал на устройства компании Digi International, а именно AnywhereUSB. Сейчас я расскажу про линейку продукции и конкретно какую модель выбрал я для своих систем виртуализации и почему.
AnywhereUSB это достаточно компактное устройство, представляющее из себя USB-концентратор с Ethernet-портом объединенный в один корпус. О моделях использования может наглядно поведать нижеприведенная иллюстрация:
Рисунок 1. Различные модели использования семейства устройств AnywhereUSB
Обзор модельного ряда Digi AnywhereUSB
Для приобретения на момент написания статьи доступны 5 моделей устройств, рассчитанных на разное количество USB портов, и модель с комбинированными COM и USB-портами.
AnywhereUSB /2 — самая простая, младшая двух портовая модель.
AnywhereUSB/ 5 и AnywhereUSB/5 with Multi-Host Connections — две пятипортовые модели.
AnywhereUSB TS: модель несущая на своем борту 4 COM порта.
AnywhereUSB /14: большой стоечный вариант USB IP от Digi, рассчитанный на 14 портов USB, с возможность монтажа в 19 дюймовый шкаф.
Спецификация устройств, отличия
Устройство моделей USB IP устройств от Digi.
Первоначальная настройка и управление устройствами
Для настройки и управления устройствами предусмотрено несколько интерфейсов:
• Web-интерфейс для настройки, мониторинга и администрирования;
• AnywhereUSB config utility;
• Telnet;
• SNMP.
Самым оптимальным и удобным в использовании является Web-интерфейс.
AnywhereUSB/5. Web-интерфейс, меню Network Configuration.
Подключаем нашу USB IP железку в сеть с работающим DHCP-сервером и в браузере переходим по присвоенному устройству IP-адресу. Чтобы узнать адрес можно воспользоваться AnywhereUSB config utility, которую можно скачать с официального сайта производителя устройства.
Окно утилиты конфигурирования AnywhereUSB Remote Hub Configuration Utility.
Вообще, первоначальная настройка устройства не сложнее любого бытового роутера. Попадаем на страницу ввода логина и пароля – по умолчанию логин – root, пароль – root.Существует несколько вариантов присвоения IP адреса AnywhereUSB могут работать в нескольких режимах:
Динамическое присвоение IP-адреса (DHCP);
• Статический IP;
• Auto Private IP Addressing (Auto-IP).
Пробрасываем USB порты на клиентский компьютер
Тут все просто и легко. Для проброса порта на клиентский ПК нужно установить драйвера AnywhereUSB на ту машину, где мы хотим получить наше USB устройство, и указать адрес нашей волшебной коробочки от Digi. Соотвественно, не забываем подключить наши USB устройства в наш USB-IP концентратор. Это всё.
В случае необходимости получения детальной информации, о подключённом устройстве, свободных/занятых портах – можно воспользоваться утилитой AnywhereUSB View, которая устанавливается вместе с драйверами.
Весь процесс установки и развертывания занимает минут 20.
Лично я в работе использую устройство AnywhereUSB/5 with Multi-Host Connections. Её отличие от младших моделей в том, что она поддерживает группы, и это очень удобно. Сейчас объясню: в этой модели в нашем распоряжении находится 5 USB портов. Эти 5 портов можно разбить на группы и прокидывать на разные виртуальные машины (далее — ВМ). Например, нам нужно прокинуть 3 устройства с портов 1,3,5 на ВМ1, устройство на USB порте 2 на ВМ2, устройство на USB порте 4 на ВМ3. Создаем 3 группы. Порты 1,3,5 объединяем в группу 1, второй USB-порт определяем в группу 2 и третий USB-порт определяем в группу 3. Затем подключаем нужные группы на нужных ВМ с помощью утилиты – и все работает. Делается все в считанные минуты. Старшая модель AnywhereUSB /14 тоже умеет создавать и отдавать по сети группы. Прокидывать можно всё – ради эксперимента даже прокидывал USB HDD. Глюков и тормозов замечено не было.
Настройка групп и интерфейсов, в меню RealPort USB Configuration.
Настройка групп и интерфейсов, в меню RealPort USB Configuration. Выбор группы по отношению к порту USB.
Заключение
В завершении обзора, хочу сказать, что в отличие от подобных программных средств железка настраивается один раз, не глючит, не греется и стабильно работает. Так же, неоспоримым плюсом является возможность работы в отказоустойчивом кластере, т.е. хостовая машина не теряет подключения USB при переключении. Это важно.
Более подробную информацию о продукции Digi International, а так же драйвера, прошивки и утилиты можно скачать на официальном сайте.
На этом пожалуй всё, если будут какие-то вопросы – спрашивайте в комментариях.