Download Latest Version sing-box-windows-arm64-portable.zip (10.2 MB)
Home / v2.4.0
Name Modified Size InfoDownloads / 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 项
Source: README.md, updated 2026-10-31