| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| sing-box-windows-2.4.0-1.x86_64.rpm | 2026-10-31 | 43.5 MB | |
| sing-box-windows-arm64-portable.zip | 2026-10-31 | 10.2 MB | |
| sing-box-windows-portable.zip | 2026-10-31 | 10.9 MB | |
| sing-box-windows_2.4.0_aarch64-macos-arm64.dmg | 2026-10-31 | 39.9 MB | |
| sing-box-windows_2.4.0_amd64.AppImage | 2026-10-31 | 117.3 MB | |
| sing-box-windows_2.4.0_amd64.deb | 2026-10-31 | 43.5 MB | |
| sing-box-windows_2.4.0_arm64-setup.exe | 2026-10-31 | 23.3 MB | |
| sing-box-windows_2.4.0_arm64_en-US.msi | 2026-10-31 | 34.7 MB | |
| sing-box-windows_2.4.0_x64-macos-intel.dmg | 2026-10-31 | 42.6 MB | |
| sing-box-windows_2.4.0_x64-setup.exe | 2026-10-31 | 27.3 MB | |
| sing-box-windows_2.4.0_x64_en-US.msi | 2026-10-31 | 38.4 MB | |
| README.md | 2026-10-31 | 11.4 kB | |
| v2.4.0 source code.tar.gz | 2026-10-31 | 1.7 MB | |
| v2.4.0 source code.zip | 2026-10-31 | 1.9 MB | |
| Totals: 14 Items | 435.2 MB | 1 | |
[v2.4.0] - 2026-10-31
✨ 新功能
- 升级 sing-box 内核到 1.14.4(上游最新稳定版):gRPC API 协议零变更,本项目客户端无需跟版;内核下载兜底版本号同步提高
- 高级设置新增「兜底 DNS 策略」:可选择未命中任何分流规则的域名由「国内 DNS 直连」(默认,不依赖代理)还是「境外 DNS 经代理」解析
- 高级设置新增「乐观缓存陈旧窗口上限」:控制过期 DNS 结果最多还能被继续使用多久(默认 30m),避免坏结果被长期钉住
- 假 DNS 的 IPv6 地址池默认值对齐上游:
fc00::/18→2001:2::/48(RFC 5180 基准测试段),避免与企业内网 ULA 地址冲突;存量用户已保存的值保持不变 - 新增「出站」页面(出站总览):展示内核中所有出站与分组的快照,按延迟排序、支持搜索;独立成页,不占用代理页空间
- 维护页新增「网络诊断」卡片:网络质量指标 + sing-box 服务状态列表,可逐项探测服务可用性
- 规则页新增「自定义规则」面板:支持自定义规则的增删改查与启停
- 规则页运行时规则改为只读展示:改用 sing-box 1.14 官方 gRPC 接口
🛠️ 开发体验
- 开发态接入 CrabNebula DevTools 调试面板:可视化查看日志流、命令与事件的 payload 与耗时;release 构建不含该插件,产物零影响
- 沉淀调试工具指南与接入模板:
docs/devtools.md与docs/templates/tauri-devtools/可直接复制到后续 Tauri 项目复用 - 修复
pnpm format:check在干净 checkout 上失败(CI 当时是红的):格式器的行尾策略改为与 git 检出行为对齐 - 修复
grpc_smoke实机联调脚本卡在最后一步退不出来:长驻流读取补超时兜底
🐛 问题修复
- 修复 TUN 模式「反复要求重启并以管理员权限运行」(Windows):此前存在一组互相放大的缺陷,导致用户开启 TUN 后开关反复弹回、每次都要重新走一遍提权重启。
- 管理员探测改用进程 token:原实现执行
net session判断是否已提权,而该命令依赖 Server 服务(lanmanServer)可用性,服务被禁用时会假阴性——已以管理员运行的进程也被判为普通权限。现改为读取进程 token 的TokenElevation(app::system::elevation),token 检测权威、不可用时才回退旧命令 - 不再在「读配置」时改写并落库 TUN 开关:原实现在每次读取应用配置时,若判定当前非管理员就把
tun_enabled改回false并写回数据库。用户显式开启的 TUN 因此被后台悄悄抹掉,开关反复弹回。现改为读配置不改写用户意图,改由运行态判定「此刻能否真的启用 TUN」,不能时显式上报elevation_required供前端引导授权 - 切换失败回滚同时恢复运行态:此前只还原数据库里的布尔值,内核可能已被停掉或仍跑着新模式(残留 TUN 网卡与路由),界面状态与内核实际模式脱节。现回滚会按旧模式重新应用配置并重启内核
- 提权重启失败不再让用户断网:「落库 → 停内核 → 请求管理员重启」的最后一步失败时,内核已被停掉,而 TUN 是全量接管 —— 用户直接失去网络出口。现失败时按旧模式把内核拉回来
- 开启与关闭路径对称:关闭 TUN 同样要结束一个高权限内核进程,普通权限杀不掉;此前只在开启方向做权限判定,关闭方向一律用普通权限操作。现关闭也走「确认 + 管理员重启」,并新增对应的确认文案
- 首页与托盘两条路径收敛:两处的提权判定位置、运行时配置参数与返回语义此前各不相同,现统一到
useTunToggle的ensurePrivilege回调与共用的ensureWindowsTunPrivilege - 状态未变的切换不再弹 UAC:提权前置此前早于「状态未变」短路执行,导致什么都没改也会触发 UAC 与应用重启
- 权限类失败有了专门诊断:内核因无权创建 TUN 设备而启动失败时,此前一律报「内核启动失败」。现发射
KERNEL_PERMISSION_DENIED(分类器此前已就绪但没有发射点),前端据此提示需要管理员权限并给出「以管理员身份重启」入口;权限类失败不再重试(重试多少次都一样) - 结束不掉高权限内核时明确报错:内核以管理员身份启动时,普通权限的界面此前只能看到「停止失败」,现明确告知需要以管理员身份重启应用
- 修复 TUN 配置在两条路径下不一致:TUN inbound 此前有生成路径(订阅更新 / 设置补丁)与运行时切换路径两份实现,字段不一致(生成路径缺
interface_name),导致「订阅更新后的配置」与「切换 TUN 后的配置」使用不同的 Wintun 适配器名。现统一由TunProfile渲染,两条路径产出逐字段一致;macOS 不再固定utun设备名(避免配置更新后适配器名漂移) - 修复「国内网站误走代理 / 无法自动绕过 / 未按规则分流」:sing-box 1.11 起路由规则的 IP 匹配对域名目标不再隐式解析,导致按 IP 判定国内的规则长期失效;补上缺失的解析步骤后,国内站点恢复稳定直连
- 修复「代理一挂,全部域名解析失败」:兜底 DNS 改为默认走国内解析器直连,不再依赖代理可用性
- 修复「后台长时间运行后网络异常、必须重启内核才能恢复」:乐观 DNS 缓存的陈旧窗口、测速分组掐断长连接、国内 DNS 使用易被限速的 QUIC 三个诱因一并处理
- 消除 sing-box 1.14 的 DNS 弃用告警:DNS 规则移除已废弃的 IP 规则集写法,路由与 DNS 规则统一改用 1.11+ 官方写法
- 修复「规则集缓存缺失时内核直接起不来」:直连下载客户端的写法会被内核判定为无意义配置并启动失败,生成与补丁两条路径均已修正,且能自动纠正存量配置
- 修复
pnpm kernel:fetch --all在 Windows 上拉不到 linux/macOS 内核:解压改用系统自带 tar,并补齐.tar.gz的兜底路径 - 修复 Linux 平台构建失败(master 的 CI 长期红灯、Linux 发布产物缺失):根因是传递依赖的坏发布而非本仓代码——
tauri-plugin-single-instance依赖的interprocess 2.4.6 / 2.4.7在其os/unix/模块里调用了 tokio 中并不存在的AsyncFd::register_with_interest(应为with_interest),而该模块只在 Linux 编译,Windows / macOS 完全察觉不到,表现为「本地与 Windows 构建全绿,只有 Linux 恒定失败」 - 将
interprocess锁定在可用区间(<2.4.6,≤2.4.5 均正常);由于它是传递依赖、Cargo 无法直接约束传递依赖版本,故在Cargo.toml声明为直接依赖以锁定,并在注释中写明原因与解除条件 - 顺带修掉
platform/linux.rs的 4 处clippy::collapsible_if:clippy 收紧后该 lint 会命中if let嵌套,而该文件仅在 Linux 编译,本地 Windows 的 clippy 从不检查它 - 此前 CI 一直红在 clippy 步骤,release workflow 的 Linux job 也因此失败——只有 Windows / macOS 产物
- 修复代理页被「出站总览」挤扁、主体几乎不可见:出站总览改为独立页面,代理页布局恢复并加了防回归保底
- 修复后台运行一段时间后代理静默失效(需手动重启内核):守护的连通性检测改为经内核代理端口探测,并能区分系统断网
- 修复自愈机制在「节点本身不可用」时陷入无限重启循环:改为分级自愈(关连接 → 切自动选择 → 重启内核),连续重启无效后熔断
🐛 稳定性与并发修复
- 修复 SQLite 并发写风险:改用 WAL + busy_timeout + 连接池,并补充外键约束
- 修复数据库初始化失败后后台任务永久空转:等待存储就绪加上超时上限
- 修复「第二个数据库静默不建表」:建表改为按库幂等执行
- 修复 schema 迁移静默失败不可观测:迁移失败不再被吞掉,失败时携带完整 SQL 上抛,并记录 schema 版本
- 修复 Tauri 事件监听被误杀:改为按 id 精确退订,另保留显式的「移除全部监听器」
- 修复流量监听器泄漏、主进程错误处理器失效、
stopKernel({ force })幽灵参数、UpdateModal绕过统一事件清理 - 修复 22 处日志 emoji 编码损坏、
update-progress事件缺失 message 字段 - 统一内核存活判定:此前三套实现结论可能互相矛盾,表现为「内核在跑、流量正常,界面却显示已停止」;现收敛为唯一判定入口
♻️ 重构
- 配置双模型收敛:配置生成与配置补丁此前各写一份语义,加一个设置项要改两处且漏改不报错;现统一到唯一映射点,生成路径不再回调补丁路径
- 配置归属判定:补丁前先判定配置是否属于本程序;判定为外来配置时只同步端口,不重建入口、不改写路由终点,避免改坏用户导入的机场原始配置
- 跨语言类型统一到 ts-rs:前端不再手写后端结构体 interface,类型漂移由测试守护
- TUN 切换状态机收敛:首页与托盘的 3 处变体统一为一个状态机
- 内核压缩包解压统一:下载与导入两条路径的重复代码合并,支持的格式取并集
- 应用配置改为 schema 驱动:配置字段只声明一次,持久化的读/写/监听自动生成
- HTTP 客户端按档位复用:11 处各自建客户端收敛为档位复用,守护循环不再每次重建
- 应用配置内存快照:读配置不再每次都走一次数据库往返
- 移除
mitt事件总线:事件链路从 4 跳缩到 2 跳 - 国际化统一:清除全部语言判断三元与硬编码中文,语言包补齐日/俄语译文
- 日志页与连接页的排序/分组逻辑合并
- 超大视图拆分:HomeView / SubView / ProxyView 合计 3059 → 1490 行,样式迁到独立 CSS 文件
- 按职责拆分大文件:
proxy_service拆为 4 个子模块,tray/service拆为 5 个子模块 - 国家码改为生成 + 测试守护:消除与
flag-icons的漂移 - 删除后端死代码约 500 行、前端死代码约 1100 行
🐛 修复
- 修复 26 个 i18n key 层级错置、界面直接显示裸 key
- 修复 i18n 切换不生效、直接显示 key 原文:生效语言此前从未写入 i18n 实例,且部分提示固化了求值结果
🧪 测试与门禁
- 配置生成黄金样本:固化 4 组代表性配置,配置语义漂移可被逐字段比对发现
- 生成 / 补丁双模型收敛断言:两条路径的产物必须逐字段一致
- i18n 引用 key 存在性门禁:静态引用扫描 + key 校验
- 跨语言类型漂移守护:守护 ts-rs 导出路径与前后端类型一致性
- CI 新增 4 道门禁:
cargo fmt --check、prettier --check、前端测试、i18n key 对齐校验 - 测试规模:后端 289 项、前端 178 项