Clash代理服务器

2022/10/29 clash

Clash代理

Clash 是一个使用 Go 语言编写,基于规则的跨平台代理软件核心程序。Clash是一个跨平台、支持SS/V2ray/Trojan协议、基于规则的网络代理软件,功能强大、界面美观、支持订阅,尤其适合机场和付费服务使用。Clash功能全加颜值好看,使得Clash深受喜爱,有一大批死忠粉。

Clash for Windows 是目前在 Windows 上唯一可用的图形化 Clash 分支。通过 Clash API 来配置和控制 Clash 核心程序,便于用户可视化操作和使用。

Clash特点

Clash和其他SS/SSR/V2ray/trojan等客户端的第一个不同点是:不能在界面上配置代理节点信息,只能通过编辑配置文件或者URL导入。对于机场用户,导入订阅URL就好了,然而对于只有原始信息的自建用户或普通用户,要么变成链接形式通过第三方API转换成URL导入,要么只能编辑配置添加节点。这种半手工编辑和半GUI的操作,不少人也觉得Clash有点蛋疼。

Clash和其他客户端另外一点重要差别是:代理(proxies)信息是根据配置文件生成的,不同的写法就有不同的界面。虽然用的同一个软件,如果别人的界面和你的不一样,请不要惊讶。

最后Clash的一个重要特点是:Clash配置文件只要按照指定语法写就可以了,可以自由发挥,不需要遵守什么特定格式。默认安装的官方配置文件非常简单,实际中使用的配置文件比官方带的复杂多了,功能也强大许多。

深入理解Clash配置文件

# HTTP 协议代理所在端口
port: 7890
# SOCKS5 协议代理所在端口
socks-port: 7891
# 允许局域网内其他设备连接以上 2 个代理端口
allow-lan: true
# 规则模式(可选:全局、规则和直连 3 种模式)
mode: Rule
# 日志级别
log-level: info
# RESTful 风格的控制 API 服务地址(你可以自己写程序调用接口以切换代理节点等)
external-controller: 0.0.0.0:9090

# 代理节点池
proxies:
  - {name: 自建节点 1, type: ss, server: proxy.example.com, port: 12345, cipher: aes-256-cfb, password: mypassword }

# 代理节点组
proxy-groups:
  # type: select 意为着这个节点组内的节点需要你手动选择切换
  - name: 使用代理的组名
    type: select
    proxies:
      - 自建节点 1
  # 不使用代理直连
  - name: 直连的组名
    type: select
    proxies:
      # DIRECT 意为直连
      - DIRECT

# 规则,“规则模式”下需要配置,你设备每一次发送的请求都会经由该规则列表由上至下筛选
# 格式为:- $匹配模式,$匹配参数,$代理节点组
rules:
  - DOMAIN-SUFFIX,google.com,使用代理的组名
  - GEOIP,CN,直连的组名
  - MATCH,使用代理的组名

proxies

proxies 代表节点数据,所有的分流规则都是按照这些节点数据来的,这里可以有很多个节点数据,可以是 trojan, ss, vmess 类型都可以,如一下示例

- {name: az1, server: xxxx, port: 443, type: vmess, uuid: xxxxx, alterId: 0, cipher: auto, tls: true, network: ws, ws-opts: {path: /xxxxx, headers: {Host: xxxxx}}}

clash 用统一的格式来定义不同的节点类型,用 type 来进行区分,特有的属性只需要在这个结构体加上自己属性就可以, clash 客户端会根据 type 不同而来读数据

proxy-groups

相当于一层过滤网,当rules与请求匹配时,会跳转到对应的group进行处理

  • name 组名称,可以随便命名,组的名称可以被其他组引用,也可以放在规则里
  • type type 代表这个组的类型,有下面四种情况
    • select 手动选择,该组在节点列表上,手动选择列表或者 proxy-group
    • url-test 延迟最低节点,测试该组所有节点的延迟
    • fallback 回落,连接该组第一个节点,不可用时切换到下一个节点
    • load-balance 负载均衡,由该组2个以上的节点提供链接
  • proxies 这里可以是组名称或者节点名称,依次从上到下进行选择,比如看下面这个 ```yaml
  • name: 🔰 节点选择 type: select proxies: - ♻️ 自动选择 - 🎯 全球直连 - cfmem.com - 🇭🇰 gq - 香港Amazon数据中心 20-1 - cfmem.com - 🇭🇰 gq - 香港Amazon数据中心 26-2 - cfmem.com - 🇭🇰 gq - 香港Amazon数据中心 28-3 - cfmem.com - 🇭🇰 香港-4 - cfmem.com - 🇭🇰 香港 2-5 - cfmem.com - 🇭🇰 香港 3-6 - cfmem.com - 🇭🇰 香港 4-7 - cfmem.com - 🇭🇰 香港 10-8 - cfmem.com - 🇭🇰 香港 11-9
    • name: ♻️ 自动选择 type: url-test url: http://www.gstatic.com/generate_204 interval: 300 proxies:
      • cfmem.com - 🇭🇰 gq - 香港Amazon数据中心 20-1
      • cfmem.com - 🇭🇰 gq - 香港Amazon数据中心 26-2
      • cfmem.com - 🇭🇰 gq - 香港Amazon数据中心 28-3
      • cfmem.com - 🇭🇰 香港-4
      • cfmem.com - 🇭🇰 香港 2-5
      • cfmem.com - 🇭🇰 香港 3-6
      • cfmem.com - 🇭🇰 香港 4-7
      • cfmem.com - 🇭🇰 香港 10-8
      • cfmem.com - 🇭🇰 香港 11-9
      • cfmem.com - 🇭🇰 香港 12-10
    • name: 🌍 国外媒体 type: select proxies:
      • 🔰 节点选择
      • ♻️ 自动选择
      • 🎯 全球直连
      • cfmem.com - 🇭🇰 gq - 香港Amazon数据中心 20-1 ``` 名称为自动选择的组会每间隔 300 毫秒去 ping 节点数据

而国外媒体这一项是手动选择默认选择第一个 节点选择,节点选择的第一个是自动选择,所以默认是根据 ping 值来选择节点的

rules

rules 也就是具体的分发规则了,规则一般由 名称 + , + 地址 + 组名组成 我们来看下,其中 no-resolve 表示不要解析这条规则,只处理直接 ip 访问请求

rules:
  - DOMAIN-SUFFIX,local,🎯 全球直连
  - IP-CIDR,192.168.0.0/16,🎯 全球直连,no-resolve
  - IP-CIDR,10.0.0.0/8,🎯 全球直连,no-resolve
  - IP-CIDR,172.16.0.0/12,🎯 全球直连,no-resolve
  - IP-CIDR,127.0.0.0/8,🎯 全球直连,no-resolve
  - IP-CIDR,100.64.0.0/10,🎯 全球直连,no-resolve
  - IP-CIDR6,::1/128,🎯 全球直连,no-resolve
  - IP-CIDR6,fc00::/7,🎯 全球直连,no-resolve
  - IP-CIDR6,fe80::/10,🎯 全球直连,no-resolve
  - IP-CIDR6,fd00::/8,🎯 全球直连,no-resolve
  - DOMAIN-KEYWORD,1drv,Ⓜ️ 微软服务

规则前缀有这些内容

  • DOMAIN-SUFFIX 表示包含什么后缀的域名
  • IP-CIDR IPV4匹配
  • IP-CIDR6 IPV6匹配
  • DOMAIN-KEYWORD,xxx 表示包含 xxx域名关键字的链接
  • DOMAIN abc.hello.com 表示包含完整的域名
  • PROCESS-NAME 表示进程名称
  • GEOIP 数据库(国家代码)匹配
  • MATCH 全匹配(一般放在最后) 规则最后一行是MATCH,Final,表示如果客户端运行在基于规则模式,如果匹配到上面的规则,就按照规则定义的路由走,否则走Final这个规则组。

示例

比如我们在电脑访问 www.youtube.com 那么规则是怎么走的呢,

分组由上到下是 国外媒体 -> 国内媒体 -> 微软服务 -> 电报服务 -> 苹果服务 -> 全球直连 -> 全球拦截 -> 漏网之鱼,那么看一看 youtube.com 这条规则加在那个分组里

可以看到 youtube 是在 国外媒体分组里,那么在这里要看国外媒体选择的是那个节点 可以看到国外媒体选择的是 香港2-5 这个节点,选择是的延迟最低的节点,所以 youtube 走的是这个代理。

假如我们把 - DOMAIN-SUFFIX,youtube.com,🌍 国外媒体 这一条规则拿掉,访问 youtube.com 还是没有问题的,那是什么情况呢?我们再来看下配置文件,找到最后一条

- MATCH,🐟 漏网之鱼

也就是如果里面规则都没有找到的话,到了最后一条就是直接用代理,我们把这一条再去掉,刷新配置文件,这时候再访问 youtube.com 就访问不了

clash 客户端通过配置文件配置节点的信息与分流规则,这里面的组,可以理解成过滤网,由上到下。规则组的规则呢,则是在 rules 里面配置的,rules 通过配置 DOMAIN-SUFFIX,IP-CIDR,IP-CIDR6 等信息来配置当前请求应该还是不应该走代理

Search

    微信好友

    博士的沙漏

    Table of Contents