代理客户端写着「已连接」,只说明本机到代理服务器的隧道建起来了。网页打不开、只有部分域名失败、或者对话写到一半断开,经常是 DNS、传输层、本机时钟或目标网站自己的策略,而不是隧道按钮又掉了一次。下面按现象拆开查。事实核对日是 2026-10-26;没有在大陆宽带上复测,命令输出以你自己的网络为准。

OpenAI、Anthropic、Google 并不把中国大陆列为下述消费级或开发者产品的正式服务地。从名单外访问,可能违反其条款并导致账号被限制。法律背景只转述公开文件,见文末,不是法律意见。

先把失败分成四层

一个可单独引用的判断句:隧道已连接,不等于 DNS 正确、不等于 UDP 可用、不等于目标网站接受这个出口。

你看到的现象更像哪一层不要先做的事
状态是已连接,但任何境外 HTTPS 都超时或被重置转发或路径不要先改账号密码
用 IP 能通,用域名不能,或只有个别站失败DNS不要先认定整条隧道断了
WireGuard、Hysteria 一类失败,走 TCP 443 的协议还能用UDP 与传输不要用同一条 UDP 出口反复重连
页面能打开,却返回「国家或地区不支持」目标站策略不要把它当成断线重连可以修好的故障
长回复或下载总在相近的秒数断开空闲或 UDP 超时不要先当成封号

地区类报错的账号和 API 含义,见 在中国使用 ChatGPT、Claude 与 Gemini 的地区报错和注册 和 国外 AI 的 API、订阅与支付排查。后两篇目前仍是草稿,链接要等发布后才有效。

用一次请求看清出口

2026-10-26,在本文的起草环境(不是大陆宽带)请求 https://www.cloudflare.com/cdn-cgi/trace,响应里有 ip、loc、colo、http、tls 等行。ip 是 Cloudflare 看到的来源地址,loc 是它给出的国家或地区代码。这条请求只适合回答「这一跳出去的地址是什么」,不能回答 OpenAI 或 Google 是否把同一地址当成可服务地区。

在已经选好的出口上分别看 IPv4 和 IPv6:

curl -4 -sS --max-time 20 https://www.cloudflare.com/cdn-cgi/trace
curl -6 -sS --max-time 20 https://www.cloudflare.com/cdn-cgi/trace
  • 两条都失败:先查隧道是否真的在转发,而不是只看状态栏。
  • 只有 -6 失败:许多网络本来就没有可用的 IPv6,这不一定是故障。
  • 只有 -6 成功,且 loc 与 -4 不同:应用可能从 IPv6 绕出去。系统侧的检查见 IPv6 泄漏检查。
  • ip 在变:出口不固定。共享出口的含义见 共享出口 IP。

系统时间不对时,证书会先失败

TLS 校验证书有效期。本机时间偏差大时,浏览器报证书错误,看起来像「代理把网站弄坏了」。2026-10-26 没有为本文单独核对某个客户端的报错原文。先让操作系统自动对时,再重试同一个域名。时钟偏差本身的机制见 VPN 与时钟偏差。

Linux 上可以看 UTC 时间是否明显偏离:

date -u

这只能发现「差了几小时」这种粗误差,不能代替证书链检查。

DNS:污染、泄漏和 FakeIP 不是同一个开关

域名失败而 IP 能连上时,优先查解析,而不是换加密算法。

  1. 确认查询是进了代理的 DNS,还是仍走本机解析器。泄漏的检查步骤见 DNS 泄漏检查,加密 DNS 和 VPN DNS 的关系见 DoH、DoT 与 VPN DNS。
  2. 若客户端使用 FakeIP,浏览器地址栏里的 IP 可能是保留地址,不能拿去和 trace 的 ip 对比。FakeIP 的边界见 FakeIP DNS。
  3. 只给少数 AI 域名写了规则、登录域和静态资源域没写进去时,页面会停在加载。规则是片段,不是一份能直接运行的完整配置。

UDP 不通时,不要用 QUIC 和 WireGuard 反复试

一个可单独引用的区分:TCP 443 上的代理还能用,而依赖 UDP 的 WireGuard、Hysteria2 或 HTTP/3 失败,说明要查的是 UDP 路径,不是「代理整个不能用」。 TCP 与 UDP 的差别见 VPN 用 TCP 还是 UDP,HTTP/3 见 VPN 与 HTTP/3、QUIC。

可操作的对比只有一种:同一台代理服务器上,暂时改用你已经拥有的 TCP 出口,看目标站是否从「超时」变成「能打开」或「返回 HTTP 错误」。变成 HTTP 错误,说明包已经到达对方;仍然超时,才继续看 DNS、路由和 MTU。MTU 黑洞的判断见 VPN MTU 不一致。本文不把某一种协议写成在大陆更不容易被干扰。

sing-box:短时间打开调试日志

2026-10-26 查询 GitHub Releases:v1.14.4 发布于 2026-10-24T01:04:25Z,不是预发布;同日还有预发布 v1.15.0-alpha.13。下文字段按当天的稳定版文档来写,不按 alpha。若界面显示的核心是 Xray,同一天 GitHub 上非预发布的最新标签是 v26.10.21(2026-10-21 发布)。Xray 的定位见 Xray 是什么,本文不提供它的配置。

sing-box 日志文档给出的结构是:

{
  "log": {
    "disabled": false,
    "level": "debug",
    "timestamp": true
  }
}

level 的取值包括 trace、debug、info、warn、error、fatal、panic。debug 可能记下域名和出站标签。查完一次失败就改回 info,不要把 output 指到会同步到云端的目录。官方说明:设置了 output 之后,日志不再写到控制台。

看日志时只回答三个问题:这条连接有没有进入核心、匹配了哪条规则、送到了哪个出站。匹配不到域名时,TUN 场景要先嗅探,原因见 sing-box 是什么 和 TUN 全局代理。

长连接在固定秒数断开

sing-box 规则动作文档里,route 动作的 udp_timeout 对已嗅探协议有默认值:quic 和 dtls 是 30s,dns、ntp、stun 是 10s。没有嗅探结果时,文档把端口 443 默认认作 quic。同一页写明:把这里的值设得比 inbound 的 UDP 超时更大不会生效。

因此,HTTP/3 或其它 UDP 流量大约 30 秒断开,有可能是这个默认值,也可能是路径上的空闲策略。记录断开时刻是否稳定,再查客户端里的超时,比立刻换账号有信息量。保活和「显示已连接但路径已死」的差别见 VPN 保活与掉线重连。

把 udp_timeout 调大只影响本机核心何时关掉 UDP 关联,不能让中间网络保留它已经丢掉的会话。文档没有把 30 秒写成对所有协议的全局空闲时间;TCP 上的长回复断开,不要用这一条解释。

可以照着做的一轮排查

  1. 记下失败是超时、重置、证书错误,还是已经出现 HTTP 状态码和英文报错。
  2. 用上面的 curl -4 与 curl -6 看 ip 和 loc 是否符合你选的出口。
  3. 核对系统时间。证书错误时先做这一步。
  4. 域名失败就查 DNS 和 FakeIP,不要先换密码。
  5. UDP 类协议失败时,用同一服务器上已有的 TCP 出口做一次对比。
  6. 只在复现时把 sing-box 日志调到 debug,看规则是否命中,然后改回 info。
  7. 长连接按固定秒数断开时,对照 udp_timeout 的默认值和 保活 一文,确认是不是 UDP。
  8. 已经收到「国家或地区不支持」时,停止重试连接,改查服务商的地区名单和账号条款。

公开文件里的法律范围

工业和信息化部 2017 年 1 月 22 日发布《关于清理规范互联网网络接入服务市场的通知》(工信部信管函〔2017〕32号)。其中写明:未经电信主管部门批准,不得自行建立或租用专线(含虚拟专用网络 VPN)等其他信道开展跨境经营活动。2017 年 1 月 24 日的答记者问说明,该规定依据《国际通信出入口局管理办法》,规范的是没有国际通信业务经营资质、私自开展跨境电信业务经营的企业或个人;企业因办公自用,向依法设置国际通信出入口局的经营者租用,不在这条所针对的范围内。

本文只整理这两份公开文本,不判断某一种个人使用是否违法,也不提供规避执法的做法。

排查之后留下的记录

留下四样东西即可:失败现象、trace 里的 loc(不要公开完整 IP)、核心版本、是超时还是 HTTP 错误。下一次换出口或升级 sing-box 时,用同一张表对比。地区名单和 API 行为会变,2026-10-26 的字段不能当作以后版本的默认值。升级后先跑该版本的配置检查,再保留 debug 以外的日志级别。