clash 预处理配置生成

机场的节点信息更新很频繁,所以需要时常更新节点信息,并且有自己定制规则和代理组的需求,所以就找到了这个 clash 配置文件预处理的 api,能够迅速生成配置文件

请注意,本文编写于 169 天前,最后修改于 61 天前,其中某些信息可能已经过时。

由 @kr328 提供(暂且不讨论安全性)

In Updating

clash 科普

项目主页

大致结构

  1. 预处理器配置
  2. clash 基础配置
  3. 代理组匹配
  4. 规则编辑合并

配置文件和详解

作者目前有提供两个方式,一个是 tgbot 的托管方式,一个是完全本地的 Python 版本。

tgbot 配置

@kr328_webapi_bot

  • 针对预处理器的配置
preprocessor:
  version: 1 # 目标预处理器版本号 目前仅能使用 1
  • clash 的基础配置,这里的内容不会被处理
clash-general:
  port: 7890 # http 代理端口
  socks-port: 7891 # socks5 端口

  # redir-port: 7892 # [Clash支持使用redir参数搭配iptables进行透明代理设置](https://github.com/Dreamacro/clash/issues/158)

  allow-lan: true # 是否允许来自局域网的连接

  mode: Rule # 代理模式,有 global / direct

  log-level: info # 日志级别 info / warning / error / debug / silent

  external-controller: '127.0.0.1:9090' # 大致是给 dash board 用的 api

  # external-ui: folder
  # you can put the static web resource (such as clash-dashboard) to a directory, and clash would serve in `${API}/ui`(可以将 web 控制台的静态放在某个目录,然后就可以通过 ${api}/ui 访问面板 
# input is a relative path to the configuration directory or an absolute path (注意是绝对路径

  # secret: ""
  # api 访问密钥

## dns:
  # enable: true # set true to enable dns (default is false)
  # ipv6: false # default is false
  # listen: 0.0.0.0:53
  # enhanced-mode: redir-host # or fake-ip
  # # fake-ip-range: 198.18.0.1/16 # if you don't know what it is, don't change it
  # nameserver:
  #   - 114.114.114.114
  #   - tls://dns.rubyfish.cn:853 # dns over tls
  #   - https://1.1.1.1/dns-query # dns over https
  # fallback: # concurrent request with nameserver, fallback used when GEOIP country isn't CN
  #   - tcp://1.1.1.1
  dns:
    enable: null
    listen: 0.0.0.0:53
    enhanced-mode: fake-ip
  nameserver:
    - 58.20.127.170
    - 223.5.5.5:853
    - 119.29.29.29:5399
    - dns.rubyfish.cn:853
    - 1.1.1.1:853
  fallback:
    - 1.1.1.1:853
    - 8.8.8.8:853
    - 12.159.2.159:853
    - 208.67.222.222:443
    - 9.9.9.9:853
    - dns.rubyfish.cn:853
  # Clash for Windows
  cfw-bypass: # 针对 clash for windows 的配置,可以设置为系统代理时绕过某个域名/ip,如图,支持通配符,打开系统代理后此内容会应用到系统代理的排除名单
    - qq.com
    - music.163.com
    - "*.music.126.net"
    - localhost
    - 127.*
    - 10.*
    - 172.16.*
    - 172.17.*
    - 172.18.*
    - 172.19.*
    - 172.20.*
    - 172.21.*
    - 172.22.*
    - 172.23.*
    - 172.24.*
    - 172.25.*
    - 172.26.*
    - 172.27.*
    - 172.28.*
    - 172.29.*
    - 172.30.*
    - 172.31.*
    - 192.168.*
    - <local>
  cfw-latency-timeout: 5000
  • 代理相关配置

proxy-sources: # 填上你的订阅链接,这里用了 surge2clash 的 api
  - type: url
    url: "https://tgbot.lbyczf.com/surge2clash?url=subscription_url" # 代理订阅链接,使用了 @Fndroid 的 surge2clash 的 api ,因为机场提供的 clash 托管未添加 obfs 支持
proxy-group-dispatch: 
# 代理组设置 简单食用改掉汉字即可,proxy-filters 下是正则匹配代理名 ,`|` 是 *或* 的关系,如要深入,请了解 正则匹配
# 注意,黑名单默认参数有问题,所以一定要同时配置。
  - name: HK
    proxies-filters:
      white-regex: ".*(港|新加坡|澳门).*"
      black-regex: ''
    type: select
  - name: TW
    proxies-filters:
      white-regex: ".*(台湾).*"
      black-regex: ''
    type: select
  - name: US
    proxies-filters:
      white-regex: ".*(美).*"
      black-regex: ''
    type: select
  - name: PROXY
    type: select
    flat-proxies: # flat-proxy 下的条目也不会处理,注意缩进
      - HK
      - TW
      - JP
      - US
      - EU
      - AsiaOther
      - DIRECT
      - load-balance
    _index: 4
  - name: Final
    type: select
    flat-proxies:
      - PROXY
      - US
      - HK
      - TW
      - JP
      - DIRECT
      - load-balance
  • 规则相关
rule-sets: #填写下载代理规则的 url (只会应用 rull )
  - name: pro
    type: url     #只支持 url
    url: 'https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Pro.yaml'
    target-map:
      - 'Apple,PROXY' #将下载下来的规则的代理组名称(前者)替换为后者,(便于自定义吧)

rule: #在这里填写自定义的规则,以及下载下来的规则应该放在哪里(规则是从前到后一次匹配)
  - 'DOMAIN-SUFFIX,img-sketch.pximg.net,pix'
  - 'DOMAIN-SUFFIX,s.pximg.net,pix'
  - 'DOMAIN-SUFFIX,booth.pximg.net,pix'
  - 'DOMAIN-SUFFIX,pixiv.pximg.net,pix'
  - 'DOMAIN-SUFFIX,api.booth.pm,pix'
  - 'DOMAIN-SUFFIX,i.pximg.net,pix'
  - 'DOMAIN-SUFFIX,www.pixiv.net,pix'
  - 'DOMAIN-SUFFIX,foxleech.com,PROXY'
  - 'DOMAIN-SUFFIX,fonts.gstatic.com,PROXY'
  - 'DOMAIN-SUFFIX,play.google.com,PROXY'
  - 'DOMAIN-SUFFIX,chinaz.com,ShangHai'
  - 'RULE-SET,pro'

Python 版

Github 地址
此版本基于 python3 建议 python3.7 及以上版本。

git clone (https://github.com/Kr328/clash-config-preprocessor.git
cd ./ckash-config-preprocessor
# 安装依赖
pip install -r requirements.txt

我的配置

preprocessor:
  version: 1
clash-general:
  port: 7899
  socks-port: 7891
  allow-lan: true
  mode: Rule
  log-level: info
  external-controller: 0.0.0.0:9090
  secret: ''
  dns:
    enable: false
    listen: 0.0.0.0:53
    enhanced-mode: fake-ip
  nameserver:
    - 58.20.127.170
    - 223.5.5.5:853
    - 119.29.29.29:853
    - dns.rubyfish.cn:853
    - 1.1.1.1:853
  fallback:
    - 1.1.1.1:853
    - 8.8.8.8:853
    - 12.159.2.159:853
    - 208.67.222.222:443
    - 9.9.9.9:853
    - dns.rubyfish.cn:853
  cfw-bypass:
    - qq.com
    - music.163.com
    - localhost
    - 127.*
    - 10.*
    - 172.16.*
    - 172.17.*
    - 172.18.*
    - 172.19.*
    - 172.20.*
    - 172.21.*
    - 172.22.*
    - 172.23.*
    - 172.24.*
    - 172.25.*
    - 172.26.*
    - 172.27.*
    - 172.28.*
    - 172.29.*
    - 172.30.*
    - 172.31.*
    - 192.168.*
    - <local>
  cfw-latency-timeout: 5000
proxy-sources:
  - type: url
    url: "https://tgbot.lbyczf.com/surge2clash?url="
proxy-group-dispatch:
  - name: HK
    proxies-filters:
      black-regex: ''
      white-regex: ".*(港|新加坡|澳门).*"
    type: select
  - name: TW
    proxies-filters:
      black-regex: ''
      white-regex: ".*(湾).*"
    type: select
  - name: US
    proxies-filters:
      black-regex: ''
      white-regex: ".*(美).*"
    type: select
  - name: JP
    proxies-filters:
      black-regex: ''
      white-regex: ".*(日).*"
    type: select
  - name: PROXY
    type: select
    flat-proxies:
      - "HK"
      - "TW"
      - "JP"
      - "US"
      - "DIRECT"
    proxies-filters:
      balck-regex: ''
      white-regex: ''
rule-sets:
  - name: pro
    type: url
    url:  "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Pro.yaml"
    target-map: 
      - 'Apple,PROXY'

rule:
  - "DOMAIN-SUFFIX,piximg.net,PIX"
  - "DOMAIN-SUFFIX,booth.pm,PIX"
  - "DOMAIN-SUFFIX,pixiv.net,PIX"
  - "DOMAIN-SUFFIX,foxleech.com,PROXY"
  - "DOMAIN-SUFFIX,gstatic.com,PROXY"
  - "DOMAIN-SUFFIX,chinaz.com,CN"
  - "RULE-SET,pro"

需要注意的是作者许多默认参数有问题,所以会有坑,以及 yaml 的格式问题(

  • yaml 不能使用 tab 缩进,必须使用空格,键入一两个空格即可.

Why does YAML forbid tabs?

Tabs have been outlawed since they are treated differently by different editors and tools. And since indentation is so critical to proper interpretation of YAML, this issue is just too tricky to even attempt. Indeed Guido van Rossum of Python has acknowledged that allowing TABs in Python source is a headache for many people and that were he to design Python again, he would forbid them.

  • proxies-filters 中必须有 white-regex 和 black-regex (筛选白名单和黑名单必须都有配置)不然会报错。正则匹配规则为``就可以匹配空项目了。
  • 组中若是只是包含hard-code无需匹配的组,例如前文的HK 组,也必须得有 proxies-filters 其中flat-proxies组中的项目必须带冒号。
  • 匹配还涉及到编码问题,如果获取到的代理组中文节点编码成了 unicode ,直接写中文是无法正确匹配的,需要单独设置 Unicode 的匹配,也就是说得考虑到两个情况,一个是节点名称为中文和另一个经过编码的名称,当然也可以统一编码,但是我目前还没找到相关的轮子。(我太菜了

其实这些折腾还不是我不会 python 才惹出来的事情,目前还在想能不能自己用 python 做一个 api 方便订阅。

clash相关科普

clash 是 Dreamacro 于 Jun 10, 2018 初次提交的,基于 go 的,按规则分流的 “隧道” 工具。
相关链接:

还很年轻的一个项目,还处于开发阶段;开源特性,基本主流全平台 GUI 支持,目前有 Clashx(Macos) clasha(android) Koolclash(Openwrt等)Clash for Windows 等,还有配合的 Dashboard (控制面板)。

  • 比较有名的规则支持有 lhie1 Conners Hua
  • 快捷编辑工具 Clasheditor

支持 $$ with obfs and v2ray plugin, snell, socks5 等,与传统的 按 ip 和 gfw 不同, clash 类似 surge, 按照域名ip等,将不同流量分配给不同的代理组,即策略组,可以参考Flinty Lemming 有更详细的解释。支持更多的新特性,比如 fake-ip 等等。

添加新评论

评论列表