USBIP — утилита для подключения удаленных USB-устройств
USBIP — это утилита, направленная на предоставление в общий доступ USB-устройств через IP-сеть для совместного использования. Чтобы совместно использовать USB-устройства между компьютерами с их полной функциональностью, USBIP преобразует «сообщения ввода-вывода USB» в полезные данные TCP / IP и передает их между компьютерами. Оригинальные драйверы и приложения для USB-устройств также могут использоваться для удаленных USB-устройств без их модификации. Компьютер может использовать удаленные USB-устройства, как если бы они были напрямую подключены.
Устройства, которые можно подключить через утилиту:
- Запоминающие устройства USB: fdisk, mkfs, монтирование / размонтирование, файловые операции, воспроизведение DVD-фильмов и запись DVD-R.
- USB-клавиатуры и USB-мыши: можно использовать с Linux-консолью и X Windows System.
- Веб-камеры USB и динамики USB: просмотр веб-камер, запись видео и воспроизведение музыки.
- USB-принтеры, USB-сканеры, последовательные USB-преобразователи и интерфейсы USB-Ethernet.
На нашем Youtube-канале вы можете подробнее ознакомиться с установкой и настройкой утилиты USBIP, просмотрев видео Подключение удаленных USB устройств. USBIP, а также найти много другой полезной информации.
Настройка на сервере
Для начала работы необходимо установить утилиту USBIP командой:
Следующим этапом требуется установить дополнительные модули:
modprobe usbip-core modprobe usbip-host modprobe vhci-hcd lsmod | grep usbip
Чтобы модули загружались автоматически, необходимо в /etc/modules добавить следующие строки:
usbip-core usbip-host vhci-hcd
Затем следует запустить сервер для работы утилиты:
Перед тем как открыть доступ к какому-либо usb-устройству, нужно узнать его ID. Сделать это можно командой:
Доступ к устройству открывается с помощью команды:
где 1-1 — это ID устройства.
Для закрытия доступа к устройству необходимо ввести команду:
Настройка на клиенте
Для начала работы необходимо установить утилиту USBIP командой:
Следующим этапом требуется установить дополнительные модули:
modprobe usbip-core modprobe usbip-host modprobe vhci-hcd lsmod | grep usbip
Чтобы модули загружались автоматически, необходимо в /etc/modules добавить следующие строки:
usbip-core usbip-host vhci-hcd
Для подключения открытого в общий доступ устройства на сервере к компьютеру-клиенту надо знать его ID и IP-адрес сервера. Для этого необходимо выполнить команду:
usbip attach --remote=xx.xx.xx.xx --busid=1-1
где 1-1 — это ID устройства, а xx.xx.xx.xx — это IP-адрес сервера.
После подключения USB-устройства оно должно отображаться после выполнения команды:
Для того чтобы отключить устройство из общего доступа, необходимо узнать его порт:
После того, как порт определен, можно отсоединить устройство:
Графическая утилита usbip-gui
В РЕД ОС также существует графическая утилита для предоставления в общий доступ USB-устройств через IP-сеть — usbip-gui.
Установить программу можно либо через графический менеджер пакетов, либо через терминал.
Для установки программы через графический менеджер пакетов dnfdragora перейдите в «Главное меню» — «Администрирование» — «Управление пакетами dnfdragora», выполните поиск необходимого пакета по ключевому слову «usbip-gui» и отметьте флагом пакет последней версии. После этого нажмите кнопку «Применить» и дождитесь окончания установки пакетов.
Для установки программы через терминал перейдите в сеанс пользователя root:
После установки программа будет доступна из «Главного меню» — «Администрирование» — «Управление USBIP». Обратите внимание, что для работы с программой необходимы права администратора или суперпользователя системы.
Дата последнего изменения: 22.05.2023
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Проброс USB
Добрый день! Пытаюсь пробросить USB устройства (допустим сертификат, принтер) через usbip c Astra Linux Orel терминала как толстого клиента на терминальный сервер Astra Linux Orel, шарится нормально. Но с сервера не цепляется. Так же пробовал с wtware тонкого клиента шарить через BUS ID и цеплять, аналогично, если шарить с самого себя и подключаться к себе на сервер, то всё работает. Порт 3240 открыт везде. Выполняем подключение: usbip attach -r 192.168.0.40 -b 1-7 Ошибка: usbip: error: tcp connect При несуществующих ип адресах и где нет шары, ошибка эта же. Даже удалённо с сервера не отображает список юсб подключений, делаем: usbip list -r 192.168.0.40 получаем: usbip: error: could not connect to 192.168.0.40:3240: System error
kostik87 ★★★★★ ( 15.09.22 09:04:35 MSK )
Последнее исправление: kostik87 15.09.22 09:05:22 MSK (всего исправлений: 1)
на сервере по 1 команде: root@ts1posh:/var/log# tcpdump -ni any port 3240 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 13:46:17.615141 IP 192.168.0.35.55614 > 192.168.0.35.3240: Flags [P.], seq 3565525366:3565525445, ack 3547870498, win 23522, options [nop,nop,TS val 274418453 ecr 274416433], length 79 13:46:17.615279 IP 192.168.0.35.3240 > 192.168.0.35.55614: Flags [P.], seq 1:49, ack 79, win 546, options [nop,nop,TS val 274418453 ecr 274418453], length 48 13:46:17.615300 IP 192.168.0.35.55614 > 192.168.0.35.3240: Flags [.], ack 49, win 23522, options [nop,nop,TS val 274418453 ecr 274418453], length 0 13:46:17.615404 IP 192.168.0.35.55614 > 192.168.0.35.3240: Flags [P.], seq 79:127, ack 49, win 23522, options [nop,nop,TS val 274418453 ecr 274418453], length 48 13:46:17.615503 IP 192.168.0.35.3240 > 192.168.0.35.55614: Flags [P.], seq 49:110, ack 127, win 546, options [nop,nop,TS val 274418453 ecr 274418453], length 61 13:46:17.615514 IP 192.168.0.35.55614 > 192.168.0.35.3240: Flags [.], ack 110, win 23522, options [nop,nop,TS val 274418453 ecr 274418453], length 0 13:46:19.627161 IP 192.168.0.35.55614 > 192.168.0.35.3240: Flags [P.], seq 127:206, ack 110, win 23522, options [nop,nop,TS val 274420465 ecr 274418453], length 79 13:46:19.627339 IP 192.168.0.35.3240 > 192.168.0.35.55614: Flags [P.], seq 110:158, ack 206, win 546, options [nop,nop,TS val 274420465 ecr 274420465], length 48 13:46:19.627360 IP 192.168.0.35.55614 > 192.168.0.35.3240: Flags [.], ack 158, win 23522, options [nop,nop,TS val 274420465 ecr 274420465], length 0 13:46:19.627499 IP 192.168.0.35.55614 > 192.168.0.35.3240: Flags [P.], seq 206:254, ack 158, win 23522, options [nop,nop,TS val 274420465 ecr 274420465], length 48 13:46:19.627646 IP 192.168.0.35.3240 > 192.168.0.35.55614: Flags [P.], seq 158:219, ack 254, win 546, options [nop,nop,TS val 274420465 ecr 274420465], length 61
По второй tcp 0 0 0.0.0.0:3240 0.0.0.0:* LISTEN 1014/usbipd
tcp6 0 0 . 3240 . * LISTEN 1014/usbipd
На клиенте по первой tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes и всё висит
по второй — выполняешь а ответа от команды нет, сразу следующая пустая строка root@astra:/home/user# netstat -tulpn | grep 3240 root@astra:/home/user#
Сервис удаленных usb накопителей astra linux
Для подключения удаленных USB-устройств необходимо открыть утилиту USB/IP: Меню приложений > usbip-gui .
При использовании на виртуальных машинах следует пробросить порты.
Далее в поле «Удаленные USB устройства на» ввести IP-адрес компьютера с необходимым USB-устройством и нажать кнопку «Обновить»:
Выбрав необходимое устройство в списке найденных, нажать на кнопку «Подключить устройство»
Устройство будет подключено (в примере USB-flash), его можно увидеть в разделе «Устройства» открыв файловый менеджер:
Внимание! При подключении устройств необходимо учитывать настройки файерволла как на сервере, так и на клиенте.
¶ qUSBIp
Для подключения удаленных USB-устройств необходимо открыть утилиту qUSBIp: Меню приложений > qUSBIp .
Далее на вкладке «RAW CALL» ввести IP-адрес сервера в поле «host» и в поле «busld» ввести id устройства:
Для подключения нажать на кнопку «Attach by Host & Busld».
¶ В терминале
¶ USB/IP
USB/IP по умолчанию требует, чтобы был открыт порт 3240. Если брандмауэр работает, необходимо убедиться, что этот порт открыт.
¶ Настройка сервера
Внимание! При подключении устройств необходимо учитывать настройки файерволла как на сервере, так и на клиенте.
К серверу должно быть подключено физическое устройство USB и загружен модуль ядра usbip_host USB/IP .
Далее запустить службу USB/IP systemd. Демон будет принимать соединения через TCP-порт 3240:
systemctl start usbipd.service
Затем вывести список имеющихся устройств:
Далее подключить устройство для дальнейшего предоставления доступа к ним ввести:
Для отключения устройства ввести:
После привязки к устройству можно получить доступ с клиента.
¶ Постоянное подключение
Чтобы сделать подключение постоянным, необходимо использовать следующий файл шаблона systemd:
/etc/systemd/system/usbip-bind@.service -------------------------------------------------------------------------- [Unit] Description=USB-IP Binding on bus id %I After=network-online.target usbipd.service Wants= network-online.target Requires =usbipd.service #DefaultInstance=1-1.5 [Service] Type=simple ExecStart= /usr/bin/usbip bind -b %i RemainAfterExit=yes ExecStop=/usr/bin/usbip unbind -b %i Restart=on-failure [Install] WantedBy=multi-user.target
Чтобы дать доступ к устройству с busid 1-1, нужно запустить/включить usbip-bind@1-1.service
systemctl start usbip-bind@1-1.service #запустить systemctl enable usbip-bind@1-1.service #включить
¶ Настройка клиента
Для перечисления доступных на сервере устройств ввести:
usbip list -r server_IP_address
Для подключения устройства ввести:
usbip attach -r server_IP_address -b 1-1.5
Для подключения к альтернативному TCP-порту использовать: —tcp-port port .
¶ Отключение устройств
Устройство можно отключить только после его отключения на клиенте.
Список подключенных устройств:
usbip detach -p port_number
Отвязать устройство на сервере: