很多人排查 AI 工具网络时会卡在一句话上:“浏览器明明能打开 ChatGPT,为什么 Cursor 终端、Codex CLI、npm install、git clone、OpenAI API 还是超时?”答案通常不是账号,也不是模型,而是浏览器、终端、远程 VPS、Docker 容器并没有走同一个网络出口。
本文只讨论正常办公、学习和开发场景。排查时不要泄露 API Key、SSH 私钥、Cookie、项目源码或完整代理订阅;不要通过关闭证书校验、共享账号、来路不明 API 中转来“临时解决”正式项目问题。
🧭 为什么网页能开,终端还是不通
浏览器能打开 ChatGPT,只能说明“浏览器这一层”大概率通了。终端里的 npm、git、curl、Docker、Codex CLI 可能使用完全不同的网络配置。
- 浏览器可能走了代理扩展或系统代理,但终端没有读取这些配置。
- Cursor / VS Code 的界面能联网,不代表项目终端走同一个出口。
- Remote SSH 里打开的终端是在 VPS 上执行,本地代理不会自动带过去。
- Docker 容器有自己的网络,宿主机通不代表容器通。
- OpenAI API 返回 HTTP 状态码和 TCP 超时是两类问题,排查方向完全不同。
🧪 先按症状判断问题层级
| 现象 | 优先怀疑 |
|---|---|
| 浏览器能开 ChatGPT,终端 `curl api.openai.com` 超时 | 浏览器代理生效,终端没有走代理,或终端 DNS / IPv6 有问题。 |
| Cursor 聊天能用,但内置终端 `npm install` 很慢 | Cursor UI 和项目终端不是同一层网络;先看终端出口和 npm 代理配置。 |
| VS Code Remote 连接到 VPS 后,远程终端不通 | 命令实际在 VPS 上跑,本地代理不会自动带过去;要检查 VPS 的出口。 |
| `curl api.openai.com` 返回 401 / 403,但不是超时 | 网络已经到达 API,问题更可能是认证、权限、账单、地区或请求配置。 |
| GitHub 网页能开,`git clone` 失败 | Git 没走代理、SSH 端口被拦、公司网络拦截,或远程开发机出口不通。 |
| 本机 npm 通,Docker 容器里不通 | 容器网络和宿主机代理不同,需要单独配置 Docker / 容器环境变量。 |
不要一上来就换机场、换 VPS、重装 Node。先按层级排查,通常 10 分钟内就能知道问题卡在哪一层。
1. 执行位置
命令是在本地、Cursor 终端、VS Code Remote、SSH VPS、Docker 容器,还是 WSL 里跑?
2. 出口 IP
终端看到的 IP 是否和浏览器看到的 AI 节点一致?
3. DNS
终端解析出来的地址是否异常,是否走了本地运营商 DNS?
4. 代理变量
`HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY` 是否存在,端口是否正确?
5. 工具配置
npm、git、docker 是否有自己的 proxy / registry / SSH 配置?
6. 协议细节
TLS 证书、系统时间、IPv6、公司代理、透明网关是否干扰?
7. API 层
OpenAI API Key、账单、权限、模型、组织和请求代码是否正确?
📍 第一步:确认你在哪台机器执行命令
这是最容易被忽略的一步。Cursor 内置终端、VS Code Remote 终端、SSH 终端、WSL 终端、Docker 容器终端,执行位置可能完全不同。先确认命令到底跑在哪里。
# 本地或远程终端都先执行
hostname
whoami
pwd
# Linux / macOS / VPS
uname -a
# Windows PowerShell
$PSVersionTable.PSVersion
如果你在 Remote SSH 里打开项目,`npm install` 实际发生在远程 VPS 上。本地 Clash、Mihomo、Surge、Hiddify 是否开启,对远程 VPS 的终端通常没有直接影响。
🌐 第二步:检查终端出口 IP 和 DNS
浏览器看到的 IP 和终端看到的 IP 不一致时,后面的排查都要以终端为准。先测出口,再测 DNS。
# Linux / macOS / VPS
curl -4 ipinfo.io
curl -6 ipinfo.io
nslookup api.openai.com
nslookup github.com
nslookup registry.npmjs.org
# Windows PowerShell
curl ipinfo.io
Resolve-DnsName api.openai.com
Resolve-DnsName github.com
Resolve-DnsName registry.npmjs.org
- 如果终端出口还是本地运营商 IP,说明终端没有走代理或远程机没有配置出口。
- 如果 IPv4 通、IPv6 不通,后面要重点看 IPv6。
- 如果 DNS 解析很慢或返回异常,先换到可信 DNS 或让代理客户端接管 DNS。
- 如果远程 VPS 出口国家和你预期不同,先去 VPS 后台和 IP 检测工具确认机房与 ASN。
🔌 第三步:检查代理环境变量
多数 CLI 工具会读取环境变量里的代理配置,但不同工具支持程度不同。先看当前终端里到底有没有代理变量。
# Linux / macOS / VPS / WSL
env | grep -i proxy
# Windows PowerShell
Get-ChildItem Env: | Where-Object { $_.Name -match 'proxy' }
# Windows WinHTTP 代理
netsh winhttp show proxy
如果你只是临时排查,可以给当前终端窗口设置代理。端口要换成你本机代理客户端实际监听的端口,常见是 `7890`、`7897`、`1080`,但不要照抄。
# Linux / macOS 临时代理,仅当前终端生效
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7890
# Windows PowerShell 临时代理,仅当前窗口生效
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:ALL_PROXY="socks5://127.0.0.1:7890"
设置后重新执行 `curl ipinfo.io` 和 `curl -I https://api.openai.com/v1/models`。如果出口变了,说明问题就在终端代理层。
📦 第四步:单独排查 NPM 和 Git
npm 和 git 经常有自己的代理配置,哪怕终端环境变量正常,工具级配置也可能被旧代理、错误端口或公司代理污染。
# NPM 连通性和配置
npm ping
npm view react version
npm config get registry
npm config get proxy
npm config get https-proxy
# GitHub HTTPS 连通性
git ls-remote https://github.com/openai/openai-node.git HEAD
git config --global --get http.proxy
git config --global --get https.proxy
git config --show-origin --get-regexp "http.*proxy|https.*proxy"
如果看到旧端口、旧代理地址、公司代理地址,先清理再测试。不要长期保留已经失效的全局代理配置。
# 如果旧代理已经失效,先清掉
npm config delete proxy
npm config delete https-proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
# 如确实需要给 npm / git 单独指定代理,再设置成当前有效端口
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
GitHub 还要区分 HTTPS 和 SSH:`git clone https://...` 和 `git@github.com:...` 走的协议不同。公司网络、校园网或部分 VPS 可能会限制 22 端口,必要时改用 HTTPS 或 GitHub 的 SSH over HTTPS 方案。
🤖 第五步:排查 OpenAI API / Codex CLI
OpenAI API 的排查要先分清“网络没到”和“API 层报错”。超时、DNS 错误、TLS 握手失败是网络问题;`401`、`403`、`429`、`500` 这类 HTTP 状态码说明请求已经到达服务端,下一步看认证、权限、额度、模型和请求代码。
# 不带 API Key:能返回 HTTP 状态,说明 DNS / TLS / 网络至少走到 OpenAI API
curl -i https://api.openai.com/v1/models
# 带 API Key:只在自己的终端执行,不要截图、不要提交日志
curl -i https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
- `curl` 直接超时:优先查终端代理、DNS、IPv6、VPS 出口和公司网络。
- 返回 `401`:通常说明网络已通,但认证缺失、Key 错误或 Header 没带上。
- 返回 `403`:可能是权限、区域、项目或策略限制,需要结合官方错误信息判断。
- 返回 `429`:看速率限制、额度、并发和账单,不要继续换节点。
Codex CLI 运行在终端环境里,排查逻辑跟 OpenAI API、GitHub、NPM 是同一条线:先确认命令在哪台机器跑,再确认这台机器的出口和代理。安装、登录、参数和认证方式以 OpenAI Codex 官方文档为准,教程里不要把某个版本的命令写成永久事实。
💻 第六步:排查 Cursor / VS Code 远程环境
Cursor 或 VS Code 的 UI 能联网,不代表项目终端也能联网。尤其使用 Remote SSH 时,终端是在远程 VPS 上运行。
# 在 Cursor / VS Code 的终端里执行,确认终端到底在哪
hostname
pwd
curl ipinfo.io
env | grep -i proxy
# 如果是 Remote SSH,这些命令看到的是远程 VPS 环境,不是本地电脑
如果 `curl ipinfo.io` 显示的是 VPS IP,那就不要继续改本地代理;应该去检查 VPS 的网络、DNS、IPv6、代理、Tailscale / WireGuard 或服务商线路。反过来,如果终端显示本地出口,就继续检查本地代理客户端和环境变量。
🐳 第七步:排查 Docker 和容器网络
Docker 是另一个常见分界线。宿主机 `curl` 能通,不代表容器内能通;容器可能需要独立 DNS、代理变量或 Docker daemon 代理配置。
# 宿主机检查
docker version
docker info
# 容器内检查 DNS 和出口
docker run --rm curlimages/curl:latest -I https://api.openai.com/v1/models
docker run --rm curlimages/curl:latest https://ipinfo.io
# 给一次性容器传代理变量
docker run --rm \
-e HTTP_PROXY=http://host.docker.internal:7890 \
-e HTTPS_PROXY=http://host.docker.internal:7890 \
curlimages/curl:latest -I https://api.openai.com/v1/models
如果你的项目在容器里调用 OpenAI API,最终要在容器内验证 API 连通性。只测宿主机不够。
🧷 第八步:TLS、证书、时间和 IPv6
当 DNS 正常、代理也正常,但仍然握手失败或偶发超时,要看系统时间、证书链、IPv6 和网络中间设备。
# 检查系统时间
date
timedatectl status
# 分别强制 IPv4 / IPv6 测试
curl -4 -I https://api.openai.com/v1/models
curl -6 -I https://api.openai.com/v1/models
# 看 TLS 握手细节,输出较长,主要观察证书和连接阶段
curl -vI https://api.openai.com/v1/models
- 系统时间偏差太大,会导致 TLS 证书校验失败。
- IPv6 质量差时,域名优先走 IPv6 可能导致超时,可以先强制 `curl -4` 对比。
- 公司代理、安全软件、校园网网关可能做 TLS 检查,表现为证书异常或握手失败。
- 不要用关闭证书校验来掩盖问题,正式开发环境要把根因找出来。
🛠️ 常见修复方案
只浏览器通
开启代理客户端的 TUN / 系统代理,或给终端临时设置 `HTTP_PROXY` / `HTTPS_PROXY` / `ALL_PROXY`。
远程 VPS 不通
把排查目标切到 VPS:看 VPS 出口、DNS、IPv6、服务商网络和是否需要换地区,不要一直改本地代理。
npm 单独慢
先清理过期 proxy,再确认 registry 和 `npm ping`。不要为了省事长期使用来路不明镜像。
GitHub clone 失败
HTTPS 和 SSH 分开排查;SSH 可能卡在 22 端口,HTTPS 可能是代理或证书问题。
API 返回 401
网络已通,去查 API Key、环境变量、项目权限、账单和代码里的 Header,不要继续折腾节点。
容器不通
给 Docker daemon 或容器单独配置代理,容器不会天然继承桌面代理。
⚠️ 不要这样修
不要关闭 TLS 校验
`npm config set strict-ssl false`、忽略证书错误、关闭证书验证只会把安全问题藏起来。
不要把 API Key 写进截图
排查时可以看环境变量是否存在,但不要把完整 Key 发给别人,也不要写进文章或日志。
不要乱换几十个节点
先确认问题层级。浏览器代理、终端代理、远程 VPS、Docker 容器是不同层。
不要迷信某个镜像源
镜像源可能过期、污染、缺包或被替换。正式项目优先官方源和稳定代理。
不要把公司代理当透明网络
公司网络、校园网和安全软件可能做 TLS 检查或端口拦截,排查时要单独记录。
不要把 401 当网络故障
401 / 403 / 429 / 500 是 API 层状态码,和 TCP 连接超时不是同一类问题。
🧭 站内推荐路径
如果你只是想临时修好一个命令,按上面的层级排查就够了。如果你希望长期稳定使用 AI 开发工具,建议按下面的站内路径补齐。
先搭稳定环境:稳定 AI 网络环境指南
查看 ->从机场、固定 IP、VPS 落地、住宅 IP 和海外开发机选长期方案。
放到海外开发机:Codex / Cursor 远程开发机
查看 ->让 GitHub、NPM、Docker、OpenAI API 和 AI CLI 共用同一台海外 VPS。
选代理客户端:代理客户端推荐
查看 ->Windows、macOS、iOS、Android、Linux 和路由器客户端入口。
测 IP 和解锁:VPS 工具箱
查看 ->查 IP 质量、ChatGPT / 流媒体解锁、YABS、路由和网络质量。
选 VPS:VPS 推荐榜单
查看 ->给海外开发机、落地出口和轻量备用机做候选筛选。
看实测:VPS 测评汇总
查看 ->用已有截图和脚本证据判断机器是否适合 AI 开发环境。
📚 资料来源
- OpenAI API 错误码文档:用于区分认证、限速、服务端错误和网络超时的排查方向。
- OpenAI Codex CLI 官方文档:用于核对 Codex CLI 的官方入口和终端使用边界。
- npm config proxy 文档:用于核对 npm 的 proxy / https-proxy 配置项。
- Git config http.proxy 文档:用于核对 Git HTTP(S) 代理配置。
- VS Code Remote Development 排错文档:用于远程开发环境故障排查入口。
- Docker daemon proxy 文档:用于核对 Docker 守护进程代理配置。
🚀 下一步行动
如果这篇帮你确认了问题层级,下一步可以把 AI 工具环境做成稳定长期方案:
稳定 AI 网络环境指南
对比机场、固定 IP、VPS 落地、住宅 IP 和海外开发机方案。
海外 VPS 远程开发机
把 Codex CLI、Cursor、GitHub、NPM 和 Docker 放进同一台海外开发机。
VPS 推荐榜单
查看经过实测验证的优质 VPS 商家推荐,找到最适合您的方案。
浏览更多教程
探索服务器安全、网站搭建、性能优化、Docker 容器等进阶主题。
还没有心仪的 VPS?
查看年度精选榜单,找到最适合您的性价比之选,或继续探索更多进阶教程。