Clash 完全指南:规则驱动的现代代理工具
一、什么是 Clash?
Clash 是一款基于 Go 语言开发的开源代理客户端,官方定位为 “A rule-based tunnel in Go”——一个基于规则的多平台代理隧道工具。
与传统的 VPN 不同,Clash 的核心设计理念是 “规则驱动”。它不会像 VPN 那样把所有网络流量都强行接管,而是根据你预设的规则,智能地决定每一条流量该走哪条路:是走代理服务器,还是直接连接互联网。
你可以把 Clash 想象成一位站在你电脑网络出口的”智能交警”。当你的电脑要访问一个网站时,数据包会先经过这位”交警”,他会查阅手里的”规则手册”,然后指挥流量走不同的通道——访问 google.com?走代理通道。访问 baidu.com?走直连通道。整个过程灵活可控,完全由你定义。
二、Clash 的核心特性
2.1 多协议支持
Clash 原生支持多种代理协议,包括但不限于:Shadowsocks、VMess、Trojan、Snell、SOCKS5、HTTP 等。这意味着无论你使用哪种类型的代理服务,Clash 都能作为客户端接入。
2.2 灵活的规则系统
这是 Clash 最核心的能力。Clash 的规则系统支持多种匹配类型,可以基于以下维度制定分流策略:
- 域名匹配:精确域名、域名后缀(含子域名)、域名关键词、域名正则
- IP 匹配:IP 段(IPv4/IPv6)、GeoIP 地理位置
- 进程匹配:按进程名或进程路径匹配
- 端口匹配:按源端口或目标端口匹配
- 网络类型:区分 TCP 和 UDP
规则按照自上而下的顺序匹配,一旦命中即停止匹配,因此规则顺序非常重要——MATCH 兜底规则必须放在所有规则的最后,否则它后面的规则永远无法生效。
2.3 策略组(Proxy Groups)
Clash 支持多种策略组类型,让分流策略更加灵活:
| 策略组类型 | 说明 |
|---|---|
| select | 手动选择使用哪个节点或策略组 |
| url-test | 自动测试节点延迟,选择最优节点 |
| fallback | 按优先级顺序自动选择可用节点 |
| load-balance | 同一 eTLD 的请求使用同一个节点,实现负载均衡 |
| relay | 链式代理,流量依次经过多个节点 |
2.4 内置 DNS 服务器
Clash 内置了 DNS 服务器,支持 DoH/DoT 上游,并提供 Fake-IP 模式,旨在减少 DNS 污染攻击的影响。
三、两种流量接管模式
Clash 提供两种流量接管方式,它们在技术原理和适用场景上有本质区别。
3.1 系统代理模式(Sys 模式)
本质:只修改操作系统的代理设置,告诉支持系统代理的应用(如浏览器)将流量交给 Clash。
特点:
- 工作在应用层,不创建虚拟网卡
- 不接管 UDP 流量
- 部分软件(游戏、某些命令行工具)不会走代理
- 占用资源低,稳定性好
通俗理解:Sys 模式是”应用自愿把流量交给 Clash”,符合规则匹配的流量才会走代理线路。
3.2 TUN 模式
本质:创建一个虚拟网卡,系统的所有网络流量都会先经过这张虚拟网卡,再进入 Clash 进行规则匹配。
特点:
- 工作在网络层,比 Sys 模式更底层
- 支持 TCP 和 UDP
- 接管更彻底,几乎所有软件都能走代理
- 某些检测代理的应用无法感知(因为流量在更底层被接管)
重要澄清:TUN 模式不等于”全局代理”。无论是 Sys 还是 TUN 模式,是否走代理节点,最终都是由规则决定的。在 TUN 模式下,国内流量仍然可以直连,国外流量才走代理。
通俗理解:TUN 模式是”强制所有流量先经过 Clash”,然后根据规则决定去向,属于”强制接管再分流”。
四、Clash 的配置文件
Clash 的配置文件采用 YAML 格式,默认位于 $HOME/.config/clash/config.yaml。配置文件主要包含以下几个部分。
4.1 基础配置
# HTTP 代理端口
port: 7890
# SOCKS5 代理端口
socks-port: 7891
# 运行模式:Rule(规则)/ Global(全局)/ Direct(直连)
mode: Rule
# 日志级别:info / warning / error / debug / silent
log-level: info
# 允许局域网访问
allow-lan: false
4.2 代理节点定义(proxies)
在这里定义你的代理服务器信息,支持 ss、vmess、trojan、socks5、http 等多种类型。
proxies:
- name: "my-vps"
type: socks5
server: "你的服务器IP"
port: 1080
# 如需认证
# username: "user"
# password: "pass"
4.3 策略组定义(proxy-groups)
策略组把多个节点组织起来,形成不同的使用策略。
proxy-groups:
# 手动选择节点
- name: "PROXY"
type: select
proxies:
- "my-vps"
- "DIRECT"
# 自动选择延迟最低的节点
- name: "auto"
type: url-test
proxies:
- "my-vps"
url: "http://www.gstatic.com/generate_204"
interval: 300
4.4 分流规则(rules)
这是实现”指定域名走代理”的关键部分。
rules:
# DOMAIN-SUFFIX:匹配域名及其所有子域名
- DOMAIN-SUFFIX, google.com, PROXY
- DOMAIN-SUFFIX, youtube.com, PROXY
- DOMAIN-SUFFIX, github.com, PROXY
# DOMAIN:精确匹配域名
- DOMAIN, example.com, PROXY
# GEOIP:按地理位置匹配(国内IP直连)
- GEOIP, CN, DIRECT
# MATCH:兜底规则,必须放在最后
- MATCH, DIRECT
关键点:规则自上而下匹配,第一条命中的规则生效,后面的不再执行。MATCH 必须放在最后,否则它后面的规则永远没机会执行。
五、在图形客户端中配置规则
如果你使用的是带图形界面的 Clash 客户端(如 Clash Verge Rev),可以通过更直观的方式添加自定义规则,无需直接编辑 YAML 文件。
5.1 两种添加方式
| 方式 | 生效范围 | 适用场景 |
|---|---|---|
| 全局扩展脚本(JS) | 全部订阅全局生效 | 多套订阅共用一套自定义规则,规则可插入规则列表最顶部,优先级最高 |
| 订阅前置规则 | 仅当前订阅生效 | 调试方便,规则可直接在”查看配置”里确认是否注入成功 |
重要提醒:不要用 YAML Merge 功能添加 rules,因为 Merge 是覆盖合并,会直接替换掉订阅的全部原有规则。
5.2 常用规则语法
| 规则类型 | 语法示例 | 说明 |
|---|---|---|
| DOMAIN-SUFFIX | DOMAIN-SUFFIX,google.com,PROXY | 匹配 google.com 及其所有子域名,最常用 |
| DOMAIN | DOMAIN,dl.example.com,DIRECT | 只精确匹配该域名 |
| IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 匹配 IP 网段,no-resolve 表示不主动解析域名 |
| GEOIP | GEOIP,CN,DIRECT | 匹配 IP 归属地 |
| MATCH | MATCH,DIRECT | 兜底匹配,必须放最后 |
六、Clash 与 VPN 的区别
很多人会将 Clash 与 VPN 混淆,但实际上两者有本质区别:
| 对比维度 | Clash | 传统 VPN |
|---|---|---|
| 工作方式 | 规则驱动,按规则决定哪些流量走代理 | 通常接管所有流量 |
| 灵活性 | 高,可精确控制每条流量的去向 | 低,要么全走,要么全不走 |
| 协议支持 | 支持 Shadowsocks、VMess、Trojan 等多种代理协议 | 通常只支持 IPsec、OpenVPN 等 VPN 协议 |
| 部署位置 | 通常作为客户端软件安装 | 既可以是客户端,也可以是服务端 |
Clash 官方定位为”基于规则的隧道”而非 VPN,两者的技术路线和应用场景有明显差异。
七、总结
Clash 是一款功能强大、规则灵活的现代代理客户端,其核心价值体现在三个方面:
- 规则驱动:基于域名、IP、进程、端口等多维度匹配,精确控制每一条流量的去向。
- 多模式支持:Sys 模式轻量稳定,TUN 模式接管彻底,适应不同使用场景。
- 配置灵活:支持代理节点、策略组、规则链等丰富配置,满足从个人到高级用户的需求。
Clash 最适合以下场景:需要精确控制哪些域名走代理、哪些直连的个人用户;希望客户端自行分流、不依赖服务端规则的场景;以及需要对接多种代理协议(Shadowsocks、VMess、Trojan 等)的使用者。
对于需要在服务端统一管控所有流量的企业场景,Squid 等服务端代理工具则是更合适的选择——Clash 和 Squid 的定位互补,分别服务于客户端分流和服务端管控两种不同的需求。