本文深入讲解Clash脚本的核心语法、代理组类型选择、TUN模式与系统代理的差异,以及自定义分流规则的编写方法,帮助用户实现精细化的流量管理。
什么是Clash脚本
Clash脚本是基于YAML配置的条件判断逻辑,通过script字段实现动态路由决策,与静态规则不同,脚本可以根据域名、IP、端口等参数实时计算出口节点,适用于需要复杂分流的场景。
代理组类型深度解析
代理组是Clash流量调度的核心,理解三种类型的区别是进阶的前提:
- select(手动选择):列出所有节点,由用户手动指定出口,适合需要精确控制的场景
- url-test(自动测速):定期对节点发起HTTP请求,按延迟自动切换到最优节点
- fallback(故障转移):优先使用列表中第一个可用节点,掉线后自动切换到下一个
proxy-groups:
- name: 自动选择
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
proxies:
- 节点A
- 节点B
- 节点C
TUN模式与系统代理的区别
TUN模式创建虚拟网卡,接管设备所有流量(包括UDP、游戏数据包),适合需要全流量代理的场景。系统代理仅处理HTTP/HTTPS请求,兼容性更好但无法代理游戏或UDP流量。
在OpenWrt路由器上,建议开启TUN模式以实现全局代理;在桌面客户端则可根据需求选择。
分流规则优先级与写法
Clash规则按从上到下匹配,命中后立即执行,常用规则类型:
DOMAIN-SUFFIX:匹配域名后缀,如google.com匹配mail.google.comDOMAIN-KEYWORD:关键词匹配,如youtube匹配www.youtube.comIP-CIDR:IP段匹配,如0.0.0/8匹配内网IPGEOIP:根据IP库判断国家,如GEOIP,CN表示中国IP
rules: - DOMAIN-SUFFIX,google.com,自动选择 - DOMAIN-KEYWORD,youtube,视频线路 - IP-CIDR,10.0.0.0/8,DIRECT - GEOIP,CN,DIRECT - MATCH,自动选择
自定义脚本实现智能分流
通过script字段可编写更复杂的判断逻辑,脚本基于Go语言语法,支持以下变量:
domain:访问的域名dstPort:目标端口network:传输协议(TCP/UDP)processName:发起请求的进程名
script:
code: |
def main(ctx, metadata):
domain = metadata["domain"]
dstPort = metadata["dst_port"]
# 端口为53时使用DNS专用线路
if dstPort == 53:
return "DNS线路"
# 域名包含streaming的走视频线路
if "streaming" in domain:
return "视频线路"
return "自动选择"
常见问题FAQ
现象:节点显示在线但无法访问
原因:本地DNS污染或规则命中了DIRECT导致直连
解决方法:在脚本中强制返回代理组,或检查规则顺序
现象:TUN模式开启后部分应用无法联网
原因:应用使用了证书锁定或非标准端口
解决方法:在排除列表中添加对应进程或端口
现象:自动测速结果与实际体验不符
原因:测速URL被干扰或节点出口网络波动
解决方法:更换测速URL为http://cp.cloudflare.com/generate_204
节点选择建议
不同使用场景对节点要求不同:4K视频需要高带宽专线,游戏需要低延迟线路,跨境办公则需要稳定可靠的连接,建议根据实际需求选择对应类型的节点服务,避免单一节点承载过多业务。
