Как настроить USB-over-IP сервер и клиент на OpenSUSE 11.2
Кратко: этот пошаговый гид показывает, как установить и запустить usbip на сервере и подготовить серверную сторону на OpenSUSE 11.2. Он объясняет загрузку модулей ядра, привязку USB-устройства к usbip, запуск демона и проверку прослушиваемого порта. Подготовьте IP/имена хостов заранее и убедитесь, что порт 3240 открыт или проброшен.
Version 1.0
Author: Falko Timme
Следите за мной в Twitter
Введение
В этом руководстве показано, как развернуть USB-over-IP (usbip) сервер на OpenSUSE 11.2 и подготовить серверную часть, чтобы удалённые клиенты могли использовать USB-устройства через сеть. Проект USB/IP инкапсулирует USB I/O-сообщения в TCP/IP-пакеты, что позволяет передавать полную функциональность USB-устройств между машинами. Это особенно полезно для виртуальных машин, у которых нет прямого доступа к аппаратуре хоста — они могут использовать удалённые USB-устройства как локальные.
Важно: я не даю гарантии, что инструкции подойдут для всех конфигураций. Хостнеймы и IP в примерах заменяйте на свои.
Предварительные замечания
В примерах используются: сервер server1.example.com с IP 192.168.0.100 и клиент client1.example.com с IP 192.168.0.101, оба на OpenSUSE 11.2. Если у вас другие имена/адреса — подставьте свои.
Примечание: этот материал основан на руководстве AliRezaTaleghani, адаптированном для OpenSUSE 11.2.
Что нужно знать в одной строке
USB-over-IP — технология, позволяющая пробрасывать USB-устройства по сети; клиент получает доступ к устройству так, как будто оно подключено локально.
Требования
- Сервер и клиент с OpenSUSE 11.2.
- Права root на серверах для установки пакетов и загрузки модулей ядра.
- Один или несколько USB-устройств, которые вы хотите экспортировать.
- Доступ по сети между сервером и клиентом.
- Открытый/проброшенный порт TCP 3240 (usbipd).
Important: тестируйте на не критичном оборудовании прежде чем применять в продакшене.
1. Установка и использование usbip на сервере
В примере имя сервера — server1.
Установим пакет usbip:
yast2 -i usbipНа OpenSUSE 11.2 файл usb.ids, содержащий список USB-устройств (Vendor/Device ID), ожидается в /usr/share/hwdata, но в пакете он находится в /usr/share/usbip/usb.ids — создадим симлинк:
mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/Загрузим модули ядра usbip:
modprobe usbip
modprobe usbip_common_modПроверим, что модули загружены:
lsmod | grep usbipОжидаемый вывод похож на этот:
server1:~ # lsmod | grep usbip
usbip 21540 0
usbip_common_mod 25232 1 usbip
server1:~ #Чтобы модули автоматически загружались при загрузке системы, добавьте их в переменную MODULES_LOADED_ON_BOOT в файле /etc/sysconfig/kernel:
vi /etc/sysconfig/kernelНайдите строку MODULES_LOADED_ON_BOOT и убедитесь, что она содержит usbip и usbip_common_mod. Пример фрагмента файла:
[...]
## Type: string
## ServiceRestart: boot.loadmodules
#
# This variable contains the list of modules to be loaded
# once the main filesystem is active
# You will find a few default modules for hardware which
# can not be detected automatically.
#
MODULES_LOADED_ON_BOOT="usbip usbip_common_mod"
[...]После редактирования примените конфигурацию:
SuSEconfigЗапустите демон usbipd в фоне:
usbipd -DПример вывода:
server1:~ # usbipd -D
Bind usbip.ko to a usb device to be exportable!
server1:~ #Теперь подключите USB-устройство, которое хотите экспортировать (в примере используется флеш-накопитель SanDisk). Определите устройство с помощью lsusb:
lsusbВыход содержит строки вида:
Bus XXX Device YYY: ID VendorID:DeviceIDПример вывода на сервере:
server1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 058f:6362 Alcor Micro Corp. Hi-Speed 21-in-1 Flash Card Reader/Writer (Internal/External)
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
server1:~ #В примере Vendor/Device ID флешки — 0781:5151.
Посмотреть список USB-устройств и соответствия драйверов можно с помощью bind_driver:
bind_driver --listПример вывода:
server1:~ # bind_driver --list
List USB devices
- busid 1-4 (058f:6362)
1-4:1.0 -> usb-storage
- busid 2-5 (0781:5151)
2-5:1.0 -> usb-storage
server1:~ #В этом выводе BUSID для SanDisk — 2-5. Чтобы сделать устройство экспортируемым, привяжите его к usbip:
bind_driver --usbip 2-5Пример вывода:
server1:~ # bind_driver --usbip 2-5
(process:2952): DEBUG: 2-5:1.0 -> usb-storage
(process:2952): DEBUG: unbinding interface
(process:2952): DEBUG: write "add 2-5" to /sys/bus/usb/drivers/usbip/match_busid
Message: bind 2-5 to usbip, complete!
server1:~ #После этого устройство доступно для подключения удалёнными клиентами.
Важно: проверьте, что демон действительно слушает порт 3240. Для этого используйте netstat или ss:
netstat -tapОжидаемый фрагмент вывода:
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 *:triomotion *:* LISTEN 2948/usbipd
... (остальные строки опущены)
server1:~ #Triomotion — это имя сервиса для порта 3240 в /etc/services на некоторых системах. Убедитесь, что ваш брандмауэр не блокирует этот порт.
Важные заметки по безопасности
- Не экспонируйте порт 3240 напрямую в Интернет без защиты.
- Для безопасного использования в небезопасных сетях — пробрасывайте трафик через SSH-туннель или VPN.
- Можно ограничить доступ по IP в iptables/Firewalld или через маршрутизацию на уровне сети.
Пример простого правила iptables, разрешающего доступ к порту 3240 только с подсети 192.168.0.0/24:
iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 3240 -j ACCEPT
iptables -A INPUT -p tcp --dport 3240 -j DROPNote: команды iptables приведены как пример; на современных системах может использоваться firewalld или nftables.
Альтернативные подходы
- Виртуальные машины: многие гипервизоры (VirtualBox, VMware) поддерживают проброс USB прямо в гостя. Если цель — только виртуальная машина, этот метод проще.
- Аппаратный USB-over-IP: сетевые USB-хабы или профессиональные KVM/USB-удлинители.
- SSH/VPN + локальный проброс устройств: если usbip не подходит по совместимости, проброс через VPN и использование локальных механизмов может быть безопаснее.
Когда это может не работать
- Если устройство использует специфичные драйверы или особую прошивку, usbip может не передавать все функции.
- Некоторые USB-устройства (особенно с реального времени или с высокими требованиями по пропускной способности) могут работать нестабильно по сети.
- Конфликты драйверов: устройство должно быть отвязано от локального драйвера и привязано к usbip.
Проверка и критерии приёмки
Критерии приёмки для простого теста с флешкой:
- usbipd запущен на сервере и слушает порт 3240.
- Устройство привязано к usbip и отображается в bind_driver –list.
- Клиент подключается к серверу и видит устройство как локальное (см. клиентский раздел документации).
Тестовые шаги (минимум): подключить флешку, выполнить bind_driver, проверить netstat, на клиенте подключиться и смонтировать файловую систему.
Руководство по устранению неисправностей
- Если lsusb не показывает устройство — проверьте физическое подключение и dmesg.
- Если bind_driver сообщает об ошибке — убедитесь, что устройство не занято локальным драйвером.
- Если клиент не подключается — проверьте доступность порта 3240 и правила брандмауэра.
- Для глубокого анализа включайте отладочный вывод демона и смотрите сообщения ядра в dmesg/syslog.
Роль‑ориентированный чеклист для админа
- Убедиться, что пакет usbip установлен.
- Проверить и/или создать симлинк usb.ids.
- Загрузить модули: usbip и usbip_common_mod.
- Добавить модули в MODULES_LOADED_ON_BOOT.
- Запустить usbipd и проверить netstat/ss.
- Ограничить доступ к порту 3240 правилами брандмауэра.
- Протестировать подключение с тестовой машины.
Простая методика миграции и отката
- До изменений: сделать снимок конфигурации, сохранить /etc/sysconfig/kernel.
- Внедрение: установить пакет, добавить модули, запустить демон.
- Тестирование: проверить доступ от тестового клиента.
- Откат: удалить строки из MODULES_LOADED_ON_BOOT, остановить демон usbipd, выполнить SuSEconfig.
Краткая совместимость и советы
- Для Windows-клиентов существуют отдельные реализации или порты usbip; см. исходное руководство AliRezaTaleghani для примеров с Windows.
- На новых версиях ядра и дистрибутивах путь к usb.ids и имена утилит могут отличаться — проверяйте документацию пакета в вашем репозитории.
1‑строчный глоссарий
- usbip: проект и пакет для проброса USB по сети.
- usbipd: демон, управляющий экспортируемыми USB-устройствами.
- bind_driver: утилита для привязки USB-устройства к usbip.
- BUSID: идентификатор устройства в формате шины-адреса (например, 2-5).
Итог
USB-over-IP — удобный способ предоставить удалённый доступ к физическим USB-устройствам из других систем и виртуальных машин. На OpenSUSE 11.2 процесс сводится к установке пакета, созданию нужных симлинков, загрузке модулей, привязке устройства и запуску usbipd. Обязательно учитывайте безопасность сети и совместимость устройств.
Summary:
- Установите usbip и создайте симлинк usb.ids.
- Загрузите и добавьте модули в автозагрузку.
- Привяжите USB-устройство к usbip и запустите usbipd.
- Проверьте, что порт 3240 доступен и закройте доступ извне при необходимости.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента