跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

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-SUFFIXDOMAIN-SUFFIX,google.com,PROXY匹配 google.com 及其所有子域名,最常用
DOMAINDOMAIN,dl.example.com,DIRECT只精确匹配该域名
IP-CIDRIP-CIDR,192.168.0.0/16,DIRECT,no-resolve匹配 IP 网段,no-resolve 表示不主动解析域名
GEOIPGEOIP,CN,DIRECT匹配 IP 归属地
MATCHMATCH,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 的定位互补,分别服务于客户端分流和服务端管控两种不同的需求。

作者

老丹

关注我
其他文章
上一个

Squid 完全指南:开源代理服务器的全面解析

下一个

Vim 完全指南:从零到精通的系统性学习手册

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

近期文章

  • Ubuntu 防火墙迁移指南:从 UFW 到 firewalld 的完整实践 2026年9月12日
  • Nano 编辑器完全操作指南:从入门到熟练 2026年9月12日
  • SSCG:让自签名证书不再“危险”的生成工具 2026年9月12日
  • Ubuntu Samba 服务安装与配置完全指南 2026年9月12日
  • 从零开始:用 Docker 部署 Jellyfin 并启用英特尔核显硬件加速 2026年9月11日

文章分类

  • C/C++开发 (22)
  • Docker容器 (5)
  • Linux工具包 (17)
  • Linux服务配置 (50)
  • Linux系统 (16)
  • OpenWrt路由 (3)
  • Shell脚本 (3)
  • 代码管理 (1)
  • 安防技术 (4)
  • 数据安全 (36)
  • 未分类 (1)
  • 网络协议 (25)
  • 计算机理论 (23)
  • 音视频技术 (5)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号