Как настроить USB-over-IP сервер и клиент на Debian Lenny
Кратко: покажу, как установить и настроить USB-over-IP (usbip) на Debian Lenny: сборка модулей ядра из пакета Squeeze, запуск демона на сервере и привязка USB-устройства для использования удалённым клиентом. Включены чек‑листы, отладочный план и рекомендации по совместимости и безопасности.
Важно: в примерах используются server1.example.com (192.168.0.100) и client1.example.com (192.168.0.101). Замените их на свои хосты и IP.
Предварительное примечание
Это руководство основано на оригинальном материале AliRezaTaleghani и адаптировано для Debian Lenny (и серверной, и клиентской стороны). Проект USB/IP инкапсулирует USB I/O сообщения в TCP/IP и передаёт их по сети, что позволяет, например, виртуальным машинам использовать удалённые USB-устройства.
Я не даю гарантий, что всё сработает в вашей среде.
Что нужно знать в одно предложение
USB-over-IP (usbip) — это способ «расшарить» физический USB-порт по сети; для Lenny нужно взять пакеты из Squeeze и собрать модули под ваше ядро.
1 Установка и использование USB/IP на сервере
В примерах ниже сервер называется server1.
Есть пакет usbip в Debian Squeeze (testing), но не в Lenny. Чтобы установить usbip на Lenny, мы добавим репозитории Squeeze и используем apt-pinning.
Отредактируйте /etc/apt/sources.list:
vi /etc/apt/sources.listДобавьте репозитории Squeeze в конец файла:
| [...] ## Squeeze / Testing deb http://ftp2.de.debian.org/debian/ squeeze main deb-src http://ftp2.de.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main |
Отредактируйте /etc/apt/apt.conf:
vi /etc/apt/apt.confДобавьте строку для увеличения лимита кэша apt:
| APT::Cache-Limit "100000000"; |
Отредактируйте /etc/apt/preferences для pinning:
vi /etc/apt/preferencesСделайте файл похожим на этот:
| Package: * Pin: release a=stable Pin-Priority: 700 Package: * Pin: release a=testing Pin-Priority: 650 |
Обновите базу пакетов:
aptitude updateУстановите usbip и инструменты сборки:
aptitude install usbip usbip-source module-assistantНужно собрать модули usbip для текущего ядра Lenny, поэтому требуется usbip-source и module-assistant.
Подготовьте систему для сборки модулей:
m-a preparem-a updatem-a a-i usbip-sourceПосле сборки загрузите модули USB/IP в ядро:
modprobe usbip
modprobe usbip_common_modПроверьте, загружены ли модули:
lsmod | grep usbipОжидаемый вывод похож на этот:
server1:~# lsmod | grep usbip
usbip 18660 0
usbip_common_mod 17672 1 usbip
server1:~#
Чтобы модули загружались автоматически при загрузке системы, добавьте их в /etc/modules:
vi /etc/modules| [...] usbip usbip_common_mod |
Запустите демон usbip:
usbipd -DПример вывода:
server1:~# usbipd -D
Bind usbip.ko to a usb device to be exportable!
server1:~#
Подключите USB-устройство, которое хотите экспортировать (в примере — SanDisk USB-флешка). Найдите его с помощью lsusb:
lsusbПример вывода:
server1:~# lsusb
Bus 004 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro 256/512MB Flash Drive
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 058f:6362 Alcor Micro Corp. Hi-Speed 21-in-1 Flash Card Reader/Writer (Internal/External)
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
server1:~#
ID устройства (Vendor:Device) во входе выше — 0781:5151 для SanDisk.
Посмотреть список устройств и соответствующие busid:
usbip_bind_driver --listПример вывода:
server1:~# usbip_bind_driver –list
List USB devices
busid 3-4 (058f:6362)
3-4:1.0 -> usb-storagebusid 4-5 (0781:5151)
4-5:1.0 -> usb-storage
server1:~#
Видно, что SanDisk имеет busid 4-5. Привяжем устройство к usbip, чтобы оно стало экспортируемым:
usbip_bind_driver --usbip 4-5Пример вывода:
server1:~# usbip_bind_driver –usbip 4-5
(process:7290): DEBUG: 4-5:1.0 -> usb-storage (process:7290): DEBUG: unbinding interface
(process:7290): DEBUG: write “add 4-5” to /sys/bus/usb/drivers/usbip/match_busid Message: bind 4-5 to usbip, complete!
server1:~#
Проверьте, что демон usbip слушает на порту 3240, и при необходимости откройте порт в фаерволе:
netstat -tapПример вывода (смотрите строку с 3240):
server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :sunrpc : LISTEN 2062/portmap
tcp 0 0 :49008 : LISTEN 2073/rpc.statd
tcp 0 0 :ssh : LISTEN 3244/sshd
tcp 0 0 localhost.localdom:smtp : LISTEN 2546/exim4
tcp 0 172 192.168.0.15:ssh 192.168.0.199:4176 ESTABLISHED 3204/0
tcp 0 148 server1.example.com:ssh 192.168.0.199:4177 ESTABLISHED 3245/1
tcp6 0 0 [::]:3240 [::]: LISTEN 7254/usbipd
tcp6 0 0 [::]:ssh [::]:* LISTEN 3244/sshd
server1:~#
Если порт закрыт, настройте фаервол (iptables/ufw) в соответствии с политиками безопасности.
2 Быстрый план действий на клиенте (основные шаги)
- Установите тот же пакет usbip на клиенте (или используйте бинари, совместимые с Lenny/Squeeze).
- Запустите клиентские команды usbip для подключения к серверу: обнаружение/attach.
- Проверьте видимость устройства в системе клиента и, при необходимости, установите драйверы.
Пример клиентских команд (на client1):
usbip list -r 192.168.0.100
usbip attach -r 192.168.0.100 -b 4-5После attach устройство появится у клиента как локальное USB-устройство.
Что делать, если что-то идёт не так — план действий при неполадках
- Проверка сети: ping server1.example.com и проверка порта 3240 (telnet 192.168.0.100 3240).
- Логи демона: посмотрите вывод usbipd и системный журнал (dmesg, /var/log/syslog).
- Модули ядра: lsmod | grep usbip — убедитесь, что оба модуля загружены.
- Правильный busid: перепроверьте lsusb и usbip_bind_driver –list.
- Версии пакетов: убедитесь, что на клиенте и сервере совместимые версии usbip; при необходимости пересоберите модули для клиентского ядра.
- Брандмауэр: проверьте правила iptables/ufw/сетевого экрана между клиентом и сервером.
- Если устройство — съёмный носитель, убедитесь, что оно не смонтировано и не занято локальной системой на сервере перед экспортом.
Полезные команды для отладки:
dmesg | tail -n 50
journalctl -u usbipd
ps aux | grep usbipd
netstat -an | grep 3240Чек-листы
Чек-лист для администратора сервера
- Добавлены репозитории squeeze в /etc/apt/sources.list
- Настроен apt-pinning (/etc/apt/preferences)
- Установлены usbip, usbip-source, module-assistant
- Собраны модули usbip для текущего ядра
- Модули добавлены в /etc/modules
- Демон usbipd запущен и слушает порт 3240
- Устройство привязано через usbip_bind_driver –usbip BUSID
- Фаервол допускает входящие соединения на 3240 (по необходимости)
Чек-лист для администратора клиента
- Установлен клиент usbip (совместимая версия)
- Клиент может достучаться до сервера (ping/telnet)
- Выполнена команда usbip list -r SERVER
- Attach выполнен и устройство отображается в системе
- При необходимости установлены драйверы для устройства
Совместимость, ограничения и альтернативы
Когда это не сработает
- Аппаратные USB‑устройства, требующие проприетарных контроллеров, могут не работать удалённо.
- Высокопроизводительные USB‑устройства (например, камеры с низкой задержкой) могут показывать плохую производительность из‑за сетевой латентности.
- Если устройство монтируется локально на сервере, его сначала нужно корректно отмонтировать.
Альтернативные подходы
- USB через удалённый рабочий стол (RDP/VDI) — работает для взаимодействия с USB в контексте сессий пользователя.
- Аппаратные USB-серверы (device servers) — готовые устройства, которые «выводят» USB в сеть.
- PCI/USB-передача через SR-IOV/пасsthrough в виртуализации (для гипервизоров) — для более прямого доступа в ВМ.
Совместимость с Windows
В оригинальном материале были рекомендации для Windows-клиента. Для Windows доступны клиенты usbip (в некоторых версиях в составе Windows или как сторонние сборки). Если нужен Windows-клиент, проверьте версии и совместимость реализации usbip для Windows — инструкции по подключению отличаются.
Миграция на новые версии Debian
На более новых релизах Debian usbip доступен в репозитории, и сборка из Squeeze станет ненужной. При обновлении системы удалите apt-pinning и установите штатный пакет из репозиториев текущей версии.
Факты и числа
- TCP-порт по умолчанию: 3240.
- Основные модули ядра: usbip и usbip_common_mod.
- Поддержка в Debian: пакет появился в Squeeze (testing) и позже добавлен в более новые релизы.
Простая методика принятия решения
- Нужно ли полноценное USB-соединение в ВМ/удалённо? — Да: пробуем usbip.
- Нужна ли минимальная задержка/полоса? — Нет: usbip подходит.
- Требуется поддержка Windows-клиента? — Проверяем совместимость клиента для Windows.
Примеры типичных проблем и решение
Проблема: клиент не видит устройство после attach.
Действия: проверить соединение (telnet/ssh), версии usbip, логи на сервере, убедиться, что устройство не монтировано на сервере.
Проблема: устройство появляется, но некорректно работает.
Действия: проверить latency и throughput сети, ограничить использование для задач, чувствительных к задержке.
Критерии приёмки
- Сервер успешно экспортирует устройство: usbip_bind_driver показывает устройство как связанное.
- Клиент успешно подключился: usbip attach завершился без ошибок.
- Устройство полноценно функционирует на клиенте для целевых задач (тесты чтения/записи, тест функционала).
Безопасность и рекомендации
- Разрешайте порт 3240 только внутри доверенной сети или через VPN.
- Не экспортируйте критичные устройства без надёжной сегментации сети.
- Мониторьте логи usbipd и системные журналы на предмет необычной активности.
Краткое резюме
USB-over-IP позволяет удалённо использовать USB-устройства, но для Debian Lenny нужно брать пакеты из Squeeze и собирать модули под ваше ядро. Проверьте совместимость устройства, сетевую конфигурацию и безопасность перед вводом в рабочую эксплуатацию.
Дополнительные материалы: оригинальное руководство AliRezaTaleghani и документация проекта USB/IP.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента