本文主要介绍如何在随身 WIFI 棒子上配置 USB 网络共享 (RNDIS), 以便 Windows 可以自动识别
由于我所使用的 OpenStick 项目默认已经配置了适用于 *nix 的 USB 网络共享脚本, 需要直接修改该脚本, 否则 USB 接口会被占用导致无法修改
配置 RNDIS
- 修改如下脚本
该脚本由 Systemd Unit
mobian-usb-gadget.service自动调起
/usr/sbin/mobian-usb-gadget在 setup() 函数中, 在 # Setting Up Adbd 前添加如下命令, 便于 Windows 识别为 RNDIS 设备
echo 0xEF > $CONFIGFS/bDeviceClassecho 0x02 > $CONFIGFS/bDeviceSubClassecho 0x01 > $CONFIGFS/bDeviceProtocolecho 0x1d6b > $CONFIGFS/idVendorecho 0x0104 > $CONFIGFS/idProduct- 编辑如下 NetworkManager 配置脚本
该脚本由 Systemd Unit
mobian-setup-usb-network.service自动调起
/usr/sbin/mobian-setup-usb-network将下面的 IP 和网段改为你要的
nmcli connection add con-name USB \ ifname usb0 \ type ethernet \ ip4 10.22.33.1/24并在 if 的最后添加如下命令设置 USB 接口 IP, 注意网段与上方配置一致
sleep 1ip link set usb0 upip addr add 10.22.33.1/24 dev usb0 2>/dev/null- 禁用 NetworkManager USB 接口的配置
sudo mv /etc/NetworkManager/system-connections/USB.nmconnection /etc/NetworkManager/system-connections/USB.nmconnection.bakNOTE若 NetworkManager 配置文件禁用了对 USB 接口的管理, 会使得配置无效
请检查如下文件/etc/NetworkManager/NetworkManager.conf是否含有如下内容 (若有请删除)
unmanaged-devices=interface-name:usb0
- 链接 Windows 设备 此时将 Wifi Stick 插入 Windows 设备的 USB 接口, 应该可以在 Windows 侧看到一个驱动未安装 (代码: 28) 的 RNDIS 设备 (位于 其他设备 类别)
双击该设备, 单击 “更新驱动程序” > “浏览我的电脑以查找驱动程序” > “让我从计算机的可用驱动程序列表中选取” > 在 “常见硬件类型” 内选择 “网络适配器” > 厂商选择 “Microsoft”, 型号选择最下面的 “远程 NDIS 兼容设备” > “下一页” > “是” (强制安装驱动程序)
此时, 可以看到 Windows 弹出一个新的网络连接, 也新增了一个网络适配器, 并获取到了 IP 地址
如果无法获取 IP 地址, 请尝试在 Wifi Stick 安装 Dnsmasq (不需要手动启用服务, 会由 NetworkManager 调起), 使用
Terminal window sudo apt install dnsmasq
如此, 便配置成功了. 您可以使用 10.22.33.1:<port> 访问任意部署于 Wifi Stick 的服务了
TIP如果要连接 *nix 设备, 可能需要手动建立连接并设置 IP 地址
[可选] 配置 Dnsmasq
为了避免需要记忆 Wifi Stick IP, 可以修改 Dnsmasq 的配置进行 Hosts, 从而使用例如 stick.local 访问 Wifi Stick 的服务
- 创建配置文件
sudo mkdir -p /etc/NetworkManager/dnsmasq.d/后, 可以在该文件夹下写入配置. 例如, 要将 stick.local Hosts 到 10.22.33.1, 可以在
/etc/NetworkManager/dnsmasq.d/stick-hosts.conf写入
address=/stick.lan/10.22.33.1address=/stick.local/10.22.33.1
# 同时也可以指定 `stick.local` 不转发到上游 DNS 服务器# local=/stick.lan/# local=/stick.local/要绑定 MAC 地址
dhcp-host=<mac-address>,<ip-address>,<rent>
# 例如: dhcp-host=AA:BB:CC:DD:EE:FF,10.22.33.100,8h设置上游 DNS
# Google Public DNSserver=8.8.8.8
# ignore `/etc/resolv.conf`no-resolv部分 NetworkManager 时会使用内部的 internal DHCP/DNS 处理器, 因此需要在
/etc/NetworkManager/NetworkManager.conf写入
[main]dns=dnsmasq方可生效 (记得重启 NetworkManager)
- 重启 NetworkManager 上述命令须在重启 NetworkManager 后生效
sudo systemctl restart NetworkManager网速测试
使用 iperf3 单线程测试, 可以跑道 100 Mbps 左右
C:\Users\->iperf3 -c 10.22.33.1 -P 1 -RConnecting to host 10.22.33.1, port 5201Reverse mode, remote host 10.22.33.1 is sending[ 5] local 10.22.33.136 port 10873 connected to 10.22.33.1 port 5201[ ID] Interval Transfer Bitrate[ 5] 0.00-1.00 sec 10.0 MBytes 83.7 Mbits/sec[ 5] 1.00-2.00 sec 10.9 MBytes 91.2 Mbits/sec[ 5] 2.00-3.00 sec 10.9 MBytes 91.2 Mbits/sec[ 5] 3.00-4.00 sec 10.9 MBytes 91.2 Mbits/sec[ 5] 4.00-5.00 sec 10.9 MBytes 91.2 Mbits/sec[ 5] 5.00-6.00 sec 11.0 MBytes 92.3 Mbits/sec[ 5] 6.00-7.00 sec 10.9 MBytes 91.2 Mbits/sec[ 5] 7.00-8.00 sec 10.9 MBytes 91.2 Mbits/sec[ 5] 8.00-9.00 sec 11.0 MBytes 92.3 Mbits/sec[ 5] 9.00-10.00 sec 10.8 MBytes 90.2 Mbits/sec- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bitrate Retr[ 5] 0.00-10.00 sec 109 MBytes 91.1 Mbits/sec 0 sender[ 5] 0.00-10.00 sec 108 MBytes 90.6 Mbits/sec receiver
iperf Done.BTW, 清理磁盘 (emmc) 空间
# 删除孤立依赖包sudo apt autoremove
# 删除孤立依赖包及其配置文件# sudo apt autoremove --purge
# 删除 apt 包缓存 (不包括当前版本的包)sudo apt autoclean
# 删除未使用依赖# 需要先安装 `deborphan`# sudo apt install deborphansudo apt purge $(deborphan)
# 限制日志只保留最近 2 天的内容sudo journalctl --vacuum-time=2d# 限制日志占用空间不大于 100Msudo journalctl --vacuum-size=100M
libconfig9库是 USB 网桥必要的, 若不小心删除可以重新安装Terminal window sudo apt install libconfig9
清除 Ruby 残留
sudo apt remove ruby ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit ruby-xmlrpc ruby2.7-doc rubygems-integrationsudo rm -rf /usr/share/ri清除不需要的语言
sudo apt install localepurgesudo localepurge