Удалённое подключение USB-устройств по сети
Введение
USBIP — программное обеспечение, которое позволяет подключать по сети USB-устройства, физически подключённые к удалённому компьютеру, и использовать их так же, как если бы они были подключены к локальному компьютеру. Далее компьютер, к которому физически подключено USB-устройство, будет называться сервером, а тот, который будет использовать это устройство по сети — клиентом.
Обязательные условия
Для работы USBIP необходимо, чтобы клиент имел доступ к порту 3240 сервера.
Пользователь, который настраивает USBIP на клиенте и на сервере, должен иметь административный доступ (sudo
).
Установка и настройка ПО
Для установки USBIP и на сервере, и на клиенте нужно выполнить следующую команду:
$ sudo dnf install usbip kmod-usbip
Для установки графического интерфейса выполните следующую команду:
$ sudo dnf install usbip-gui
Настройка автоматического запуска служб
На сервере необходимо включить службу usbip-server
:
$ sudo systemctl enable --now usbip-server
На клиенте — включить службу usbip-client
:
$ sudo systemctl enable --now usbip-client
Настройка межсетевого экрана firewalld
Предупреждение
В приложении не реализованы функции аутентификации и авторизации при организации удалённого доступа к службе USBIP. Поэтому администратор должен настроить межсетевой экран таким образом, чтобы удалённый доступ был возможен только с авторизованных рабочих мест с фиксированными IP-адресами.
Настройка доступа при помощи межсетевого экрана firewalld
Для доступа USBIP удалённые компьютеры подключаются к порту 3240
по протоколу TCP.
Например, чтобы открыть доступ к USBIP для компьютера, имеющего адрес 192.168.1.10
, нужно выполнить следующие команды:
$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port port="3240" protocol="tcp" accept'
При необходимости повторить выполнение команд для дополнительных адресов, после этого перезапустить firewalld
:
$ sudo systemctl restart firewalld
Альтернативный способ
Создать новую зону, например, allowedips
:
$ sudo firewall-cmd --permanent --new-zone=allowedips
Добавить доверенные IP-адреса в список источников (sources) этой зоны:
# Для 192.168.1.10
$ sudo firewall-cmd --permanent --zone=allowedips --add-source=192.168.1.10
# Для 192.168.1.20
$ sudo firewall-cmd --permanent --zone=allowedips --add-source=192.168.1.20
Открыть порт 3240/tcp
в созданной зоне:
$ sudo firewall-cmd --permanent --zone=allowedips —add-port=3240/tcp
Применить изменения:
$ sudo systemctl —reload firewalld
Настройка привязки устройства на сервере
Чтобы на стороне сервера сделать устройство доступным по сети, его нужно привязать к службе usbipd
.
Для этого нужно выполнить следующие действия.
Предположим, нам нужно передать на клиентский компьютер USB-устройство «Aktiv Rutoken ECP».
Сначала выясним идентификатор шины устройства.
Для этого необходимо выполнить команду:
$ usbip list -l
- busid 1-1.2 (2357:0604)
TP-Link : unknown product (2357:0604)
- busid 1-1.3 (17ef:60ee)
Lenovo : unknown product (17ef:60ee)
- busid 1-1.4 (046d:c52b)
Logitech, Inc. : Unifying Receiver (046d:c52b)
- busid 1-3 (0a89:0030)
Aktiv : Rutoken ECP (0a89:0030)
- busid 1-7.1 (0d8c:0103)
C-Media Electronics, Inc. : CM102-A+/102S+ Audio Controller (0d8c:0103)
- busid 1-7.2 (046d:082d)
Logitech, Inc. : HD Pro Webcam C920 (046d:082d)
Из приведённого вывода команды видно, что значение busid
(идентификатор шины) устройства Rutoken ECP
равно 1-3
.
Далее необходимо выполнить привязку устройства:
$ sudo usbip bind -b 1-3
usbip: info: bind device on busid 1-3: complete
Для отключения устройства используется команда unbind
:
$ sudo usbip unbind -b 1-3
usbip: info: unbind device on busid 1-3: complete
Эту же операцию можно выполнить при помощи графического интерфейса. Для этого запустите утилиту «Управление USBIP» из главного меню. В разделе «Локальные устройства USB» найдите нужное устройство, выделите его и нажмите кнопку «Привязать устройство». Для отключения устройства выделите устройство и нажмите кнопку «Отвязать устройство».

Подключение устройства к клиенту
Чтобы подключить устройство к клиенту, сначала нужно выполнить просмотр устройств, доступных на сервере. Для этого выполните команду:
$ sudo usbip list -r 192.168.10.62
Exportable USB devices
======================
- 192.168.10.62
1-3: Aktiv : Rutoken ECP (0a89:0030)
: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3
: (Defined at Interface level) (00/00/00)
Где 192.168.10.62
— адрес сервера (можно указать также имя узла).
Таким образом видно, что устройство с busid 1-3
привязано на сервере.
Подключение устройства:
$ sudo usbip attach -r 192.168.10.62 -b 1-3
Проверка подключения устройства:
$ lsusb | grep Rutoken
Bus 003 Device 004: ID 0a89:0030 Aktiv Rutoken ECP
Как видно, устройство Rutoken
теперь подключено к клиентскому компьютеру.
Для отключения устройства сначала нужно определить, к какому порту виртуального хаба подключено устройство.
$ sudo usbip port
Imported USB devices
====================
Port 00: <Port in Use> at Full Speed(12Mbps)
Aktiv : Rutoken ECP (0a89:0030)
3-1 -> usbip://192.168.10.62:3240/1-3
-> remote bus/dev 001/027
Из этого вывода видно, что устройство подключено к порту 0
. Теперь можно отключить его:
$ sudo usbip detach -p 0
usbip: info: Port 0 is now detached!
Подключение с использованием графического интерфейса
Для подключения устройства с помощью графического интерфейса запустите утилиту «Управление USBIP», введите адрес сервера в поле «Удалённые устройства USB» и нажмите кнопку «Перезагрузить». После этого устройство должно появиться в списке доступных. Для подключения устройства выделите его и нажмите кнопку «Присоединить устройство».

После этого устройство пропадает из списка доступных и появляется в списке присоединённых.

Для отключения выделите устройство в списке присоединённых и нажмите кнопку «Отсоединить устройство».