一句话结论:打开一个网页要经过“DNS 查地址 → TCP 建连接 → TLS 加密握手 → HTTP 请求与响应”四步,代理的本质是在其中插入一个替你完成连接的中间人,而 Clash 的分流规则决定每一个请求要不要交给这个中间人。理解这条流水线,你就能看懂大多数“能打开 A 却打不开 B”“DNS 泄漏”“开了代理反而变慢”的原因,也能自己排查某个网站为什么没走代理。
下面先用一张表看全景,再拆解每一步的细节、加入代理后的变化、系统代理与 TUN 模式、规则匹配和 Fake-IP,最后给出排查“为什么没走代理”的完整步骤。
全景:一次请求的四个关卡
| 步骤 | 发生了什么 | 不开代理时 | 开 Clash 规则模式时 |
|---|---|---|---|
| 1. DNS 解析 | 把域名换成 IP 地址 | 向运营商 DNS 明文查询 | Clash 接管查询,Fake-IP 下先返回虚拟地址 |
| 2. TCP 建连 | 三次握手建立连接 | 直接连目标服务器 | 应用连到本地 Clash,Clash 再决定连谁 |
| 3. TLS 握手 | 协商加密、验证证书 | 与目标网站直接握手 | 浏览器与网站的 TLS 原样保留,外面再套一层代理协议 |
| 4. 规则匹配 | 决定直连还是代理 | —— | 按规则列表命中第一条,交给对应策略组 |
严格来说,开着 Clash 时规则匹配发生在真正建立外部连接之前:Clash 拿到“目标域名 + 端口”后先查规则,再决定是自己直连目标,还是通过节点在远端建连。表格按大家熟悉的网络顺序排列,便于对照理解。
没有代理时:四个步骤的细节
DNS 解析:你输入 example.com,系统依次查浏览器缓存、系统缓存、hosts 文件,再向运营商或路由器分配的 DNS 服务器查询,得到一个 IP。传统 DNS 是明文的,路径上的设备能看到你查了哪个域名,也可能被篡改返回错误结果,这就是“DNS 污染”。
TCP 三次握手:浏览器与服务器的 443 端口建立连接,客户端发 SYN、服务器回 SYN-ACK、客户端再发 ACK,消耗一个往返时间。所以延迟高时,网页会“迟迟不开始加载”。
TLS 握手:双方协商加密算法、服务器出示证书证明身份、交换密钥,TLS 1.3 只需额外一个往返。握手时客户端会在 SNI 字段写出要访问的域名,这是网络设备识别访问目标的常见依据。
HTTP 请求与响应:加密通道建好后,浏览器发请求、服务器回内容。一个网页往往还会引用几十个其他域名的图片、脚本、字体,每个域名都要重复上面的流程,所以“首页能开、图片加载不出来”其实是不同域名走了不同路线。
加入代理后:请求走了哪条新路
- 浏览器不再直接连接目标,而是连接本地代理端口,例如 127.0.0.1:7890。
- Clash 根据分流规则判断这个请求走直连还是走某个节点。
- 走代理时,Clash 用 Trojan、VLESS 等协议与节点服务器建立加密连接,把“我要访问 example.com:443”连同数据一起发过去。
- 节点服务器在海外替你完成 DNS 解析和 TCP 连接,再把数据原路返回。
此时本地网络只能看到你与节点之间的加密流量,而浏览器与目标网站之间的 TLS 依然完整,节点也读不到 HTTPS 的具体内容。各协议如何伪装流量见 代理协议对比。
系统代理与 TUN 模式
| 模式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 系统代理 | 在系统设置里填写 HTTP/SOCKS 代理地址,遵守设置的应用主动把请求交给代理 | 简单,对系统影响小 | 部分应用、命令行工具和游戏不读取系统代理 |
| TUN 模式 | 创建虚拟网卡,在网络层接管所有流量 | 覆盖所有应用,支持 UDP | 需要管理员权限,可能与其他 VPN 冲突 |
TUN 模式的工作方式和 VPN 很像,区别在于它后面接的是代理协议和分流规则,原理参见 VPN 是什么。客户端里怎么开启,见 Clash 使用教程。
Clash 分流规则如何匹配
Clash 会自上而下逐条匹配规则,命中第一条即停止。一份典型的规则列表大致是这样:
DOMAIN-SUFFIX,openai.com,AI:所有以 openai.com 结尾的域名交给 AI 策略组。DOMAIN-KEYWORD,google,节点选择:域名包含 google 的走代理。IP-CIDR,192.168.0.0/16,DIRECT:局域网地址直连。GEOIP,CN,DIRECT:目标 IP 归属中国的直连。MATCH,节点选择:以上都没命中时的兜底去向。
注意,GEOIP、IP-CIDR 这类按 IP 匹配的规则需要先拿到 IP,会触发本地 DNS 解析,所以规则顺序会同时影响速度和隐私。把域名规则放前面、IP 规则放后面是通行做法,完整写法见 Clash 分流规则教程。
DNS 泄漏与 Fake-IP
如果走代理的域名仍先用本地 DNS 解析,本地网络就能看到你查询了哪些域名,这叫 DNS 泄漏,还可能因污染拿到错误地址。Clash 常用 Fake-IP 模式解决:先给应用返回一个 198.18 开头的虚拟地址,等真正发起连接时再把域名交给节点在远端解析,既快又避免泄漏。副作用是少数依赖真实 IP 的应用需要加入 Fake-IP 过滤名单。
排查:为什么这个网站没走代理?
- 先确认代理在工作:客户端已启动、订阅已选中、模式是规则模式,并且系统代理或 TUN 至少开了一个。
- 打开连接日志:在客户端的“连接”页面刷新目标网站,找到对应域名,看它命中了哪条规则、走了哪个策略组。
- 命中了 DIRECT:说明规则把它判为直连,常见原因是规则集过旧,或 GEOIP 误判,在规则列表前面手动加一条 DOMAIN-SUFFIX 指向代理组即可。
- 命中了代理但策略组选的是 DIRECT:进入策略组页面,把选中项换成真实节点。
- 连接日志里根本没有这个域名:说明应用没把请求交给 Clash,它不读取系统代理,改用 TUN 模式。
- 走了代理但仍打不开:换节点测试,若所有节点都不行,再看 DNS 设置和 故障排查指南。
常见现象与原因对照
| 现象 | 最可能的原因 |
|---|---|
| 开了代理网页打开慢 | 节点延迟高,或国内网站被错误规则送进代理 |
| 浏览器能用,某个软件不行 | 该软件不读系统代理,需开 TUN 模式 |
| 能 ping 通却打不开 | ICMP 与 TCP 路径不同,或 TLS 握手被干扰 |
| 首页能开,图片不显示 | 图片所在的另一个域名命中了直连规则 |
| 测速很快,看视频卡 | 带宽够但丢包高,见 延迟、丢包与带宽 |
养成一个习惯会让排查轻松很多:遇到问题先看连接日志,而不是反复开关代理。日志里每一条连接都写着域名、命中的规则和最终出口,绝大多数“走没走代理”的疑问在这里都有答案。
如果排查下来发现是节点本身质量不行,晚高峰频繁超时,那么换一家线路更好的机场才是根本办法,可以参考 稳定机场推荐 或 机场排行榜。