局域网中USB远程共享:USB/IP

USB/IP是一种基于网络的设备共享机制,可将电脑A(server端)连接的USB设备通过网络共享给远程电脑B(client端)

USB/IP有很多的实现方式(程序),除了下文中使用的免费程序,还有商用程序:

  • USB Network Gate
  • FlexiHub
  • VirtualHere
  • USB over Network
    更多见这篇文章

Server端(电脑A,连接USB设备)

Windows

PS:本文选取的windows上的开源软件为usbip-win,安装配置方法也可以看官方README

安装

  • 首先下载官方编译好的软件压缩包,并解压。如果想要自己编译的话参考官方代码的README

  • 双击文件usbip_test.pfx准备导入证书。证书需要导入两遍,分别导入到“受信任的根证书颁发机构”和“受信任的发布者”局域网中USB远程共享:USB/IP_第1张图片局域网中USB远程共享:USB/IP_第2张图片局域网中USB远程共享:USB/IP_第3张图片局域网中USB远程共享:USB/IP_第4张图片局域网中USB远程共享:USB/IP_第5张图片

  • 管理员身份打开CMD或者PowerShell,进入软件所在目录,运行命令开启测试签名

    bcdedit.exe /set TESTSIGNING ON
    
  • 开放usbip所需端口:默认端口是3240,到防火墙中的入站

    • 也可以用其他端口,后续配置的时候需要使用这个端口
      局域网中USB远程共享:USB/IP_第6张图片局域网中USB远程共享:USB/IP_第7张图片局域网中USB远程共享:USB/IP_第8张图片局域网中USB远程共享:USB/IP_第9张图片局域网中USB远程共享:USB/IP_第10张图片
  • 重启电脑

  • (可选)下载最新的usb.ids,替换软件所在目录的usb.ids文件。

    • 每个USB设备都有自己ID(类似网络的IP地址),而usb.ids(类似DNS服务器)中记录了所有已知的USB设备ID对应的名称(分成供应商名称和设备名称,类似网站域名),方便后续快速识别USB设备。
    • 但是由于USB设备在不停出新,较新的USB设备的ID并没有在usb.ids中记录过,因此在后续的识别过程中会显示“unknown product”等字样,表示在usb.ids文件中没有相关记录。这不用担心,找不到记录也是可以用的,只不过不方便我们识别罢了

配置

  • 管理员身份打开CMD或者PowerShell,进入软件所在目录

  • 将USB设备连接到电脑,然后使用命令.\usbip.exe list -l列出所有识别到的USB设备

    • 显示“unknown product”是因为在usb.ids文件中没有相关记录,只影响你对USB设备的识别,不影响后续操作
    • 我这里显示了五个USB设备(每个“-”表示一个设备)局域网中USB远程共享:USB/IP_第11张图片
  • 找到自己想要远程共享的USB设备,记录下它的busid,格式为[数字]-[数字]

    • 如果识别不到的话,可以在USB设备连接前后分别运行上面的命令
    • 假设我想要远程共享的设备是第四个带SATA字样的USB设备(我的移动硬盘),它的busid为1-181
  • 将USB设备绑定至usbip

    • 注意,绑定后,本地电脑就不能使用这个USB设备了
    .\usbip.exe bind -b [busid]
    # 例如我这儿就是
    .\usbip.exe bind -b 1-181
    

    在这里插入图片描述

  • 启动usbipd服务

    .\usbipd.exe -d -4
    # 如果想用其他端口,且安装的时候配置过防火墙
    .\usbipd.exe -d -4 -tPORT [端口]
    

    在这里插入图片描述

  • 使用完成后,可以将USB设备跟usbip解绑

    .\usbip.exe unbind -b [busid]
    

    然后还需要到“设备和打印机”中,找到连接的USB设备,将所有“USB/IP STUB”卸载,最后重新拔插USB设备
    局域网中USB远程共享:USB/IP_第12张图片局域网中USB远程共享:USB/IP_第13张图片局域网中USB远程共享:USB/IP_第14张图片

  • 如果不需要usbip了,可以关闭测试签名,然后重启

    bcdedit.exe /set TESTSIGNING OFF
    

Linux

安装

仅在Ubuntu上测试,其他发行版需要自己查资料(应该是差不多的)

  • 以root权限运行如下命令
    apt install linux-tools-`uname -r` linux-cloud-tools-`uname -r` linux-tools-common 
    # 下面两个不确定要不要安装,但是我都装了
    apt install linux-tools-generic linux-cloud-tools-generic
    

配置

  • 加载相关的内核模块:
    • 不确定重启电脑后需不需要再次加载
    sudo modprobe usbip-core
    sudo modprobe vhci-hcd
    sudo modprobe usbip_host
    
  • 关闭防火墙:ufw disable
    • 或者在防火墙中开启3240端口的TCP连接

以下操作根window很像,具体细节&图片见上面windows的配置过程

  • 将USB设备连接到电脑,然后使用命令usbip list -l列出所有识别到的USB设备
  • 找到自己想要远程共享的USB设备,记录下它的busid,格式为[数字]-[数字]
  • 将USB设备绑定至usbip
    usbip bind -b [busid]
    # 例如
    usbip bind -b 1-181
    
  • 启动usbipd服务
    usbipd -d -4
    # 如果想用其他端口,且安装的时候配置过防火墙
    usbipd -d -4 -tPORT [端口]
    
  • 使用完成后,可以将USB设备跟usbip解绑
    usbip unbind -b [busid]
    

Client端(电脑B)

Windows

PS:安装配置方法也可以看官方README

安装方式与上面server端几乎一样,只是多了一个步骤

  • 安装VHCI驱动:以管理员身份打开CMD或者PowerShell,进入软件所在目录,运行如下命令
    usbip.exe install
    
    如果后续不需要了,可以把驱动卸载了
    usbip.exe ubinstall
    

配置

  • 管理员身份打开CMD或者PowerShell,进入软件所在目录

  • 查看电脑A上可用的USB设备

    usbip.exe list --remote [电脑A的IP]
    
  • USB 设备绑定至本机

    usbip.exe attach --remote=[电脑A的IP] --busid=[想要绑定设备的busid]
    
  • 查看已经绑定的远程USB设备

    usbip.exe port
    
  • 将已经绑定的远程USB设备解绑:端口来自命令usbip port输出中"Port"后面的数字

    usbip.exe detach -p [端口]
    

Linux

安装方式与server端一样

配置

  • 查看电脑A上可用的USB设备

    usbip list --remote [电脑A的IP]
    
  • USB 设备绑定至本机

    usbip attach --remote=[电脑A的IP] --busid=[想要绑定设备的busid]
    
  • 查看本机USB设备,应该能看到绑定好的USB设备

    lsusb
    

    例如
    局域网中USB远程共享:USB/IP_第15张图片

  • 查看已经绑定的远程USB设备

    usbip port
    

    局域网中USB远程共享:USB/IP_第16张图片

  • 将已经绑定的远程USB设备解绑:端口来自命令usbip port输出中"Port"后面的数字

    usbip detach -p [端口]
    

参考连接
Linux 系统使用 USB/IP 远程共享 USB 设备
USB/IP PROJECT
Linux usb 5. usbip (USB Over IP) 使用实例
USB/IP for Windows

你可能感兴趣的:(USB/IP,USB远程共享)