首页 · jinx.mom

sing-box 已连接但打不开网页:用 4 个命令判断 DNS、TUN、路由还是节点

更新于 2026-11-04 · jinx.mom

简答:sing-box 显示运行或已连接,不等于网页流量已经成功转发。先暂停 sing-box 测试裸网络,再用 curl 分别测试直连和本地代理,用 nslookup 或 dig 判断 DNS,最后根据结果进入 TUN、系统代理、路由、节点或平台权限分支;不要仅凭 VPN 图标、延迟数字或端口监听就判断代理可用。

定义:“sing-box 连接成功但无法上网”是指核心或客户端显示运行、节点可能已完成握手,甚至系统出现 VPN/TUN 状态,但目标应用的 DNS、代理握手、路由转发或最终连接仍有一层失败。

先做这 3 步:把“已连接”拆成可验证的结果

本文是第三方使用指南,适用于使用 sing-box 核心或图形客户端的排查;不同客户端的菜单名称、权限要求和配置字段可能不同,版本相关行为请以当前客户端界面和 sing-box 配置文档为准。

  1. 暂停 sing-box,测试裸网络:关闭 TUN、VPN 或系统代理后,用浏览器访问一个在你当前网络中已知可访问的普通网站。如果直连也失败,先修复 Wi-Fi、移动网络、系统时间或本机防火墙,不要继续改 sing-box。
  2. 分别测试直连和本地代理:将下面命令里的 example.com 换成你确认可访问的域名,将 127.0.0.1:2080 换成客户端实际的 HTTP 或 SOCKS 入站地址。端口号不是固定值,必须以当前配置为准。
  3. 查看第一条关键日志:重新启动连接,记录最早出现的 error、fatal、timeout、handshake、DNS 或 route 信息。日志等级和输出方式可参考 sing-box 官方日志配置说明。
先看什么测试结果下一步
裸网络关闭 sing-box 后普通网站也打不开先查 Wi-Fi、移动网络、系统代理残留、时间和防火墙
本地代理直连失败,代理请求成功说明代理链路基本可用,重点查 TUN、系统代理或应用是否使用代理
DNSIP 访问或代理连接有响应,但域名解析失败重点查 DNS 服务器、DNS 路由、DNS 劫持和 IPv4/IPv6
远端连接代理请求超时或握手失败查节点地址、远端端口、TLS/SNI、认证、UDP/TCP 和服务端参数

4 个命令:直连、代理、DNS 和端口分别验证

下面的命令只用于定位,不代表某个固定域名或端口在所有网络中都可达。测试时尽量使用同一个域名,并在同一网络环境下比较结果。

Windows PowerShell

curl.exe -I --max-time 10 https://example.com
curl.exe --proxy http://127.0.0.1:2080 -I --max-time 10 https://example.com
nslookup example.com
Test-NetConnection 节点域名 -Port 443
Get-NetTCPConnection -LocalPort 2080 -State Listen

第一条是直连 HTTP 请求,第二条是通过 HTTP 代理请求;如果配置的是 SOCKS5,可改用 curl.exe --proxy socks5h://127.0.0.1:2080。nslookup 能返回地址不代表目标 HTTPS 一定可用,Test-NetConnection 成功也只说明 TCP 端口测试有响应,不能代替 TLS、认证或应用层验证。

macOS 和 Linux

curl -I --max-time 10 https://example.com
curl --proxy http://127.0.0.1:2080 -I --max-time 10 https://example.com
curl --proxy socks5h://127.0.0.1:2080 -I --max-time 10 https://example.com
dig +time=3 +tries=1 example.com
nc -vz 节点域名 443
ss -lntp | grep 2080
# macOS 也可使用:lsof -nP -iTCP:2080 -sTCP:LISTEN

如果系统没有 dig 或 nc,可使用系统已有的 DNS 和端口测试工具;不要把“本地端口正在监听”当成“代理请求可用”。sing-box 的 mixed 入站可以同时提供 SOCKS 和 HTTP 服务,但是否启用、监听地址和端口仍由配置决定,参见 官方 Mixed 入站文档。

对照结果较稳妥的判断继续检查
直连成功,HTTP/SOCKS 代理失败本地入站、代理协议、默认出站或节点链路有问题看入站日志、节点握手、TLS/SNI、认证和远端端口
直连失败,代理也失败不能先归因于 sing-box,可能是本地网络或测试目标不可达换一个当前网络可访问的测试目标,检查 Wi-Fi、移动数据和 IPv4/IPv6
代理请求成功,浏览器失败浏览器未使用该代理,或系统代理、TUN、环境变量存在冲突检查浏览器独立代理、系统代理以及 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY
DNS 失败但已知 IP 连接有响应解析链路或 DNS 规则有问题查 DNS server、route 规则、DNS detour、劫持模式和 IPv6

按现象分流:先判断是 DNS、TUN、路由还是节点

所有网站和应用都打不开:先关闭 TUN,保留一个本地 SOCKS/HTTP 入站,用命令测试代理。如果代理测试也失败,优先查看节点握手、远端端口、TLS/SNI、认证和服务端入站参数;不要仅凭 timeout 断言是运营商阻断,因为 DNS、MTU、IPv6、防火墙和参数错误也会产生超时。

只有域名打不开,已知 IP 或代理端口测试有响应:重点看 DNS。检查 DNS 配置是否有可用的 servers、rules 和 final,以及 DNS 请求是否被错误地送到 direct、block 或不可达的上游。官方文档列出了 DNS 的服务器、规则、默认服务器和解析策略字段,具体写法应以安装核心对应的配置结构为准,参见 DNS 官方文档。

只有部分应用打不开:检查应用是否走系统代理、TUN 或环境变量;Android 还要检查分应用代理。官方 Android 客户端通过 VpnService 提供非特权 TUN,并支持选择需要代理或绕过的应用;如果应用被排除,或者只包含了部分应用,就可能出现“一部分能用、一部分不能用”,不能据此直接判断为 DNS 污染,参见 Android 功能说明。

只有 HTTPS 失败:先用 curl -I 对比 HTTP 代理和 SOCKS5 代理,再检查系统时间、TLS/SNI、证书校验、MTU 和节点协议参数。若 DNS 能解析、TCP 端口可达但 TLS 握手失败,问题更可能在 TLS 参数、服务端配置、路径或网络质量,不能只通过更换 DNS 解决。

开启 TUN 后立即断网:先关闭 TUN、恢复系统代理或直连,确认网络恢复后再改配置。官方 TUN 文档说明,auto_route 会把默认路由交给 TUN;为避免流量回环,需要结合默认接口、自动检测接口或出站绑定接口等设置。strict_route 的行为也与平台有关,Windows 可用于限制不支持的网络并减少普通多网卡 DNS 泄漏,但可能影响部分虚拟机软件;Android 的 strict_route 则未实现,不能照搬桌面配置。详见 官方 TUN 文档。

只有 IPv6 或某些网络失败:分别测试 IPv4 和 IPv6,比较 Wi-Fi、移动网络以及不同路由器。可在 DNS 配置中核对解析策略是否为 prefer_ipv4、prefer_ipv6、ipv4_only 或 ipv6_only;不要在没有对照测试时直接删除 IPv6 或固定某个 DNS。MTU 也应逐步测试,先恢复默认值,再根据日志、分片或特定协议失败现象调整。

按平台恢复:Windows、macOS、Linux、Android 与路由器

Windows

  1. 退出 sing-box 或关闭 TUN,进入系统代理设置,确认没有残留的手动 HTTP 代理;同时检查浏览器是否设置了独立代理。
  2. 如果使用 TUN,确认客户端有需要的权限,检查虚拟网卡、默认路由和 DNS 是否随客户端启动而变化;不要同时开启两个会接管流量的代理工具。
  3. 用 PowerShell 的 Get-NetTCPConnection 确认实际端口,再用带 --proxy 的 curl 测试;端口监听但代理失败时,回到入站和日志,不要直接改 DNS。
  4. 恢复时先关闭 TUN,仅保留系统代理;如果系统代理可用,再单独启用 TUN 验证,这样便于确认是哪一种接管方式出错。

macOS

  1. 先关闭 sing-box 的 TUN 或网络扩展,检查系统代理和浏览器独立代理是否重复设置。
  2. 用 lsof、curl、dig 分别检查监听、代理请求和域名解析;如果命令行可用而浏览器不可用,优先查浏览器代理、扩展和应用自己的网络设置。
  3. macOS 上部分配置字段和图形客户端选项可能与命令行核心不同;涉及 TUN、网络扩展、权限或系统代理时,按当前客户端界面回滚,不要直接套用 Windows 的路由方案。

Linux

  1. 先停止服务或进程,使用 sudo systemctl stop sing-box 和 sudo journalctl -u sing-box --output cat -e 查看服务状态;官方安装文档列出了 systemd 服务管理命令,参见 官方安装与服务管理说明。
  2. 检查 ss -lntp、ip route、ip rule 和 DNS 解析器状态,确认是否存在旧的 TUN、策略路由或 nftables 规则。
  3. Linux 使用 TUN 时,官方建议优先考虑 auto_redirect;它依赖系统能力和 nftables,OpenWrt 还涉及 fw4 规则。权限、内核模块、防火墙和 Docker 网桥冲突都需单独核对,不能把 Linux 配置原样复制到其他平台。

Android

  1. 先断开其他 VPN,重新授权 sing-box 的 VPN 请求,并检查系统是否限制后台运行或电池使用。
  2. 检查分应用代理列表:确认目标应用没有被排除,也没有只代理了浏览器而遗漏实际出问题的应用。
  3. Android 图形客户端通过 VpnService 提供 TUN,部分桌面字段在 Android 上不可用或未实现;尤其不要根据 Windows 的 strict_route 经验判断 Android 行为。

路由器或 OpenWrt

  1. 先从路由器本机测试 DNS、节点域名和远端端口,再从局域网终端测试,区分“路由器自身不能连”和“转发给客户端失败”。
  2. 检查 TUN 的接口、默认路由、策略路由、DNS 转发、fw4/nftables、LAN 到 WAN 转发和 IPv6 防火墙;如果只有部分终端失败,还要看 DHCP 下发的 DNS 和网关。
  3. 官方 TUN 文档说明 Linux 的 auto_redirect 可自动插入 OpenWrt fw4 兼容规则,但这不等于所有自定义防火墙、旁路由拓扑和分流规则都能直接兼容;修改前导出配置,回滚时先停止 sing-box 并恢复原有防火墙规则。

配置、日志与回滚:用最小复现代替盲目重装

如果你能访问原始配置文件,可先复制一份备份,再运行配置检查。官方配置文档提供了 sing-box check,命令行支持使用 -c 指定配置文件;不同构建的参数以当前版本执行 sing-box check --help 为准:

sing-box check -c config.json

检查通过只代表配置结构或字段校验通过,不代表节点可达、DNS 可用、TLS 参数正确或目标应用一定会走代理。若检查失败,先恢复到上一次可用配置;若检查通过但仍无网,建立最小复现:只保留一个节点、一个默认出站、一个本地入站和一个测试目标,逐步加回 DNS、规则集、TUN 和分应用设置。官方文档还提供 JSON Schema,可生成与当前构建匹配的 schema,减少字段版本不兼容问题,参见 JSON Schema 官方说明。

排障完成后按相反顺序恢复:先确认裸网络,再确认本地代理请求,再启用系统代理或 TUN,最后恢复复杂路由和规则集。每次只改一个变量,并记录改动前后的日志和测试结果。

提交日志前要脱敏:不要公开完整订阅链接、访问令牌、二维码、UUID、密码、私钥、服务器地址、完整配置文件或带凭据的日志。若凭据已经公开,应先撤销或重新生成,再提供删除敏感字段后的最小日志片段。

常见问题

sing-box 显示连接成功,是否说明节点已经正常?

不一定。连接成功可能只表示核心运行、节点握手完成或系统出现 VPN 状态;还必须分别验证 DNS、代理协议握手、目标连接和应用是否真的使用代理。最可靠的起点是用 curl 对比直连与本地代理。

本地代理端口能监听,为什么浏览器还是打不开网页?

端口监听只说明有进程占用了该端口,不代表代理请求能完成。请先用 curl 通过同一端口测试,再检查浏览器独立代理、系统代理、TUN 是否重复接管,以及 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 等环境变量。

sing-box 的 DNS 应该直接照抄某个公共 DNS 吗?

不建议直接照抄。DNS 是否可达取决于所在网络、协议和路由;应先用 nslookup 或 dig 对照测试,并核对 sing-box 的 servers、rules、final、解析策略和 TUN 的 dns_mode。具体上游地址和协议需按当前网络环境选择。

开启 TUN 后断网,应该先改 strict_route 吗?

不要直接改。先关闭 TUN 恢复网络,再确认平台、核心版本、auto_route、DNS 模式、默认接口、策略路由和防火墙。strict_route 的行为有平台差异,Windows 与 Android 不能互相套用,且官方文档明确说明 Android 未实现该字段。

如何判断是节点问题还是本机 DNS 问题?

先看分层结果:域名解析失败但本地代理端口可用,优先查 DNS;代理请求本身超时或握手失败,查节点地址、远端端口、TLS/SNI、认证、UDP/TCP 和服务端参数;浏览器失败而 curl 代理成功,则优先查应用代理接管。

把配置和日志发给别人时,哪些内容必须删除?

至少删除完整订阅链接、访问令牌、二维码、UUID、密码、私钥、服务器地址、完整配置文件和带凭据的日志。若已经泄露凭据,应先撤销或重新生成,再分享最小化、脱敏后的报错片段。

相关阅读

参考资料

  1. sing-box 官方 TUN 入站文档
  2. sing-box 官方 Android 功能说明
  3. sing-box 官方 Mixed 入站文档
  4. sing-box 官方 DNS 配置文档
  5. sing-box 官方配置引言与配置检查说明
  6. sing-box 官方日志配置文档
  7. sing-box 官方 JSON Schema 文档
  8. sing-box 官方安装与 systemd 服务管理说明