到达接口的公网地址若不在你自己打开的 IP 允许列表里,调用会被拒绝。这和「国家、地区或领土不支持」不是同一条错误。2026-11-09 核对的是 OpenAI、Anthropic 的允许列表,以及 Google 的密钥限制和 Gemini API 地区页。起草环境不是大陆宽带,没有使用真实密钥。

OpenAI、Anthropic 和 Google 都没有把中国大陆写成这些 API 的无条件服务地。从名单外访问或向名单外提供访问,可能违反条款,账号可能被限制或停用。把出口写进允许列表,只满足你自己设下的那一层,不把人移进国家名单。本文不写伪造证件、购买或借用账号、手机号和支付卡,也不写购买或共用密钥。

先按错误正文分行

一个可单独引用的区分:允许列表比对的是这次请求到达对方时的公网地址;国家名单比对的是对方是否把这个来源当成可服务的国家、地区或领土。

你抄到的结果更像哪一份文件不要先做的事
没有 HTTP 状态,只有超时或重置路径还没到接口不要先改允许列表
OpenAI HTTP 401,type 为 ip_not_authorized你的项目或组织允许列表不要记成 403 的国家错误
OpenAI HTTP 403,正文是国家、地区或领土不支持API 地区名单不要靠往列表里加地址去修
Anthropic HTTP 403,permission_error,消息写 IP 不在允许范围组织允许列表不要当成错误目录里那句泛指的权限
只有「缺少密钥」的 401认证还没过不要用这次证明允许列表
Gemini 密钥的 reason 写着 IP、引荐来源或应用被拦这把密钥自己的客户端限制不要把它抄成地区页上的句子

网页和 API 是否同一出口,见 网页能开,不代表 API 同一出口。账单上的 401、402、429 见 国外 AI 的 API、订阅与支付排查。那一篇核对日更早,本文没有重开它的整张表。商店账号里的国家是另一层,见同日草稿 商店扣款国家不是出口国家,链接要等发布后才有效。

OpenAI:允许列表只盖住 API

IP allowlist 在 2026-11-09 写明:打开之后,不在列表里的地址即使带了有效密钥也会被拒绝。它只作用于 API 请求,不限制 platform.openai.com,也不限制用户登录。文档让你在 NAT、VPN、防火墙或代理之后确认公网出口,因为接口看的是到达 OpenAI 的源地址。

同一页的数量和优先级:

  • 列表最多 50 条,可以是单个地址或 CIDR。
  • 项目级列表优先于组织级。两份不合并:项目有自己的有效列表时只用项目的;没有时才用组织的。
  • 改完最多等 15 分钟。
  • 设置路径写成 Settings、Security、IP allowlist。组织所有者角色具备读写这项设置的权限。

帮助中心 IP allowlisting for OpenAI API 页眉是 “Updated: 15 days ago”,没有日历日期。它给的拦截示例是 HTTP 401,type 为 ip_not_authorized,消息为 “Your IP is not authorized to access this organization.”。这是页面上的示例,不是本文当天打出来的响应。

错误码 把 401 “IP not authorized” 的原因写成:请求 IP 与项目或组织配置的允许列表不符。解决办法一栏是从正确的 IP 发送,或更新允许列表。同一张表里,403 “Country, region, or territory not supported” 的原因是从不支持的国家、地区或领土访问,解决办法只指向地区说明。

API 支持的国家与地区 当天以 .md 打开,HTTP 200。正文写明,在列出的国家与地区之外访问或提供访问,账号可能被封锁或暂停。名单里能看到 Taiwan,没有看到 China、Hong Kong、Macau。ChatGPT 网页那份帮助页当天用 curl 得到 HTTP 403,正文没有打开,所以不把 API 名单说成已经重核了网页名单。

文档里的排查是:在发出 API 请求的同一条网络路径上确认公网出口;看 NAT、VPN、防火墙、代理或云厂商是否改了出口;用设置里的 Check 工具对照;确认列表作用在这把密钥所属的组织或项目;改完再等最多 15 分钟。这些步骤核对的是你自己的列表。它们没有写「把任意出口加进去,就可以从名单外的国家访问」。

没有密钥时,先停在另一句 401

2026-11-09 对 https://api.openai.com/v1/models 发送不带 Authorization 的 GET。响应是 HTTP 401,www-authenticate 为 Bearer realm="OpenAI API",x-request-id 为 06b4b452-f82b-46bf-9df4-a9ad1f3d37a0。JSON 的 type 是 invalid_request_error,消息是 “Missing bearer authentication in header”,code 为 null。响应头日期是 Mon, 09 Nov 2026 01:30:32 GMT。

这次没有走到允许列表,也不能用来展示 ip_not_authorized。密钥放在环境变量里,不要写进仓库或聊天记录。

Anthropic:403 要看消息原文

IP allowlisting 当天写明这项处于 beta,行为可能变。组织管理员或所有者设定一份覆盖整个组织的范围。对范围内的请求,Anthropic 拿请求的公网地址去比,不在列表里就拒绝。

页面给的 API 例子是:Messages API 返回 403,permission_error,消息为 “Your IP address isn’t in this organization’s allowed range.”。网页和桌面应用上,被拦的人看到标题 “Your current network can’t access this organization.”。Claude Code 看到的是同一句 403。个人账号或其他组织不在这份列表里。

同一页还写了这些边界:

  • 改完最多 15 分钟生效。Enterprise 上,已经打开的连接、Office 加载项和 Remote Tools 可能更慢。
  • 条目最多 1000 条。可以是单个地址或 CIDR,IPv4 不能宽于 /8,IPv6 不能宽于 /32。要写公网地址,不要写 10.0.0.0/8 这类私网。
  • 若代理把 bridge.claudeusercontent.com 送到和 claude.ai、api.anthropic.com 不同的地址,页面让你把那个地址也写上。这是在说组织自己的列表,不是地区政策。
  • 页面提醒:把共享代理地址写进去之后,拿到泄漏密钥或被盗登录的人有可能经这个代理使用。不要把别人的出口或公共节点写进列表。
  • 这项不适用于 Amazon Bedrock、Claude Platform on AWS、Google Cloud 上的 Claude 模型,或 Microsoft Foundry。

错误目录 当天仍把 403 permission_error 写成:密钥没有使用该资源的权限。目录这句话比允许列表页宽。看到 403 时先抄 error.message 和 request-id,再决定对的是哪一页。

支持地区政策 页眉是 Effective Nov 12, 2026,晚于核对日。产品只在列出的国家与地区提供,未列出的不受支持,并包括人在未列出的地区使用。正文里能看到 Taiwan,没有看到 China、Hong Kong、Macau。当天这段可见文字里没有 “IP allowlist”。生效日之前是否已经执行,不能从页眉反推。

2026-11-09 向 https://api.anthropic.com/v1/messages 发送 POST,头只有 anthropic-version: 2026-10-21 和 content-type: application/json,没有密钥。模型名是 claude-3-5-sonnet-latest,max_tokens 为 1。响应是 HTTP 401,error.type 为 authentication_error,消息为 “x-api-key header is required”。响应头 request-id 与正文 request_id 都是 req_011CgrVPSgywNrrb7LkdJUdq。认证先失败了,所以这次看不到允许列表那句 403。

Gemini:密钥限制是另一套字段

为 API 密钥添加限制 的页脚写着 Last updated 2026-10-26 UTC。客户端限制一次只能选一种:网站引荐来源(browserKeyRestrictions)、调用方 IP(serverKeyRestrictions)、Android 应用或 iOS 应用。不满足限制的请求会失败。IP 可以写成单个地址或 CIDR。页面没有把这四种限制叫成国家名单。

管理 API 密钥 写明 IP 限制用的是调用方的外部地址,不支持内网地址和 localhost。控制台路径是 Credentials 里选中密钥,在 Application restrictions 选择 IP addresses。

ErrorReason 枚举(页面版本 4.8.1)把违反限制的 reason 写成:

reason该页的含义
API_KEY_IP_ADDRESS_BLOCKED违反密钥的 IP 地址限制
API_KEY_HTTP_REFERRER_BLOCKED违反密钥的 HTTP 限制
API_KEY_ANDROID_APP_BLOCKED违反 Android 应用限制
API_KEY_IOS_APP_BLOCKED违反 iOS 应用限制

这四条例子里的 service 都是 storage.googleapis.com,不是 generativelanguage.googleapis.com。2026-11-09 没有用 Gemini 密钥打出这些 reason,不能把例子抄成 Gemini 当天的响应原文。domain 在例子里是 googleapis.com。

Gemini API 可用地区 当天 HTTP 200。页面写这些国家与地区可用;不在其中时,去看 Gemini Enterprise Agent Platform,而不是把名单外说成可用。可见名单里有 Taiwan,没有看到 China、Hong Kong、Macau。密钥限制通过,也不等于这张地区页把来源写成可用。

先看这条路径的出口,再对列表

2026-11-09 在起草环境执行 curl -4 -sS --max-time 20 https://www.cloudflare.com/cdn-cgi/trace。响应里有 ip、loc、colo、http、tls。当天 loc 为 US,colo 为 IAD,http 为 http/2,tls 为 TLSv1.3。这次的 ip 不写入文章。起草环境不是大陆宽带,这个 loc 不能代表你的出口。

在和 API 调用相同的那条路径上分别看两族地址:

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
  • 两条的 ip 不同:允许列表若只写了其中一族,另一族会失败。OpenAI、Anthropic 和 Google 的文档都允许写 IPv6。
  • loc 变了:出口变了。共享地址的含义见 共享出口 IP。
  • 命令本身超时:先按 大陆代理连上后仍失败 看路径。没有 HTTP 的 API 错误时,不要先改账号。

进程是否读了代理变量,见 官方 SDK 怎么走代理。证书签发者变了,是路径上有人重新签名,见同日草稿 AI 证书签发者变了,先别改账号,链接要等发布后才有效。

公开文件里的法律范围

2026-11-09 打开《关于清理规范互联网网络接入服务市场的通知》(工信部信管函〔2017〕32号,通知页)。其中一节的原文是:未经电信主管部门批准,不得自行建立或租用专线(含虚拟专用网络 VPN)等其他信道开展跨境经营活动。同日打开的 答记者问 在转述时写成「建立和租用」。答记者问写明,规范对象是未经电信主管部门批准、无国际通信业务经营资质的企业或个人,租用国际专线或 VPN,私自开展跨境的电信业务经营活动;外贸企业、跨国企业因办公自用需要跨境联网时,可以向依法设置国际通信出入口局的电信业务经营者租用。两处的「或」和「和」不要并成一句。本文不判断某种个人使用是否违法,也不写规避执法的做法。

一次拒绝留下的记录

  1. HTTP 状态、type 或 reason、消息原文、request-id。没有状态码就写超时或重置。
  2. 这条请求的主机是 api.openai.com、api.anthropic.com 还是 generativelanguage.googleapis.com。
  3. 同一条路径上 trace 的 loc,以及你对的是 IPv4 还是 IPv6。不要把 IP 贴进公开仓库。
  4. 这是允许列表、国家名单,还是密钥的客户端限制。三份文本不要合成一句。