代理只改出口不改解析决策

访问网站是「先把域名解析成 IP」和「再连接这个 IP」两个独立动作;代理通常只改变连接从哪发出(数据面),未必改变最初解析到哪个 IP(控制面),这是本地挂代理仍失败的根因。

#type / synthesis #status / growing #tech / network #protocol / dns

[!info] related notes

代理只改出口不改解析决策

覆盖范围与排除项

本文解释一个最常被误解的关系:代理(VPN/Clash/Mihomo/SOCKS)改变了「网站连接的出口」,但未必改变「域名最先被解析成哪个 IP」。排除项:本文不展开具体代理配置,只讲「解析决策位置」与「连接出口」为何会脱节。

为什么需要一起理解

访问一个网站至少有两个独立动作:

步骤 1:把域名解析成 IP    (DNS)
步骤 2:连接这个 IP        (TCP/QUIC/TLS/HTTP)

代理主要作用于步骤 2 的出口位置。如果步骤 1 已经在本地解析到了错误 IP,代理只是忠实地帮你连这个错误 IP——出口再正确也没用。

依赖与协作模型

典型「本地挂代理仍失败」的路径:

Chrome 查询 anyrouter.top

Chrome DoH / Windows DNS / Mihomo 本地 DNS

得到 104.17.x.x(错误/不可用边缘)

Mihomo 选择 Oracle1 代理

Oracle1 帮你连接 104.17.x.x

TLS handshake_failure

对比「远程浏览器可行」的路径:

Oracle2 浏览器

Oracle2 所用 DNS(得到 155.102.x.x)

直接连接正确源站

差别不在代理本身,而在解析决策发生在哪条 DNS 路径上

一条具体关系路径

判断「是不是这个问题」的三步:

  1. --resolve 强制连正确 IP,若成功 → 不是网络/TLS 本体问题(见 howto dns-systematic-diagnosis)。
  2. socks5h://(远程解析)成功、socks5://(本地解析)失败 → 本地 DNS 路径给错 IP(见 socks5-local-vs-remote-resolution)。
  3. 检查 Mihomo 是否在连接前就采用了本地 DNS 结果(redir-host 模式),而非把域名交远端(fake-ip 模式,见 mihomo-dns-redir-host-vs-fake-ip)。

决策规则与易混淆点

  • 代理 ≠ DNS 也走代理:除非显式把域名交给远端解析,否则本地解析结果先定,代理只是转发连接。
  • 想让「解析跟着出口走」,要么用 fake-ip 把域名交远端(见 mihomo-dns-redir-host-vs-fake-ip),要么用 socks5h,要么让 DoH 走代理出口但仍取决于解析器位置。
  • 「本地 DNS 缓存」可能延长错误结果,但通常不是根因——根因是解析路径本身就不同(见 why-same-domain-different-ipdns-caching-hierarchy)。
  • 最彻底的方案是远程浏览器:解析、连接、TLS、HTTP 全在远端,不存在控制面/数据面分离(见 dns-wrong-ip-tls-handshake-failure-debug)。

指向原子笔记

创建于 2026/7/31 更新于 2026/7/31