代理客户端写着「已连接」,只说明本机到代理服务器的隧道建起来了。网页打不开、只有部分域名失败、或者对话写到一半断开,经常是 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 能连上时,优先查解析,而不是换加密算法。
- 确认查询是进了代理的 DNS,还是仍走本机解析器。泄漏的检查步骤见 DNS 泄漏检查,加密 DNS 和 VPN DNS 的关系见 DoH、DoT 与 VPN DNS。
- 若客户端使用 FakeIP,浏览器地址栏里的 IP 可能是保留地址,不能拿去和
trace的ip对比。FakeIP 的边界见 FakeIP DNS。 - 只给少数 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 上的长回复断开,不要用这一条解释。
可以照着做的一轮排查
- 记下失败是超时、重置、证书错误,还是已经出现 HTTP 状态码和英文报错。
- 用上面的
curl -4与curl -6看ip和loc是否符合你选的出口。 - 核对系统时间。证书错误时先做这一步。
- 域名失败就查 DNS 和 FakeIP,不要先换密码。
- UDP 类协议失败时,用同一服务器上已有的 TCP 出口做一次对比。
- 只在复现时把 sing-box 日志调到
debug,看规则是否命中,然后改回info。 - 长连接按固定秒数断开时,对照
udp_timeout的默认值和 保活 一文,确认是不是 UDP。 - 已经收到「国家或地区不支持」时,停止重试连接,改查服务商的地区名单和账号条款。
公开文件里的法律范围
工业和信息化部 2017 年 1 月 22 日发布《关于清理规范互联网网络接入服务市场的通知》(工信部信管函〔2017〕32号)。其中写明:未经电信主管部门批准,不得自行建立或租用专线(含虚拟专用网络 VPN)等其他信道开展跨境经营活动。2017 年 1 月 24 日的答记者问说明,该规定依据《国际通信出入口局管理办法》,规范的是没有国际通信业务经营资质、私自开展跨境电信业务经营的企业或个人;企业因办公自用,向依法设置国际通信出入口局的经营者租用,不在这条所针对的范围内。
本文只整理这两份公开文本,不判断某一种个人使用是否违法,也不提供规避执法的做法。
排查之后留下的记录
留下四样东西即可:失败现象、trace 里的 loc(不要公开完整 IP)、核心版本、是超时还是 HTTP 错误。下一次换出口或升级 sing-box 时,用同一张表对比。地区名单和 API 行为会变,2026-10-26 的字段不能当作以后版本的默认值。升级后先跑该版本的配置检查,再保留 debug 以外的日志级别。