Clash脚本进阶,从基础配置到自定义逻辑

本文深入讲解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.com
  • DOMAIN-KEYWORD:关键词匹配,如youtube匹配www.youtube.com
  • IP-CIDR:IP段匹配,如0.0.0/8匹配内网IP
  • GEOIP:根据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视频需要高带宽专线,游戏需要低延迟线路,跨境办公则需要稳定可靠的连接,建议根据实际需求选择对应类型的节点服务,避免单一节点承载过多业务。

您可以还会对下面的文章感兴趣: