Clash 与网络代理详解
想彻底搞懂“翻墙”背后的技术原理?从 VPN 到 TUN 模式,带你硬核拆解网络数据的“隐形隧道”。
📚 基本概念速读
| 名称 | 定义 | 省流 |
|---|---|---|
| VPN | Virtual Private Network,虚拟专用网络,在公网上建立加密通道。 | 秘密隧道 |
| Proxy | 代理服务器,充当客户端和服务器之间的“中介”。 | 传话筒 |
| Clash | 一个基于 Go 语言开发的多平台代理客户端核心。 | 智能调度员 |
| Rule | 根据域名、IP、地理位置决定流量走代理还是直连的规则。 | 分流路牌 |
| TUN | 操作系统层的虚拟网络接口,用于接管系统级流量。 | 虚拟网卡 |
| Mixin | 混合配置,在不修改订阅文件的前提下,注入自定义配置。 | 补丁包 |
VPN vs 代理 (Proxy) 简要对比:
特性 VPN 代理 (Proxy) 工作层级 操作系统层 (OSI L3 网络层) 应用程序层 (OSI L4/L7 传输/应用层) 接管范围 全局接管(通常),所有软件流量都走隧道 仅接管支持代理设置的软件 (如浏览器) 加密程度 全程加密,强调安全性 视协议而定 (HTTP不加密, HTTPS/Socks5加密) 灵活性 较差,通常“全走”或“全不走” 极高,可按域名/进程分流 典型协议 WireGuard, OpenVPN, IPSec HTTP, Socks5, Shadowsocks, VMess
⚡ 代理模式:流量的指挥棒
Clash 最核心的功能就是决定“这个请求该走哪条路”。
1. Global 全局模式
- 原理:所有流量一视同仁,强制通过代理服务器转发。
- 场景:访问完全被封锁的网络环境,或者需要隐藏真实 IP 的所有活动。
- 缺点:访问国内网站(如 B站、淘宝)会绕路国外,速度慢且浪费流量。
2. Rule 规则模式 (最常用)
- 原理:根据预设的规则列表(Rule List)智能判断。
- 流程:
- 拦截请求。
- 匹配规则(是 Google? 走 US 节点;是 Baidu? 走直连 Direct)。
- 未匹配到的请求走“漏网之鱼”策略(Final)。
- 优势:国内直连快,国外代理通,自动分流。
3. Direct 直连模式
- 原理:所有流量都不走代理,直接发送。
- 场景:暂时不需要代理,或者代理服务器挂了的时候。
4. Script 脚本模式
- 原理:使用 JavaScript 编写复杂的路由逻辑。
- 场景:极客玩家,需要根据特定时间段、网络延迟动态调整路由。
🧠 进阶黑科技:TUN 模式
很多小白用户会发现:“为什么我开了 Clash,浏览器能上 Google,但终端 (Terminal) 或 游戏 还是连不上?”
这是因为传统的 Clash 工作在 应用层 (Layer 7),它会在本地开启 HTTP/Socks5 端口(如 7890)。只有主动去连接这个端口的软件(如设置了系统代理的浏览器)才会被代理。而游戏、命令行工具默认是不走系统代理配置的。
TUN (Network Tunnel) 模式 就是为了解决这个问题。
🛡️ TUN 的工作原理
graph TD;
A["应用程序 (App/Game)"] -- "1. 发送数据包" --> B["操作系统网络栈"];
B -- "2. 路由表指向虚拟网卡" --> C["TUN 虚拟网卡 (utun/tun0)"];
C -- "3. 拦截数据 (Layer 3 IP包)" --> D["Clash 内核"];
D -- "4. 重新封装/加密" --> E["物理网卡 (Wi-Fi/Ethernet)"];
E -- "5. 发送至公网" --> F["代理服务器"];
- 创建虚拟网卡:Clash 在系统中创建一个名为
utun或tun0的虚拟网卡。 - 修改路由表:修改系统的默认网关,将所有流量“骗”进这个虚拟网卡。
- 三层接管:因为 TUN 工作在网络层 (Layer 3),它处理的是 IP 数据包。这意味着所有软件(无论是否支持代理)发出的流量都会经过它。
- 用户态处理:Clash 读取 TUN 设备的数据,进行拆包、分析目标地址、匹配规则,然后转发。
总结:开启 TUN 模式后,Clash 就变成了一个“类 VPN”,能够接管系统级的所有流量,实现“真·全局接管”。
TUN 模式 vs 规则模式:它们如何协同工作?
这是一个核心问题:TUN 模式负责“拦截”,而规则模式负责“分流”。
- TUN 模式:作为流量入口,它只决定 Clash 能处理哪些应用的流量。开启后,它会接管所有应用的数据包,然后交给 Clash 核心。
- 规则/全局/直连模式:作为调度中心,它决定被拦截进来的流量的最终去向。
结论:开启 TUN 模式并选择规则模式,意味着 “拦截所有应用的流量,然后根据规则智能判断走代理还是直连”,并不会变成全局代理。
🛠️ Service Mode 服务模式
在 Windows/macOS 上开启 TUN 模式通常需要管理员权限,因为涉及到创建网卡和修改路由表。
为了避免每次启动都要输密码,或者为了更稳定的后台运行,Clash 引入了 Service Mode。
- 守护进程:Service Mode 会安装一个后台系统服务(Daemon)。
- 权限隔离:这个服务以高权限(System/Root)运行,专门负责处理底层的网络操作(DNS 劫持、TUN 路由)。
- UI 分离:Clash 的图形界面(UI)只需要以普通权限运行,通过 IPC 接口指挥后台服务干活。
- 主要作用:
- 无感启动 TUN:不需要每次弹窗提权。
- 系统级抗杀:UI 关闭了,后台代理服务依然可以在线。
- 重启自愈:系统重启后服务自动拉起。
🧱 配置文件结构与 Mixin
Clash 的配置文件(通常是 .yaml)是它的灵魂。
核心结构
1 | port: 7890 # HTTP 代理端口 |
🌪️ Mixin (混合配置)
很多时候我们使用机场提供的订阅链接,这个 URL 下载下来的配置文件是只读的,每次更新都会覆盖。如果你想永久修改某些配置(比如开启 TUN,或者添加自定义规则),直接改下载的文件是没用的。
Mixin (混合/覆写) 机制应运而生:
- 原理:Clash 启动时,会先读取订阅的配置文件,然后读取本地的 Mixin 配置,将两者合并。
- 优先级:Mixin 配置 > 订阅配置。
- 用途:
- 强制开启 TUN 模式。
- 注入自定义的 DNS 服务器(防止 DNS 污染)。
- 添加个人的局域网 IP 直连规则。
Mixin 示例 (开启 TUN 和 DNS劫持):
1 | mixin: # 注意:不同客户端写法可能不同,原理一致 |
Fake-IP 模式是什么? 当开启 TUN 模式时,为了避免频繁的 DNS 解析请求导致延迟,Clash 会立即返回一个“假 IP”(Fake-IP,如
198.18.0.1)给浏览器。 浏览器以为拿到了真实 IP,向这个假 IP 发送请求。Clash 拦截到发往假 IP 的包,根据映射表找到原始域名,再在远端代理服务器进行真正的解析和连接。这能极大地提高响应速度。
⚠️ 常见误区纠正
- “开了全局模式就是最安全的”
- 错。全局模式只是将所有流量转发给代理服务器。如果你的代理协议(如 HTTP)是明文的,或者机场本身记录日志,你的隐私依然不安全。
- “Ping 值低网速就快”
- 不一定。Clash 面板上的 Ping 通常是
TCP Handshake时间,只代表你到代理服务器的延迟。实际网速还取决于代理服务器的带宽拥塞程度和线路质量(CN2/GIA 等)。
- 不一定。Clash 面板上的 Ping 通常是
- “TUN 模式会影响打游戏吗?”
- 正面影响。大多数外服游戏基于 UDP 协议,普通代理模式无法代理 UDP,必须开启 TUN 模式才能让游戏流量走代理加速。
- Clash 是 VPN 吗?
- 从技术实现上看:Clash 只是一个代理客户端。
- 从用户体验上看:开启 TUN 模式后的 Clash,表现得和 VPN 几乎一致(接管全系统流量)。