Repository navigation
Releases: Master-AI-007/ai-link-openwrt
Release list
AI-LINK v1.0.3
AI-LINK v1.0.3
OpenWrt 下一代「永不断连」智能透明代理 · 异地组网回家 · DNS 净网护盾
发布日期:2026-10-26 | 适用:OpenWrt 23.05 / 24.10 / ImmortalWrt / LEDE(fw4+nftables)
本版主题
内核防掉线自愈 + 非分流模式选点修复。 这一版不加新功能,专注两件事:
让 sing-box 内核不再「崩了就起不来、起来了是黑洞」,以及修好非分流模式下选不了出口节点的问题。
🎯 非分流模式选点(NON-SHUNT-1)
切到「🧱 仅被墙网站走代理 / 🌏 非国内走代理 / 🌐 全局代理」时,下方「当前模式统一出口」的
下拉框以前是空白、选不了节点。现在:
- 三种子模式(自动节点池 / 手动国家 ➔ 节点 / 直连)完整渲染,切换即时生效
- 自动池、六大地区及节点计数、按延迟排序的节点列表全部可选
- 选点后立刻持久化并热切内核出口,不再被自动池评估覆盖
🛡 内核防掉线(P0-1 ~ P0-3)
- 重启配额解除:
respawn 3600 5 5→respawn 0 5 0(无限重试、5 秒退避),
不再出现「崩溃 6 次后被 procd 永久放弃拉起」。 - 独立恢复入口:新增
ai-link restart_core//etc/init.d/ai-link restart_core,
不打断 :9099 面板即可重置内核。 - 进程存活巡检:看门狗每 15 秒检查 sing-box 进程(过滤僵尸与短命辅助进程),
意外退出立即拉起。 - 黑洞拆除:内核离线时自动清理残留的
table inet ai_link、ip rule 0x162、
dnsmasq:7874上游,避免「内核没了但流量还被塞进黑洞」。
⚙️ 稳定性(P1 ~ P2)
- 规则指纹:新增
_compute_core_rules_fingerprint(),规则没变就只做热更新,
日常调分流不再反复重启内核。 - 指纹持久化:
/etc/ai-link/.applied_core_rule_hash,重启后不再误判、少一次多余重载。 - 升级健康断言:
install.sh --upgrade结束前真实校验进程与端口,输出UPGRADE OK/FAIL;
并trap '' HUP防止 SSH 断开中断后台挂载。 - DNS 回退:停机或内核异常时
/etc/resolv.conf自动回退到上游/公共 DNS,
路由器不会在服务停止期间「失联」。 - 面板体验:内核离线时显示醒目横幅 + 一键重启;浏览器断开不再刷
BrokenPipeError栈。
⬆️ 升级方式
ai-link update --apply
# 或
curl -fsSL https://ai-link-official.pages.dev/upgrade.sh | sh升级失败自动回滚到升级前版本,配置与节点数据不受影响。
📌 已知限制
- 面板默认信任局域网(
require_lan_auth=false);若面板端口可能暴露公网,请开启「强制内网登录」。 - v1.0.0 用户仍需手动升级一次(v1.0.0 没有 OTA 模块)。
- 归档恢复的「空参数回退默认备份」与「导出包含 panel_token」两项仍在待办,计划在 1.0.3.x 处理。
包指纹
见 version.json(packages.full.md5 / sha256 / size)。
AI-LINK v1.0.2
AI-LINK v1.0.2
OpenWrt 下一代「永不断连」智能透明代理 · 异地组网回家 · DNS 净网护盾
发布日期:2026-10-26 | 适用:OpenWrt 23.05 / 24.10 / ImmortalWrt / LEDE(fw4+nftables)
安装包:AI-LINK-v1.0.2.tar.gz(1,242,745 B· MD5d64f77afa6547f69c9d97ee02942a3e3· SHA256a8a796355b82f29436ede2fc4ce706cec4fcca7844207753bb05849225231230)
本版主题
全量安全加固 + 启动与看门狗防黑洞 + .tgz 归档上传恢复 + 跨架构兼容。
本版本完整合并了 v1.0.2 RC 的安全/启动/回滚修复(A 节)与 KNOWN-ISSUES.md B 节全部 20 项改进,并将包内 7 处版本标识统一对齐为 1.0.2。
🔐 安全加固(SEC-1SEC-5 & B1-1B1-4)
- 面板令牌不再随首页下发(SEC-1):仅在
POST /api/login校验密码通过后签发令牌,杜绝未登录客户端访问首页即获取有效令牌。 - 接口鉴权与敏感数据脱敏闭环(SEC-2~SEC-5):
/api/status对未授权客户端脱敏回家节点password/uuid/private_key/uri及订阅token=,并将鉴权状态与panel_auth.json纳入缓存键;GET /api/nodes/share_uri与GET /api/ops/logs强制校验_auth_ok()(未授权返回 401)。 - UCI 凭据零留存(B1-2):
/etc/config/ai-link移除panel_secret,改用布尔option panel_pwd_customized '0/1',升级时自动迁移并清除历史panel_secret,CLIai-link password不再向 UCI 写明文或哈希。 - 永久下线弱默认密码
admin(B1-3):出厂状态仅接受ai-link-2026,登录框移除预填明文 value。 - 内网免密风险提示与自动登录引导(B1-1):未鉴权打开面板自动弹出登录窗;WebUI 设置页新增
#lan-auth-security-notice风险提示;LuCI 新增require_lan_auth开关并与ops_settings.json双向同步。
🚀 启动可靠性与看门狗防黑洞(BOOT-1 / CORE-1 / RB-1 / B1-4 / B3-12)
- 多栈端口就绪探针(BOOT-1 & B3-12):
init.d/ai-link采用netstat→ss→/proc/net/tcp{,6}探针,同时兼容无toupper()的精简版 BusyBoxawk,等待预算放宽至 60 秒。 - BusyBox
pgrep兼容(CORE-1 & B3-12):统一使用singbox_alive()(pidof sing-box探针)与pgrep -f "ai-link-dae[m]on.py"。 - 看门狗与
restore_proxy端口前置校验(B1-4):挂载table inet ai_link前强制验证:7893端口监听,防止核心未就绪时造成局域网黑洞。 - 回滚收尾立即恢复代理(RB-1):OTA 回滚段重启后立即执行
/etc/init.d/ai-link restore_proxy,消除 10 秒空窗。
📦 备份恢复与在线更新增强(B2-6 ~ B2-11)
- 浏览器直接上传
.tgz/.json恢复与.tgz导出(B2-6):面板与 LuCI 均支持上传.tgz/.tar.gz归档或.json备份直接恢复,并支持一键导出.tgz归档(内置路径穿越、非普通文件与 100MB 体积安全校验,且不覆盖当前版本标识)。 - 新增
ai-link restore <file|--latest>CLI 命令(B2-7):支持命令行直接恢复.tgz或.json备份并自动重载服务。 - OTA 升级进度闪存持久化(B2-8):升级日志双写至
/root/ai-link-final-backup/last_update_progress.log,断电重启后自动恢复中断状态。 auto_nodes.json静态哈希恒定(B2-9):落盘剥离实时探测噪声,跨探测周期 MD5 100% 稳定。- 自定义更新源域名与冷启动说明(B2-10 & B2-11):支持
update_manifest_url自定义域名清单源,并与 UCI 删除/修改双向同步。
⬆️ 升级与重编号刷回说明
# 1. 已安装 v1.0.1 的设备直接在线升级
ai-link update --apply
# 或一键升级脚本
curl -fsSL https://ai-link-official.pages.dev/upgrade.sh | sh
# 2. 若测试机此前安装过构建代号为 1.0.3 的测试包,请解压本包执行一次 --upgrade 刷回正式 1.0.2:
tar -xzf AI-LINK-v1.0.2.tar.gz && sh ai-link-openwrt/install.sh --upgradeAI-LINK v1.0.1 — 服务总开关 + 在线更新体系
AI-LINK v1.0.1
OpenWrt 下一代「永不断连」智能透明代理 · 异地组网回家 · DNS 净网护盾
发布日期:2026-10-26 | 适用:OpenWrt 23.05 / 24.10 / ImmortalWrt / LEDE(fw4+nftables)
本版主题
服务总开关 + 在线更新体系 + 面板密码安全修复。
v1.0.1 是第一个支持在线一键升级的版本。从这一版起,插件可以自己检查新版本、自己下载、自己校验、自己升级、失败自动回滚。
⚙️ 服务总开关(新功能)
解决了什么问题
v1.0.0 有一个隐藏死锁:一旦服务被停掉(/etc/init.d/ai-link stop),
LuCI 概览页上所有按钮全部失效——因为它们都去调 :9099 的 API,而面板已经没了。
而「启用 AI-LINK 透明代理服务」那个勾选框只管流量接管、不管进程启停,
用户勾了也没用,只能 SSH 进去手动 start。
现在怎么做
LuCI 概览页顶部新增独立的「⚙️ 服务总开关」卡片:
| 能力 | 说明 |
|---|---|
| 状态徽章 | ● 运行中 / ◐ 部分运行(内核未起) / ⏹ 已停止 |
| 元信息 | 开机自启 · 透明代理接管 · nftables 挂载 · 面板端口 |
| 四个按钮 | ▶ 启动服务 / ⏹ 停止服务 / 🔄 重启服务 / 🔁 开机自启开关 |
| 自动刷新 | 每 5 秒同步一次真实状态 |
关键设计:这条通路不依赖 :9099。
它走 LuCI 自己的 fs.exec → /etc/init.d/ai-link svc_state|start|stop|restart,
所以即使守护进程已经停了,也能在网页上一键把它拉起来,完全不需要 SSH。
语义澄清
| 开关 | 管什么 |
|---|---|
| ⚙️ 服务总开关(新增) | 进程生命周期:启动 / 停止 / 重启 / 开机自启 |
| ☑️ 启用 AI-LINK 透明代理服务(原有) | 是否接管流量(nftables / dnsmasq / sing-box) |
两者独立:enabled=0 时设计上面板仍在线,只是不接管流量。
其他改动
reload_service()兜底:enabled=1时若 daemon 或 sing-box 任一未运行,直接整体start- 新增 init 动作
svc_state:输出单行daemon= core= nft= enabled= boot= bypass= port=,供前端统一解析 - 独立面板同步:设置页新增服务状态卡片 + 「🔄 重启服务」按钮,5 秒自动刷新
🔐 安全修复(建议所有 v1.0.0 用户升级)
| 编号 | 问题 | 说明 |
|---|---|---|
| PWD-1 | LuCI「面板密码」显示为 sha256:xxxx 哈希 |
改密后 UCI 字段被写入哈希,LuCI 直接把它当密码显示 |
| PWD-2 | 安装自检会污染生产环境密码字段 | --self-test 用临时目录跑改密回归,但函数体无条件 uci set,导致每次安装自检 / ai-link probe 都把真实 panel_secret 覆盖成测试串的哈希 |
| PWD-3 | 哈希串可直接当密码登录 | candidate_pw == get_uci_panel_secret() 旁路已移除 |
| PWD-4 | 哈希串可直接当 Bearer 令牌绕过登录 | tok == get_uci_panel_secret() 旁路已移除,令牌只认签发过的值 |
| PWD-5 | 认证文件丢失后用户被锁死 | 旧逻辑用哈希当初始密码重建,真密码失效;现回退默认密码供救急 |
新增 LuCI 专用桥接令牌 luci_bridge_token:与面板密码完全解耦的 32 位随机串,仅用于 LuCI 页面调用面板 API。改面板密码不影响它,它也不能用来登录面板。
⬆️ 在线更新体系(新功能)
使用方式
| 入口 | 操作 |
|---|---|
| LuCI 服务 → AI-LINK → 概览页 | 「插件版本与在线更新」卡片 → 检查更新 → 立即更新 |
| 独立面板 :9099 → 设置 | 同款卡片,位于「核心库与订阅更新」上方 |
| SSH 命令行 | ai-link update(只检查)/ai-link update --apply(检查并升级) |
升级流程(八步)
- 拉取
version.json—— Cloudflare Pages 主源 →gh_mirror加速镜像 → GitHub raw 直连,自动重试 - 下载升级包 —— 清单内多源依次重试
- 校验大小 + MD5 + SHA256 —— 任一不符立即中止,绝不执行未校验的包
- 解压并校验包结构
- 备份用户配置到
/root/ai-link-final-backup/pre-update-v{版本}-{时间戳}.tgz(自动保留最近 3 份);空间充足时额外备份旧代码 - 执行
install.sh --upgrade - 重启服务并做健康检查
- 健康检查失败 → 自动回滚并再次验证
工程要点
- 升级进程与主服务解耦:升级脚本用
setsid脱离 daemon 会话,安装脚本重启服务不会把它杀掉;进度实时落盘,重启后新进程接着读,因此用户能看到完整结果,而不是"页面转圈然后失联"。 - 安全护栏:清单缺 MD5 直接拒绝升级;同一时间只允许一个升级任务;升级中重复点击被拒绝。
- 代理环境变量免疫:清单与升级包请求显式绕过
http_proxy/https_proxy,避免路由器上残留的代理变量把 OTA 误判成"清单不可达"。
新增 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 |
清除已完成的升级结果 |
🛠 安装脚本
- 新增
install.sh --upgrade升级模式:- 不再停止/禁用其他代理服务(避免误伤用户后装的组件)
- 不再删除音乐解锁组件(原安装流程会
rm -rf掉,在线升级时会造成"静默卸载") - 其余流程保持幂等,用户配置与 UCI 设置全部保留
📦 下载
| 文件 | 大小 | MD5 |
|---|---|---|
AI-LINK-v1.0.1.tar.gz |
1,200,649 B | 4375dddea1dc4bdd6b8cadb330ace239 |
version.json |
2,083 B | 见文件内 sha256 字段 |
CHANGELOG.md |
7,459 B | — |
SHA256:b548232f3bfe0eef136df6c49c85391b62369794b122d9cfe870677f2c12c769
校验:
md5sum AI-LINK-v1.0.1.tar.gz应等于上表值。
安装 / 升级
v1.0.0 用户(需手动升级一次)
v1.0.0 尚未内置在线更新模块,请手动执行一次:
curl -fsSL https://ai-link-official.pages.dev/install.sh | shv1.0.1 及以后(在线一键)
ai-link update --apply或在面板 / LuCI 点「立即更新」。
全新安装
curl -fsSL https://ai-link-official.pages.dev/install.sh | sh国内网络强制走加速镜像:
curl -fsSL https://ai-link-official.pages.dev/install.sh | AI_LINK_MIRROR=https://ghfast.top/https://github.com/Master-AI-007/ai-link-openwrt/releases/download/v1.0.1 sh手动安装
tar -xzf AI-LINK-v1.0.1.tar.gz
cd ai-link-openwrt
sh install.sh安装完成后访问 http://<路由器IP>:9099(独立面板)或 LuCI → 服务 → AI-LINK 智能代理。
卸载:
ai-link uninstall -y # 彻底卸载(自动归档 /etc/ai-link)
ai-link uninstall --keep-config # 保留配置卸载验收状态
| 项 | 结果 |
|---|---|
| 发布门禁(13 项) | 13 / 13 PASS |
| OTA 端到端测试(19 项) | 19 / 19 PASS |
| 面板密码缺陷 A/B 对照 | 3 条漏洞全部堵死,真密码/真令牌/默认密码救急未回归 |
| 静态门禁 | py_compile ✓ · node --check ✓ · bash -n ✓ · symtable 未定义 0 ✓ |
| HTML 标签配平 | overview.js 34/34 · index.html 842/842 |
| 面板内联脚本语法 | 4 块全部通过 |
| 版本一致性 | daemon / install.sh / version 文件 / 面板徽章 四处一致 |
已知问题
- v1.0.0 → v1.0.1 必须手动升级一次(v1.0.0 没有 OTA 模块)。
- 面板与 LuCI 的升级进度在服务重启瞬间会短暂断连,属正常现象,2 秒轮询会自动恢复。
auto_nodes.json含实时探测数据,daemon 运行时会持续重写,不适合作为备份一致性比对项。
反馈
- 问题与建议:本仓库 Issues
- 更新日志:https://ai-link-official.pages.dev/changelog.html
- 版本清单:https://ai-link-official.pages.dev/version.json
AI-LINK v1.0.0 正式版
AI-LINK v1.0.0 正式版
OpenWrt 下一代「永不断连」智能透明代理 · 异地组网回家 · DNS 净网护盾
发布日期:2026-10-26 | 适用:OpenWrt 23.05 / 24.10 / ImmortalWrt / LEDE(fw4+nftables)
本版要点
v1.0.0 是封版(Production Release),核心引擎 sing-box 1.12+/1.14+ + nftables TProxy/Redirect。
主要能力
- 自动节点池(1~5 组优先级):粘性锁定 + 双组探测 + 20 秒死节点自动逃生,节点切换不掉线
- 单臂旁路由对称 NAT:
@cn_ip4/@cn_ip6硬件级国内旁路,配合srcnat masquerade解决回程非对称 - 免证书 HomeLink:VLESS-Reality 与 Hysteria2,动态
pinSHA256,手机流量直连回家 - 五种全局路由模式:分流 / 全局代理 / 全直连 / 国内白名单 / 仅被墙网站
- DNS 净网护盾:50,074 条拦截规则,DNS 层 REFUSED + 路由层 REJECT 双层记账
- 备份 / 恢复出厂:归档备份字节级还原(含面板密码与 UCI),一键恢复出厂自动归档
本版修复(相对上一轮验收)
| 编号 | 修复 |
|---|---|
| FR-1 | 停止/卸载时清理 fc00::/18 FakeIP 路由 |
| FR-2 | nf_conntrack_tcp_be_liberal 记录原值并在卸载时还原(不再给系统留全局副作用) |
| FR-3 | JSON 备份完整覆盖 panel_auth 与 UCI panel_secret,恢复后面板密码不再回默认弱口令 |
| FR-4 | 仅被墙网站走代理 模式修正:bing / apple / microsoft / cloudflare 等未墙站点恢复直连 |
| FR-5 | 卸载不再用 /tmp/ai-link* 通配删除,避免误删用户解包的源码目录 |
| FR-6 | sleep 0.3 → sleep 1,兼容精简版 BusyBox |
下载
| 文件 | 大小 | MD5 |
|---|---|---|
AI-LINK-v1.0.0.tar.gz |
1,176,852 B | 3d2710605ce844b0702bb60926fa5e2c |
luci-app-ai-link_2.0.0-r8_all.ipk |
567,995 B | 875ff6cf138252359bb8102a2667289b |
AI-LINK-v1.0.0-manual.pdf |
4,064,322 B | aaa100db4c90960b08d50b411312973d |
校验:
md5sum AI-LINK-v1.0.0.tar.gz应等于上表值。
注:压缩包与内部构建产物(6b8f53b6…)仅差一个README.md(本手册更新版),其余 25 个文件字节一致。
安装
方式一:在线一键(推荐)
SSH 登录路由器,执行一行:
curl -fsSL https://ai-link-official.pages.dev/install.sh | sh脚本会依次完成:检测系统环境 → 按「官方源 → ghfast.top → gh-proxy.com → GitHub」顺序自动选源下载 → MD5 校验 → 解包 → 调用安装程序。
国内网络想强制走加速镜像:
curl -fsSL https://ai-link-official.pages.dev/install.sh | AI_LINK_MIRROR=https://ghfast.top/https://github.com/Master-AI-007/ai-link-openwrt/releases/download/v1.0.0 sh只想先看看它做什么(不实际安装):
curl -fsSL https://ai-link-official.pages.dev/install.sh | sh -s -- --dry-run方式二:手动下载安装
tar -xzf AI-LINK-v1.0.0.tar.gz
cd ai-link-openwrt
sh install.sh安装完成后访问 http://<路由器IP>:9099(独立面板)或 LuCI → 服务 → AI-LINK 智能代理。
升级:直接执行 install.sh 即可,脚本会备份现有 /etc/config/ai-link 并逐项合并,保留节点、订阅与系统开关。
卸载:
ai-link uninstall -y # 彻底卸载(自动归档 /etc/ai-link 到 /root/ai-link-final-backup/)
ai-link uninstall --keep-config # 保留配置卸载验收状态
| 项 | 结果 |
|---|---|
| 交付门禁(23 项) | 23 / 23 PASS |
内置契约自检 --self-test |
SELF_TEST_PASSED |
| 静态门禁 | div 834/834 · CRLF 0 · symtable 未定义 0 |
| 全新安装(零残留状态) | 22/22 组件完整 |
| 卸载残留 | 0(源码目录保留) |
| 备份 → 恢复出厂 → 恢复 | 数据与设置 16/17 一致(auto_nodes.json 为运行时探测数据) |
| 五种路由模式 | 逐模式实测通过 |
| IPv6 双模式 | 防火墙层差异验证通过 |
已知问题
- 手册提到的
scripts/state_hash.py/scripts/residue_scan.py未随压缩包分发(手册第 7 章)。这两个是验收工具,可在本仓库scripts/目录获取。 auto_nodes.json含实时探测数据(current_delay_ms、quality_ranking等),daemon 运行时会持续重写,不适合作为备份一致性比对项。
反馈
- 问题与建议:本仓库 Issues
- 使用手册:
AI-LINK-v1.0.0-manual.pdf