Android 系统级 sing-box 透明代理模块
支持 eBPF、TCP / UDP、分应用代理、节点订阅与 Clash API
下载模块 · 使用文档 · Android 管理器 · 管理器源码 · Telegram
中文 | English
NetProxy 是面向已 Root Android 设备的系统级透明代理模块。模块以内置 sing-box 为代理核心,通过 cgroup 与 TC eBPF 接管系统及共享网络流量,并提供 Android 管理器、CLI 与 zashboard 三种管理入口。
支持 Magisk、KernelSU 与 APatch。节点、订阅、路由、DNS 和透明代理配置均保存在模块目录中,不依赖 VPN 模式运行。
src/module/ 模块安装与运行文件
src/native/netproxy/ 节点、订阅与 Catalog 原生组件
src/webui/ 模块 WebUI
src/android/ Android 管理器
Android 管理器与模块共用 netproxyctl JSON 契约,但保持独立的本地构建流程。仓库 CI 不编译或发布管理器,正式版本通过 Google Play 分发;完整版模块仍内置带广告的管理器 APK,供无法使用 Google Play 的设备安装。Android 构建说明见 管理器源码。
| 入口 | 适合场景 |
|---|---|
| Android 管理器(源码) | 日常使用,管理服务、节点、订阅、分应用代理、配置与日志 |
| CLI | 终端操作、自动化和故障排查 |
| Clash API + zashboard | 查看代理组、连接与延迟,进行运行时控制 |
Clash API 默认配置:
- Controller:
http://<设备IP>:9999 - zashboard:
http://<设备IP>:9999/ui/ - Secret:
singbox
控制器默认监听所有网络接口,请仅在可信网络中使用,并按需修改访问密钥。
- 使用 cgroup eBPF 接管本机 TCP、UDP 与 DNS 流量
- 无需 TUN 设备,也不修改 iptables、nftables 或策略路由
- 分应用黑名单 / 白名单、热点和 USB 共享代理
- 单节点链接、节点文件、Clash YAML 与订阅导入
- 手动节点选择与 URLTest 自动测速
- Rule、Global、Direct 出站模式
- 按 WiFi SSID 在基础模式与 Direct 之间自动切换
- Clash API、zashboard、连接管理与节点测速
- 订阅定时更新和规则集提前绕过
- 自动清理 eBPF 程序、Map 与 TC 挂载
Release 页面提供以下两个版本:
| 版本 | 文件名 | 包含内容 | 适用设备 |
|---|---|---|---|
| 完整版 | NetProxy_<版本>_<构建号>.zip |
sing-box、NetProxy 原生组件、zashboard 与 Android 管理器 APK | 默认推荐,可在刷入时安装配套管理器 |
| Lite 包 | NetProxy_<版本>_<构建号>_lite.zip |
与完整版相同的代理核心、CLI、eBPF 和 zashboard,不内置 Android 管理器 APK | 已从 Google Play 安装管理器,或只使用 CLI / zashboard 的用户 |
两个版本的代理能力完全一致。如果希望刷入模块时一并安装管理器,请选择完整版;Lite 用户仍可从 Google Play 安装管理器。
Important
eBPF 入站需要内核启用 BPF、cgroup v2 与 cgroup socket attach 能力。热点共享还需要可用的 TC eBPF 支持;不满足要求的内核无法启动本版本。
- 从 Releases 下载最新模块 ZIP。
- 在 Magisk、KernelSU 或 APatch 中刷入模块。
- 按安装提示选择内置管理器或 Google Play 版本,然后重启设备。
- 导入并选择节点,再通过管理器或 CLI 启动服务。
模块默认 AUTO_START=0。确认节点与配置可用后,可在管理器中启用开机启动,或将 config/module.conf 中的 AUTO_START 改为 1。
以下命令均需要 Root 权限。
# 查看服务状态
su -c '/data/adb/modules/netproxy/netproxyctl service status'
# 导入单个节点链接
su -c '/data/adb/modules/netproxy/netproxyctl node add "vless://..."'
# 导入节点文本或 Clash YAML
su -c '/data/adb/modules/netproxy/netproxyctl node import /sdcard/clash.yaml'
# 查看并选择节点
su -c '/data/adb/modules/netproxy/netproxyctl node list'
su -c '/data/adb/modules/netproxy/netproxyctl node use <分组 ID>/<节点标签>'
# 启动服务
su -c '/data/adb/modules/netproxy/netproxyctl service start'
# 查看或切换出站模式
su -c '/data/adb/modules/netproxy/netproxyctl mode'
su -c '/data/adb/modules/netproxy/netproxyctl mode rule'添加订阅(名称可省略,留空时自动获取):
su -c '/data/adb/modules/netproxy/netproxyctl sub add https://example.com/sub'
su -c '/data/adb/modules/netproxy/netproxyctl sub list'
su -c '/data/adb/modules/netproxy/netproxyctl sub update <分组 ID>'推荐使用 Android 管理器或 CLI 导入节点。模块内置的原生组件会把单链接、节点文件、Clash YAML 和订阅转换为模块需要的 sing-box Provider。
手写节点文件必须是一个完整的 sing-box 配置片段,顶层使用 outbounds 数组。不能直接把单个 outbound 对象作为文件根节点。
下面是 SOCKS5 节点示例:
{
"outbounds": [
{
"type": "socks",
"tag": "fr-socks",
"server": "proxy.example.com",
"server_port": 1080,
"version": "5",
"username": "user",
"password": "password"
}
]
}将节点文件导入 default 分组:
su -c '/data/adb/modules/netproxy/netproxyctl node import /sdcard/fr-socks.json'然后执行:
su -c '/data/adb/modules/netproxy/netproxyctl node list'
su -c '/data/adb/modules/netproxy/netproxyctl node use default/fr-socks'注意事项:
- sing-box 出站协议字段是
type,不是 Xray 配置中的protocol。 - 建议每个文件只放一个普通节点,并保证
tag在当前目录中唯一。 - 不要使用
direct、block、Proxy或Auto-Fastest作为节点标签。 - 当前节点目录中的 JSON 文件会共同参与启动;格式错误的文件可能导致核心无法加载。- 协议字段请以 sing-box Outbound 文档 为准。
netproxyctl [--json] service status|start|stop|restart|reload
netproxyctl [--json] catalog list|show <分组>
netproxyctl [--json] node list|current|show|add|import|export|edit|remove|use|delay
netproxyctl [--json] sub list|show|add|edit|update|update-all|activate|remove|history|cancel
netproxyctl [--json] mode [rule|global|direct|AllowAds]
netproxyctl [--json] app list|mode|users|add|remove|enable|disable
netproxyctl [--json] ebpf status [configured|all|local|shared] [--raw]
netproxyctl [--json] config list|read|check|validate|apply
netproxyctl [--json] logs show|clear|export
节点引用固定为 <分组 ID>/<节点标签>。自动模式用 node use auto [分组],分组测速用 node delay auto [分组]。sub add 可省略名称(sub add <URL>),此时按 Profile-Title、文件名、URL 主机名的顺序自动取名。
查看完整中文帮助:
su -c '/data/adb/modules/netproxy/netproxyctl help'| 路径 | 用途 |
|---|---|
config/module.conf |
开机启动、出站模式、当前节点、选择模式和订阅调度 |
config/ebpf/ebpf.conf |
eBPF 入站、分应用、共享网络与 Map 容量 |
config/singbox/confdir/ |
通用 sing-box 配置,包括 DNS、路由和 Clash API |
config/catalog/<分组 ID>/ |
节点与订阅分组,含 meta.json 与 provider.json |
config/singbox/source/ |
本地路由规则与规则集 |
logs/service.log |
模块服务与透明代理日志 |
logs/sing-box.log |
sing-box 核心日志 |
logs/subscription.log |
节点和订阅转换日志 |
常用默认值:
| 配置项 | 默认值 | 说明 |
|---|---|---|
AUTO_START |
0 |
默认不随开机启动 |
OUTBOUND_MODE |
rule |
规则分流 |
SELECTOR_MODE |
urltest |
自动测速选择 |
ACTIVE_GROUP_ID |
default |
当前生效的节点分组 |
EBPF_NETWORK |
空 | 同时接管 TCP 与 UDP |
EBPF_DNS_MODE |
hijack |
在 eBPF 入站劫持 TCP / UDP 53 |
EBPF_IPV6_MODE |
auto |
IPv6 接管策略,支持关闭、自动、始终和仅共享网络 |
EBPF_BYPASS_RULE_SETS |
direct ChinaIP |
在内核侧提前绕过可提取 CIDR 的规则集 |
EBPF_SHARED_NETWORK |
0 |
默认关闭热点与共享网络代理 |
WIFI_AUTO_SWITCH |
0 |
默认关闭 WiFi SSID 自动切换 |
# 服务与核心日志
su -c '/data/adb/modules/netproxy/netproxyctl logs show service 100'
su -c '/data/adb/modules/netproxy/netproxyctl logs show core 100'
# 节点和订阅转换日志
su -c '/data/adb/modules/netproxy/netproxyctl logs show sub 100'启动失败时优先检查 sing-box.log。出现 eBPF 加载错误时,请检查内核 BPF / cgroup 能力、Root 授权与 ebpf.conf;手写节点无法加载时,重点检查顶层是否为 outbounds、协议字段是否为 type、JSON 语法是否正确,以及节点标签是否冲突。
更完整的安装、配置和排障说明请访问 NetProxy 文档。
| 项目 | 用途 |
|---|---|
| reF1nd/sing-box | 当前代理核心 |
| SagerNet/sing-box | 上游 sing-box 项目 |
| Proxylink | NetProxy 内部节点转换能力的原始项目 |
| AsteriskNG | Android eBPF 实现参考 |
| zashboard | Clash API 控制面板 |
| v2rayNG | 节点解析实现参考 |
| binaries-for-Android | Android arm64 bpftool 二进制 |
以下项目曾为 NetProxy 的早期版本提供核心能力或实现参考。
| 项目 | 历史用途 |
|---|---|
| 曾使用的 sing-box 分支 | |
| 曾使用的代理核心 | |
| TPROXY / REDIRECT 透明代理实现参考 | |
| IPSET 内核模块与兼容性支持 | |
| WebUI 独立运行方案参考 |
