国内网络问题排查手册:调用海外 AI API 连不上时怎么查
国内开发者调用海外 AI API 时,“连不上”是一个笼统的症状,背后可能是 DNS 解析失败、TCP 连接超时、SSL 握手失败、连接建立后中途被重置,四种原因的排查方法完全不同,但很多人一律归结为”网络不好”就开始换代理、换梯子,浪费大量时间。这篇文章给一套按症状分类的排查手册,帮你在换工具之前先定位真正的故障点。
一、先分清四种”连不上”
| 症状 | 典型报错 | 故障层 |
|---|---|---|
| 域名解析不出来 | Could not resolve host / ENOTFOUND | DNS |
| 能解析但连不上端口 | Connection timed out / ETIMEDOUT | TCP 连接 |
| 能连上但握手失败 | SSL handshake failed / certificate verify failed | TLS 层 |
| 连上了但中途断 | Connection reset by peer / 流式响应中途中断 | 传输过程中被干扰 |
四种症状对应的排查命令和结论完全不同,混着排查是效率最低的做法。
二、DNS 层排查
# 用不同 DNS 服务器分别解析,对比结果
nslookup api.openai.com
nslookup api.openai.com 8.8.8.8
nslookup api.openai.com 223.5.5.5
如果本地 DNS(通常是运营商默认 DNS)解析出的 IP 和公共 DNS(8.8.8.8、1.1.1.1)解析结果不一致,或者本地 DNS 直接解析失败/返回不可达的 IP,说明问题出在 DNS 污染或劫持,而不是网络本身连不通。这种情况下换代理没用,先换 DNS(或者确认代理软件本身是否接管了 DNS 解析)才是对症的第一步。
三、TCP 连接层排查
DNS 能解析出正确 IP,但连接建立不了,用 curl -v 看具体卡在哪一步:
curl -v --connect-timeout 5 https://api.anthropic.com/v1/messages
关注输出里的时间戳:
- 卡在
Trying <IP>...很久没反应 → TCP 三次握手都没完成,说明这条链路被墙或者被中间设备丢包,需要代理/中转介入 - 很快连上但卡在 TLS 握手阶段 → 进入下一节
- 直接
Connection refused→ 目标端口没有服务在监听,通常不是网络问题,而是 URL 或端口写错了
配合 traceroute(Linux/macOS)或 tracert(Windows)看丢包发生在哪一跳,能进一步确认是国内出口问题还是海外链路问题:
traceroute api.openai.com
如果丢包集中在最后几跳(接近目标服务器),大概率是对方服务端或者中间运营商的问题,换本地网络环境也解决不了;如果丢包集中在前几跳(国内出口附近),才是典型的”需要代理/中转”场景。
四、TLS 握手层排查
握手失败常见于两种情况,报错信息看着差不多,处理方式完全不同:
证书验证失败(certificate verify failed):
curl -v https://api.openai.com/v1/models 2>&1 | grep -A 5 "SSL certificate"
如果是代理软件的中间人证书没有正确安装到系统信任链,会报这个错。检查代理软件是否需要额外安装根证书,而不是关闭证书验证了事——生产环境代码里绝对不要为了绕过这个报错而设置 verify=False 或 NODE_TLS_REJECT_UNAUTHORIZED=0,这会让所有 HTTPS 连接失去中间人攻击防护。
握手超时(连接建立了但 TLS 协商一直没完成):通常是链路质量差、丢包率高导致的,用 mtr 持续观测丢包率比一次性 traceroute 更准确:
mtr -r -c 50 api.openai.com
如果某一跳丢包率持续超过 10%~20%,基本可以确认是链路质量问题,换一个中转节点或代理线路是对症的解法。
五、连接中途被重置
这是流式接口(SSE)场景最常见也最难排查的问题:请求正常发出、开始收到数据,但传输到一半连接被重置,客户端表现为 “Connection reset” 或者流式内容莫名截断。
排查思路:
- 先确认服务端本身是否正常:直接在海外服务器上(比如租一个海外 VPS)跑同样的请求,如果同样中途断,问题在服务端或者模型本身超时设置,不在国内网络
- 检查本地/代理的空闲超时设置:很多代理软件、Nginx 转发层默认有几十秒的空闲连接超时,AI 流式接口经常在生成长文本时有几秒到十几秒的间隔没有新数据,容易被误判为空闲连接强制断开
- 检查客户端 HTTP 库的读超时配置:不少 SDK 默认读超时是几十秒,长时间的流式生成任务需要显式调大或者关闭读超时,具体的超时预算设计可以参考 Agent 工具调用超时预算设计
六、判断该用代理、中转还是自建 VPN
排查清楚故障层之后,再决定用哪种方案兜底:
- 纯粹是 DNS 被污染 → 换 DNS 或者本地 hosts 绑定就能解决,不需要上代理
- TCP 层大量丢包/连不上 → 需要代理或中转介入,具体选型对比见 API 中转 vs 自建 VPN 方案对比
- 能连上但延迟高、体验差 → 这是延迟优化问题而不是连通性问题,参考 国内访问延迟优化实测 里的诊断清单
- 只是某个特定工具(比如 Claude Code)连不上,其他工具正常 → 大概率是该工具自己的网络/代理配置问题,参考 Claude Code 在国内网络的实战配置
七、一份最小排查清单
遇到”连不上”,按顺序跑这五条命令,通常 2 分钟内能定位到问题层:
# 1. DNS 是否正常
nslookup api.openai.com 8.8.8.8
# 2. TCP 连接是否能建立
curl -v --connect-timeout 5 https://api.openai.com/v1/models
# 3. 链路丢包情况
mtr -r -c 30 api.openai.com
# 4. 换一个已知稳定的中转端点做对照
curl -v https://你的中转域名/v1/models
# 5. 确认不是代码里的超时/重试配置问题
grep -rn "timeout" your_project/ | grep -i http
如果第 4 步的对照中转端点访问正常、只有直连海外官方端点有问题,基本可以确定是国内网络环境的问题,而不是代码或账户配置的问题,接下来该做的是选一个稳定的中转方案,而不是继续在本地网络层面反复试错。