Инструменты пользователя

Инструменты сайта


tasks:usbip

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
tasks:usbip [03.03.2023 13:26] – [Решение проблем] viacheslavtasks:usbip [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== USB через IP ======
 +===== Сервер Linux=====
 +<code bash>
 +# Установка
 +apt install linux-tools-common linux-tools-generic
  
 +# Версия
 +usbip version
 +
 +# Вкл модуль ядра для сервера:
 +modprobe usbip-host
 +echo "usbip-host" >> /etc/modules
 +# Вкл службу
 +usbipd -D
 +
 +# Вкл модуль ядра для клиента:
 +modprobe vhci-hcd
 +echo "vhci-hcd" >> /etc/modules
 +#modprobe usbip-vudc
 +#echo "usbip-vudc" >> /etc/modules
 +</code>
 +
 +===== Клиент Windows =====
 +<WRAP round info 100%>
 +Ставить сертификат и отключать цифровую подпись драйверов не нужно с версии usbip-win 0.3.6-dev
 +++++ Установка сертификата и отключение цифровой подписи |
 +<code powershell>
 +# На клиенте
 +$cert = "C:\temp\usbip-win-0.3.5\usbip_test.pfx"
 +$certPass = ConvertTo-SecureString -AsPlainText "usbip" -Force
 +Import-PfxCertificate -FilePath "$cert" -CertStoreLocation Cert:\LocalMachine\TrustedPublisher -Password $certPass
 +Import-PfxCertificate -FilePath "$cert" -CertStoreLocation Cert:\LocalMachine\Root -Password $certPass
 +
 +# Ошибка отключения подписи драйверов
 +bcdedit /set TESTSIGNING ON
 +Произошла ошибка при задании данных элемента.
 +Значение защищено политикой безопасной загрузки и не может быть изменено или удалено.
 +# Решение - вход в загрузочное меню (Shift + reboot) и отключение подписи там.
 +</code>
 +++++
 +</WRAP>
 +
 +<code bash>
 +# Список локальных USB-устройств
 +usbip list -l
 +
 +# Расшарить девайс из списка
 +usbip bind -b 1-1
 +# Убрать общий доступ
 +usbip unbind -b 1-1
 +
 +# Список девайсов на сервере с клиента
 +usbip list -r 192.168.1.24
 +# Примонтировать на клиенте
 +usbip attach -r 192.168.1.24 -b 1-1
 +# Список примонтированных девайсов
 +usbip port
 +# Отмонтировать девайс по номеру порта из списка
 +usbip detach -p 1
 +</code>
 +
 +Идея монтирования скриптом по фильтрации ID устройства (здесь: 0529:0001) не подходит, т. к. ID бывают одинаковыми у нескольких устройств, а задать имя или псевдоним для устройства невозможно. Поэтому только по номеру (3-3, 3-4), и вести таблицу соответствия.
 +<code>
 +Exportable USB devices
 +======================
 + - 10.1.0.236
 +        3-4: Aladdin Knowledge Systems : HASP copy protection dongle (0529:0001)
 +           : /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4
 +           : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)
 +
 +        3-3: Aladdin Knowledge Systems : HASP copy protection dongle (0529:0001)
 +           : /sys/devices/pci0000:00/0000:00:14.0/usb3/3-3
 +           : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)
 +           :  0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)
 +</code>
 +
 +===== Решение проблем =====
 +==== Сервер - failed to open usb.ids ====
 +<code bash>
 +usbip: error: failed to open /usr/share/hwdata//usb.ids
 +# Решение:
 +mkdir /usr/share/hwdata
 +ln -s /usr/share/misc/usb.ids /usr/share/hwdata/usb.ids
 +</code>
 +
 +==== Клиент - cannot find device ====
 +При попытке монтирования с клиента возникает ошибка
 +<code powershell>
 +.\usbip.exe -a 10.1.0.236 3-3
 +usbip err: usbip_windows.c: 829 (attach_device) cannot find device
 +# При этом устройство с клиента видно
 +.\usbip.exe -l 10.1.0.236
 +- 10.1.0.236
 +     3-3: Aladdin Knowledge Systems : HASP v0.06 (0529:0001)
 +        : /sys/devices/pci0000:00/0000:00:14.0/usb3/3-3
 +        : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)
 +</code>
 +Проблема решается путем проброса USB-девайса //на сервере// самому себе с его последующим отключением.
 +<code bash>
 +usbip attach --remote=localhost --busid=3-3
 +sleep 3
 +usbip detach --port=00
 +usbip: info: Port 0 is now detached!
 +</code>
 +
 +==== Клиент - usbvbus interface is not registered ====
 +При попытке монтирования с клиента возникает ошибка
 +<code powershell>
 +.\usbip.exe -a 10.1.0.236 3-3
 +usbip err: usbip_windows.c:  62 (usbip_vbus_dev_node_name) usbvbus interface is not registered
 +usbip err: usbip_windows.c: 654 (import_device) open vbus driver
 +usbip err: usbip_windows.c: 840 (attach_device) query
 +</code>
 +
 +Решение - необходимо поставить в систему "старое устройство" (USB/IP Enumerator), указав драйвер usbipenum.
 +
 +Если просто установить usbipenum.inf, то это не поможет. Через pnputil "старое устройство" [[https://stackoverflow.com/questions/53864109/windows-driver-install-legacy-hardware-with-command-line-tool|тоже не ставится]].
 +===== Ссылки =====
 +[[https://www.linux-magazine.com/Issues/2018/208/Tutorial-USB-IP|Tutorial – USB/IP (LinuxMagazine)]]\\
 +[[https://itsecforu.ru/2022/03/15/%F0%9F%90%A7-%D0%BA%D0%B0%D0%BA-%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%BE%D0%B1%D1%89%D0%B8%D0%B9-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF-%D0%BA-usb-%D1%83%D1%81/|Как предоставить общий доступ к USB-устройству по сети]]\\
 +[[https://habr.com/ru/post/308860/|Укрощаем USB/IP]]\\
 +[[https://wiki.archlinux.org/title/USB/IP|USB/IP (ArchWiki)]]\\
 +[[https://wiki.astralinux.ru/pages/viewpage.action?pageId=79168306|Предоставление удалённого доступа к USB-носителям и токенам c помощью USB-over-IP (Astra Linux)]]\\
 +[[https://unix.stackexchange.com/questions/528769/usbip-startup-with-systemd|usbip startup with systemd]]\\
 +[[https://habr.com/ru/company/selectel/blog/668590/|USB over IP для личного использования: организовываем клиент-серверный комплекс на Linux и Windows]] (31.05.2022)\\
 +[[https://disweb.ru/linux/centos/usbip-na-centos-7-usb-cherez-set/|USBIP на CentOS 7 (USB через сеть)]] (10.03.2021)
 +
 +https://github.com/cezanne/usbip-win ([[https://github.com/cezanne/usbip-win/releases/latest|releases]])\\
 +https://github.com/dorssel/usbipd-win
 +
 +===== NIO Electronics EUSB4ep =====
 +https://nio-electronics.ru, клон https://www.virtualhere.com, который, в свою очередь, [[https://steamcommunity.com/app/440520/discussions/0/3130541122085973446/|is most likely just a copy of usbip]].
 +
 +Модель NIO-EUSB 4ep
 +<WRAP group>
 +<WRAP half column>
 +<code bash>
 +root@usb:~# lsb_release -a
 +LSB Version:    n/a
 +Distributor ID: poky
 +Description:    Poky (Yocto Project Reference Distro) 3.1.17
 +Release:        3.1.17
 +Codename:       dunfell
 +
 +root@usb:~# uname -a
 +Linux usb 5.15.48 #1 SMP Thu Jun 16 11:30:35 UTC 2022 armv7l GNU/Linux
 +
 +root@usb:~# cat /proc/cpuinfo
 +processor       : 0
 +model name      : ARMv7 Processor rev 4 (v7l)
 +BogoMIPS        : 37.89
 +Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
 +CPU implementer : 0x41
 +CPU architecture: 7
 +CPU variant     : 0x0
 +CPU part        : 0xc07
 +CPU revision    : 4
 +
 +processor       : 1
 +model name      : ARMv7 Processor rev 4 (v7l)
 +BogoMIPS        : 37.89
 +Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
 +CPU implementer : 0x41
 +CPU architecture: 7
 +CPU variant     : 0x0
 +CPU part        : 0xc07
 +CPU revision    : 4
 +
 +Hardware        : Allwinner sun7i (A20) Family
 +Revision        : 0000
 +Serial          : 165166450942d681
 +
 +root@usb:~# cat /proc/meminfo
 +MemTotal:        1026384 kB
 +MemFree:          836840 kB
 +MemAvailable:     870952 kB
 +...
 +</code>
 +</WRAP>
 +
 +<WRAP half column>
 +{{:tasks:pasted:20230301-141900.png}}
 +
 +<code bash>
 +root@usb:~# cat /opt/nioeusb/service/niousbsh.cfg
 +AutoAttachToKernel=1
 +ClaimPorts=0
 +DisableEasyFind=1
 +HideClientInfo=${VHHideClientInfo}
 +License=${VHLicense}
 +MDNSServiceName=_rhusb._tcp
 +ServerName=${VHServerName}
 +TCPPort=${VHTCPPort}
 +UseAVAHI=${VHUseAVAHI}
 +UseAvahiServiceFile=0
 +clientAuthorization=/opt/nioeusb/service/clientAuthorization.sh "$VENDOR_ID$" "$PRODUCT_ID$" "$CLIENT_ID$" "$CLIENT_IP$" "$PRODUCT_SERIAL$" "$PASSWORD$" "$DEVPATH$" "$NICKNAME$" "$NUM_BINDINGS$"
 +clientDeauthorization=/opt/nioeusb/service/clientDeauthorization.sh "$VENDOR_ID$" "$PRODUCT_ID$" "$CLIENT_ID$" "$CLIENT_IP$" "$PRODUCT_SERIAL$" "$PASSWORD$" "$DEVPATH$" "$NICKNAME$"
 +onChangeNickname=/opt/nioeusb/service/onChangeNickname.sh "$VENDOR_ID$" "$PRODUCT_ID$" "$NICKNAME$" "$NEW_NICKNAME$" "$CLIENT_ID$" "$CLIENT_IP$" "$DEVPATH$"
 +onDeviceIgnore=/opt/nioeusb/service/onDeviceIgnore.sh "$VENDOR_ID$" "$PRODUCT_ID$" "$CLIENT_ID$" "$CLIENT_IP$"
 +onDeviceKick=/opt/nioeusb/service/onDeviceKick.sh "$VENDOR_ID$" "$PRODUCT_ID$" "$KICKER_ID$" "$KICKER_IP$" "$CLIENT_ID$" "$CLIENT_IP$" "$PRODUCT_SERIAL$" "$DEVPATH$" "$NICKNAME$"
 +onServerRename=/opt/nioeusb/service/onServerRename.sh "$NEW_NAME$"
 +It=1600598652
 +EasyFindId=KX1vnwHEhNimJz3HjRcHJ5
 +EasyFindPin=3yfYna
 +
 +root@usb:~# cat /opt/nioeusb/service/niousbsh.env
 +VHLicense=02450942d681,4,MCICD...XP8
 +VHHideClientInfo=0
 +VHTCPPort=17602
 +VHServerName=usb
 +VHUseAVAHI=0
 +SSLCert=/etc/niousb/niousbVH.pem
 +SSLPort=17601
 +
 +root@usb:~# cat /etc/niousb/niousbVH.pem
 +cat: can't open '/etc/niousb/niousbVH.pem': No such file or directory
 +</code>
 +
 +</WRAP>
 +</WRAP>
 +
 +
 +<code>
 +root@usb:~# cat /var/log/messages
 +Mar  1 17:05:19 niousb syslog.info syslogd started: BusyBox v1.31.1
 +Mar  1 17:05:19 niousb cron.info crond[172]: (CRON) STARTUP (1.5.5)
 +Mar  1 17:05:19 niousb cron.info crond[172]: (CRON) INFO (Syslog will be used instead of sendmail.)
 +Mar  1 17:05:19 niousb cron.info crond[172]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 59% if used.)
 +Mar  1 17:05:24 niousb user.info vhusbdarmpi2[214]: >>> Starting VirtualHere USB Server v4.4.7 (Built: Dec 10 2022, 21:26:07)<<<
 +Mar  1 17:05:24 niousb user.info vhusbdarmpi2[214]: Using configuration /opt/nioeusb/service/niousbsh.cfg
 +Mar  1 17:05:25 niousb user.info vhusbdarmpi2[217]: Server licensed to=02450942d681 max_devices=4
 +Mar  1 17:05:25 niousb user.info vhusbdarmpi2[217]: Using large URB's
 +Mar  1 17:05:25 niousb user.info vhusbdarmpi2[217]: Listening on all network interfaces at TCP port 17602
 +Mar  1 17:05:25 niousb user.info vhusbdarmpi2[217]: Found Low speed device [0529:0001] "AKS, HASP HL 3.25" at address 212
 +Mar  1 17:05:25 niousb user.info vhusbdarmpi2[217]: Found High speed device [0c45:6341] "HD 720P Webcam, HD 720P Webcam" at address 213
 +Mar  1 17:05:25 niousb user.info vhusbdarmpi2[217]: Found Low speed device [0529:0001] "AKS, HASP 2.17" at address 211
 +Mar  1 17:05:25 niousb user.info vhusbdarmpi2[217]: Found High speed device [8564:1000] "JetFlash, Mass Storage Device" at address 214
 +Mar  1 17:05:31 niousb user.info vhusbdarmpi2[217]: 192.168.1.59 connected as connection 1 (Standard TCP)
 +Mar  1 17:05:40 niousb user.info vhusbdarmpi2[217]: 192.168.1.138 connected as connection 2 (Standard TCP)
 +Mar  1 17:09:29 niousb user.info vhusbdarmpi2[217]: Unmanaging device 214 [8564:1000]
 +Mar  1 17:10:26 niousb user.info vhusbdarmpi2[217]: Unmanaging device 211 [0529:0001]
 +Mar  1 17:10:27 niousb user.info vhusbdarmpi2[217]: Unmanaging device 212 [0529:0001]
 +Mar  1 17:10:29 niousb user.info vhusbdarmpi2[217]: Unmanaging device 213 [0c45:6341]
 +Mar  1 17:11:04 niousb user.info vhusbdarmpi2[217]: Connection 2 remotely disconnected gracefully (rx msg size)
 +Mar  1 17:11:15 niousb user.info vhusbdarmpi2[217]: Connection 2 successfully removed (reason:timeout)
 +Mar  1 17:23:51 niousb user.info vhusbdarmpi2[217]: Connection 1 remotely disconnected gracefully (rx msg size)
 +Mar  1 17:23:53 niousb user.info vhusbdarmpi2[217]: 10.1.53.59 connected as connection 3 (Standard TCP)
 +Mar  1 17:23:57 niousb user.info vhusbdarmpi2[217]: Connection 1 successfully removed (reason:timeout)
 +Mar  1 17:30:01 niousb cron.info CROND[281]: (root) CMD (/usr/bin/ntpdate-sync silent)
 +Mar  1 17:36:19 niousb auth.info sshd[287]: User root authorized keys /dev/null is not a regular file
 +Mar  1 17:36:22 niousb auth.info sshd[287]: Accepted password for root from 192.168.1.138 port 55473 ssh2
 +</code>
 +==== Клиент ====
 +<WRAP group>
 +<WRAP half column>
 +<code powershell>
 +# Имя службы
 +rhclient
 +# Отображаемое имя
 +USB Hub Over Network USB Sharing
 +# Описание
 +Provides virtualized access to USB devices over a network
 +# Параметры запуска службы
 +"C:\Users\username\Downloads\rhcl64.exe\rhcl64.exe" -n --config="C:\Users\username\AppData\Roaming\rhcl.ini"
 +</code>
 +
 +Help
 +<code>
 +USB Hub Over Network 5.2.8, USB Hub Over Network
 +Usage: rhcl64 [-h][-c <str>] [а] [-t <str>] [-p] [-q <str>] [-e] [-g]
 +[-r <str>] [-l <str>] [-m] [-d] [-x] [-i] [-b] [-u] [-y] [-w] [-n] 
 +
 +-h, --help                Display this help
 +-c, --config=<str>         configuration file to use
 +-a, --admin               administrator mode
 +-t, --control=<str>       Issue command to running client
 +-p, --preferipv6          Prefer IPv6/IPv4 dual-stack
 +-q, --language=<str>       Set language [EN-US, ZH-CN, FR-FR, RU-RU, DE-DE, IT-IT, ES-AR]
 +-e, --autofind-off        Start with auto-find off
 +-g, --start-minimized     Start the client minimized
 +-r, --redirect=<str>      When used with arguments t/d/x/i/u, redirect output to file instead of console
 +-l, --log=<str>             log file to write ('OsEventLog'=Event Log)
 +-m
 +-d, --install-drivers     install drivers
 +-x, --extract-drivers     extract drivers
 +-i, --install-service     Install client as a service (autofind on by default)
 +-b, --install-service-na  Install client as service (autofind off by default)
 +-u, --uninstall-service   Uninstall service
 +-y, --uninstall-drivers   Uninstall drivers
 +-w
 +-n
 +</code>
 +</WRAP>
 +
 +<WRAP half column>
 +rhcl.ini
 +<code ini>
 +[General]
 +AutoFind=0
 +MainFrameWidth=400
 +MainFrameHeight=250
 +MainFrameX=1096
 +MainFrameY=82
 +SSLClientCert=
 +SSLCAFile=
 +QualifyByName=1
 +QualifyByInterface=0
 +AutoUseDelaySec=0
 +RetryAutoUseDelaySec=2
 +AutoRefreshLookupPeriod=30
 +BonjourLookupTimeout=4
 +BonjourResolverTimeout=2
 +Language=RU-RU
 +SSLPort=17601
 +ReverseLookup=0
 +AutoMinimize=1
 +[Settings]
 +ManualHubs=usb.example.com:17602
 +[AutoShare]
 +usb.212=0
 +usb.1.1321.212=0
 +usb.1.1321=0
 +All=1
 +[Transport]
 +PingInterval=3
 +PingTimeout=10
 +CompressionLimit=384
 +
 +</code>
 +</WRAP>
 +</WRAP>
 +
 +
 +
 +
 +
 +
 +==== Решение проблем ====
 +Есть ERP-система Галактика, был проброшен ключ, всё работает, установлена служба и для ключа установлена опция **Auto-Use Device/Port**. Но после перезагрузки сервера клиент usb ключ видит и он подключен, а ERP-система - нет. Постановка службы ключа ERP в зависимость от службы USB Hub Over Network USB Sharing ничего не меняет.
 +<code dos>
 +reg add HKLM\SYSTEM\CurrentControlSet\Services\HWServer /v DependOnService /t REG_MULTI_SZ /d rhclient /f
 +</code>
 +
 +Решение - переключить службу ключа ERP в ручной запуск, а в планировщике сделать запуск скрипта при загрузке компьютера (система очень старая, powershell нет):
 +<code dos>
 +ping 127.0.0.1 -n 20
 +net start hwserver
 +</code>
 +
 +==== Вопросы/ответы ====
 +//Настройки, например, ограничения порта на IP-адрес надо делать на обеих нодах отдельно? Синхронизации настроек между нодами не существует?//\\
 +Настройки, сделанные в NIO-EUSB на кластерном IP синхронизируются с backup-нодой.
 +
 +//Если задавать алиас для USB-устройства, служба USB перезапускается. Это влияет на ключи, которые уже работают? Повлияет ли это на доступность сервисов, которым нужен доступ к ключам?//\\
 +В разделе Admin ACL в разделе Rename можно добавить доверенный IP, и можно с этого IP с клиента без рестарта переименовывать устройства.
 +
 +//Без рестарта только с клиента? Если делать на вкладке Ports на сервере, то в любом случае будет рестарт?//\\
 +Переименовывать alias да, смена acl и description не требует рестарт.
 +
 +//Каким образом keepalived переключается с одной ноды на другую? Если он переключился на вторую ноду, то обратно он не переключается, даже если первая опять доступна?//\\
 +Keepalived переключает мастер на слейв при потере мастером сети или недоступностью мастера. Ноды равнозначны, после возврата старого мастера в строй, переключений не происходит, дабы избежать лишние.
 +
 +//Ранее вы мне сообщили, что алиас можно переименовывать с клиента без перезапуска службы USB. Я переименовал его с клиента, но на самом сервере алиас остаётся пустым.\\
 +Конфигурирование проводилось на кластерном IP. Почему алиас не прописывается на устройстве?//\\
 +Необходимо обновить веб-страницу (Ctrl-R). Полоса загрузки сверху каждые несколько секунд - это проверка информации о подключенных usb-портах.\\
 +Постоянно конфигурацию считывать смысла нет, переименование со стороны клиента это скорее как внешнее событие, нам можно подумать, как считывать его, если повлияло внешнее событие.
 +
 +//Где можно найти changelog прошивок?//\\
 +[[https://nio-electronics.ru/ru/support/changes-server.txt]]

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki