1126 字
6 分钟
在 Wifi Stick (随身 WIFI 棒子) 上配置 USB 网络共享 (RNDIS)

本文主要介绍如何在随身 WIFI 棒子上配置 USB 网络共享 (RNDIS), 以便 Windows 可以自动识别

由于我所使用的 OpenStick 项目默认已经配置了适用于 *nix 的 USB 网络共享脚本, 需要直接修改该脚本, 否则 USB 接口会被占用导致无法修改

配置 RNDIS#

  1. 修改如下脚本

该脚本由 Systemd Unit mobian-usb-gadget.service 自动调起

/usr/sbin/mobian-usb-gadget

setup() 函数中, 在 # Setting Up Adbd 前添加如下命令, 便于 Windows 识别为 RNDIS 设备

Terminal window
echo 0xEF > $CONFIGFS/bDeviceClass
echo 0x02 > $CONFIGFS/bDeviceSubClass
echo 0x01 > $CONFIGFS/bDeviceProtocol
echo 0x1d6b > $CONFIGFS/idVendor
echo 0x0104 > $CONFIGFS/idProduct
  1. 编辑如下 NetworkManager 配置脚本

该脚本由 Systemd Unit mobian-setup-usb-network.service 自动调起

Terminal window
/usr/sbin/mobian-setup-usb-network

将下面的 IP 和网段改为你要的

Terminal window
nmcli connection add con-name USB \
ifname usb0 \
type ethernet \
ip4 10.22.33.1/24

并在 if 的最后添加如下命令设置 USB 接口 IP, 注意网段与上方配置一致

Terminal window
sleep 1
ip link set usb0 up
ip addr add 10.22.33.1/24 dev usb0 2>/dev/null
  1. 禁用 NetworkManager USB 接口的配置
Terminal window
sudo mv /etc/NetworkManager/system-connections/USB.nmconnection /etc/NetworkManager/system-connections/USB.nmconnection.bak
NOTE

若 NetworkManager 配置文件禁用了对 USB 接口的管理, 会使得配置无效
请检查如下文件

/etc/NetworkManager/NetworkManager.conf

是否含有如下内容 (若有请删除)

unmanaged-devices=interface-name:usb0
  1. 链接 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 的服务

  1. 创建配置文件
Terminal window
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.1
address=/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 DNS
server=8.8.8.8
# ignore `/etc/resolv.conf`
no-resolv

部分 NetworkManager 时会使用内部的 internal DHCP/DNS 处理器, 因此需要在

/etc/NetworkManager/NetworkManager.conf

写入

[main]
dns=dnsmasq

方可生效 (记得重启 NetworkManager)

  1. 重启 NetworkManager 上述命令须在重启 NetworkManager 后生效
Terminal window
sudo systemctl restart NetworkManager

网速测试#

使用 iperf3 单线程测试, 可以跑道 100 Mbps 左右

C:\Users\->iperf3 -c 10.22.33.1 -P 1 -R
Connecting to host 10.22.33.1, port 5201
Reverse 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) 空间#

Terminal window
# 删除孤立依赖包
sudo apt autoremove
# 删除孤立依赖包及其配置文件
# sudo apt autoremove --purge
# 删除 apt 包缓存 (不包括当前版本的包)
sudo apt autoclean
# 删除未使用依赖
# 需要先安装 `deborphan`
# sudo apt install deborphan
sudo apt purge $(deborphan)
# 限制日志只保留最近 2 天的内容
sudo journalctl --vacuum-time=2d
# 限制日志占用空间不大于 100M
sudo journalctl --vacuum-size=100M

libconfig9 库是 USB 网桥必要的, 若不小心删除可以重新安装

Terminal window
sudo apt install libconfig9

清除 Ruby 残留

Terminal window
sudo apt remove ruby ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit ruby-xmlrpc ruby2.7-doc rubygems-integration
sudo rm -rf /usr/share/ri

清除不需要的语言

Terminal window
sudo apt install localepurge
sudo localepurge
在 Wifi Stick (随身 WIFI 棒子) 上配置 USB 网络共享 (RNDIS)
作者
lovemilk (lovemilk233, lovemilk2333)
发布于
2026-04-14