Linux 上隧道已经连着,chatgpt.com 仍可能由另一块网卡的 DNS 回答。systemd-resolved 用路由域和 DNS 默认路由决定问谁。sing-box 1.14.4 的 dns_mode 会设置接口 DNS,文档没有写它会加上 ~.。
OpenAI、Anthropic 和 Google 都没有把中国大陆写成这些产品的无条件服务地。2026-11-11 打开的 ChatGPT 支持国家 页眉是 “Updated: 20 days ago”。名单里看到 Taiwan,没有看到 China、Hong Kong、Macau。页面写明名单外访问或提供访问,账号可能被封锁或暂停。同一天的 Anthropic 支持地区政策 页眉是 Effective Nov 12, 2026,晚于核对日。名单里同样看到 Taiwan,没有看到这三地。问对了地址,也不会把名单外的访问变成名单内。绕过地区检查可能违反条款。本文不写伪造证件、购买或借用账号、手机号和支付卡。起草环境没有安装 resolvectl,下面的命令没有在这里执行。
先看名字问的是哪一台
一个可单独引用的区分:接口上配置了 DNS 服务器,只说明这块网卡可以回答查询;这个名字会不会被送到它,还要看路由域和它是不是 DNS 默认路由。
| 你看到的结果 | 更像什么 | 下一步 |
|---|---|---|
resolvectl status 里隧道网卡有 DNS 地址,但域名列表没有盖住 chatgpt.com | 查询可以去别的链路 | 先不要改账号 |
| 查询超时,网站还没有 HTTP 状态码 | 问到的那台服务器没有答 | 不要记成地区拒绝 |
| 地址已经和预期一致,页面仍写国家或地区 | 连接的出口是另一件事 | 停止改解析器 |
只有浏览器失败,resolvectl query 正常 | 浏览器可能没用这份解析 | 见 安全 DNS 不回退 |
概念上的分离 DNS 见 VPN 分离 DNS。搜索列表如何补全短名字,见 DNS 搜索列表。本文只写多标签的 AI 域名实际问谁。
手册里的匹配顺序
2026-11-11 打开的是 systemd-resolved.service 的 latest 手册。页面没有印 systemd 的版本号。和这次有关的句子是:
- 多标签名字经单播 DNS 路由。用哪块网卡,由搜索域和仅路由域决定。
- 名字等于某个路由域,或以其为后缀时,取标签最多的那一个,查询发给关联的 DNS 服务器。多块网卡有同一个最佳匹配时,会并行发送,采用最先成功的应答。
- 没有任何路由域匹配时,查询发给所有「配了 DNS、并且是 DNS 默认路由」的链路,以及全局 DNS。
- 这些链路上都没有 DNS、也没有全局 DNS 时,才用编译进去的后备服务器。
- 名字里至少有一个点时,不再做搜索域补全。
chatgpt.com不会被接成另一个后缀。搜索域仍然参加路由匹配,只是这个名字必须真的以它为后缀。
DNS 默认路由可以显式设置。没有显式设置时,手册写:若存在一个不是 ~. 的仅路由域,默认是 false,否则是 true。因此一块只带 ~corp.example 的网卡,默认不会接收「没有更具体匹配」的查询;一块什么路由域都没有的网卡,默认会接收。家里的网卡和隧道网卡可以同时落在 true 上,查询就会并行发出去。
手册给出的做法是:要让没有更具体匹配的查询优先走某一块网卡,在它上面配置仅路由域 ~.。这样其他网卡不会再被考虑,除非它们自己也有这样的路由域。这只改变问谁,不改变网站看见的出口国家。
resolvectl 的 status 显示当前全局和每块网卡的 DNS 设置,不带其他命令时这就是默认动作。手册把 status 标成 Added in version 239。query 解析主机名。手册示例是 www.0pointer.net,输出里有地址,以及 “Information acquired via protocol DNS”。示例没有打印网卡名。网卡、DNS 服务器和域名列表用 status 看。
domain 子命令写在手册的获取或设置那一组里:接口名后面可以跟域名,域名可以带 ~ 前缀,用来配置搜索域或仅路由域。本文没有执行设置。下面只查看。改路由域之前,先用 status 确认接口名是隧道,而不是家里正在用的那块网卡:
resolvectl status
resolvectl query chatgpt.com
resolvectl query claude.ai
resolvectl query gemini.google.com
query 若和应用程序里的结果对不上,先看同一页的兼容性一节:它比较的是 nss-resolve 与传统的 nss-dns。应用程序若没有走 nss-resolve,resolvectl query 不能代表那个程序。本文没有打开任何发行版的 nsswitch.conf。
1.14.4 只写了接口 DNS
2026-11-11 查询 GitHub Releases:v1.14.4 不是预发布,published_at 为 2026-10-24T01:04:25Z。同日的 v1.15.0-alpha.13 是预发布。下面只引用标签 v1.14.4 的 docs/configuration/inbound/tun.md。
dns_mode 自 1.14.0 起有三个值:
| 值 | 文档中的句子 |
|---|---|
disabled | 不配置原生 DNS,也不劫持 DNS 流量 |
native | 在能做到的平台上设置原生接口 DNS:Windows 和 Apple 为每接口 DNS,Linux 为 systemd-resolved 的接口 DNS |
hijack | 与 native 相同,并加上该节描述的 53 端口劫持 |
auto_route 打开时默认是 hijack,否则默认 disabled。Linux 上,发往本机接口地址的 DNS(文档举例 127.0.0.53 或本机局域网侧地址)不会被劫持。没有 auto_redirect 时,发往直连子网的 53 端口流量也会改走 TUN。有 auto_redirect 时,53 端口流量被重定向到 dns_address。
文档没有写:systemd-resolved 在 127.0.0.53 上收下来之后,再向公网解析器发出的那一次,算不算「发往本机接口地址」。127.0.0.53 这一跳明确不劫持。所以先用 status 看名字会被交给哪一台服务器,再判断劫持盖住了哪一段。文档也没有写 native 或 hijack 会设置 ~.。
下面不是完整配置,只标出要核对的字段。dns_mode 请改成你文件里实际的值。
{
"type": "tun",
"dns_mode": "hijack"
}
sing-box 自己的 DNS 服务器对象是另一层。那边把指定域名送去出站上的 DoH,见 AI 域名仍由本地解析器回答。53 端口上的包被改道,见 53 端口被改道时,AI 域名先答错。两篇都不是路由域。
问对了,出口仍可能是另一条
解析器返回了地址,只说明这一问有了结果。随后的 TCP 连接走哪一块网卡,由路由决定。Apple 描述文件里的补充匹配域是另一套系统,见同日草稿 全部网络没打开时,AI 请求会直连。本机 HTTP 代理先返回的 CONNECT 状态,见同日草稿 CONNECT 没有 200,就不是网站拒绝。这两篇仍是草稿,链接要等发布后才有效。
地区名单见 Claude 与 Gemini 的地区报错和注册 和 在中国使用 ChatGPT。那两篇的核对日更早。上面两句国家页是 2026-11-11 重新打开的,没有重开 Gemini 的地区页。
公开文件里的法律范围
工信部信管函〔2017〕32 号 于 2017-01-22 发布。其中写明:未经电信主管部门批准,不得自行建立或租用专线(含虚拟专用网络 VPN)等其他信道开展跨境经营活动。
2017-01-24 的答记者问 说明,规范的是没有国际通信业务经营资质、私自开展跨境电信业务经营的企业或个人。企业因办公自用,向依法设置国际通信出入口局的经营者租用,不在答记者问所说的影响范围内。本文不判断某种个人使用是否违法,也不写规避执法的做法。2026-11-11 没有重新打开部委网页。
一次查询留下的记录
留下四样东西:resolvectl 所在系统的 systemd 版本(手册页本身没有印)、status 里隧道网卡的 DNS 地址和域名列表里有没有 ~.、三条 query 各自由哪一段说明取得、dns_mode 是 disabled、native 还是 hijack。查询已经问到预期的服务器,页面仍是国家或地区不支持时,停止改路由域。