sing-box Windows 连接失败怎么办?
简答:sing-box Windows 连接失败,最快的处理顺序是:先看第一条 ERROR 或 FATAL 日志,再用 sing-box check 校验配置,随后检查节点域名、远端端口、本地代理端口和 DNS;如果只在 TUN 模式失败,再处理管理员权限、路由与其他代理冲突。浏览器能打开客户端页面,不等于节点握手成功;显示“已连接”也不等于系统流量已经正确经过代理。本文面向 Windows 上的 sing-box 命令行或图形客户端,具体菜单名称以你使用的客户端为准。
定义:sing-box 是一个使用 JSON 配置的网络代理平台,Windows 上的连接失败通常发生在配置解析、内核启动、节点握手、DNS 解析或系统流量接管中的某一层。
先做 5 步速查:不要一开始就改一堆配置
先备份当前配置或导出客户端配置,再按下面顺序排查。每一步只改变一个变量,看到验证结果后再进入下一步。
| 顺序 | 操作 | 看到什么才算通过 | 未通过时怎么处理 |
|---|---|---|---|
| 1 | 确认客户端类型与版本 | 知道自己使用的是命令行程序、图形客户端,还是其他客户端托管的 sing-box 内核 | 不要把图形客户端的配置路径、日志路径直接套到命令行程序 |
| 2 | 查看启动日志 | 没有新的 ERROR、FATAL 或启动后立即退出 | 优先处理日志中的第一条错误,不要先改 DNS 或 MTU |
| 3 | 校验 JSON 配置 | sing-box check -c config.json 返回成功 | 修复字段拼写、类型、括号或引用文件路径 |
| 4 | 测试节点域名与端口 | 域名能解析,目标端口没有立即拒绝 | 核对服务器地址、端口、协议参数与订阅更新时间 |
| 5 | 最后再启用 TUN | 管理员权限下 TUN 启动,系统代理或路由状态符合预期 | 先关闭其他 VPN、代理和旧 TUN,再回滚到普通系统代理测试 |
官方文档说明 sing-box 使用 JSON 配置,并提供 check 命令进行配置检查;Windows TUN 的路由和 DNS 行为还会受到 auto_route、strict_route 与 DNS 设置影响。可查看 官方配置说明 和 官方 TUN 配置说明。
先判断:失败发生在哪一层
不要把“订阅更新失败”“程序启动失败”和“网页打不开”当成同一种问题。它们对应的检查对象不同。
- 配置导入或刷新失败:客户端没有拿到可解析的 JSON,或远程内容不是预期格式。先检查地址是否仍有效、返回内容是否为空,并在客户端内重新导入;不要把刷新成功理解为节点可用。
- 程序启动失败:通常先看 JSON 语法、字段版本、引用文件和权限。命令行用户可以在配置文件所在目录执行
sing-box check -c config.json;图形客户端则使用其日志或配置检查入口。 - 节点连接失败:重点查看域名、远端端口、TLS、SNI、UUID、传输方式和系统时间。日志出现
connection refused时,优先核对端口与服务端监听;出现i/o timeout时,检查网络路径、防火墙或远端是否无响应;这些只能作为排查方向,不能单凭一条日志判断服务端状态。 - 已连接但网页打不开:检查系统代理是否真的启用、浏览器是否使用系统代理、DNS 是否能解析,以及规则是否把目标流量送到了正确的出站。
- 只有 TUN 模式失败:重点看管理员权限、自动路由、严格路由、DNS 劫持和其他虚拟网卡冲突。官方说明指出,Windows 下启用
strict_route会限制经由非 TUN 接口的 DNS 流量,也可能影响部分依赖特殊网络路径的程序。
按报错处理:Windows 常见日志对照
| 日志或现象 | 优先检查 | 验证与停止条件 |
|---|---|---|
json: cannot unmarshal、字段未知或配置载入失败 | 字段类型、拼写、版本差异、引号和括号 | 先运行 sing-box check -c config.json;校验通过后再启动,避免同时修改多个字段 |
connection refused | 节点地址、远端端口、端口是否写错 | 可在 PowerShell 使用 Test-NetConnection example.com -Port 443 做基础 TCP 测试;测试失败只说明当前网络到该地址端口未建立 TCP,不等于一定能证明服务端故障 |
i/o timeout | 本地网络、远端端口、路由、防火墙或节点响应时间 | 换一个已知配置进行单节点测试;若多个节点都超时,先检查本地网络与客户端状态 |
handshake failure 或 TLS 相关错误 | 系统时间、SNI、证书校验、传输方式和服务端参数 | 逐项对照配置来源;不要为了“先连上”而关闭证书校验 |
DNS resolve failed | 域名拼写、本地 DNS、TUN DNS 模式和 DNS 出站 | 先用 nslookup example.com 检查系统解析;若系统能解析而 sing-box 不能,再看配置中的 DNS 与路由 |
Access is denied、TUN 创建失败 | 管理员权限、旧虚拟网卡、其他 VPN 或安全软件 | 退出其他网络接管程序,以管理员身份重新启动;仍失败时暂时关闭 TUN,用系统代理做最小复现 |
命令中的域名和端口只是占位示例,应替换为你配置中的实际值。不要把订阅链接、UUID、密码、私钥、完整服务器地址和带认证参数的日志直接发到公开平台。
配置能启动但仍无法访问:检查端口、代理和 DNS
- 确认本地入站端口:如果使用 HTTP 或 SOCKS 入站,检查客户端显示的监听地址和端口,再确认系统代理或浏览器代理指向同一端口。端口处于监听状态只说明进程占用了端口,不代表出站节点可用。
- 检查端口冲突:在 PowerShell 执行
Get-NetTCPConnection -LocalPort 端口号 -ErrorAction SilentlyContinue,确认占用者是否就是当前 sing-box 进程。若端口被其他程序占用,可改用未占用的本地端口,但要同步修改系统代理设置。 - 区分系统代理与 TUN:系统代理只影响遵循系统代理设置的应用;TUN 则通过虚拟网卡和路由接管更广泛的流量。若系统代理可以访问、TUN 不可以,优先检查自动路由、严格路由、DNS 和其他虚拟网卡,不要先怀疑节点。
- 检查 DNS:如果 IP 目标可访问、域名目标失败,DNS 是优先排查方向。启用 TUN 时,官方文档对 Windows 的
strict_route和 DNS 行为有明确限制;修改 DNS 后必须重新启动客户端,并用实际域名访问验证。 - 回滚验证:暂时关闭 TUN、规则分流和复杂 DNS 规则,只保留一个节点、一个出站和一个测试目标。最小配置能工作时,再逐项恢复规则;最小配置也失败时,继续核对节点参数或联系配置提供方。
版本、权限与回滚:什么时候不要继续改配置
sing-box 版本更新可能带来字段迁移或行为变化。官方发布页会列出版本与变更,当前使用的版本应以你实际下载文件或客户端关于页面为准,不要只凭文件名判断。可先保存旧配置和旧版本,再升级或回退一次进行对照;如果新版本启动失败而旧版本正常,应记录版本号、第一条错误和最小配置结果,再决定是否迁移字段。
如果错误明确指向 TUN 权限,先以管理员身份运行;如果错误指向路由循环、DNS 无法访问或其他虚拟网卡冲突,先关闭 TUN 并恢复普通系统代理。回滚的验证边界是:命令行能够启动、日志不再报错、单个测试目标能够访问;这仍不能证明所有应用、所有节点或长期连接都正常。
截至 2026-10-31,官方项目的版本变更应以其发布页和文档为准。可查看 sing-box 官方 Releases;若升级后出现旧字段不兼容,再对照 官方迁移说明。
诊断信息怎么整理,才能让问题可复现
需要向配置提供方或技术支持反馈时,建议只提交必要信息:Windows 版本、sing-box 版本、使用命令行还是图形客户端、配置检查结果、第一条错误、是否仅 TUN 失败、单节点测试结果和发生时间。日志中应打码订阅地址、UUID、密码、私钥、认证令牌、完整服务器地址及可能包含个人信息的路径。
最小复现应满足三个条件:只保留一个节点或出站、只测试一个目标、每次只修改一个设置。不要把“浏览器打不开”“测速慢”“偶尔超时”混在同一条结论里;分别记录启动、解析、握手和访问四个阶段,才能判断问题是在本地配置、网络路径还是节点参数。
结论:先修配置启动,再修节点握手,最后处理 TUN
对大多数 Windows 连接失败场景,最短路径不是立即更换 DNS 或 MTU,而是先确认客户端类型,查看第一条错误,运行配置检查,再验证域名和端口。只有普通系统代理已经成功、而 TUN 仍失败时,才进入管理员权限、自动路由、严格路由和虚拟网卡冲突排查。
本文为第三方使用指南,不代表任何品牌客户端或配置提供方的官方页面;涉及品牌入口、配置有效期和服务状态的内容,应以对应官方信息或配置提供方的可核验说明为准。
常见问题
sing-box Windows 显示已启动,但浏览器打不开怎么办?
先确认浏览器是否使用系统代理,以及系统代理指向的地址和端口是否与 sing-box 入站一致;再检查域名解析和规则出站。若系统代理能用、TUN 不能用,优先排查 TUN 权限、自动路由、严格路由和其他虚拟网卡。
sing-box check -c config.json 应该在哪里执行?
在能够直接运行 sing-box.exe 的命令行环境中执行,并把 config.json 替换为实际配置文件路径。该命令适用于命令行程序;如果你使用图形客户端托管内核,应优先使用客户端提供的配置检查或日志入口。
connection refused 和 i/o timeout 有什么区别?
connection refused 表示连接被立即拒绝,优先核对地址和端口;i/o timeout 表示在规定时间内没有完成相应网络操作,可能涉及本地网络、路由、远端无响应或防火墙。两者都不能单凭日志断定配置提供方或服务端一定故障。
Windows 开启 TUN 后提示 Access is denied 怎么处理?
先退出其他 VPN、代理和可能占用虚拟网卡的程序,再以管理员身份启动 sing-box 或对应客户端。如果仍失败,暂时关闭 TUN,用普通系统代理做单节点测试;这样可以区分节点问题与本机权限、路由问题。
升级 sing-box 后旧配置不能启动怎么办?
先保留旧配置和版本信息,运行配置检查并记录第一条错误,再对照官方迁移说明和发布记录。不要直接删除旧配置,也不要一次性修改多个字段;如果旧版本正常、新版本失败,应优先核对字段迁移和版本兼容性。