Clash 高级配置入门
Clash 的高级配置 允许您完全控制代理行为,实现精细化的流量路由、负载均衡和故障转移。通过深入理解 Clash 的配置语法和功能,您可以打造一个高度个性化、稳定高效的代理网络环境。
高级配置的核心价值
掌握 Clash 高级配置可以带来以下优势:
- 精细化的流量控制:根据域名、IP、地理位置等条件精确路由流量
- 智能代理策略:实现自动节点选择、负载均衡和故障转移
- 性能优化:通过合理配置提升代理速度和稳定性
- 安全性增强:自定义规则屏蔽广告、恶意网站和不安全连接
- 自动化管理:通过规则集自动更新和脚本功能实现自动化配置
- 多场景适配:为不同网络环境和使用场景定制配置方案
本教程将从基础配置语法讲起,逐步深入高级功能,帮助您全面掌握 Clash 配置的艺术。无论您是 Clash 的初学者还是有经验的用户,都能从中获得有价值的知识。
学习前提
在学习本教程前,建议您已经掌握:
- Clash 的基本安装和使用方法
- YAML 配置文件的基本语法
- 代理服务器的基本概念(节点、订阅等)
- 基础网络知识(IP、域名、端口等)
YAML 配置语法详解
Clash 使用 YAML (YAML Ain't Markup Language) 格式的配置文件。YAML 是一种人类可读的数据序列化语言,非常适合配置文件使用。
YAML 基础语法
YAML 配置文件由键值对组成,使用缩进表示层次结构:
# 这是注释
key: value # 简单的键值对
# 列表(数组)
list:
- item1
- item2
- item3
# 嵌套结构
parent:
child:
key: value
list:
- item1
- item2
# 多行字符串
multiline: |
这是多行字符串
第二行
第三行
# 单行多值
singleline: "这是一行文本"
YAML 语法注意事项
- 缩进必须使用空格,不能使用制表符(Tab)
- 缩进空格数不重要,但同一层次的元素必须使用相同数量的空格
- 键值对使用冒号加空格分隔(
key: value) - 列表项使用短横线加空格开头(
- item) - 字符串通常不需要引号,除非包含特殊字符
- 注释以井号(
#)开头
Clash 配置文件结构
一个完整的 Clash 配置文件通常包含以下几个主要部分:
# Clash 配置文件基本结构
port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: false
mode: Rule
log-level: info
external-controller: 127.0.0.1:9090
# 代理服务器配置
proxies:
- name: "代理节点1"
type: ss
server: server1.example.com
port: 443
cipher: aes-256-gcm
password: "password"
# 代理组(策略组)
proxy-groups:
- name: "自动选择"
type: url-test
proxies:
- "代理节点1"
- "代理节点2"
url: "http://www.gstatic.com/generate_204"
interval: 300
# 规则
rules:
- DOMAIN-SUFFIX,google.com,自动选择
- DOMAIN-SUFFIX,github.com,自动选择
- MATCH,直接连接
代理服务器列表,定义所有可用的代理节点
type: ss
server: example.com
代理组(策略组),定义代理选择策略
type: url-test
proxies: [...]
规则列表,定义流量路由规则
端口、日志级别、模式等全局配置
mode: Rule
log-level: info
规则系统详解
Clash 的规则系统是其最强大的功能之一,允许您根据多种条件精确控制流量走向。规则按顺序匹配,直到找到匹配项。
规则类型与语法
Clash 支持多种规则类型,每种类型有不同的匹配条件:
DOMAIN 规则
基于完整域名的匹配,精确匹配整个域名。
DOMAIN,example.com,代理组
DOMAIN-SUFFIX 规则
基于域名后缀的匹配,匹配域名的结尾部分。
DOMAIN-SUFFIX,google.com,代理组
DOMAIN-KEYWORD 规则
基于域名关键词的匹配,匹配包含关键词的域名。
DOMAIN-KEYWORD,google,代理组
GEOIP 规则
基于IP地理位置的匹配,匹配特定国家/地区的IP。
GEOIP,CN,直接连接
IP-CIDR 规则
基于IP地址段的匹配,使用CIDR表示法。
IP-CIDR,192.168.0.0/16,直接连接
PROCESS-NAME 规则
基于进程名称的匹配(仅限某些平台)。
PROCESS-NAME,chrome.exe,代理组
USER-AGENT 规则
基于User-Agent字符串的匹配。
USER-AGENT,*Twitter*,代理组
MATCH 规则
默认规则,匹配所有未匹配的流量。
MATCH,代理组
规则匹配顺序
规则按配置文件中出现的顺序进行匹配。当流量匹配到第一条规则时,就会使用该规则指定的策略,不再继续匹配后续规则。
rules: # 1. 广告屏蔽规则(优先级最高) - DOMAIN-KEYWORD,ads,REJECT - DOMAIN-SUFFIX,doubleclick.net,REJECT # 2. 直连规则(本地网络和国内网站) - DOMAIN-SUFFIX,local,DIRECT - IP-CIDR,192.168.0.0/16,DIRECT - IP-CIDR,10.0.0.0/8,DIRECT - GEOIP,CN,DIRECT # 3. 代理规则(需要代理的网站) - DOMAIN-SUFFIX,google.com,代理组 - DOMAIN-SUFFIX,youtube.com,代理组 - DOMAIN-SUFFIX,twitter.com,代理组 - DOMAIN-SUFFIX,facebook.com,代理组 # 4. 最终规则(处理剩余流量) - MATCH,代理组
合理的规则顺序可以显著提高匹配效率和网络性能。通常建议将最具体的规则放在前面,最通用的规则放在最后。
代理组(策略组)高级配置
代理组(Proxy Groups)是 Clash 的核心功能之一,允许您创建复杂的代理选择策略,如负载均衡、故障转移和自动选择。
代理组类型
url-test
延迟测试型代理组,自动选择延迟最低的节点。
优点
- 自动选择最快节点
- 定期测试保持最优
- 配置简单直观
缺点
- 可能频繁切换节点
- 测试可能增加延迟
load-balance
负载均衡型代理组,在多个节点间分配流量。
优点
- 充分利用多个节点
- 提高整体吞吐量
- 避免单点过载
缺点
- 可能影响有状态连接
- 配置相对复杂
fallback
故障转移型代理组,按顺序尝试节点直到找到可用的。
优点
- 高可用性保障
- 节点故障自动切换
- 稳定性强
缺点
- 可能使用非最优节点
- 切换可能有延迟
select
手动选择型代理组,允许用户手动选择节点。
优点
- 用户完全控制
- 无需测试延迟
- 配置最简单
缺点
- 需要手动管理
- 无法自动优化
relay
链式代理组,流量依次通过多个节点。
优点
- 增强匿名性
- 绕过复杂封锁
- 灵活性高
缺点
- 显著增加延迟
- 配置复杂
自定义策略
结合多种策略,创建复杂代理逻辑。
优点
- 高度可定制
- 适应复杂场景
- 功能强大
缺点
- 配置非常复杂
- 需要深入理解
代理组配置示例
嵌套代理组
Clash 支持代理组的嵌套,可以创建更复杂的代理策略:
proxy-groups:
# 基础节点组
- name: "香港节点"
type: url-test
proxies:
- "香港-01"
- "香港-02"
- "香港-03"
url: "http://www.gstatic.com/generate_204"
interval: 300
- name: "日本节点"
type: url-test
proxies:
- "日本-01"
- "日本-02"
url: "http://www.gstatic.com/generate_204"
interval: 300
- name: "美国节点"
type: url-test
proxies:
- "美国-01"
- "美国-02"
- "美国-03"
url: "http://www.gstatic.com/generate_204"
interval: 300
# 嵌套代理组:区域选择
- name: "亚洲最优"
type: url-test
proxies:
- "香港节点" # 引用其他代理组
- "日本节点"
- "新加坡-01" # 也可以包含具体节点
url: "http://www.gstatic.com/generate_204"
interval: 300
# 最终选择代理组
- name: "全局自动选择"
type: url-test
proxies:
- "亚洲最优"
- "美国节点"
- "欧洲-01"
- "台湾-01"
url: "http://www.gstatic.com/generate_204"
interval: 300
tolerance: 100
# 在规则中使用嵌套代理组
rules:
- DOMAIN-SUFFIX,youtube.com,亚洲最优
- DOMAIN-SUFFIX,netflix.com,美国节点
- DOMAIN-SUFFIX,twitter.com,全局自动选择
- MATCH,全局自动选择
嵌套代理组提供了极大的灵活性,允许您创建层次化的代理策略,满足各种复杂的使用场景。
高级配置技巧与优化
掌握以下高级技巧,可以让您的 Clash 配置更加高效和稳定:
1. 规则集自动更新
使用规则集(rule-providers)自动从远程获取最新规则,保持规则更新:
rule-providers:
# 广告屏蔽规则集
reject:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400 # 每天更新一次
# 直连规则集(国内网站)
direct:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
# 代理规则集
proxy:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
# 流媒体规则集
netflix:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/netflix.txt"
path: ./ruleset/netflix.yaml
interval: 86400
# 在规则中使用规则集
rules:
- RULE-SET,reject,REJECT
- RULE-SET,direct,DIRECT
- RULE-SET,netflix,流媒体代理
- RULE-SET,proxy,代理
- MATCH,自动选择
2. DNS 配置优化
合理的 DNS 配置可以显著提高解析速度和隐私保护:
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip # 或 redir-host
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 223.5.5.5
- 119.29.29.29
# 国内域名使用国内 DNS
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
# 国外域名使用国外 DNS
fallback:
- tls://1.1.1.1:853
- tls://8.8.8.8:853
- https://dns.google/dns-query
# 分流规则
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
- 0.0.0.0/32
# 特定域名使用指定 DNS
nameserver-policy:
"geosite:cn": ["https://doh.pub/dns-query"]
"geosite:gfw": ["tls://1.1.1.1:853"]
"geosite:netflix": ["tls://8.8.8.8:853"]
3. 性能优化配置
通过调整以下参数优化 Clash 性能:
# 性能优化配置
tcp-concurrent: true # 启用 TCP 并发
enable-process: true # 启用进程处理
# 连接池配置
connection-pool:
max-connections: 1000 # 最大连接数
idle-timeout: 30s # 空闲超时时间
max-idle-connections: 100 # 最大空闲连接数
# 内存优化
memory-optimize: true
gc-interval: 30s # 垃圾回收间隔
# 流量控制
tcp-keep-alive-interval: 30s
udp-timeout: 60s
# 代理协议优化
proxies:
- name: "优化节点"
type: vmess
server: example.com
port: 443
uuid: your-uuid
alterId: 0
cipher: auto
udp: true # 启用 UDP
tls: true # 启用 TLS
skip-cert-verify: false
servername: example.com
network: ws # WebSocket 传输
ws-opts:
path: /path
headers:
Host: example.com
4. 配置文件模块化
对于复杂的配置,可以将其拆分为多个文件,提高可维护性:
# config.yaml - 主配置文件 port: 7890 socks-port: 7891 mode: Rule log-level: info # 包含其他配置文件 include: - ./configs/proxies.yaml # 代理节点配置 - ./configs/groups.yaml # 代理组配置 - ./configs/rules.yaml # 规则配置 - ./configs/dns.yaml # DNS 配置 # 主配置中的规则(最后执行) rules: - MATCH,自动选择
# configs/proxies.yaml
proxies:
- name: "香港节点-01"
type: ss
server: hk01.example.com
port: 443
cipher: aes-256-gcm
password: "password"
udp: true
- name: "日本节点-01"
type: vmess
server: jp01.example.com
port: 443
uuid: your-uuid
alterId: 0
cipher: auto
network: ws
tls: true
# 更多节点...
模块化配置的优势
- 易于维护:不同功能的配置分离,便于管理和更新
- 可重用性:通用配置可以在多个配置文件中复用
- 团队协作:多人可以同时编辑不同部分的配置
- 版本控制:可以单独跟踪每个配置文件的变更历史
常见配置问题与解决方案
在配置 Clash 时,可能会遇到各种问题。以下是一些常见问题的解决方案:
1. 配置文件语法错误
症状:Clash 无法启动,日志显示配置文件错误
解决方案:
- 使用 YAML 语法检查工具验证配置文件
- 检查缩进是否正确(必须使用空格,不能使用制表符)
- 检查冒号后是否有空格(
key: value正确,key:value错误) - 检查列表项格式是否正确(
- item正确,item错误) - 使用 Clash 的配置文件测试功能:clash -t -f config.yaml
2. 规则匹配不生效
症状:某些流量没有按照预期规则路由
解决方案:
- 检查规则顺序,确保特定规则在通用规则之前
- 使用日志调试功能,查看实际匹配的规则
- 检查域名是否正确,注意大小写敏感性
- 测试规则是否被前面的规则匹配
- 检查代理组名称是否正确引用
3. 代理组无法正常工作
症状:url-test、fallback 等代理组策略不生效
解决方案:
- 检查测试URL是否可访问,尝试更换为其他URL
- 调整测试间隔,避免过于频繁的测试
- 检查节点是否可用,测试单个节点的连接
- 检查代理组中引用的节点名称是否正确
- 对于嵌套代理组,确保引用的代理组已正确定义
4. DNS 解析问题
症状:部分网站无法访问或解析缓慢
解决方案:
- 检查 DNS 配置,确保 nameserver 和 fallback 配置正确
- 尝试更换 DNS 服务器,如使用 1.1.1.1 或 8.8.8.8
- 检查 DNS 分流规则是否正确
- 尝试不同的 enhanced-mode(fake-ip 或 redir-host)
- 检查系统 DNS 设置,确保指向 Clash 的 DNS 端口
5. 性能问题
症状:连接缓慢、延迟高、内存占用大
解决方案:
- 优化规则顺序,将最常用的规则放在前面
- 减少规则数量,合并相似的规则
- 使用规则集代替大量手写规则
- 调整连接池参数,优化并发连接
- 检查节点质量,更换性能更好的节点
- 启用 TCP 并发和内存优化选项
调试技巧
当遇到配置问题时,可以采取以下调试步骤:
- 将日志级别设置为 debug,查看详细日志信息
- 简化配置文件,逐步添加功能,定位问题所在
- 使用在线 YAML 验证工具检查配置文件语法
- 在测试环境中验证配置,再应用到生产环境
- 查阅 Clash 官方文档和社区讨论,寻找类似问题的解决方案