支持各种隧道协议的客户端
Clash
参考:
[!Attention] 据说作者已被抓,2023-11-2 仓库没了
Clash Core 删库跑路后的选择
- https://github.com/MetaCubeX/Clash.Meta # Clash.Meta
- https://github.com/MetaCubeX/mihomo/tree/Meta # Clash.Meta
Clash 是一个 Go 语言开发的代理客户端,支持多种服务端协议,比如 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 控制器
规则
- 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 客户端
- GitHub 项目,Kr328/ClashForAndroid # 安卓客户端
- 已删库
- ClashN # https://github.com/2dust/clashN
- 已合并到 v2rayN 项目
- ClashX:Clash 的 Mac 图形客户端,GitHub 项目,yichengchen/clashX
- 已删库
- ClashForAndroid:Clash 的 Android 图形客户端,GitHub 项目,Kr328/ClashForAndroid
- 已删库
- Clash for Windows:Clash 的 Windows/macOS 图形客户端,GitHub 项目,Fndroid/clash_for_windows_pkg。详见下文
- 已删库
- clash-verge https://github.com/zzzgydi/clash-verge/tree/main 基于 Clash.Meta。已归档跑路
https://github.com/clash-verge-rev/clash-verge-rev clash-verge 的延续!基于 Clash Meta
这些 GUI 客户端中,通常都内嵌了 Clash 二进制文件
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。
V2Ray 客户端
Qv2ray
跨平台 V2Ray 客户端,支持 Linux、Windows、macOS,可通过插件系统支持 SSR / Trojan / Trojan-Go / NaiveProxy 等协议
SagerNet
已归档
SagerNet 是一个基于 V2Ray 的 Android 通用代理应用。
V2rayN
V2RayN 是一个基于 V2Ray 内核的 Windows 客户端。
v2rayA
基于 web GUI 的跨平台 V2Ray 客户端,在 Linux 上支持全局透明代理,其他平台上支持系统代理。
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.