설명 없음

Dew-OF-Aurora 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
scripts 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
substore 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
.gitignore e8e2644f01 fix: for doc 1 주 전
CLAUDE.md 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
README.md 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
build_router_package.sh 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
config.local.json 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
config.server.json 3eb89e330f change: remove v2ray paths and vmess link tooling 1 주 전
config_router.conf 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전
workflow.md 877831cbe9 fix: bug feat: substorejs different mode 17 시간 전

README.md

vmess-domain-rotator

用于选择优选目标并产出运行时文件,支持三种模式:

  • 服务器模式(API -> 域名,支持自动提交 runtime-state
  • 本地 Python cfst 模式(本机 cfst -> IP)
  • BusyBox 路由器模式(路由器 sh + cfst -> IP + HTTP 暴露)

1. 目录与入口

核心脚本:

  • scripts/domain_updater.py:Python 主入口(api / cfst_local
  • scripts/run_update_and_commit.sh:服务器模式调度入口(含 git 同步)
  • scripts/install_debian.sh / scripts/uninstall_debian.sh:systemd 安装/卸载
  • scripts/router_local_update.sh:路由器更新入口(BusyBox sh
  • scripts/router_local_http.sh:路由器 HTTP 入口(BusyBox httpd
  • build_router_package.sh:路由器部署包打包脚本(生成 vmess.tar.gz

配置文件:

  • config.server.json:服务器模式
  • config.local.json:本地 Python cfst 模式
  • config_router.conf:BusyBox 路由器模式

config.json / config.example.json 已废弃。


2. 输出文件约定

三种模式都围绕同类输出:

  • 文本值文件:当前选中值
  • JSON 文件:当前状态与候选信息
  • state 文件:上次可用值(fallback)
  • export vars 文件:给外部系统消费

默认目录:

  • 服务器模式:runtime/
  • 路由器相关模式:cfip_runtime/

3. 服务器模式(API)

3.1 适用场景

  • python3
  • 可访问目标 API
  • 需要自动提交到 runtime-state

3.2 快速执行

python3 scripts/domain_updater.py --config config.server.json
bash scripts/run_update_and_commit.sh config.server.json

强制提交:

bash scripts/run_update_and_commit.sh --force-commit config.server.json
# 或
GIT_FORCE_COMMIT=1 bash scripts/run_update_and_commit.sh config.server.json

3.3 维护命令

# 语法检查
env PYTHONPYCACHEPREFIX=/tmp/pycache python3 -m py_compile scripts/domain_updater.py
bash -n scripts/run_update_and_commit.sh

# 查看解析后的输出路径
python3 scripts/domain_updater.py --config config.server.json --print-output-settings

# systemd(Debian/Ubuntu)
sudo bash scripts/install_debian.sh --config config.server.json
sudo systemctl status vmess-domain-rotator.timer
sudo systemctl status vmess-domain-rotator.service
sudo systemctl start vmess-domain-rotator.service
sudo journalctl -u vmess-domain-rotator.service -n 120 --no-pager

# 卸载
sudo bash scripts/uninstall_debian.sh

4. 本地 Python cfst 模式

4.1 适用场景

  • python3
  • 本机可执行 cfst
  • 不需要 BusyBox 专用脚本

4.2 快速执行

python3 scripts/domain_updater.py --config config.local.json

默认配置当前指向:

  • cfst_local.work_dir = ./cfst_linux_armv5
  • cfst_local.binary = ./cfst
  • 输出目录 ./cfip_runtime

4.3 维护命令

# 输出文件检查
cat cfip_runtime/current_ip.txt
cat cfip_runtime/current_ip.json
cat cfip_runtime/state.json
cat cfip_runtime/substore_vars.json

# 仅检查输出路径解析
python3 scripts/domain_updater.py --config config.local.json --print-output-settings

5. BusyBox 路由器模式

5.1 适用场景

  • 路由器没有 Python
  • 有匹配架构的 cfst
  • 有完整 BusyBox(需要 httpd applet)

5.2 推荐目录(ASUS RT-AC68U 示例)

/jffs/vmess/
├── busybox_armv7l
├── config_router.conf
├── scripts/
│   ├── router_local_update.sh
│   └── router_local_http.sh
└── cfst/
    ├── cfst
    ├── ip.txt
    └── result.csv

5.3 关键配置(config_router.conf

  • CFST_WORK_DIR / CFST_BIN / CFST_RESULT_FILE
  • CFST_SPEED_LIMIT(建议设置,如 5
  • RUNTIME_DIR / VALUE_TEXT_FILE / VALUE_JSON_FILE
  • BUSYBOX_BIN(如 ./busybox_armv7l
  • HTTP_PORT(默认 8080

5.4 手动执行

cd /jffs/vmess
sh scripts/router_local_update.sh ./config_router.conf
sh scripts/router_local_http.sh ./config_router.conf

说明:

  • 手动终端执行 update 时会显示 cfst 原始输出(便于排错)
  • 重定向日志/后台执行时默认静默 cfst,只保留 [router-local] 摘要
  • HTTP 脚本只使用 BUSYBOX_BIN 指向的 BusyBox httpd,不使用 ASUS 系统 httpd

5.5 自启动(/jffs/scripts/services-start

VMESS_DIR="/jffs/vmess"
CONFIG="./config_router.conf"
UPDATE_LOG="/tmp/router_local_update.log"
HTTP_LOG="/tmp/router_http.log"
HTTP_PROCESS_PATTERN='[r]outer_local_http.sh'

start_vmess_http() {
  if ps | grep -q "$HTTP_PROCESS_PATTERN"; then
    return 0
  fi
  cd "$VMESS_DIR" || exit 1
  nohup sh scripts/router_local_http.sh "$CONFIG" >> "$HTTP_LOG" 2>&1 &
}

cd "$VMESS_DIR" || exit 1

# 避免开机过早导致 result.csv 为空
sleep 60
i=1
while [ "$i" -le 5 ]; do
  if sh scripts/router_local_update.sh "$CONFIG" >> "$UPDATE_LOG" 2>&1; then
    break
  fi
  sleep 20
  i=$((i + 1))
done

cru d vmess_rotate
cru a vmess_rotate "0 */3 * * * cd $VMESS_DIR && sh scripts/router_local_update.sh $CONFIG >> $UPDATE_LOG 2>&1"

sleep 10
start_vmess_http

cru d vmess_watchdog
cru a vmess_watchdog "*/5 * * * * if ! ps | grep -q '$HTTP_PROCESS_PATTERN'; then cd $VMESS_DIR && nohup sh scripts/router_local_http.sh $CONFIG >> $HTTP_LOG 2>&1 & fi"

5.6 维护命令

# 基础检查
cd /jffs/vmess
chmod +x busybox_armv7l
./busybox_armv7l --list | grep '^httpd$'

# 更新与结果检查
sh scripts/router_local_update.sh ./config_router.conf
cat cfip_runtime/current_ip.txt
cat cfip_runtime/current_ip.json
cat cfip_runtime/state.json

# HTTP 与端口检查
sh scripts/router_local_http.sh ./config_router.conf
ps | grep router_local_http.sh
netstat -lntp | grep ':8080'
curl http://127.0.0.1:8080/current_ip.txt

# 常见端口冲突处理(Address already in use)
# 1) 改 config_router.conf 的 HTTP_PORT
# 2) 或停止旧进程后重启

6. Sub-Store 脚本模式说明

substore/operator_template.js 支持:

  • VALUE_SOURCE_MODE = "default":路由器优先,低速时切服务器
  • VALUE_SOURCE_MODE = "server_only":只用服务器
  • VALUE_SOURCE_MODE = "router_only":只用路由器

速度阈值使用 MB/s

  • ROUTER_MIN_SPEED_MB_PER_S = 5
  • download_speed 纯数字按 MB/s 解释

7. 路由器部署包打包

./build_router_package.sh

可选覆盖:

BUSYBOX_SRC="/path/to/busybox_armv7l" \
CFST_SRC_DIR="/path/to/cfst_dir" \
OUT_TAR="/path/to/vmess.tar.gz" \
./build_router_package.sh

打包内容默认为:

  • vmess/busybox_armv7l
  • vmess/config_router.conf
  • vmess/scripts/router_local_update.sh
  • vmess/scripts/router_local_http.sh
  • vmess/cfst/*

8. 注意事项

  1. 三种模式的配置不要混用。
  2. 只有服务器模式默认做 git 自动提交。
  3. state.json 需持久化,否则 fallback 不可用。
  4. 路由器模式请优先使用完整 BusyBox httpd,不要依赖系统精简 httpd / nc