Clash
概述
参考:
[!Attention] 据说作者已被抓,2023-11-2 仓库没了
Clash Core 删库跑路后的选择
- https://github.com/MetaCubeX/Clash.Meta # Clash.Meta
- https://github.com/MetaCubeX/mihomo/tree/Meta # 这才是主干分支。改名为 Mihomo,用原神作为对外显示(笑)
Clash 是一个 Go 语言开发的Proxy客户端,支持多种服务端协议,比如 Vmess、Shadowsocks、Trojan、Snell 等。
Clash 特性:
- 支持身份验证的本地 HTTP/HTTPS/SOCKS 服务器
- VMess、Shadowsocks、Trojan、Snell 协议支持远程连接
- 内置 DNS 服务器,旨在最大限度地减少 DNS 污染攻击的影响,支持 DoH/DoT 上游和假 IP。
- 基于域、GEOIP、IPCIDR 或进程的规则将数据包转发到不同的节点
- 远程组允许用户实施强大的规则。支持自动回退、负载平衡或基于延迟的自动选择节点
- 远程提供者,允许用户远程获取节点列表,而不是在配置中硬编码
- Netfilter TCP 重定向。使用 .在您的 Internet 网关上部署 Clash iptables。
- 全面的 HTTP RESTful API 控制器
Mihomo
规则
- DOMAIN-SUFFIX:域名后缀匹配
- DOMAIN:域名匹配
- DOMAIN-KEYWORD:域名关键字匹配
- IP-CIDR:IP 段匹配
- SRC-IP-CIDR:源 IP 段匹配
- GEOIP:GEOIP 数据库(国家代码)匹配
- DST-PORT:目标端口匹配
- SRC-PORT:源端口匹配
- PROCESS-NAME:源进程名匹配
- RULE-SET:根据 Rule Provider 匹配
- MATCH:全匹配
Rule Providers(规则提供器)
GitHub 项目,Loyalsoldier/clash-rules 根据 Loyalsoldier/v2ray-rules-dat 项目生成了适用于 Clash 的规则集合。有点类似于 iptables 中的 ipset
Clash 关联文件与配置
~/.config/clash/ #
- ./providers/ # rule-providers 规则保存路径
Clash GUI 客户端
- ClashForAndroid # 安卓客户端
- ClashN
- https://github.com/2dust/clashN
- 已合并到 v2rayN 项目
- ClashX:Clash 的 Mac 图形客户端
- ClashForAndroid:Clash 的 Android 图形客户端
- Clash for Windows:Clash 的 Windows/macOS 图形客户端
- clash-verge
clash-verge-rev
- https://github.com/clash-verge-rev/clash-verge-rev clash-verge 的延续!基于 Clash Meta
- 这些 GUI 客户端中,通常都内嵌了 Clash 二进制文件
FlClash
- https://github.com/chen08209/FlClash 多平台客户端。Android, Windows, macOS, Linux
- https://flclash.cc/
Clash for Windows
参考:
- GitHub 项目, Fndroid/clash_for_windows_pkg
- https://docs.cfw.lbyczf.com/ 这是谁从 GitHub 中生成的?
Clash for Windows 通常简称 CFW。
配置文件预处理
参考:
当配置文件更新时,通过配置文件预处理功能可添加我们个人自定义的一些配置。常用来为订阅添加配置。
因为订阅中会下载默认配置,每次手动修改不够方便,所以配置文件预处理就是一种类似于额外配置的功能
在 Settings-Profiles-Parsers 处编辑文件即可进行配置,简单示例:
parsers:
- url: "https://订阅地址"
yaml: {}
code: |
"STRING"
file: "/PATH/TO/JS_FILE"
当配置文件触发刷新时,Clash for Windows 会读取 parsers.yaml 字段中定义的内容,将对应的值插入或合并到通过 parsers.url 字段指定的订阅的配置文件
- url(STRING) # 指定需要预处理的订阅地址
- yaml(OBJECT) # 通过 YAML 格式进行预处理。即 yaml 字段下直接定义规则。
- code(STRING) # 通过 JavaScript 代码进行预处理。即 code 字段下的 js 代码直接定义规则
- file(STRING) # 代替 code 中的代码内容,让 Clash for windows 读取指定文件中的 JS 代码。
yaml、code、file 是三种生成规则的方式,可以任选其一即可。
YAML
parsers:
- url: "https://订阅地址"
yaml: {}
append-rules: # 在 rules 字段最后添加规则
- PROCESS-NAME,chrome.exe,Ghelper
- MATCH,DIRECT
commands:
- rules.-3- # 删除配置文件中 rules 字段中倒数第三个元素
yaml 字段下可用的字段有:
- append-rules([]STRING) # 数组合并至原配置 rules 数组后
- prepend-rules([]STRING) # 数组合并至原配置 rules 数组前
- append-proxies 数组 # 数组合并至原配置 proxies 数组后
- prepend-proxies 数组 # 数组合并至原配置 proxies 数组前
- append-proxy-groups 数组 # 数组合并至原配置 proxy-groups 数组后
- prepend-proxy-groups 数组 # 数组合并至原配置 proxy-groups 数组前
- mix-proxy-providers 对象 # 对象合并至原配置 proxy-providers 中
- mix-rule-providers 对象 # 对象合并至原配置 rule-providers 中
- mix-object 对象 # 对象合并至原配置最外层中
- commands([]STRING) # 在上面操作完成后执行简单命令操作配置文件
JavaScript
parsers:
- url: https://example.com/profile.yaml
code: |
module.exports.parse = async (raw, { axios, yaml, notify, console }, { name, url, interval, selected }) => {
const obj = yaml.parse(raw)
return yaml.stringify(obj)
}
这里的 async 是 JS 中的一个关键字,用来指明函数是异步的,类似于 go 语言中在函数前加个 go 关键字表示并发。
这里相当于定义一个异步的 parse() 函数,并导出它以便供 CFW 直接调用。parse() 函数时接收 3 个参数,其中包含从订阅中获取到的配置文件内容,对配置进行一些自定义操作后,将会 return 配置文件内容给 CFW ,此时 CFW 会使用获取到的返回值更新该订阅的配置文件。
parse() 的三个参数:
- raw # 从 url 中获取到的配置文件内容
- { axios, yaml, notify, console } # 导入的工具类对象/方法。可以直接在
parse()方法中调用- axios # 一个处理网络请求的库,GitHub 项目,axios/axios
- yaml # YAML 解析器库,GitHub 项目,eemeli/yaml
- notify # 发出系统通知方法,签名为
function notify(title:string, message:string, silent:bool) - console # 这里的 console 可以将内容输出至文件,方便调试。在 Settings 界面中 Profiles.Console Output 出可以打开该文件

- 该文件默认保存在
%LOCALAPPDATA%\Temp\cw-parser.log处
- homeDir # Home Directory 目录
- { name, url, interval, selected } # 配置文件元数据
- name # 订阅的名称
- url # 订阅的 URL
- interval # 订阅的更新策略
- selected:策略组选择缓存,数组
- mode:模式缓存
简单示例
module.exports.parse = async (
raw,
{ axios, yaml, notify, console },
{ name, url, interval, selected }
) => {
const obj = yaml.parse(raw)
console.log(name)
console.log(url)
console.log(interval)
console.log(selected)
return yaml.stringify(obj)
}
在 Console Output 文件中会输出如下内容:
Ghelper
https://ghelper.me/clash/XXXXXX
0
[]
这个简单示例并没有对从订阅中获取的原始配置进行任何更改,仅仅是输出了一些信息,然后直接将配置原封不动返回给了 CFW。
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.