(给和我一样被网络问题折磨过的人)
今天调试项目的时候,又一次被网络问题搞崩了。
AI一会儿让我开TUN,一会儿让我改规则,有时候TUN一开,原来能用的反而不能用了,整个过程充满“玄学感”。后来我意识到一件事:不是网络玄学,是我没真正搞懂它。
所以干脆系统学了一遍,下面用大白话把我理解到的东西完整讲一遍。
一、不开TUN:我们平时说的「普通代理」到底在干嘛?
先从最常见的情况说起。
1️⃣ 梯子、节点、Clash都是啥?
当你花钱买了一个梯子之后,通常会看到:
这些节点,本质就是“在国外的一台台服务器”。
而像Clash、Clash Verge、Clash Meta这些软件,本质作用只有一个:帮你管理这些国外服务器,并决定什么时候用哪一台。
2️⃣ 开启「系统代理」后,浏览器访问Google发生了什么?
假设你在Clash里开启了系统代理,然后在浏览器里输入:
https://www.google.com
真实流程是这样的:
- 浏览器发起请求
- 发现系统开启了代理
- 把“访问Google的请求”交给Clash处理
- Clash根据你设定的规则选择一个节点(比如日本)
- 请求被转发到“日本的那台服务器”
- 日本服务器代替你去访问Google
- Google将页面内容返回给日本服务器
- 日本服务器 → Clash → 你的浏览器
- 浏览器渲染页面,你看到Google首页
关键点在于:你看到的Google首页,并不是你这台电脑直接访问到的,而是“日本那台服务器替你访问并转发回来的结果”。
3️⃣ 一个关键点:节点能看到我访问的内容吗?
分情况看:
- 如果是HTTPS(绝大多数网站):浏览器 ↔ Google网站之间是端到端加密的。节点服务器只能像邮差一样转发加密的数据包,但无法解密,看不懂具体内容。
- 节点最多能知道:你访问了哪个域名、数据量大小、连接时间。
所以不必过度恐慌“节点能看到我浏览的页面内容吗?”这个问题。在正常的HTTPS加密通信下,它们是看不到的。
二、普通系统代理的一个巨大缺点
看到这里,一切都显得很美好,直到你发现一个尴尬的事实:浏览器能科学上网,但很多桌面App、Node.js程序、命令行工具(如curl)却不行。
这是为什么?
核心原因在于:系统代理,本质只是一个“接口规范”或“建议”,而非强制规则。
可以这样理解:
- 浏览器 👉 听话的好学生,主动实现了系统代理这个接口。
- 大多数桌面App / Node程序 👉 我行我素,根本没实现这个接口。
所以:
- 浏览器会主动去问系统:「我这个请求要不要走代理?」
- 大多数App则直接说:「我按IP直接连,不问任何人。」
这就是为什么你会遇到:浏览器能上Google,但Node请求外网API超时,某些特定App死活连不上其海外服务的根本原因。
三、那如果我想「所有程序都能走代理」怎么办?
答案就是:开启TUN模式。
四、TUN模式:为什么它这么“猛”,也这么容易出问题?
用一句话理解TUN:TUN = 在操作系统底层,插入了一张“虚拟网卡”。
当开启TUN后,数据流变成了这样:
所有网络程序 → 操作系统网络栈 → 虚拟网卡(TUN驱动接管) → Clash → 节点 / 直连
这时候,无论是浏览器、Node.js应用、桌面App、Docker容器还是curl命令,一个都跑不掉。它们的网络流量在IP层就被TUN虚拟网卡截获了,谁都没资格说「我不想走代理」。
这也是为什么:
- TUN一开,Node / App / 命令行突然全能科学上网了。
- 但同时,副作用也来了:原来能访问的内网服务(如
localhost:8080或192.168.1.x)可能不行了,局域网传输异常,甚至偶发上传/下载卡死,网络行为变得“不可预测”。
👉 结论:TUN模式能力很强(全局强制代理),但因其工作在更底层网络/系统,副作用和复杂性也最大,容易引发“玄学”问题。
五、Clash里的「规则 / 全局 / 直连」到底是什么意思?
这个地方,很多人是凭感觉在点的。我们来理清楚:
-
规则(Rule)模式
- 做什么:严格按你配置的规则列表来决策。
- 例如:
DOMAIN-SUFFIX,google.com,Proxy(Google走代理),GEOIP,CN,DIRECT(国内IP直连)。
- 特点:最智能、最节省流量、对国内服务最友好。这是最推荐、最理性的长期使用模式。
-
全局(Global)模式
- 做什么:不管访问什么目标,全部流量都走代理。
- 适合场景:临时排查问题,快速确认“某个连不上的问题是不是网络导致的”。
- 特点:简单粗暴,但访问国内网站也会绕道国外,速度慢、浪费流量。不适合长期使用。
-
直连(Direct)模式
- 做什么:所有流量完全不走代理,直接连接。
- 可以理解为:👉 「我现在暂时关掉梯子,用本地网络」。
六、一句话把所有内容串起来
以后你只需要记住这几句话,就能理清思路:
- 系统代理:浏览器愿意听,其他程序不一定听。
- TUN模式:在系统底层拦截,谁都得听,但容易“误伤”。
- 不开TUN:稳定、可控、适合大多数开发和日常浏览场景。
- 开TUN:省心(全局代理)但容易制造新的“玄学问题”。
- 规则模式:长期最优解,智能分流,兼顾速度与功能。
七、写在最后
以前我也觉得,网络问题就是玄学,全靠重启和运气。但现在我发现,根本问题在于我们不知道“控制权在哪一层”。
一旦你清楚了:是应用程序自己在决定、是操作系统代理接口在决定、还是更底层的IP协议栈在决定,那么很多曾经“莫名其妙”的网络故障,都会变成可解释、可定位、可解决的技术问题。
|