# 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 快速执行 ```bash python3 scripts/domain_updater.py --config config.server.json bash scripts/run_update_and_commit.sh config.server.json ``` 强制提交: ```bash 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 维护命令 ```bash # 语法检查 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 快速执行 ```bash python3 scripts/domain_updater.py --config config.local.json ``` 默认配置当前指向: - `cfst_local.work_dir = ./cfst_linux_armv5` - `cfst_local.binary = ./cfst` - 输出目录 `./cfip_runtime` ### 4.3 维护命令 ```bash # 输出文件检查 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 示例) ```text /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 手动执行 ```bash 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`) ```sh 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 维护命令 ```bash # 基础检查 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. 路由器部署包打包 ```bash ./build_router_package.sh ``` 可选覆盖: ```bash 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`。