Как превратить Linux‑сервер в USB over IP сервер
Основная идея и когда это нужно
USB over IP позволяет «перекидывать» физические USB‑устройства по сети и использовать их удалённо, как будто они подключены локально. Это полезно, если вы мигрировали сервисы в виртуальные машины или хотите централизовать доступ к аппаратным ключам, вебкамерам, сканерам и пр.
Коротко: сервер удерживает устройство, а клиенты подключаются к нему по сети и видят устройство локально.
Ключевые варианты запроса: usb over ip сервер linux, usbip linux руководство, удалённый USB для виртуальных машин, usbip windows клиент, привязка USB в Linux
Что потребуется
- Linux‑сервер (подходит Debian/Ubuntu и другие дистрибутивы, где есть пакет usbip). Можно использовать старые версии Ubuntu, но инструкции ниже делались на Ubuntu Karmic.
- USB‑устройство, которое вы хотите расшарить (аппаратный ключ, вебкамера, принтер и т. п.).
- Сеть между сервером и клиентом (лучше LAN; VPN — см. раздел безопасности).
Примечание: проект usbip — открытый инструмент (http://usbip.sourceforge.net/). Существуют коммерческие устройства USBoverIP, но они обычно стоят от ~$100 и выше.
Сервер: установка и запуск
Скачайте пакет или установите из репозитория дистрибутива. Пример ссылки архива: http://downloads.sourceforge.net/project/usbip/usbip/usbip-win-preview/usbip-win.zip?use_mirror=ignum
На Debian/Ubuntu:
$ sudo aptitude install usbip- Загрузите модули ядра, необходимые для работы сервера:
$ sudo modprobe usbip
$ sudo modprobe usbip_common_mod- Запустите демон usbip:
$ usbipd -D- Подключите USB‑устройство к серверу и найдите его в списке USB‑шины:
$ lsusbСтрока типа
Bus XXX Device YYY: ID VendorID:DeviceIDпоказывает идентификатор устройства VendorID:DeviceID (например, 0c45:63ee).
- Найдите соответствующий bus‑ID для usbip:
$ sudo usbip_bind_driver --listВы увидите строки вида:
busid 1-6 (0c45:63ee)
1-6:1.0 -> uvcvideo
1-6:1.1 -> uvcvideoЗапомните bus‑ID (в примере — 1-6).
- Привяжите (экспортируйте) устройство к usbip:
$ sudo usbip_bind_driver --usbip 1-6После этого устройство «захвачено» сервером и доступно для удалённого подключения.
Важно: привязка отключает устройство от локальной подсистемы, поэтому оно больше не будет доступно локально на сервере, пока не будет отвязано.
Клиент: подключение
Windows
- Скачайте сборку Windows: http://ignum.dl.sourceforge.net/project/usbip/usbip/usbip-win-preview/usbip-win.zip
- Распакуйте архив. Установите файл «bus.inf» как «Generic system device» через Диспетчер устройств.
- Список доступных устройств на сервере:
> usbip.exe -l - Присоединение устройства по bus‑ID:
> usbip.exe -a X-Y (X‑Y — bus‑ID, например 1-6). После этого в системе клиента появится новое USB‑устройство.
Linux
На клиенте (пример Ubuntu):
$ sudo apt-get install usbip
$ sudo modprobe vhci-hcd
$ sudo usbip -l
$ sudo usbip -a X-Y vhci‑hcd — это виртуальный USB‑хост‑контроллер, который создаёт виртуальное соединение с удалённым устройством.
Чек‑лист администратора
- Проверить, что пакет usbip доступен в репозитории дистрибутива.
- Установить usbip и загрузить модули usbip, usbip_common_mod и usbipd.
- Убедиться, что устройство корректно определено командой lsusb.
- Найти bus‑ID через usbip_bind_driver –list.
- Привязать устройство через usbip_bind_driver –usbip
. - Открыть/настроить сетевой доступ: firewall/NAT/VPN.
- На клиенте установить usbip, загрузить vhci-hcd и подключиться.
Устранение неполадок
- Демон usbip не запускается: проверьте, загружены ли модули usbip и usbip_common_mod; запустите с правами root.
- После привязки устройство исчезло локально: это нормальное поведение — оно перешло под контроль usbip.
- Клиент не видит устройства: проверьте сетевую доступность порта (по умолчанию usbipd слушает TCP), firewall и SELinux/AppArmor.
- Конфликты драйверов: некоторые устройства требуют специфичных драйверов; в этом случае usbip может не корректно ретранслировать устройство.
Совет: логируйте вывод usbipd и смотрите dmesg/journalctl на обеих сторонах.
Когда подход не сработает (ограничения)
- Устройства с высокими требованиями к времени отклика (низкая латентность) — аудиоинтерфейсы, некоторые аппаратные ключи — могут работать плохо по сети.
- Устройства, требующие аппаратного DMA или специальных локальных взаимодействий, могут быть несовместимы.
- Если на сервере используются драйверы, которые не умеют работать в режиме «отдачи» — устройство может быть недоступно.
Альтернативы
- Аппаратные USB‑over‑IP девайсы (коммерческие) — проще в управлении, но дороже.
- L2/L3 VPN и проброс локально подключённого устройства через клиентскую машину (USB‑редиректоры) — когда целесообразно держать устройство на рабочей станции.
- Использование специализированных сетевых шлюзов для конкретных устройств (сканеры, принтеры) — если они доступны.
Безопасность и приватность
- Трафик между клиентом и сервером проходит открыто, если не использовать VPN или SSH‑туннель. Рекомендуется ставить соединение в защищённую сеть или через VPN.
- Доступ к usbipd следует ограничить по IP и использовать брандмауэр.
- Аппаратные ключи (dongles) и устройства идентификации следует хранить и выдавать только доверенным клиентам.
Критерии приёмки
- Устройство отображается в клиентской ОС и функционирует по назначению (проверка: вебкамера показывает изображение, принтер печатает, криптоключ открывает доступ).
- На сервере устройство успешно привязано и демон usbipd работает.
- Подключение устойчиво в течение тестовой сессии (минимум 30 минут) без неожиданных разрывов.
- Соединение защищено сетью или VPN, если в устройстве содержатся чувствительные данные.
Тестовые сценарии
- Подключение/отключение устройства: привязать, подключить клиентом, отключить клиентом, отвязать на сервере.
- Нагрузочный тест: эмуляция многократных подключений и переключений между клиентами.
- Сценарий отказа: симуляция обрыва сети — проверить восстановление или корректное отключение.
Быстрая памятка команд
- Установка (Debian/Ubuntu):
$ sudo aptitude install usbip
$ sudo modprobe usbip usbip_common_mod
$ usbipd -D
$ lsusb
$ sudo usbip_bind_driver --list
$ sudo usbip_bind_driver --usbip - Клиент (Linux):
$ sudo apt-get install usbip
$ sudo modprobe vhci-hcd
$ sudo usbip -l
$ sudo usbip -a X-Y - Клиент (Windows):
> usbip.exe -l
> usbip.exe -a X-Y Рекомендации по эксплуатации и роли
Администратор: настраивает сервер, следит за брандмауэром, ведёт инвентаризацию USB‑устройств и логирует сессии.
Пользователь: запрашивает доступ, подключается клиентским ПО и тестирует функциональность устройства.
Короткая сводка (итоги)
- usbip позволяет делиться USB‑устройствами по сети и подходит для виртуальных сред и удалённых клиентов.
- Настройка состоит из установки, загрузки модулей, привязки устройства на сервере и подключения с клиента.
- Следует учитывать ограничения по совместимости, задержкам и безопасности.
FAQ
Как вернуть устройство обратно на сервер после привязки?
Отключите его с клиента (usbip detach) или на сервере выполните отвязку драйвера и перезагрузите модуль, чтобы устройство снова стало локальным.
Нужен ли VPN?
Не обязателен, но настоятельно рекомендуется, особенно для устройств, содержащих чувствительные данные или при работе через публичные сети.
Работает ли это с виртуальными машинами?
Да. На гостевых ОС можно подключать удалённые USB‑устройства так же, как если бы они были локальными.
Краткое резюме:
- Включите usbip на сервере, привяжите USB по bus‑ID.
- На клиенте загрузите vhci‑hcd и подключитесь к серверу.
- Контролируйте безопасность и совместимость устройств.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента