前言
经常看到有朋友苦恼clash的订阅规则问题。由于机场的订阅规则并不能完全满足自己的要求,因此自己通常会修改配置文件加上自己的规则。然而当使用机场订阅配置时,自动更新之后会覆盖掉自己配置的规则,又需要重新更改,非常麻烦。今天又看到有朋友在吐槽:
clash 我一直有个痛点,机场的一键订阅都是直接下载一个配置文件,然后我自己又会定义一套规则,我想在自己定义的规则里引用机场配置文件的 proxy ,这样就能既保持机场 proxy 配置自动更新,又能符合自己的需求。 但是 clash 好像用不了多个配置文件,也就不能在一个配置文件里引用另一个配置文件的 proxy 了,不知道有没有解决方案。
实际上clash在Premium版本中已经提供了proxy-providers的功能,能够完美的解决这个问题。
原理
嫌麻烦的可以直接看后面的配置文件。
proxy-providers是提取指定URL或者指定文件中的proxies字段中的所有内容,即指提取订阅节点的信息,到当前文件中供我们使用。一下内容翻译自官方文档https://github.com/Dreamacro/clash/wiki/configuration#proxy-providers
proxy-providers为用户提供动态加载代理服务器列表的能力,而不是将它们硬编码到配置文件中。目前有两个来源的proxy-providers加载服务器列表:
http:冲突在启动时从指定的URL加载服务器列表。如果设置了interval选项,则冲突定期从远程拉取服务器列表。
file:冲突在启动时从文件系统的指定位置加载服务器列表。
运行状况检查可用于这两种模式,其工作方式与代理组中的fallback完全相同。服务器列表文件的配置格式也与主配置文件完全相同:
proxy-providers的格式为
proxy-providers:
jichang1: # provider的名称,后期会用到
type: http
path: ./profiles/1626513136686.yml # 保存在本地文件的名字,可以随便取
url: https://XXXX # 机场给你的订阅链接
interval: 36000 # 每36000秒更新一次订阅
health-check:
enable: true # 是否自动进行latency-test
url: http://www.gstatic.com/generate_204
interval: 3600
jichang2: # 我们可以同时使用多个订阅链接获取多个proxies
type: http
path: ./profiles/1626513136686.yml # 保存在本地文件的名字,可以随便取
url: https://XXXX # 机场给你的订阅链接
interval: 36000 # 每36000秒更新一次订阅
health-check:
enable: true # 是否自动进行latency-test
url: http://www.gstatic.com/generate_204
interval: 3600
这样我们就可以在后面使用
proxy-groups:
- name: Proxies
type: select
use: # 注意,这里是use而不是普通的proxies
- jichang1 # 这里就是上面proxy-providers中定义的名称
- jichang2
经过上面两个步骤之后,我们就可以在自己定义的配置文件中使用机场提供的节点了,规则完全由我们自己来制定。每次更新只会获取到节点信息,不会覆盖我们本地写的规则。
类似的,也有rule-providers的功能。从指定url处获取别人提供的规则,而不用自己来制定。
使用方法
- 在clash的配置文件夹中创建一个新的文件,并把下面的内容复制进去。
- 替换proxy-providers中的url为自己的订阅链接。
- 在clash中选择使用这个配置文件。
mixed-port: 7890
#---------------------------------------------------#
## 更新:2020-07-11 10:36:22
## 感谢:https://github.com/Hackl0us/SS-Rule-Snippet
#---------------------------------------------------#
# Linux 和 macOS 的 redir 代理端口
redir-port: 7892
# 允许局域网的连接
allow-lan: true
# 规则模式:Rule(规则) / Global(全局代理)/ Direct(全局直连)
mode: rule
# 设置日志输出级别 (默认级别:silent,即不输出任何内容,以避免因日志内容过大而导致程序内存溢出)。
# 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。
log-level: info
# Clash 的 RESTful API
external-controller: '0.0.0.0:9090'
# RESTful API 的口令
secret: ''
dns:
enable: true
ipv6: true
listen: '0.0.0.0:53'
use-hosts: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 202.120.224.6
- 114.114.114.114
- 223.5.5.5
- 'tcp://223.5.5.5'
fallback:
- 'tls://223.5.5.5:853'
- 'https://223.5.5.5/dns-query'
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4
# proxy provider start here
proxy-providers:
jichang1:
type: http
path: ./profiles/1626513136686.yml
url: https://XXXX
interval: 36000
health-check:
enable: true
url: http://www.gstatic.com/generate_204
interval: 3600
jichang2:
type: http
path: ./profiles/1626513102225.yml
url: https://XXX
interval: 36000
health-check:
enable: true
url: http://www.gstatic.com/generate_204
interval: 3600
jichang3:
type: http
path: ./profiles/1642516276761.yml
url: https://XXXX
interval: 36000
health-check:
enable: true
url: http://www.gstatic.com/generate_204
interval: 3600
# proxy provider end
proxies:
# socks5
- name: windowsServer
type: socks5
server: 10.127.78.177
port: 7890
# username: username
# password: password
# tls: true
# skip-cert-verify: true
# udp: true
- {name: 🇮🇪 中国-爱尔兰 IPLC C04, server: ir04.cathayroute.com, port: 33400, type: ss, cipher: rc4-md5, password: SRCFiB}
- {name: 🇭🇰 香港 油尖旺御金·国峯 名氣通電訊 C02, server: hkhe02.cathayroute.com, port: 33400, type: ss, cipher: rc4-md5, password: SRCFiB}
- {name: 🇮🇪 中国-爱尔兰 IPLC C03, server: ir03.cathayroute.com, port: 33400, type: ss, cipher: rc4-md5, password: SRCFiB}
- {name: 🇭🇰 香港 油尖旺御金·国峯 名氣通電訊 C09, server: hkhe09.cathayroute.com, port: 33400, type: ss, cipher: rc4-md5, password: SRCFiB}
- {name: 🇨🇳 中国-香港 IEPL Equinix HK8 C 02 1Gbps HBO TVB, server: sg12.cathayroute.com, port: 33400, type: ss, cipher: rc4-md5, password: SRCFiB, udp: true}
- {name: 🇨🇳 中国-爱尔兰 IPLC C05, server: ir05.cathayroute.com, port: 33400, type: ss, cipher: rc4-md5, password: SRCFiB, udp: true}
- {name: 🇨🇳 中国-香港 IPLC Equinix HK2 C 06 1Gbps HBO TVB, server: sg06.cathayroute.com, port: 33400, type: ss, cipher: rc4-md5, password: SRCFiB, udp: true}
proxy-groups:
- name: Proxies
type: select
proxies:
- 故障转移
- 自动选择
- 机场节点
- 手动节点
- name: 手动节点
type: select
proxies:
- 🇮🇪 中国-爱尔兰 IPLC C04
- 🇭🇰 香港 油尖旺御金·国峯 名氣通電訊 C02
- 🇮🇪 中国-爱尔兰 IPLC C03
- 🇭🇰 香港 油尖旺御金·国峯 名氣通電訊 C09
- 🇨🇳 中国-香港 IEPL Equinix HK8 C 02 1Gbps HBO TVB
- 🇨🇳 中国-爱尔兰 IPLC C05
- 🇨🇳 中国-香港 IPLC Equinix HK2 C 06 1Gbps HBO TVB
- name: 机场节点
type: select
proxies:
- 机场1
- 第二个机场
- 另一个机场
- name: 机场1
type: select
use:
- jichang1
- name: 第二个机场
type: select
use:
- jichang2
- name: 另一个机场
type: select
use:
- jichang3
- name: 故障转移
type: fallback
url: 'http://www.gstatic.com/generate_204'
interval: 7200
proxies:
- 机场1
- 第二个机场
- 另一个机场
- name: 自动选择
type: url-test
url: 'http://www.gstatic.com/generate_204'
interval: 300
use:
- jichang1
- jichang2
- jichang3
rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
icloud:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt"
path: ./ruleset/icloud.yaml
interval: 86400
apple:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt"
path: ./ruleset/apple.yaml
interval: 86400
google:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt"
path: ./ruleset/google.yaml
interval: 86400
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
private:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt"
path: ./ruleset/private.yaml
interval: 86400
gfw:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt"
path: ./ruleset/gfw.yaml
interval: 86400
greatfire:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/greatfire.txt"
path: ./ruleset/greatfire.yaml
interval: 86400
tld-not-cn:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt"
path: ./ruleset/tld-not-cn.yaml
interval: 86400
telegramcidr:
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt"
path: ./ruleset/telegramcidr.yaml
interval: 86400
cncidr:
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
path: ./ruleset/cncidr.yaml
interval: 86400
lancidr:
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt"
path: ./ruleset/lancidr.yaml
interval: 86400
applications:
type: http
behavior: classical
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt"
path: ./ruleset/applications.yaml
interval: 86400
rules:
# 这些是自定义规则,想要的可以继续加。
- DOMAIN-SUFFIX,cnki.net,DIRECT
- DOMAIN-SUFFIX,ieee.org,DIRECT
- DOMAIN-SUFFIX,acm.org,DIRECT
- DOMAIN-SUFFIX,imgtu.com,DIRECT
- DOMAIN-SUFFIX,dpdk.org,DIRECT
- DOMAIN-SUFFIX,freenom.com,DIRECT
- DOMAIN-SUFFIX,sciencedirect.com,DIRECT
- DOMAIN-SUFFIX,springer.com,DIRECT
- RULE-SET,applications,DIRECT
- DOMAIN,clash.razord.top,DIRECT
- DOMAIN,yacd.haishan.me,DIRECT
# 下面的规则是通过上面的rule-provider来确定的
- RULE-SET,private,DIRECT
- RULE-SET,reject,REJECT
- RULE-SET,icloud,DIRECT
- RULE-SET,apple,DIRECT
- RULE-SET,google,DIRECT
- RULE-SET,proxy,Proxies
- RULE-SET,direct,DIRECT
- RULE-SET,lancidr,DIRECT
- RULE-SET,cncidr,DIRECT
- RULE-SET,telegramcidr,Proxies
- GEOIP,,DIRECT
- GEOIP,CN,DIRECT
- MATCH,Proxies
附:clash相关概念学习
faik-ip: 来源:https://www.v2ex.com/t/841080
fake-ip 就是,发起连接时,你的 DNS 请求会被 clash 截获然后给你返回个假的 ip ,clash 会在内部记录这个 ip 和请求域名的对应关系。然后应用向这个假的 ip 发送请求的时候,请求会被 clash 截获,clash 通过反查表得到请求域名,然后(如果判定要走代理)把域名封装到某种其他协议然后往代理服务器发送,由代理服务器解析 DNS 。可以一定程度上避免 DNS 污染的影响。