首页 / 服务器监控

打造自己的 Clash 配置并提供订阅

2025-09-28 12:26:58服务器监控 5675

24/04/23 更新:修改示例配置文件为 Clash Meta (mihomo) 格式并微调规则

一般来说,机场提供的配置文件一键订阅会处理好代理和分流的问题,足够使用了。但由于包括但不限于:

有多个机场、或者有自建的节点想同时使用

机场的规则过于臃肿、或者不能涵盖自己需求

等原因,总有人想要写一份完全符合自己需要的配置。我就一直有这种想法,最近终于付诸实施,并且还顺便了解到如何将这样一份配置托管到网上,让不同设备可以通过链接直接订阅,因此在这里简单记录一下过程,方便有同样需求的人参考。

一、Proxy Provider 转换Proxy Provider 是 Clash 提供的一项功能,可以单独引入一些代理服务器信息,插入到当前配置文件中以供使用。有的机场直接提供了 Proxy Provider 链接,有的没有,在后一种情况下就需要将机场的配置文件订阅链接加以转换,提取出其中代理服务器部分。

Proxy Provider Converter 是一项提供这种转换的公开服务,可以直接使用。然而这样有两个问题:(1) 该服务的提供者可以看到你的订阅地址 (2) vercel.app 在国内无法访问。这样编写的配置文件需要可用代理才能下载代理信息,而又要下载了代理信息才能获得可用代理。(扔桌子.jpg)

好在开发者提供了简便的自行部署方法。根据网页上的说明部署到 Vercel 后就解决了上述第一个问题,而要解决第二个问题就需要有一个自己的域名,并在 DNS 解析处添加一项 CNAME 记录,指向 cname-china.vercel-dns.com,随后在 Vercel 自己部署的项目中找到 Settings-Domains,添加自己刚刚做好解析的完整域名,就能通过这个没有被墙的域名使用转换服务。如果你没有域名,又信任我不会偷看你的订阅的话,也可以使用我自己的这个:https://a.ppconverter.eu.org。

二、编写配置文件Clash Meta 配置文件的基本格式官方 Wiki 有足够详尽的说明,有兴趣可以自己阅读,这里就不重复解释了,直接提供一个通用的配置(注意需要在 proxy-providers 中粘贴自己转换得到的链接):

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142mode: rulelog-level: infoipv6: truegeodata-mode: truetcp-concurrent: true# dns: # DNS 一般无需设置,DNS 泄露的影响被夸大了。如果你坚持取消注释,请按实际情况调整内容# enable: false# prefer-h3: true# listen: 0.0.0.0:1053# ipv6: true# default-nameserver:# - 223.5.5.5# - 119.29.29.29# enhanced-mode: fake-ip# fake-ip-range: 198.18.0.1/16 # fake-ip 池设置# fake-ip-filter:# - "*"# - "+.lan"# - "+.local"# nameserver:# - https://1.1.1.1/dns-query# - https://8.8.8.8/dns-query# nameserver-policy:# "geosite:cn,private":# - https://doh.pub/dns-query# - https://dns.alidns.com/dns-querysniffer: enable: true force-dns-mapping: true parse-pure-ip: true override-destination: false sniff: HTTP: ports: [80, 8080-8880] override-destination: true TLS: ports: [443, 8443] QUIC: ports: [443, 8443] # force-domain: skip-domain: - Mijia Cloudproxy-providers: myproxy: type: http url: https://example.com # 粘贴 Proxy Provider Converter 提供的链接 interval: 172800 path: ./myproxy.yaml health-check: enable: true interval: 600 lazy: true url: http://www.gstatic.com/generate_204proxy-groups: - name: "PROXY" type: select use: - myproxy - name: "Ads" type: select proxies: - REJECT - PROXY - DIRECT - name: "Telegram" type: select use: - myproxy proxies: - PROXY - name: "YouTube" type: select use: - myproxy proxies: - PROXY - name: "GlobalMedia" type: select use: - myproxy proxies: - PROXY - name: "Steam" type: select use: - myproxy proxies: - PROXY - DIRECT - name: "OpenAI" type: select use: - myproxy proxies: - PROXY - name: "Others" type: select proxies: - PROXY - DIRECTrule-providers: streaming: type: http behavior: domain url: "https://mirror.ghproxy.com/https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/GlobalMedia/GlobalMedia_Domain.yaml" path: ./ruleset/globalmedia.yaml interval: 86400 steam: type: http behavior: classical url: 'https://mirror.ghproxy.com/https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Steam/Steam.yaml' path: ./ruleset/steam.yaml interval: 86400 steamCN: type: http behavior: classical url: 'https://mirror.ghproxy.com/https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/SteamCN/SteamCN.yaml' path: ./ruleset/steamCN.yaml interval: 86400rules: - GEOSITE,category-ads-all,Ads - GEOSITE,private,DIRECT - GEOSITE,apple-cn,DIRECT - GEOSITE,openai,OpenAI - GEOSITE,youtube,YouTube - RULE-SET,streaming,GlobalMedia - RULE-SET,steamCN,DIRECT - RULE-SET,steam,Steam - GEOSITE,category-games@cn,DIRECT - GEOSITE,geolocation-!cn,PROXY - GEOSITE,cn,DIRECT - GEOIP,telegram,Telegram - GEOIP,private,DIRECT - GEOIP,CN,DIRECT - MATCH,Others

我没有能力手写成千上万的规则,而是引入了 Geosite 以及与 Proxy Provider 类似的 Rule Provider,直接使用这些第三方规则集。Clash 的规则是从前到后依次匹配的,已经匹配到的流量就不会向后继续匹配。值得注意的情况有:

OpenAI 服务有单独的策略组,用于选择解锁节点;

尽管 streaming 规则集中包括了 YouTube,但我还是将 YouTube 规则单列出来放在前面,如果有送中节点的话可以免广告看 YouTube;

Steam 登录和下载一直是老大难问题。以前使用机场规则时,我的经验是(国区)需要在登录时将 Steam 和 Others 代理组都选为直连,登录后再改为需要的代理节点,这样才不会无法登录,下载节点是国内,同时也能访问好友列表、创意工坊等内容。如今自己写的规则先将 steamCN 规定为直连,再把剩下的 steam 流量用一个代理组选择代理节点,体验就基本完美了。

当然这只是一个追求最大通用性的内容,你也可以自行修改增加需要的规则。比如我实际使用的规则中还包括一条 DOMAIN,***.sharepoint.com,MyOneDrive,再在 proxy-groups 里添加 MyOneDrive 这一策略组和所需的节点,这样在我向 5T OneDrive 上传视频时可以切换为直连节约流量,观看时又打开代理来保障体验。不过请注意,出于规则匹配顺序的原因,一般自己修改的这些规则都应该放在较为靠前的位置。需要自行添加规则可优先到上述的 Geosite 中寻找,如果没有或对效果不满意,单独的规则集也可以在这些地方找到:

https://github.com/Loyalsoldier/clash-rules 简洁明了,注意需要设置为 behavior: domain

https://github.com/blackmatrix7/ios_rule_script/tree/master/rule/Clash 非常全面,behavior: classical

https://github.com/DivineEngine/Profiles/tree/master/Clash/RuleSet 知名选择,behavior: classical

这些规则集提供的 https://raw.githubusercontent.com 地址在国内通常无法访问,只需要在前面加上 https://mirror.ghproxy.com/,组成 https://mirror.ghproxy.com/https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/proxy.txt 这样的 URL 就好。

三、托管并订阅得到这样一份可以使用的配置文件后,当然可以在各个设备间手动拷贝并导入软件,但这样本身很麻烦,如果之后需要修改的话还要重复一遍流程,更加糟糕。因此,我们最好把它托管到互联网上,让各个设备订阅托管的网址,修改也只需要变更网络上这一份,完成后各个设备更新一下订阅就好。

打开 GitHub Gist,Gist description 不用填,Filename including extension... 填入包括拓展名的文件全名,如 myconfig.yaml,将配置文件的全部内容粘贴进去,最后点右下角绿色按钮发布。

然后打开刚刚发布的 Gist,点击右上角的 Raw,复制当前的的地址,如:

https://gist.githubusercontent.com/githubusername/1234567890/raw/0987654321/myconfig.yaml

将 /raw/ 之后的第二串随机数删除,得到形如:

https://gist.githubusercontent.com/githubusername/1234567890/raw/myconfig.yaml

的 URL,再在开头添加上 https://mirror.ghproxy.com/,随后在任意使用 Clash Meta 内核的 Clash 图形化客户端中添加这一订阅链接,等所需文件下载完成后就可以正常使用了。