更新日志

当前最新 v2.0.0

v2.0.0

最新

NEXUS 全域 3D 正式版 · 全量检查更新包

🎨 四项实机定制化视觉与交互升级

→ 经由 内核中枢 母星分流

→ 飞向 国内直连 (淡粉)、海外代理 (紫/青) 或 黑洞拦截 (琥珀) 母星

→ 精准落入对应的真实访问目标卫星(如 WeChat、Bilibili、ChatGPT、YouTube 等)。

v1.0.3

历史

主题:双机实测根因深度修复(10.10.10.7 & 192.168.100.37)· 彻底终结 Sing-box 内核掉线与全网黑洞

🌌 NEXUS v3 全域深空视觉深度重构与四项定制改造 + VERIFY-frontend-deep.md 100% 清零

🛡️ 核心引擎防掉线与自愈闭环(P0-1 \~ P0-3)

/etc/init.d/ai-link 中 ai-link-daemon 与 ai-link-core 的重启策略由 respawn 3600 5 5 调整为 respawn 0 5 0(无限重试、5 秒退避),彻底根除因日常分流调整触发主动重启与异常退出共用配额导致的 Instance ai-link::ai-link-core s in a crash loop 6 crashes 永久放弃拉起问题;同时新增 /etc/init.d/ai-link restart_core 独立恢复命令,在不中断 9099 面板守护进程的前提下重置并拉起内核。

_telemetry_and_watchdog_loop 新增 ensure_core_alive_and_recover()(每 15 秒巡检 _get_live_singbox_pids(),自动过滤僵尸进程 State: Z 与 version/check/rule-set 短期辅助进程)。检测到内核进程意外缺失且未处于重构重载窗口时,立即记录日志 Watchdog: core process missing; restarting service. 并自动调用 _respawn_core_only() / restart_core 恢复内核。

ensure_nft_and_routing_intact() 新增 _teardown_blackhole_nft_and_routing():一旦检测到 sing-box 进程不在或 :7893 端口未监听,立即主动删除 table inet ai_link、清理 ip rule fwmark 0x162 table 162 并回退 dnsmasq 上游,使局域网与旁路由自身平滑退回直连上网(彻底消除 curl 000 全网黑洞);待内核恢复监听后自动重挂透明代理。同时 _sync_ipv6_policy_routing() 增加前置内核与端口存活断言。

⚡ 幂等配置重载、指纹非易失持久化与启动防抢杀(P1-1 \~ P1-3)

增强 _compute_core_rules_fingerprint()(覆盖 route、dns、inbounds、选择器成员拓扑与代理出站定义,排除可通过 Clash API 热切换的 default 字段)。在 schedule_async_core_reload()、reload_core_only() 以及 /api/shunt/reorder、/api/shunt/custom_rule、/api/dns/rewrite、/api/dns/filter/toggle 等端点前置比较操作前后指纹:若拓扑规则未变化(如原样提交分流顺序),自动降级为 hot_selector 热更新,绝不杀内核进程(requires_core_respawn=False)。

_record_applied_core_rule_hash() 与 _get_applied_core_rule_hash() 双写 /etc/ai-link/.applied_core_rule_hash 与 /var/run/ai-link/applied_core_rule_hash.txt;设备重启或 tmpfs 清空后自动从持久化文件恢复指纹,避免开机首次巡检误判「规则脏」而多杀一次内核。

reload_core_only() 新增 _get_min_singbox_proc_age() 启动保护窗口(进程刚拉起 <6.5s 时先等待 Clash API 就绪而不发送 SIGTERM);blocklist_custom.srs 改为编译至临时文件后 os.replace() 原子替换;--daemon 启动时若 sing-box.json 已在 25 秒内由 init.d 生成则跳过重复写盘。

安装与升级收尾阶段强制校验 pidof sing-box 及 :7890 / :7893 端口监听状态(未就绪时自动触发一次 restart_core 自愈),输出 UPGRADE OK: core=... ports ok 或 UPGRADE FAIL: ...。

🌐 10.10.10.7 实测问题专项修复与面板可见性(DIAG-1 \~ DIAG-3 / P2 / P3)

AILinkRequestHandler 的 handle_one_request、finish、_send_json、_try_send_wire_memo、do_OPTIONS 统一捕获 (BrokenPipeError, ConnectionResetError, socket.timeout),消除浏览器刷新或中断请求时的堆栈刷屏。

init.d/ai-link 与 ai-link-daemon.py 新增 fallback_resolv_conf_direct() / restore_resolv_conf_local():在服务停止、重启等待或内核离线窗口自动将 /etc/resolv.conf 与 /tmp/resolv.conf.d/resolv.conf.auto 回退至主路由网关 + 公共 DNS(223.5.5.5 / 119.29.29.29),彻底解决停机期间旁路由自身 ttyd CPD No internet 无法解析域名的问题;待 :7893 / :7874 就绪后再切回 127.0.0.1。

init.d/ai-link 后台端口等待子进程增加 trap '' HUP 与 </dev/null >/dev/null 2>&1 & 标准流解耦(防止 SSH 会话退出时 SIGHUP 中断后台挂载),并在等待第 8s / 20s 检测到内核未起时自动触发重拉;install.sh 依赖检查补齐 sing-box 软件包检测。

修复 build_routing_health() 在内核离线时仍因历史测速缓存返回 ✅ 代理中 的盲区;WebUI 新增顶部悬浮 #core-offline-alert-banner 与概览页 #ov-core-offline-card 醒目红色告警条及「🔄 一键重启内核」按钮,并将 tuple(_get_live_singbox_pids()) 纳入 /api/status 缓存键实现毫秒级状态感知。

/api/status 的 build_ver 由历史残留值 2.0.0-r8-v24-nolo 统一为 APP_VERSION ("1.0.3"),全仓 7 处版本标识 100% 对齐为 1.0.3。

v1.0.2

历史

主题:全量安全加固 + 启动与看门狗可靠性 + .tgz 归档上传恢复 + 跨架构兼容与自动化回归

🔐 安全加固(SEC-1\~SEC-5 & B1-1\~B1-4)

移除 end_headers 中对 / 请求下发 Set-Cookie: ailink_token=<有效令牌> 的缺陷;令牌仅在 POST /api/login 校验密码通过后签发,由前端保存在 localStorage 与 Cookie。

/etc/config/ai-link 移除 panel_secret 字段,改用布尔 option panel_pwd_customized '0';install.sh 升级时自动迁移并清除历史 panel_secret;CLI ai-link password 不再向 UCI 写入任何明文或哈希串。

出厂状态仅接受 ai-link-2026 作为初始密码,彻底禁用弱口令 admin;面板登录弹窗移除预填明文 value。

/api/status 新增 auth_required 与 pwd_customized 状态位,未鉴权打开面板自动弹出登录窗;WebUI 设置页新增 #lan-auth-security-notice 动态安全风险警示条;LuCI 新增 require_lan_auth 开关并与 ops_settings.json 双向同步。

🚀 启动可靠性与防黑洞看门狗(BOOT-1 / CORE-1 / RB-1 / B1-4 / B3-12)

init.d/ai-link 的 port_is_listening() 采用 netstat → ss → /proc/net/tcp{,6} 三级探针,同时比对大小写十六进制端口(消除精简版 BusyBox awk toupper() 依赖),等待预算放宽至 60 秒(AI_LINK_PORT_WAIT 可覆盖)。

init.d/ai-link 统一使用 singbox_alive()(pidof sing-box + pgrep -f 兜底)并动态解析 command -v sing-box;全仓 install.sh / uninstall.sh / usr/bin/ai-link 统一使用 pgrep -f "ai-link-dae[m]on.py" 防止 shell 自匹配误杀。

ensure_nft_and_routing_intact()、restore_proxy() 及 update_ops_settings() 在挂载 table inet ai_link 前强制校验 TProxy :7893 端口监听状态,核心未就绪时跳过挂载以杜绝局域网断网黑洞。

OTA 回滚段在重启服务后主动调用 /etc/init.d/ai-link restore_proxy,消除约 10 秒的透明代理空窗。

📦 备份恢复与在线更新增强(B2-6 \~ B2-11)

新增 GET /api/ops/backup_archive(一键导出 .tgz 全量归档)并升级 POST /api/ops/restore_archive 支持浏览器直接上传 .tgz / .tar.gz 或 .json 备份恢复,内置 tarfile 路径穿越(..)、非普通文件与 100MB 解压上限安全校验,且仅在校验与恢复成功后更新持久化备份。

支持通过命令行直接传入 .tgz 归档或 .json 备份文件完成全量恢复与服务重载(ai-link-daemon.py --restore <file>)。

升级脚本将实时进度双写至 /root/ai-link-final-backup/last_update_progress.log,设备断电重启导致 /var/run tmpfs 丢失后仍可自动还原升级中断状态。

落盘时通过 _strip_auto_node_runtime_fields() 剔除 quality_ranking、last_check_ts、members 等高频探测字段(读取时动态注入内存),跨探测周期文件 MD5 保持 100% 恒定。

ops_settings 白名单新增 update_manifest_url 支持绑定自有域名作为第一优先级 OTA 清单源,并与 UCI 删除/修改双向同步;界面与文档保留 v1.0.0 首次手动升级说明。

🛠 工程与验证工具链(TOOL-1\~3 / HYG-1 / TEST-1 / B3-13\~14 / B4-16\~20)

v1.0.1

历史

主题:服务总开关 + 在线更新体系 + 面板密码安全修复

⚙️ 服务总开关(新功能)

它走 LuCI 自己的 fs.exec → /etc/init.d/ai-link svc_state|start|stop|restart,

所以即使守护进程已经停了,也能在 LuCI 里一键把它拉起来,不需要 SSH。

而「启用 AI-LINK 透明代理服务」这个勾选框只管流量接管、不管进程启停,导致用户无处可恢复。

卡片下方有明确文案区分两者,避免再混淆。

不再依赖「reload 只重载运行中实例」的旧行为。

5 秒自动刷新。

供 LuCI 与面板统一解析。

🔐 安全修复

_verify_panel_password 中的 candidate_pw == get_uci_panel_secret() 已移除;UCI 里只有「明文初始密码」才允许直通比对。

_is_request_authenticated 中的 tok == get_uci_panel_secret() 已移除,令牌只认 panel_auth.json / panel_token 里签发过的值。

旧逻辑会用 UCI 里的哈希当初始密码重建,导致真实密码彻底失效。现在回退到默认密码 ai-link-2026,用户可进面板重设。

与面板密码完全解耦的 32 位随机串,仅用于 LuCI 页面调用面板 API;改面板密码不会影响它,它也不能用来登录面板。

⬆️ 在线更新体系(新功能)

| 方法 | 路径 | 说明 |

| ----- | ----- | ----- |

| GET | /api/system/version | 当前版本、构建号、清单源列表 |

| GET | /api/system/update/check | 拉取版本清单并比较(?force=1 跳过 5 分钟缓存) |

| GET | /api/system/update/status | 升级进度与最近日志 |

| POST | /api/system/update/apply | 启动升级 |

| POST | /api/system/update/ack | 清除已完成的升级结果 |

🛠 安装脚本

📦 版本号统一

✅ 验证

v1.0.0

历史

首个正式版