- Настройка 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 windows 2012
- Usb через сеть
- Настройка AnywhereUSB
- Управление IP адресом
Настройка 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 windows 2012
Добрый день, амигос, рад, что ты заглянул ко мне на сайт, сегодня мы рассмотрим такой вопрос, как организовать 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-токенов, становятся не доступными, народ на терминальных фермах негодует, бизнес теряет деньги, или вот еще распространенная ошибка, когда у вас в системе не происходит подключение к ключу, и вы видите в утилите сообщение с содержимым «Can not find Remote Hub». Но все же аппаратные решение предоставления USB по локальной сети, в разы стабильнее, программных.
- Подключение USB через сеть, можно так же осуществлять и через немецкое оборудование компании SEH, например, myUTN-800, но в отличии от DIGI, оно еще работает и с LINUX платформами, я таким образом пробрасывал токен в CentOS 7, очень удобно. Он стоит чуток подороже, своего конкурента, но оно того стоит. Его внешний вид представлен на фото ниже. Он так же имеет до 14 USB портов.
В конце 2020 года вы уже не сможете купить у производителя версию SEH UTN-800, ее заменила 20-ти портовая dongleserver ProMAX, про которую я уже делал подробный обзор, там привнесли очень много нововведений и улучшений. Внешний вид устройства слегка претерпел изменение.
Добавили вентияцию для USB ключей 🙂 уж видимо они очень грелись, хотя возможно, что это просто элемент дизайна. В любом случае сделать проброс с данного USB маршрутизатора так же по времени занимает около 5 минут, но оборудование стоит за 100 000 рублей и по карману не всем.
- DistKontrolUSB-64 — это китайское оборудование, которое не так давно появилось на рынке. Чем данная железка выгодно отличается от SEH и DIGI, то это своей ценой, в несколько раз ниже. DistKontrolUSB-64 занимает аж три стоичных юнита и имеет 64 USB порта, так же в линейке есть оборудование с 16, 32 и 48 портами. Со стороны клиента устанавливается приложение USBoverIP-Client, через которое идет подключение к серверу. Есть версия USBoverIP-Client для Windows так и MacOS, легко работает на физических устройствах, так и на виртуальных машинах Hyper-V или Vmware.
В отличии от других вендоров у DistKontrolUSB-64 есть встроенный WIFI модуль, который позволяет производить подключения устройств USB по сети не только по проводному Ethernet, а еще и через WIFI, что согласитесь очень классно.
Настройка 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.
Далее указываем DNS сервера, через «Advanced Network Settings» можно у них даже задать приоритет.
Самым важным шагом в настройке 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 устройств по локальной сети много, есть и программные, но лучше всегда использовать железо.