推荐使用 Subconverter
有机会大概会聊聊我自己的配置

已过期文章 [***项目主页***](https://webapi.kr328.app/) ## 大致结构 1. 预处理器配置 2. clash 基础配置 3. 代理组匹配 4. 规则编辑合并 ## 配置文件和详解 作者目前有提供两个方式,一个是 tgbot 的托管方式,一个是完全本地的 Python 版本。 ### tgbot 配置 @kr328_webapi_bot * 针对预处理器的配置 ```yaml preprocessor: version: 1 # 目标预处理器版本号 目前仅能使用 1 ``` * clash 的基础配置,这里的内容不会被处理 ```yml 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.* - cfw-latency-timeout: 5000 ``` * 代理相关配置 ```yml 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 ``` * 规则相关 ```yml 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 地址](https://github.com/Kr328/clash-config-preprocessor) 此版本基于 python3 建议 python3.7 及以上版本。 ```bash git clone (https://github.com/Kr328/clash-config-preprocessor.git cd ./ckash-config-preprocessor # 安装依赖 pip install -r requirements.txt ``` 我的配置 ```yaml 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.* - cfw-latency-timeout: 5000 ``` ```yml 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: '' ``` ```yml 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](https://github.com/Dreamacro) 于 Jun 10, 2018 初次提交的,基于 go 的,按规则分流的 “隧道” 工具。 相关链接: * [Github](https://github.com/Dreamacro/clash) * [文档](https://clash.gitbook.io/doc/) 还很年轻的一个项目,还处于开发阶段;开源特性,基本主流全平台 GUI 支持,目前有 Clashx(Macos) clasha(android) Koolclash(Openwrt等)Clash for Windows 等,还有配合的 [Dashboard](http://clash.razord.top/) (控制面板)。 * 比较有名的规则支持有 lhie1 Conners Hua * 快捷编辑工具 [Clasheditor](https://clash.skk.moe/) 支持 $$ with obfs and v2ray plugin, snell, socks5 等,与传统的 按 ip 和 gfw 不同, clash 类似 surge, 按照域名ip等,将不同流量分配给不同的代理组,即策略组,可以参考[Flinty Lemming](https://www.flinty.moe/clash-group/) 有更详细的解释。支持更多的新特性,比如 fake-ip 等等。
最后修改:2022 年 03 月 19 日
如果觉得我的文章对你有用,请随意赞赏