WSTunnel4Magisk 是面向KernelSU/Magisk(以及其兼容环境)的WSTunnel前后端配套环境,支持:
- 多实例运行(每个实例独立配置、拥有独立日志和开机自启动开关)
- 非特权模式(通过
su shell -c执行,并复制二进制到/data/local/tmp/wstunnel-<id>) - 基于SolidJS开发的WebUI
- Action 按钮一键全部启动 / 全部关闭
注意: 当前只兼容arm64-v8a
P.S.: 本模块的设计风格很大程度上源于Hyprid Mount, 若有挂载的需求请务必试试这个美观与实用兼具的优秀模块
module/: 模块模板根目录module/wstunnelctl.sh: 控制脚本(实例管理、启停、状态、日志)module/webroot/: KernelSU WebUI 页面module/customize.sh: 安装脚本(解包、拷贝二进制、初始化数据目录)module/service.sh: 开机启动module/action.sh: 一键启停build-module.sh: 构建脚本prebuilt/arm64-v8a/wstunnel: 编译好的wstunnel二进制放在这
- 安装后和
post-fs-data:确保至少存在一个default实例 service.sh:执行start-autostart,仅拉起AUTOSTART=1的实例action.sh:- 实例运行 ->
stop all - 反之 ->
start all
- 实例运行 ->
CLI控制脚本:
bash /data/adb/modules/wstunnel/wstunnelctl.sh <command>命令:
ensure-defaultstart [id|all]stop [id|all]restart [id|all]status [id]instancesupsert-instance <id> <enabled> <autostart> <privileged> <label_b64> <src_host> <src_port> <dst_host> <dst_port> <args_b64>delete-instance <id>set-enabled <id> <0|1>tail-log [id]
运行时目录固定为:
/data/adb/wstunnel
其中:
instances/*.conf: 多实例配置log.<id>: 实例日志pid.<id>: 实例 PIDwstunnel.args: 预置配置
关于多实例:每个实例都会保存为<id>.conf
字段说明:
ID: 实例 IDENABLED: 启用AUTOSTART: 开机启动PRIVILEGED: 特权模式LABEL: 展示名称SRC_HOST/SRC_PORT: 本地绑定DST_HOST/DST_PORT: 远端目标ARGS: 拼合而成的 wstunnel 启动参数
需要注意的是DNS设置会直接作为参数插入至ARGS里
在su shell -c的低权限环境下域名解析是存在问题的——这意味着你必须手动指定DNS才能通网,此时DNS参数不可缺省
运行产生的文件:
/data/adb/wstunnel/pid.<id>/data/adb/wstunnel/log.<id>
参考 WSTunnel-How To Build,编译前你需要先安装RUST的aarch64-linux-android工具链并且PATH已有NDK工具链,编译命令:
cargo build --release --package wstunnel-cli --target aarch64-linux-android将输出的二进制放置到:
android-module/prebuilt/arm64-v8a/wstunnel
本模块已经切换至SolidJS版本——但是旧版WebUI依旧存在,两个WebUI版本的显示效果基本一致,如果你想使用旧版WebUI那么可以略过这一步
(你需要预先安装NodeJS 20+) 在项目根目录下
cd android-module/webui-solid
npm install
npm run build在仓库根目录执行:
新版:
WEBUI_FLAVOR=solid ./android-module/build-module.sh旧版:
WEBUI_FLAVOR=legacy ./android-module/build-module.sh最后模块压缩包会放在
android-module/out/wstunnel-module-<version>.zip
Hybrid Mount: 本模块的WebUI设计参考
WSTunnel: WSTunnel服务端与客户端实现
