Skip to content

Commit badedeb

Browse files
committed
fix: 调整订阅 provider 并修复服务/规则稳定性
- README 精简为项目描述 - mihomo provider 改为 http,补充 url 与 interval - net.inotify 修复锁与日志状态判断 - box.service 优化 sing-box 默认项与 stop 等待 - box.iptables 临时关闭 socket match 优化段(兼容部分国内 App) - customize.sh 补恢复 gid.list.cfg
1 parent 47a5185 commit badedeb

7 files changed

Lines changed: 106 additions & 129 deletions

File tree

README.md

Lines changed: 36 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,112 +1,51 @@
1-
# 📦 Box 模块
1+
# Box for Root
22

3-
本项目深受 [CHIZI-0618/box4magisk](https://github.com/CHIZI-0618/box4magisk)[taamarin/box_for_magisk](https://github.com/taamarin/box_for_magisk) 的启发和影响,在此向原作者们表示衷心的感谢!
3+
`Box for Root` 是一个面向 Android Root 环境(Magisk / KernelSU / APatch)的透明代理工具箱模块。
44

5-
---
5+
项目深受以下仓库启发并在其基础上持续演进:
6+
- [CHIZI-0618/box4magisk](https://github.com/CHIZI-0618/box4magisk)
7+
- [taamarin/box_for_magisk](https://github.com/taamarin/box_for_magisk)
68

7-
## 📋 目录
9+
## 项目定位
810

9-
- [目录结构](#-目录结构)
10-
- [必要依赖](#-必要依赖)
11-
- [下载、安装与配置](#-下载安装与配置)
12-
- [核心脚本指令](#-核心脚本指令)
13-
- [配套管理APP](#-配套管理app)
14-
- [致谢](#-致谢)
11+
本仓库主要提供:
12+
- 统一的代理核心运行管理(mihomo / sing-box / xray / v2fly / hysteria)
13+
- 多网络模式下的透明代理规则编排(TProxy / Redirect / Tun / Mixed / Enhance)
14+
- 订阅、Geo 资源、核心二进制与 WebUI 的统一维护脚本
15+
- 适配 Android Root 生态的模块化目录与服务生命周期管理
1516

16-
---
17+
## 主要目录
1718

18-
## 📁 目录结构
19+
模块工作目录:`/data/adb/box/`
1920

20-
模块刷入后,主要工作目录位于 `/data/adb/box/`。结构如下:
21-
22-
```
21+
```text
2322
/data/adb/box/
24-
├── bin/ # 存放 clash, sing-box 等代理核心的可执行文件
25-
26-
├── hysteria/ # Hysteria 核心的配置文件目录 (e.g., config.yaml)
27-
├── mihomo/ # Mihomo 核心的配置文件目录 (e.g., config.yaml)
28-
├── sing-box/ # Sing-box 核心的配置文件目录 (e.g., config.json)
29-
├── v2fly/ # V2Fly 核心的配置文件目录 (e.g., config.json)
30-
├── xray/ # Xray 核心的配置文件目录 (e.g., config.json)
31-
32-
├── scripts/ # 存放模块的核心脚本
33-
│ ├── box.service # 主要服务管理脚本
34-
│ ├── box.iptables # 防火墙规则管理脚本
35-
│ └── box.tool # 实用工具箱脚本
36-
37-
├── run/ # 运行时目录,用于存放日志、PID等临时文件
38-
39-
├── ap.list.cfg # [可配置] 应用列表配置
40-
├── crontab.cfg # [可配置] 定时任务配置
41-
├── package.list.cfg # [可配置] 包列表配置
42-
└── settings.ini # [重要] 模块总配置文件,你的主要配置区域!
43-
```
44-
45-
> **注意**: `run/` 目录可能在模块首次运行时自动创建。
46-
47-
---
48-
49-
## 🔧 必要依赖
50-
51-
为了确保模块所有功能正常运行,系统环境中必须包含以下两个组件:
52-
53-
- **`yq`**: 一个轻量级的命令行 YAML, JSON, XML 处理器,用于解析和修改配置文件。
54-
- **`curl`**: 一个强大的网络数据传输工具,用于下载订阅、更新资源等。
55-
56-
> **请注意**: 缺少以上任一依赖都可能导致模块无法启动或功能异常。
57-
58-
---
59-
60-
## 🚀 下载、安装与配置
61-
62-
有关详细的下载、安装和配置指南,请参阅:
63-
➡️ **[Wiki](https://github.com/boxproxy/box/wiki)**
64-
65-
---
66-
67-
## ⚙️ 核心脚本指令
68-
69-
可使用 `su` 获取 root 权限后执行以下命令,来管理模块的运行状态。
70-
71-
### `box.service`
72-
73-
模块的主服务控制脚本,用于管理代理核心的生命周期和定时任务。
74-
75-
```bash
76-
# 用法: su -c /data/adb/box/scripts/box.service {start|stop|restart|status|cron|kcron}
77-
```
78-
79-
### `box.iptables`
80-
81-
专门用于管理透明代理所依赖的 `iptables` 防火墙规则。
82-
83-
```bash
84-
# 用法: su -c /data/adb/box/scripts/box.iptables {enable|disable|renew}
23+
├── bin/ # 代理核心与工具二进制
24+
├── mihomo/ # mihomo 配置目录
25+
├── sing-box/ # sing-box 配置目录
26+
├── xray/ # xray 配置目录
27+
├── v2fly/ # v2fly 配置目录
28+
├── hysteria/ # hysteria 配置目录
29+
├── scripts/ # 核心脚本
30+
│ ├── box.service # 服务生命周期管理
31+
│ ├── box.iptables # 透明代理规则管理
32+
│ └── box.tool # 更新与维护工具集
33+
├── run/ # 运行时状态与日志
34+
└── settings.ini # 全局配置文件
8535
```
8636

87-
### `box.tool`
88-
89-
一个多功能的工具箱,集成了多种实用功能,如更新订阅、检查配置、下载核心等。
90-
91-
```bash
92-
# 用法: su -c /data/adb/box/scripts/box.tool {check|memcg|cpuset|blkio|geosub|geox|subs|upkernel [name]|upkernels [name...]|upgeox_all|upxui|upyq|upcurl|reload|webroot|bond0|bond1|all}
93-
```
94-
95-
---
96-
97-
## 📱 配套管理APP
98-
99-
可通过图形化界面轻松完成切换代理、查看日志、修改配置等操作。
37+
## 核心脚本
10038

101-
**获取方式**:
102-
请访问以下 Telegram 频道获取最新版本的APP:
103-
➡️ **[RE](https://t.me/zero_o0)**
39+
- `box.service`: 启停、重启、状态与定时任务控制
40+
- `box.iptables`: 透明代理规则启用、重建、清理
41+
- `box.tool`: 订阅更新、Geo 更新、核心更新、配置检查、WebUI 相关维护
10442

105-
---
43+
## 文档与社区
10644

107-
## 🙏 致谢
45+
- Wiki: <https://github.com/boxproxy/box/wiki>
46+
- 更新日志: [CHANGELOG.md](./CHANGELOG.md)
47+
- 配套 APP / 通知频道: <https://t.me/zero_o0>
10848

109-
本项目的诞生离不开以下优秀项目的启发和参考,它们为 `Box for Android` 提供了坚实的基础和宝贵的灵感。
49+
## 致谢
11050

111-
- **[CHIZI-0618/box4magisk](https://github.com/CHIZI-0618/box4magisk)**: 一个功能全面的 Magisk 代理模块,提供了诸多核心功能的实现思路。
112-
- **[taamarin/box_for_magisk](https://github.com/taamarin/box_for_magisk)**: 同样是一个优秀的代理模块项目,为本项目提供了重要的参考。
51+
感谢开源社区与上述项目作者提供的设计思路与实现参考。

box/mihomo/config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ proxy-providers:
66
type: http
77
url: "填写订阅链接"
88
path: ./proxy_provider/proxy1.yaml
9-
interval: 3600
9+
interval: 86400
1010
health-check:
1111
enable: true
1212
url: https://cp.cloudflare.com
@@ -18,7 +18,7 @@ proxy-providers:
1818
# type: http
1919
# url: "填写订阅链接"
2020
# path: ./proxy_provider/proxy2.yaml
21-
# interval: 3600
21+
# interval: 86400
2222
# health-check:
2323
# enable: true
2424
# url: https://cp.cloudflare.com

box/scripts/box.iptables

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -841,19 +841,19 @@ start_tproxy() {
841841
# NAT DNS 劫持链在后续(本地防回环规则之后)统一创建,避免重复插入
842842

843843
# 跳过已被 TProxy 处理的流量,若默认路由接口有公网 IP,省略这些规则会导致本地流量代理异常,可能拖慢全网
844-
if [ "${cap_socket_match}" = "true" ]; then
845-
if [ ${network_mode} != "enhance" ] && [ "${proxy_tcp}" = "true" ]; then
846-
ensure_rule_append mangle BOX_EXTERNAL -p tcp -m socket --transparent -j MARK --set-xmark ${fwmark}
847-
fi
848-
if [ "${proxy_udp}" = "true" ]; then
849-
ensure_rule_append mangle BOX_EXTERNAL -p udp -m socket --transparent -j MARK --set-xmark ${fwmark}
850-
fi
851-
if [ "${proxy_tcp}" = "true" ] || [ "${proxy_udp}" = "true" ]; then
852-
ensure_rule_append mangle BOX_EXTERNAL -m socket -j RETURN
853-
fi
854-
else
855-
[ "${iptables}" = "$IPV" ] && log Warning "未检测到 socket match,跳过部分优化规则(不影响基本功能)"
856-
fi
844+
# if [ "${cap_socket_match}" = "true" ]; then
845+
# if [ ${network_mode} != "enhance" ] && [ "${proxy_tcp}" = "true" ]; then
846+
# ensure_rule_append mangle BOX_EXTERNAL -p tcp -m socket --transparent -j MARK --set-xmark ${fwmark}
847+
# fi
848+
# if [ "${proxy_udp}" = "true" ]; then
849+
# ensure_rule_append mangle BOX_EXTERNAL -p udp -m socket --transparent -j MARK --set-xmark ${fwmark}
850+
# fi
851+
# if [ "${proxy_tcp}" = "true" ] || [ "${proxy_udp}" = "true" ]; then
852+
# ensure_rule_append mangle BOX_EXTERNAL -m socket -j RETURN
853+
# fi
854+
# else
855+
# [ "${iptables}" = "$IPV" ] && log Warning "未检测到 socket match,跳过部分优化规则(不影响基本功能)"
856+
# fi
857857

858858
# 跳过内网,兼容性可用 su -c 'zcat /proc/config.gz | grep -i addrtype' 检查
859859
# ${iptables} -t mangle -A BOX_EXTERNAL -m addrtype --dst-type LOCAL -j RETURN

box/scripts/box.service

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,6 @@ prepare_singbox() {
251251
"auto_route": true,
252252
"strict_route": true,
253253
"auto_redirect": true,
254-
"include_android_user": [0,10,999],
255254
"include_uid": [],
256255
"exclude_uid": []
257256
}]' -i --output-format=json "${sing_config}"
@@ -864,6 +863,16 @@ stop_box() {
864863
fi
865864
fi
866865
done
866+
867+
count=0
868+
while [ $count -lt 3 ]; do
869+
if ! busybox pidof "${bin_name}" >/dev/null 2>&1; then
870+
break
871+
fi
872+
sleep 1
873+
count=$((count + 1))
874+
done
875+
867876
if ! busybox pidof "${bin_name}" >/dev/null; then
868877
if [ -f "${box_pid}" ]; then
869878
rm -f "${box_pid}"

box/scripts/box.tool

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -419,23 +419,32 @@ update_mihomo_providers() {
419419
for i in $(seq 0 $((file_count - 1))); do
420420
local file_name="${name_provide_mihomo_config[$i]}"
421421
local provider_file="${mihomo_provide_path}/${file_name}"
422-
local provider_name="${file_name%.yaml}"
423-
424-
[ ! -f "${provider_file}" ] && log Warning "订阅文件不存在,跳过: ${provider_file}" && continue
422+
local provider_name="${file_name%.yaml}"
423+
local provider_url="${subscription_url_mihomo[$i]}"
424+
local escaped_url
425+
426+
if [ -z "${provider_url}" ]; then
427+
log Warning "订阅链接为空,跳过: ${provider_name}"
428+
continue
429+
fi
430+
escaped_url="$(echo "${provider_url}" | busybox sed 's/\\/\\\\/g; s/\"/\\"/g')"
425431

426432
local relative_path
427-
if command -v realpath >/dev/null 2>&1; then
433+
if command -v realpath >/dev/null 2>&1 && [ -e "${provider_file}" ]; then
428434
relative_path="$(realpath --relative-to="${config_dir}" "${provider_file}")"
435+
[ -z "${relative_path}" ] && relative_path="./$(basename "${mihomo_provide_path}")/${file_name}"
429436
else
430437
relative_path="./$(basename "${mihomo_provide_path}")/${file_name}"
431438
fi
432439

433-
log Debug "添加 provider: ${provider_name} -> ${relative_path}"
440+
log Debug "添加 provider: ${provider_name} -> ${relative_path} (http)"
434441

435442
cat >> "${temp_providers}" <<EOF
436443
${provider_name}:
437-
type: file
444+
type: http
445+
url: "${escaped_url}"
438446
path: ${relative_path}
447+
interval: 86400
439448
health-check:
440449
enable: true
441450
url: https://cp.cloudflare.com
@@ -1435,4 +1444,4 @@ case "$1" in
14351444
log Info "用法: $0 {check|memcg|cpuset|blkio|geosub|geox|subs|upkernel [name]|upkernels [name...]|upgeox_all|upxui|upyq|upcurl|upcnip|reload|webroot|bond0|bond1|all}"
14361445
log Info "upkernel 支持的核心: sing-box, mihomo, mihomo_smart, xray, v2fly, hysteria"
14371446
;;
1438-
esac
1447+
esac

box/scripts/net.inotify

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,29 @@ iptables="${IPV}"
2727
ip6tables="${IP6V}"
2828
logs="/data/adb/box/run"
2929
log_file="${logs}/net.log"
30+
lock_dir="${logs}/locks/net_inotify.lock"
3031

3132
log_info() {
3233
mkdir -p "${logs}" >/dev/null 2>&1 || true
3334
echo "[$(date '+%F %T')] [Info]: $*" >> "${log_file}" 2>&1
3435
}
3536

37+
log_warn() {
38+
mkdir -p "${logs}" >/dev/null 2>&1 || true
39+
echo "[$(date '+%F %T')] [Warn]: $*" >> "${log_file}" 2>&1
40+
}
41+
3642
log_reset() {
3743
mkdir -p "${logs}" >/dev/null 2>&1 || true
3844
: > "${log_file}" 2>&1 || true
3945
}
4046

4147
with_lock_or_skip() {
42-
local lock_dir="/data/adb/box/run/locks/net_inotify.lock"
43-
mkdir -p "${logs}" "/data/adb/box/run/locks" >/dev/null 2>&1 || true
48+
mkdir -p "${logs}" "${logs}/locks" >/dev/null 2>&1 || true
4449
if ! mkdir "${lock_dir}" >/dev/null 2>&1; then
4550
return 1
4651
fi
47-
trap 'rmdir "${lock_dir}" >/dev/null 2>&1 || true' EXIT
52+
trap "rmdir \"${lock_dir}\" >/dev/null 2>&1 || true" EXIT INT TERM
4853
return 0
4954
}
5055

@@ -68,9 +73,10 @@ ensure_rule_append() {
6873
local table_name="$2"
6974
local chain_name="$3"
7075
shift 3
71-
if ! ${ipt_cmd} -t "${table_name}" -C "${chain_name}" "$@" >/dev/null 2>&1; then
72-
${ipt_cmd} -t "${table_name}" -A "${chain_name}" "$@" >/dev/null 2>&1 || true
76+
if ${ipt_cmd} -t "${table_name}" -C "${chain_name}" "$@" >/dev/null 2>&1; then
77+
return 0
7378
fi
79+
${ipt_cmd} -t "${table_name}" -A "${chain_name}" "$@" >/dev/null 2>&1
7480
}
7581

7682
rules_add() {
@@ -80,15 +86,29 @@ rules_add() {
8086
ensure_chain_and_flush "${iptables}" nat LOCAL_IP_V4
8187

8288
ip -4 a | busybox awk '/inet/ {print $2}' | busybox sort -u | busybox grep -vE "^127\\.0\\.0\\.1" | while read -r local_ipv4 ; do
89+
rv1=1
90+
rv2=1
8391
ensure_rule_append "${iptables}" mangle LOCAL_IP_V4 -d "${local_ipv4}" -j ACCEPT
92+
rv1=$?
8493
ensure_rule_append "${iptables}" nat LOCAL_IP_V4 -d "${local_ipv4}" -j ACCEPT
85-
log_info "本地IP ${local_ipv4},防环回规则已更新"
94+
rv2=$?
95+
if [ "${rv1}" = "0" ] || [ "${rv2}" = "0" ]; then
96+
log_info "本地IP ${local_ipv4},防环回规则已更新"
97+
else
98+
log_warn "本地IP ${local_ipv4},防环回规则更新失败"
99+
fi
86100
done
87101

88102
ensure_chain_and_flush "${ip6tables}" mangle LOCAL_IP_V6
89103
ip -6 a | busybox awk '/inet6/ {print $2}' | busybox sort -u | busybox grep -vE "^fe80|^::1|^fd00" | while read -r local_ipv6 ; do
104+
rv6=1
90105
ensure_rule_append "${ip6tables}" mangle LOCAL_IP_V6 -d "${local_ipv6}" -j ACCEPT
91-
log_info "本地IP ${local_ipv6},防环回规则已更新"
106+
rv6=$?
107+
if [ "${rv6}" = "0" ]; then
108+
log_info "本地IP ${local_ipv6},防环回规则已更新"
109+
else
110+
log_warn "本地IP ${local_ipv6},防环回规则更新失败"
111+
fi
92112
done
93113
}
94114

@@ -100,4 +120,4 @@ if [ "$events" = "w" ]; then
100120
rules_add
101121
fi
102122
fi
103-
fi
123+
fi

customize.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ if [ "${backup_box}" = "true" ]; then
299299
done
300300

301301
ui_print " - 恢复根目录配置文件"
302-
for conf_file in ap.list.cfg package.list.cfg crontab.cfg; do
302+
for conf_file in ap.list.cfg package.list.cfg gid.list.cfg crontab.cfg; do
303303
if [ -f "${temp_dir}/${conf_file}" ]; then
304304
cp -f "${temp_dir}/${conf_file}" "/data/adb/box/${conf_file}"
305305
fi

0 commit comments

Comments
 (0)