五树云高端机场 | 一个极速通道,让你畅通无阻!

sing-box报错怎么办?按关键词定位启动、连接与DNS问题

更新于 2026-10-24 · xiaomitizi.top

简答:把 sing-box 日志里的报错原文复制下来,先判断是导入、启动、连接还是部分网站打不开,再分别检查 JSON、端口、权限、TLS、DNS 与路由,通常能缩小到一类原因。

定义:sing-box 报错是核心读取配置、启动入站、连接远端或处理 DNS 与路由时输出的错误提示,必须结合完整日志和发生阶段判断。

先看这张表:报错发生在哪一步,处理路径就不同

把日志里的报错原文复制下来,先按出现阶段定位,不要一看到错误就删除配置或反复重装。sing-box 使用 JSON 配置,官方配置引言列出了日志、DNS、入站、出站和路由等主要结构,并提供配置检查命令。查看 sing-box 配置引言

发生阶段常见报错或表现先验证什么修复后如何确认
下载或导入失败invalid character、unexpected end、远程内容无法解析确认返回内容是完整 JSON,而不是 HTML、登录页或其他格式配置可以保存,并能进入核心检查或启动阶段
核心启动失败unknown field、unknown value、address already in use、permission denied运行 sing-box check,再检查端口、文件权限和 TUN 权限核心保持运行,日志不再出现启动中断
节点连接失败timeout、connection refused、handshake failure区分地址不可达、端口拒绝、TLS 或认证参数不匹配日志出现连接建立或成功选择目标出站
部分网站打不开部分域名失败、应用不走代理、IP 可访问但域名失败检查 DNS、路由规则、系统代理端口和 TUN 权限连接日志显示命中预期策略,并对比出口 IP 或访问结果

30 秒结论:check 不通过就先改配置;check 通过但启动失败就查端口和权限;启动成功但连不上就区分 timeout 与 handshake;能连接但部分网站打不开,就查 DNS、路由和 TUN。

这是一篇第三方使用指南,不代表任何客户端或线路服务的官方页面。

先收集版本、日志和配置检查结果

  1. 记录核心和客户端信息。记下系统、客户端名称、客户端版本、sing-box 核心版本、安装方式,以及报错发生在导入、启动、连接还是访问阶段。不同客户端可能只是图形界面不同,真正报错仍来自核心日志。
  2. 检查配置文件。在配置文件所在目录执行 sing-box check -c config.json。官方配置页将 sing-box check列为配置检查命令;检查通过只能说明配置能够被读取和初始化,不能证明远端节点在线、端口可达或浏览器流量已经经过代理。查看官方配置检查说明
  3. 提高日志等级并保留上下文。官方日志配置支持 trace、debug、info、warn、error、fatal和panic等级,也支持输出到文件。排查时可临时使用:

{ "log": { "level": "debug", "output": "box.log", "timestamp": true } }

日志不要只截最后一行。应从第一处 FATAL、ERROR或WARN开始,连同后面的启动阶段、入站或出站名称一起保留。例如脱敏后的检索重点可以是:FATAL start service: initialize inbound[0]: ...,或 ERROR outbound: ... timeout。这只是截取示意,真正判断仍以你的完整原文为准。查看 sing-box 日志字段

分享日志前隐藏订阅令牌、节点密码、私钥、UUID、服务器地址、完整域名和个人 IP。只保留错误前后几行、系统版本、核心版本、配置字段名和复现步骤。

报错原文速查卡:先复制关键词,再执行验证

报错原文通常表示验证命令或检查修复动作与复测
invalid character
unexpected end of JSON input
JSON 不完整、括号或引号错误,或把其他格式直接交给 sing-box运行 sing-box check -c config.json,并查看远程响应内容修正 JSON 或改用 sing-box 格式;再次执行 check,确认无错误
unknown field
unknown value
字段不属于当前核心,或字段值不在当前版本支持范围内对照官方配置文档,确认字段属于 sing-box,而不是其他内核按官方字段替换,不要只删除报错行;重新 check 并启动
deprecated配置仍可被识别,但使用了官方标记为废弃的字段或功能查看迁移指南和废弃功能列表按迁移页的替代写法调整,完成 check 后再启动
address already in use本地监听端口已被其他进程占用Windows 用 Get-NetTCPConnection -LocalPort <端口>;macOS 用 lsof -nP -iTCP:<端口> -sTCP:LISTEN;Linux 用 sudo ss -ltnp | grep :<端口>关闭重复客户端或更改入站端口,并同步系统代理设置;重启后再次检查监听
permission denied
operation not permitted
配置、证书、规则集不可读,或创建 TUN、网络接口时权限不足检查文件权限、服务用户、系统安全提示和 VPN/TUN 权限只授予必要目录读取权限,按平台放行组件;重新启动并观察日志
rule-set 下载失败或超时启动依赖的远程规则集无法下载、解析或保存查看日志中的规则集 URL、超时和 HTTP 错误;测试域名解析与 HTTPS 访问确认 URL、网络和保存目录可用;必要时暂时移除该依赖后单独启动验证
outbound not found
dependency not found
路由或入站引用了不存在的出站标签、选择器或 URLTest 标签逐项比对引用名称与 outbounds中的 tag补齐或改正标签,确保引用对象在同一配置中声明;重新 check
geosite、geoip 数据错误旧数据文件或旧字段与当前配置方式不匹配检查是否仍依赖旧 GeoIP、Geosite 数据文件和旧字段按官方迁移指南改用当前规则集方式,再检查启动日志
timeout规定时间内没有完成连接,可能是地址、端口、路由或网络切换问题测试域名解析和目标端口连通性先修正地址、端口或网络;复测时观察日志是否进入握手或连接建立
connection refused目标地址主动拒绝连接,常见于服务未监听或端口不对确认目标端口、服务端监听和本地配置修正端口或启动对应服务;用端口测试确认不再立即拒绝
handshake failure已经进入握手阶段,但 TLS、认证或传输参数不匹配核对 server_name、ALPN、证书校验、传输方式和认证字段逐项与服务端参数一致,重新连接并确认日志进入握手完成

官方迁移页明确列出 TUN stack的迁移说明:应按迁移文档移除该选项;废弃列表也说明该选项已进入废弃流程。不要把其他客户端的 TUN 参数或取值直接复制到 sing-box。查看 sing-box 迁移指南 查看 sing-box 废弃功能列表

timeout、端口和 DNS:把“先测试”变成可执行命令

目标端口连不上:按系统执行测试

把 <地址>和<端口>替换为配置中的服务器地址和端口,不要使用客户端界面里显示的本地入站端口代替远端端口。

  • Windows:Test-NetConnection -ComputerName <地址> -Port <端口>。重点看 TcpTestSucceeded。
  • macOS:nc -vz <地址> <端口>。系统没有可用的 nc时,先安装对应系统工具或使用已安装的网络诊断工具。
  • Linux:nc -vz <地址> <端口>。若系统没有 nc,按发行版包管理器安装 netcat 后再测试。

端口测试失败时,优先检查地址、端口、网络切换和远端监听;测试成功但出现 handshake failure,则不要继续反复测端口,应转向 TLS、Reality 或认证参数。

域名解析失败:分别查 Windows、macOS 和 Linux

  • Windows:Resolve-DnsName <域名>。
  • macOS/Linux:dig <域名>;没有 dig时可使用 nslookup <域名>。

如果系统解析失败,先检查当前网络、DNS 服务器和域名是否拼写正确;如果系统解析正常但 sing-box 仍失败,则查看 sing-box 的 DNS 配置、路由规则和日志中实际使用的解析器。官方文档把 DNS 与路由作为独立配置部分,不能把其他内核的字段直接套用。查看 sing-box 路由配置

验证本地代理是否真正转发

如果配置声明了本地 SOCKS 入站,可用:

curl -x socks5h://127.0.0.1:<端口> https://example.com -I

端口必须以配置中入站的 listen_port为准。官方监听字段文档显示,监听地址和端口由 listen与listen_port控制,sing-box 核心没有 Clash 系客户端那种固定默认端口。查看 sing-box 监听字段

复测不要只看客户端按钮是否变绿,应同时查看连接日志中命中的策略或出站标签,并对比出口 IP 或实际访问结果。

TLS、Reality、规则集和标签引用怎么分开排查

Reality 握手失败

如果日志明确指向 Reality,优先核对客户端与服务端是否使用同一组参数:客户端的 public_key、short_id、server_name以及传输方式;同时确认系统时间没有明显偏差。官方 TLS 文档列出了 Reality 的 public_key、short_id和服务器握手字段,也列出了客户端 utls及指纹字段。查看 sing-box TLS 与 Reality 字段

不要把 Reality 的握手失败直接归结为线路速度慢。端口测试成功而握手失败时,先逐项核对密钥、短 ID、服务器名称和服务端配置,复测时观察是否从握手错误变为连接建立。

rule-set 下载失败或启动卡住

如果启动日志停在远程规则集下载、解析或保存阶段,先确认规则集地址可以访问,域名能够解析,配置指定的保存路径对运行用户可读写。若规则集依赖另一个出站或 HTTP 客户端,还要检查相关标签是否已经声明。不要只删除错误日志中的最后一行,否则可能把路由依赖删掉而留下新的引用错误。

selector、urltest 或 outbound 标签不存在

sing-box 的配置通过标签关联对象。出现 not found、dependency not found或类似错误时,搜索完整配置中的引用名称,再与出站对象的 tag逐字比较,注意大小写和连字符。修复后先执行 sing-box check -c config.json,再启动并观察是否还出现初始化失败。

旧 GeoIP、Geosite 数据方式

官方迁移页面把 GeoIP 和 Geosite 的迁移列入历史变更。遇到旧数据文件、旧字段或规则集初始化错误时,应按照迁移页的对应章节改用当前配置方式,不要将旧数据库文件、其他客户端的规则格式和 sing-box 配置混用。查看官方迁移章节

Windows、macOS、Linux、Android 和 iOS 的日志入口

平台优先查看位置验证动作重点差异
Windows图形客户端日志页、配置指定的输出文件PowerShell 查询本地端口,检查核心版本、服务状态和安全软件拦截TUN、系统服务和防火墙权限可能影响启动
macOS客户端服务日志或配置指定的输出文件使用 lsof查端口,在“隐私与安全性”中处理系统扩展提示不要照搬 Linux 的 ss命令;应用隔离和系统扩展可能影响运行
Linuxsystemd 服务日志或终端输出sudo systemctl status sing-box;sudo journalctl -u sing-box --output cat -n 50专用用户必须能读取配置、证书和规则集;TUN、低端口和路由标记依赖系统权限
Android客户端服务日志;崩溃日志位于工作目录的 stderr.log检查 VPN 权限、电池限制、网络切换和当前配置TUN 由 Android VPN 服务提供,不能照搬桌面端网卡命令
iOS客户端设置中的服务日志检查 VPN 配置允许、按需连接和当前网络权限NetworkExtension 提供网络扩展能力,命令行检查方式有限

官方 Android 客户端文档给出了工作目录和 stderr.log位置;Apple 平台文档说明可在设置中的服务日志查看崩溃信息。Linux 的官方包管理器文档则列出了 systemd 启动、重启和实时日志命令。查看 Android 客户端日志说明 查看 Apple 平台日志说明 查看 Linux 服务管理命令

仍然无法定位时,按模板提交脱敏信息

只说“sing-box报错”通常无法判断问题在哪一层。可以按下面模板整理,但不要粘贴完整订阅地址、私钥或节点密码:

系统:
客户端名称与版本:
sing-box 核心版本:
安装方式:
报错阶段:导入 / 启动 / 连接 / 部分网站打不开
完整报错原文:
sing-box check 结果:
最近 50 行日志:
目标端口测试结果:
DNS 查询结果:
是否同时运行其他代理客户端:
已隐藏:订阅令牌、密码、私钥、UUID、服务器地址、个人 IP

配置片段只保留能复现问题所需的字段,用占位符替换敏感值。若日志涉及远端服务状态,还需要单独确认远端监听、端口放行和节点参数;仅凭本地一行报错,不能判断远端服务是否正常。

完成自查后,下一步可按客户端类型继续进行sing-box 添加订阅教程,或查看sing-box 连接失败排查。

常见问题

sing-box 报错后要不要先重装?

通常不要。先保留原配置和完整日志,运行 sing-box check,再根据导入、启动、连接或 DNS 阶段处理。重装不能自动修复 JSON 字段错误、端口占用或 TLS 参数不匹配。

sing-box 的 YAML 配置可以直接导入吗?

不要默认可以。sing-box 核心使用 JSON 配置,其他客户端的 YAML 内容不能直接当作 sing-box JSON 使用。应确认远程服务是否提供 sing-box 格式,再执行配置检查。

sing-box check 通过了,为什么还是连不上?

check 主要验证配置能否被读取和初始化,不代表远端节点在线、端口可达、TLS 参数正确或浏览器流量已经经过代理。下一步看连接日志并执行端口测试。

timeout 和 handshake failure 的处理方法一样吗?

不一样。timeout 先查地址、端口和网络可达性;handshake failure 通常已经进入握手阶段,应核对 TLS、Reality、服务器名称、认证和传输参数。

Android 或 iOS 没有命令行,怎么排查 sing-box 报错?

优先打开客户端服务日志,记录核心版本、系统版本和完整错误。Android 可查看工作目录中的 stderr.log,Apple 平台可从设置中的服务日志查看崩溃信息。

端口被占用时,应该改 sing-box 还是改系统代理?

先确认哪个进程占用了配置中的 listen_port。可以关闭重复客户端,或改用未占用端口;如果改端口,还必须同步修改系统代理、应用代理或客户端设置。

相关阅读

参考资料

  1. 引言 — sing-box:配置结构、检查、格式化与合并
  2. 日志 — sing-box:日志等级、输出文件与时间戳
  3. 监听字段 — sing-box:监听地址与端口
  4. Migration — sing-box:配置迁移指南
  5. Deprecated — sing-box:废弃功能列表
  6. TLS — sing-box:TLS、Reality 与 uTLS 字段
  7. 路由 — sing-box:路由与平台相关字段
  8. 特性 — sing-box Android:工作目录与崩溃日志
  9. 特性 — sing-box Apple 平台:服务日志
  10. 包管理器 — sing-box:systemd 服务管理