Clash

Clash跨平台代理工具基础与配置

#tech / ops / proxy #type / concept #status / growing

Clash

[!info] related notes

Clash 是一个跨平台的基于规则的代理工具, 在网络和应用层运行。

Clash 使用 YAML (YAML Ain’t Markup Language) 作为配置文件格式。

Clash 原理(两个关键部分):

  • Inbound 入站 Inbound 入站是在本地端监听的部分, 它通过打开一个本地端口并监听传入的连接来工作. 当连接进来时, Clash 会查询配置文件中配置的规则, 并决定连接应该去哪个 Outbound 出站。
  • Outbound 出站
    Outbound 出站是连接到远程端的部分. 根据配置的不同, 它可以是一个特定的网络接口、一个代理服务器或一个策略组。

基于规则的路由

Clash 支持基于规则的路由, 这意味着您可以根据各种规则将数据包路由到不同的出站. 规则可以在配置文件的 rules 部分中定义。
有许多可用的规则类型, 每种规则类型都有自己的语法. 规则的一般语法是:

# 类型,参数,策略(,no-resolve)
TYPE,ARGUMENT,POLICY(,no-resolve)

配置

配置文件

主配置文件名为 config.yaml. 默认情况下, Clash 会在 $HOME/.config/clash 目录读取配置文件.

-d 指定配置目录
-f 指定配置文件

特殊语法

IPv6 地址

用方括号([])包裹 IPv6 地址

DNS 通配符域名匹配

任何包含这些字符的域名都应该用单引号 (’) 包裹. 例如, ‘_.google.com’. 静态域名的优先级高于通配符域名 (foo.example.com > _.example.com > .example.com) .

使用星号 (*) 来匹配单级通配符子域名
使用点号 (.) 来匹配多级通配符子域名(不包括根域名)
使用加号 (+) 来匹配多级通配符子域名(包括根域名)

Rules 规则

Clash.wiki.Rules

策略

目前有四种策略类型,:

  • DIRECT: 通过 interface-name 直接连接到目标 (不查找系统路由表)
  • REJECT: 丢弃数据包
  • Proxy: 将数据包路由到指定的代理服务器
  • Proxy Group: 将数据包路由到指定的策略组

规则

规则类型语法示例说明
DOMAINDOMAIN,www.google.com,policy精确匹配域名
DOMAIN-SUFFIXDOMAIN-SUFFIX,youtube.com,policy匹配域名后缀
DOMAIN-KEYWORDDOMAIN-KEYWORD,google,policy匹配域名关键字
GEOIPGEOIP,CN,policy匹配 IP 地理位置
IP-CIDRIP-CIDR,127.0.0.0/8,DIRECT匹配 IPv4 地址段
IP-CIDR6IP-CIDR6,2620:0:2d0:200::7/32,policy匹配 IPv6 地址段
SRC-IP-CIDRSRC-IP-CIDR,192.168.1.201/32,DIRECT匹配源 IP 地址段
SRC-PORTSRC-PORT,80,policy匹配源端口
DST-PORTDST-PORT,80,policy匹配目标端口
PROCESS-NAMEPROCESS-NAME,nc,DIRECT匹配进程名称
PROCESS-PATHPROCESS-PATH,/usr/local/bin/nc,DIRECT匹配进程路径
IPSETIPSET,chnroute,policy匹配 IP 集合(仅 Linux)
RULE-SETRULE-SET,my-rule-provider,DIRECT匹配规则集(仅 Premium)
SCRIPTSCRIPT,script-path,DIRECT执行脚本(仅 Premium)
MATCHMATCH,policy全匹配(最后规则)

Clash DNS

由于 Clash 的某些部分运行在第 3 层 (网络层) , 因此其数据包的域名是无法获取的, 也就无法进行基于规则的路由.
Enter fake-ip: 它支持基于规则的路由, 最大程度地减少了 DNS 污染攻击的影响, 并且提高了网络性能, 有时甚至是显著的.

fake-ip

“fake IP” 的概念源自 RFC 3089:
一个 “fake IP” 地址被用于查询相应的 “FQDN” 信息的关键字.
fake-ip 池的默认 CIDR 是 198.18.0.1/16 (一个保留的 IPv4 地址空间, 可以在 dns.fake-ip-range 中进行更改).

当 DNS 请求被发送到 Clash DNS 时, Clash 内核会通过管理内部的域名和其 fake-ip 地址的映射, 从池中分配一个 空闲 的 fake-ip 地址.
以使用浏览器访问 http://google.com 为例:

  1. 浏览器向 Clash DNS 请求 google.com 的 IP 地址
  2. Clash 检查内部映射并返回 198.18.1.5
  3. 浏览器向 198.18.1.5 的 80/tcp 端口发送 HTTP 请求
  4. 当收到 198.18.1.5 的入站数据包时, Clash 查询内部映射, 发现客户端实际上是在向 google.com 发送数据包
  5. 根据规则的不同:
    Clash 可能仅将域名发送到 SOCKS5 或 shadowsocks 等出站代理, 并与代理服务器建立连接
    或者 Clash 可能会基于 SCRIPT、GEOIP、IP-CIDR 规则或者使用 DIRECT 直连出口查询 google.com 的真实 IP 地址

实战经验

vmess-to-yaml

添加节点

proxies:
  # 节点1
  - name: "tcp"
    type: vmess
    server: [ip-address]
    port: 30
    uuid: b2028ac
    alterId: 0
    cipher: auto
    tls: false
    network: tcp
    ws-opts: {}
    udp: false

  # 节点2
  # - name: "quic"
  #   type: vmess
  #   server: 2.5.8.54
  #   port: 370
  #   uuid: 40e0ccf
  #   alterId: 0
  #   cipher: auto
  #   tls: false
  #   network: quic
  #   ws-opts: {}
  #   udp: false

  # 节点3
  - name: "quic"  # 节点名称(取自 ps 字段)
    type: vmess  # 协议类型为 VMess
    server: 20.2.9.4  # 服务器地址(取自 add 字段)
    port: 28595  # 端口(取自 port 字段,转换为整数)
    uuid: 40c0ccf  # 用户 ID(取自 id 字段)
    alterId: 0  # 额外 ID(取自 aid 字段,转换为整数)
    cipher: auto  # 加密方式(默认 auto,兼容大多数节点)
    tls: false  # QUIC 通常自带加密,无需额外启用 TLS(按节点实际配置调整)
    network: quic  # 传输协议(取自 net 字段)
    quic-opts:  # QUIC 协议专属配置
      security: dtls  # 加密/伪装类型(取自 type 字段)
      key: ""  # 若节点有密钥可填写(此处 path 为空,暂不填)
      # 可选:若节点绑定域名,可添加 servername
      # servername: example.com

添加节点组

proxy-groups:
  - name: Proxy
    type: select
    proxies:
      - "tcp"
      - "quic"
      - DIRECT
  
  - name: Ban
    type: select
    proxies:
      - REJECT  # Clash 内置的拒绝动作,直接阻断流量
      - DIRECT

通过url获取规则

rule-providers:
  AdvertisingLite:
    type: http  # 远程 HTTP 方式获取
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/refs/heads/master/rule/Clash/AdvertisingLite/AdvertisingLite_Classical.yaml"  # 替换为实际规则文件 URL
    interval: 86400  # 每天更新一次(单位:秒)
    path: ./rules/AdvertisingLite.yaml  # 本地缓存路径
    behavior: classical  # 按传统规则格式解析(必须添加,否则可能无法识别)

直接嵌入规则

rules:
  # -------------------------- 1. Microsoft 基础服务(直连,不影响Copilot)--------------------------
  - DOMAIN-SUFFIX,windows.com,DIRECT
  - DOMAIN-SUFFIX,microsoft.com,DIRECT  # 基础微软服务直连(Copilot单独规则覆盖)
  - DOMAIN-SUFFIX,msft.net,DIRECT
  - DOMAIN-SUFFIX,live.com,DIRECT
  - DOMAIN-SUFFIX,xbox.com,DIRECT
  - DOMAIN-SUFFIX,office.com,DIRECT
  - DOMAIN-SUFFIX,onenote.com,DIRECT
  - DOMAIN-SUFFIX,outlook.com,DIRECT
  - DOMAIN-SUFFIX,skype.com,DIRECT

  # -------------------------- 2. VS Code Copilot 专属规则(全部走代理)--------------------------
  # Copilot 核心API域名(模型请求、代码补全)
  - DOMAIN-SUFFIX,githubcopilot.com,Proxy  # Copilot 主服务域名
  - DOMAIN-SUFFIX,copilot-proxy.githubusercontent.com,Proxy  # Copilot 代理服务器
  - DOMAIN-SUFFIX,api.githubcopilot.com,Proxy  # Copilot API接口
  - DOMAIN-SUFFIX,models.githubcopilot.com,Proxy  # Copilot 模型服务
  # 关联的GitHub服务(Copilot依赖GitHub登录和授权)
  - DOMAIN-SUFFIX,githubusercontent.com,Proxy  # GitHub 资源托管(含Copilot配置)
  - DOMAIN-SUFFIX,ghcr.io,Proxy  # GitHub 容器 registry(Copilot相关镜像)
  # 微软Azure支持的Copilot后端(部分模型部署在Azure)
  - DOMAIN-SUFFIX,azure.com,Proxy  # 仅覆盖Copilot相关的Azure服务(不影响国内Azure)
  - DOMAIN-SUFFIX,azureedge.net,Proxy  # Azure CDN(Copilot模型加速)

  # -------------------------- 3. 国内基础规则--------------------------
  - GEOIP,CN,DIRECT
  - DOMAIN-SUFFIX,cn,DIRECT
  - DOMAIN-KEYWORD,.中国.,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT

  # -------------------------- 4. 其他境外服务(走代理)--------------------------
  - DOMAIN-SUFFIX,reddit.com,Proxy
  - DOMAIN-SUFFIX,redd.it,Proxy
  - DOMAIN-SUFFIX,stackoverflow.com,Proxy
  - DOMAIN-SUFFIX,stackexchange.com,Proxy
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,github.com,Proxy
  - DOMAIN-SUFFIX,youtube.com,Proxy
  - DOMAIN-SUFFIX,twitter.com,Proxy
  - DOMAIN-SUFFIX,facebook.com,Proxy

  # -------------------------- 5. 兜底规则--------------------------
  - MATCH,DIRECT

代理组嵌套代理组

使用场景: 有了某一类(比如Microsoft)的匹配规则,希望能手动控制是 哪一个代理,此时可以直接添加具体的节点,也可以使用别的代理组的使用节点(Proxy 节点组当前使用哪个节点就使用哪个)

proxy-groups:
  - name: Proxy
    type: select
    proxies:
      - "tcp"
      - "quic"
      - DIRECT

  - name: Microsoft-proxy
    type: select
    proxies:
      - Proxy
      - DIRECT

客户端使用

更新

以下的更新都是分开的:

  • 配置文件更新(file)
  • 外部资源更新(provider)
  • GUI软件更新
  • mihomo内核更新

[!NOTE] 注意 所以当使用 provider 提供节点时,修改了节点信息(名字、配置、地址)后,应该通过外部资源更新来获取,使用配置文件更新是没有用的!

相关资源

转换: v2ray转clash节点 - v2rayse.com ACL4SSR 在线订阅转换

规则: ios_rule_script/rule/Clash at master · blackmatrix7/ios_rule_script

参考

信息来源:Clash 知识库

创建于 2025/1/1 更新于 2026/5/27