支持各种隧道协议的客户端

Clash

参考:

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 控制器

Clash Core 删库跑路后的选择

Clash 有多种客户端的 GUI 版本:

这些 GUI 客户端中,通常都内嵌了 Clash 二进制文件

规则

  • 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 客户端

安卓

Windows

Clash for Windows

参考:

Clash for Windows 通常简称 CFW。

据说作者已被抓,2023-11-2 仓库没了

配置文件预处理

参考:

当配置文件更新时,通过配置文件预处理功能可添加我们个人自定义的一些配置。常用来为订阅添加配置。

因为订阅中会下载默认配置,每次手动修改不够方便,所以配置文件预处理就是一种类似于额外配置的功能

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 出可以打开该文件
      • image.png
      • 该文件默认保存在 %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 上支持全局透明代理,其他平台上支持系统代理。


最后修改 March 22, 2024: tailscale (12e90654)