ChatGPT、Claude 或 Gemini 打不开时,先看 WireGuard 有没有完成过一次握手。没有握手,失败停在到对端的 UDP,账号页面还没有机会返回「国家或地区不支持」。2026-11-02 核对的是 WireGuard 自己的手册、源码和白皮书草稿,以及 sing-box 标签 v1.14.4 里的文档。起草环境不是大陆宽带,也没有安装 wg。
OpenAI、Anthropic 和 Google 都没有把中国大陆写成这些消费级产品的无条件服务地。从名单外访问或向名单外提供访问,可能违反条款,账号可能被限制或停用。本文不写伪造证件、购买或借用账号、借用他人手机号和支付卡。握手成功也不等于出口在对方的名单里。
先把「没握手」和「地区英文」分开
一个可单独引用的判断句:还没有 latest handshake 时,AI 站点的超时不是 HTTP 错误;已经出现国家、地区或 territory 英文时,握手多半已经完成过。
| 你看到的结果 | 更像什么 | 下一步 |
|---|---|---|
wg show 里没有 latest handshake,网页一直转 | 到对端的 UDP 握手没完成 | 先看接口和路径,不要改密码 |
| 握手在一两分钟内,收发字节还在增加,网页超时 | 隧道在,目标站或 DNS 另说 | 见 TLS 停在哪一步 |
| 页面已打开,并写国家或地区不支持 | 对方的名单 | 见 地区报错和注册 |
| 握手很新,Protocol 列却是 h3 且一直挂起 | 到网站的 UDP 另有一条 | 见同日草稿 在核心里拒绝 AI 域名的 QUIC |
同日另一篇 结账页和银行验证不在同一出口 也还是草稿,链接要等发布后才有效。结账页若根本没有 HTTP 状态,同样先做本节,不要先换卡。
wg show 什么时候才打印握手
wg(8) 在 2026-11-02 仍把无参数的 wg 定义成对全部接口执行 show。要给脚本用的是:
wg show all latest-handshakes
手册写明:指定 all 时,每一类信息的第一列是接口名。latest-handshakes 是列出的参数之一。Debian unstable 的这页没有写「0 代表没有握手」。这个含义以下面的源码为准,和你机器上的 wireguard-tools 版本不必相同。本文没有安装该软件包,因此没有版本号可报。
2026-11-02 打开的 show.c 页眉版权写到 2026。抓取的是当时的 master,没有固定提交号。和「有没有这一行」直接相关的是两处:
- 给人看的输出里,只有
last_handshake_time.tv_sec不为 0 才打印latest handshake。秒为 0 时,这一行不出现。 latest-handshakes用十进制打印这个秒数。0 会印成0。源码不打印纳秒。秒为 0 在实践中就是还没有记下握手;它在数值上也可以是 1970 年的第一秒,两种情况都不应拿去改 AI 账号。
同一文件在「现在」早于握手时间时,会打印系统时钟被向后拨过、连接可能出问题。先对时,再重看握手。时钟本身见 系统时间不准时 VPN 为何握手失败。读不到接口时,源码用 perror 打印 Unable to access interface。那是权限或接口名,不是网站的 HTTP 状态。
wg show 的漂亮输出默认不印私钥,除非 WG_HIDE_KEYS=never。把输出贴到工单或聊天之前,确认里面没有私钥。生成密钥时 快速入门 使用 umask 077。
两分钟前的握手不一定作废
协议说明 写:握手每隔几分钟发生一次,用来轮换密钥;包在 UDP 上发送。它没有在这页给出秒数。
秒数在 2026-11-02 下载的 白皮书 PDF 第 6.1 节。该 PDF 首页仍标着 Draft Revision,不是 RFC。表里和本文有关的四行是:
| 符号 | 草稿中的值 |
|---|---|
| Rekey-After-Time | 120 秒 |
| Reject-After-Time | 180 秒 |
| Rekey-Timeout | 5 秒 |
| Rekey-Attempt-Time | 90 秒 |
| Keepalive-Timeout | 10 秒 |
按第 6.2 节,当前会话的发起方在发送传输数据之后,若会话已有 Rekey-After-Time 这么老,会再发握手。第 6.4 节写:发出握手后,若 Rekey-Timeout 内没有收到响应,就用新的临时密钥再发一次;这样重试 Rekey-Attempt-Time,然后停止,直到又有数据包要发。因此:
- 漂亮输出写着一两分钟前,同时 transfer 还在涨:更像当前会话,不要把它当成「没连上」。
- 秒数是 0,或漂亮输出根本没有这一行:重试窗口可能已经停了。再把同一条 AI 域名打开一次,只能再触发一轮尝试;路径若仍丢掉 UDP,账号不会因此改变。
- Keepalive-Timeout 是收到对方数据包后、自己没有包可回时,隔 10 秒发一个空的传输包。它不是下面的 PersistentKeepalive。
快速入门 把 PersistentKeepalive 写成另一件事:对端在 NAT 或防火墙后面、沉默之后还想收到入站包时,按间隔发送保活。它给出的一个对多种防火墙都说得通的间隔是 25 秒;0 表示关闭,且关闭是默认。手册把合法间隔写成 1 到 65535 秒。保活包仍然要能到达对端。第一次握手的 UDP 就被丢掉时,把 25 改成别的数,文档没有把它写成修复方法。保活和「显示已连接但路径已死」的差别见 VPN 保活与掉线重连。
TCP 与 UDP 哪一种先能通,见 VPN 用 TCP 还是 UDP。本文不把某一种协议写成在大陆更不容易被干扰。
sing-box 1.14.4 用 endpoint,不再写出站
2026-11-02 查询 GitHub Releases:非预发布的最新标签仍是 v1.14.4,发布于 2026-10-24T01:04:25Z。同日的 v1.15.0-alpha.13 是预发布。下面只使用 v1.14.4 标签里的文档。
弃用页 在该标签写明:WireGuard outbound 由 endpoint 代替,旧出站已在 1.13.0 移除。图形客户端若仍生成 "type": "wireguard" 且放在 outbounds 里,那是已删除的形状。
迁移页 的新示例把接口放在 endpoints,system 为 true,name 为 wg0,persistent_keepalive_interval 写成 30。同一标签的 endpoint 页 把这个字段的默认写成关闭,单位是秒;mtu 留空时用 1408。30 和快速入门里的 25 都是示例,不是对你这条路径测出来的值。2026-11-02 的文档站还出现了 on_demand,并标成 1.15.0 才有。v1.14.4 的 endpoint 页没有这个字段,不要抄进 1.14.4。
system 的原文是使用系统接口,需要权限,且不能和已有系统接口冲突。wg show 读的是系统上的 WireGuard 接口。system 为 false 时,迁移页和 endpoint 页都没有写 wg show 还能不能看见它。本文不把 wg show 写成对用户态实现的检查,也没有在日志文档里找到一句「握手成功」的固定原文。
下面只保留迁移页里和握手有关的形状。地址 127.0.0.1、端口和 10.0.0.2/32 都是文档占位,不是可用的服务器。尖括号里的密钥换成你自己的,不要把文档或本文里的占位当成密钥。allowed_ips 的含义见 AllowedIPs。
{
"endpoints": [
{
"type": "wireguard",
"tag": "wg-ep",
"system": true,
"name": "wg0",
"mtu": 1408,
"address": ["10.0.0.2/32"],
"private_key": "<private_key>",
"peers": [
{
"address": "127.0.0.1",
"port": 10001,
"public_key": "<peer_public_key>",
"allowed_ips": ["0.0.0.0/0"],
"persistent_keepalive_interval": 0
}
]
}
]
}
v1.14.4 的规则动作页把 outbound 写成目标出站的标签。迁移页没有给出「把 chatgpt.com 送到 wg-ep」的规则。本文不把 endpoint 的 tag 写进 route.outbound,避免把两页没有放在一起的用法合成一步。流量进不进 wg0,先用 wg show wg0 latest-handshakes 看秒数,而不是看 AI 页面的英文。
本文没有运行 sing-box 1.14.4,也没有执行 sing-box check。合并进你的完整配置后,用你安装的那一版做检查。
握手已经存在时,再看网站
秒数不是 0,并且漂亮输出的时间很近时,才用下面的命令看这一跳。它回答的是 Cloudflare 看见的地区代码,不是 OpenAI 是否接受该地址。
curl -4 -sS --max-time 20 https://www.cloudflare.com/cdn-cgi/trace
只记下 loc。然后对 https://chatgpt.com/、https://claude.ai/、https://gemini.google.com/ 各看一次有没有 HTTP 状态码。读 http_code 的方法见 TLS 停在哪一步。状态码已经是地区拒绝时,停止重开 WireGuard。名单见 地区报错和注册。
短时间里换很多对端,网站看见的出口国家会跟着跳。这和握手失败不是同一件事。固定出口见 测速组不要给 AI 换国家,多人共用一个地址见 共享出口 IP。
公开文件里的法律范围
《关于清理规范互联网网络接入服务市场的通知》(工信部信管函〔2017〕32号)写明,未经电信主管部门批准,不得自行建立或租用专线(含 VPN)等其他信道开展跨境经营活动。2017 年 1 月 24 日的答记者问说明,对象是无国际通信业务经营资质而开展跨境电信业务经营的企业或个人;企业办公自用、向依法设置国际通信出入口局的经营者租用,不在该条针对的范围内。本文不判断某种个人使用是否违法,也不写规避执法的做法。2026-11-02 没有重新打开部委网页,这段沿用该通知和答记者问的公开表述。
看完一次失败留下的记录
留下五样东西:接口名、latest-handshakes 的秒数或「没有这一行」、核心是不是 1.14.4、system 是 true 还是 false、AI 站点有没有 HTTP 状态码。不要留下私钥、预共享密钥或完整出口 IP。下一次升级 sing-box 或 wireguard-tools 之后,用同一张表对比。白皮书仍标着草稿,120 秒和 180 秒以你重新下载的那一版 PDF 为准。