ShellCrash 搭载 mihomo 内核本地配置自定义规则和代理组-ruleset 方案
此方案适用于 Clash,搭载 mihomo 内核,采用 `RULE-SET` 规则搭配 .yaml、.text 和 .mrs 规则集合文件
前言:
- 本教程只适用于 ShellCrash
- 本教程仅适合白名单模式(没有命中规则的网络流量统统使用代理,适用于服务器线路网络质量稳定、快速,不缺服务器流量的用户)
- 本教程最终效果媲美《生成带有自定义策略组和规则的 Clash 配置文件直链-ruleset 方案》(策略组更直观,操作更方便),但不依赖于网络
- 若仅配置自定义策略组和规则,可直接跳过第《二》步
- 所有步骤完成后,请连接 SSH 执行命令
$CRASHDIR/start.sh restart
后生效 - 推荐使用 Visual Studio Code 等专业编辑器来修改配置文件
一、 导入 mihomo 内核
可参考《ShellCrash 搭载 mihomo 内核的配置-ruleset 方案/导入 mihomo 内核》里的步骤进行操作
二、 导入配置文件
进入 ShellCrash -> 6 导入配置文件 -> 1 在线生成 meta 配置文件 -> 4 选取在线配置规则模版,选择 4 ACL4SSR 极简版(适合自建节点)
进入 ShellCrash -> 6 导入配置文件 -> 1 在线生成 meta 配置文件,输入订阅链接后回车,再输入“1”并回车即可
三、 自定义策略组和规则
1. 自定义 others.yaml(用于编写自定义的锚点、入站、proxy-providers
、sub-rules
、rule-set
、script 等功能)
连接 SSH 后执行命令 vi $CRASHDIR/yamls/others.yaml
,按一下 Ins 键(Insert 键),粘贴如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
## 代理集合(获取机场订阅链接内的所有节点)
proxy-providers:
🛫 我的机场 1:
type: http
## 机场订阅链接,使用 Clash 链接
url: "https://example.com/xxx/xxx&flag=clash"
path: ./proxies/airport1.yaml
interval: 86400
## 初步筛选需要的节点,可有效减轻路由器压力,支持正则表达式,不筛选可删除此配置项
filter: "(?i)港|hk|hongkong|hong kong|台|tw|taiwan|日本|jp|japan|新|sg|singapore|美|us|unitedstates|united states"
## 初步排除不需要的节点,支持正则表达式,若不排除可删除此配置项
exclude-filter: "高倍|×10"
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 600
override:
## 为节点名称添加固定前缀,如节点名称原为“香港节点”会变成“🛫 我的机场 1-香港节点”;推荐有多个机场时使用
additional-prefix: "🛫 我的机场 1-"
## 为节点名称添加固定后缀,如节点名称原为“香港节点”会变成“香港节点-🛫 我的机场 1”;推荐有多个机场时使用
additional-suffix: "-🛫 我的机场 1"
🛫 我的机场 2:
type: http
url: "https://example.com/xxx/xxx&flag=clash"
path: ./proxies/airport2.yaml
interval: 86400
filter: "(?i)港|hk|hongkong|hong kong|台|tw|taiwan|日本|jp|japan|新|sg|singapore|美|us|unitedstates|united states"
exclude-filter: "高倍|×10"
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 600
override:
## 为节点名称添加固定前缀,如节点名称原为“香港节点”会变成“🛫 我的机场 2-香港节点”;推荐有多个机场时使用
additional-prefix: "🛫 我的机场 2-"
## 为节点名称添加固定后缀,如节点名称原为“香港节点”会变成“香港节点-🛫 我的机场 2”;推荐有多个机场时使用
additional-suffix: "-🛫 我的机场 2"
## 规则集(yaml 文件每天自动更新)
rule-providers:
private:
type: http
behavior: domain
format: mrs
path: ./rules/private.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/private.mrs"
interval: 86400
ads:
type: http
behavior: domain
format: mrs
path: ./rules/ads.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/ads.mrs"
interval: 86400
microsoft-cn:
type: http
behavior: domain
format: mrs
path: ./rules/microsoft-cn.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/microsoft-cn.mrs"
interval: 86400
apple-cn:
type: http
behavior: domain
format: mrs
path: ./rules/apple-cn.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/apple-cn.mrs"
interval: 86400
google-cn:
type: http
behavior: domain
format: mrs
path: ./rules/google-cn.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/google-cn.mrs"
interval: 86400
games-cn:
type: http
behavior: domain
format: mrs
path: ./rules/games-cn.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/games-cn.mrs"
interval: 86400
ai:
type: http
behavior: domain
format: mrs
path: ./rules/ai.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/ai.mrs"
interval: 86400
networktest:
type: http
behavior: classical
format: text
path: ./rules/networktest.list
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/networktest.list"
interval: 86400
proxy:
type: http
behavior: domain
format: mrs
path: ./rules/proxy.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/proxy.mrs"
interval: 86400
cn:
type: http
behavior: domain
format: mrs
path: ./rules/cn.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/cn.mrs"
interval: 86400
telegramip:
type: http
behavior: ipcidr
format: mrs
path: ./rules/telegramip.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/telegramip.mrs"
interval: 86400
privateip:
type: http
behavior: ipcidr
format: mrs
path: ./rules/privateip.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/privateip.mrs"
interval: 86400
cnip:
type: http
behavior: ipcidr
format: mrs
path: ./rules/cnip.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/cnip.mrs"
interval: 86400
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车
2. 自定义 proxies.yaml(用于添加自定义出站代理)
连接 SSH 后执行命令 vi $CRASHDIR/yamls/proxies.yaml
,按一下 Ins 键(Insert 键),粘贴如下内容:
注:
- 此处以“vless”节点类型为例,其它节点类型写法可参考通用字段
- 必须在 proxy-groups.yaml 里添加自定义的节点才可以正常选择和使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- name: 🆓 免费节点
## 节点类型
type: vless
## 代理节点服务器(域名/IP)
server: example.com
port: 443
uuid: {uuid}
network: ws
tls: true
udp: false
sni: example.com
client-fingerprint: chrome
ws-opts:
path: "/?ed=2048"
headers:
host: example.com
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车
3. 自定义 proxy-groups.yaml(用于添加自定义策略组)
连接 SSH 后执行命令 vi $CRASHDIR/yamls/proxy-groups.yaml
,按一下 Ins 键(Insert 键),粘贴如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
## 策略组
## 手动选择国家或地区节点;根据“国家或地区策略组”名称对 `proxies` 值进行增删改,须一一对应
- name: 🈯 节点指定
type: select
proxies:
- 🇭🇰 香港节点
- 🇹🇼 台湾节点
- 🇯🇵 日本节点
- 🇸🇬 新加坡节点
- 🇺🇸 美国节点
## 添加 proxies.yaml 中的自定义节点
- 🆓 免费节点
## 选择 `🎯 全球直连` 为测试本地网络(运营商网络速度和 IPv6 支持情况),可选择其它节点用于测试机场节点速度和 IPv6 支持情况
- name: 📈 网络测试
type: select
proxies:
- 🎯 全球直连
- 🇭🇰 香港节点
- 🇹🇼 台湾节点
- 🇯🇵 日本节点
- 🇸🇬 新加坡节点
- 🇺🇸 美国节点
## 添加 proxies.yaml 中的自定义节点
- 🆓 免费节点
- name: 🤖 人工智能
type: select
proxies:
- 🇭🇰 香港节点
- 🇹🇼 台湾节点
- 🇯🇵 日本节点
- 🇸🇬 新加坡节点
- 🇺🇸 美国节点
- name: 🎮 游戏服务
type: select
proxies:
- 🎯 全球直连
- 🈯 节点指定
- name: 🪟 微软服务
type: select
proxies:
- 🎯 全球直连
- 🈯 节点指定
- name: 🇬 谷歌服务
type: select
proxies:
- 🎯 全球直连
- 🈯 节点指定
- name: 🍎 苹果服务
type: select
proxies:
- 🎯 全球直连
- 🈯 节点指定
- name: 🇨🇳 直连域名
type: select
proxies:
- 🎯 全球直连
- 🈯 节点指定
- name: 🇨🇳 直连 IP
type: select
proxies:
- 🎯 全球直连
- 🚀 节点选择
- name: 🪜 代理域名
type: select
proxies:
- 🈯 节点指定
- 🎯 全球直连
- name: 📲 电报消息
type: select
proxies:
- 🚀 节点选择
- name: 🔒 私有网络
type: select
proxies:
- 🎯 全球直连
- name: 🛑 广告拦截
type: select
proxies:
- REJECT
## ----------------国家或地区策略组---------------------
## 自动选择节点,即按照 url 测试结果使用延迟最低的节点
- name: 🇭🇰 香港节点
type: url-test
## 测试后容差大于 50ms 才会切换到延迟低的那个节点
tolerance: 50
include-all-providers: true
## 筛选出“香港”节点,支持正则表达式
filter: "(?i)港|hk|hongkong|hong kong"
- name: 🇹🇼 台湾节点
type: url-test
tolerance: 50
include-all-providers: true
filter: "(?i)台|tw|taiwan"
- name: 🇯🇵 日本节点
type: url-test
tolerance: 50
include-all-providers: true
filter: "(?i)日本|jp|japan"
- name: 🇸🇬 新加坡节点
type: url-test
tolerance: 50
include-all-providers: true
filter: "(?i)新|sg|singapore"
- name: 🇺🇸 美国节点
type: url-test
tolerance: 50
include-all-providers: true
filter: "(?i)美|us|unitedstates|united states"
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车
4. 自定义 rules.yaml(用于添加自定义规则)
连接 SSH 后执行命令 vi $CRASHDIR/yamls/rules.yaml
,按一下 Ins 键(Insert 键),粘贴如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 规则
## 自定义规则优先放前面
- RULE-SET,private,🔒 私有网络
- RULE-SET,ads,🛑 广告拦截
- RULE-SET,microsoft-cn,🪟 微软服务
- RULE-SET,apple-cn,🍎 苹果服务
- RULE-SET,google-cn,🇬 谷歌服务
- RULE-SET,games-cn,🎮 游戏服务
- RULE-SET,ai,🤖 人工智能
- RULE-SET,networktest,📈 网络测试
- RULE-SET,proxy,🪜 代理域名
- RULE-SET,cn,🇨🇳 直连域名
- RULE-SET,telegramip,📲 电报消息,no-resolve
- RULE-SET,privateip,🔒 私有网络,no-resolve
- RULE-SET,cnip,🇨🇳 直连 IP
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车
贴一张面板效果图(举个例子:我手动选择 🇹🇼 台湾节点
策略组,而该策略组是将机场内所有台湾节点按照 url 测试结果自动选择延迟最低的台湾节点):
四、 修改策略组或规则
举例:我的机场包含有 2 个节点,分别是新加坡节点和日本节点,我想让 Netflix 自动选择延迟最低的新加坡节点,哔哩哔哩可以手动选择日本任一节点
注:
- 一定要保证缩进对齐!一定要保证缩进对齐!一定要保证缩进对齐!
- 以下只是节选,请酌情套用
1. 修改 others.yaml 文件
连接 SSH 后执行命令 vi $CRASHDIR/yamls/others.yaml
,按一下 Ins 键(Insert 键),在 rule-providers
内粘贴如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
## 规则集(yaml 文件每天自动更新)
netflix:
type: http
behavior: domain
format: mrs
path: ./rules/netflix.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/netflix.mrs"
interval: 86400
netflixip:
type: http
behavior: ipcidr
format: mrs
path: ./rules/netflixip.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/netflixip.mrs"
interval: 86400
bilibili:
type: http
behavior: domain
format: mrs
path: ./rules/bilibili.mrs
url: "https://github.com/DustinWin/ruleset_geodata/releases/download/clash-ruleset/bilibili.mrs"
interval: 86400
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车
2. 修改 proxy-groups.yaml 文件
连接 SSH 后执行命令 vi $CRASHDIR/yamls/proxy-groups.yaml
,按一下 Ins 键(Insert 键),粘贴如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
## 策略组
## 默认选择新加坡节点
- name: 🎥 奈飞视频
type: select
proxies:
- 🇸🇬 新加坡节点
## 默认选择日本节点,也可切换到直连
- name: 📺 哔哩哔哩
type: select
proxies:
- 🇯🇵 日本节点
- 🎯 全球直连
## 自动选择延迟最低的新加坡节点;容差大于 50ms 才会切换到延迟低的那个节点
- name: 🇸🇬 新加坡节点
type: url-test
tolerance: 50
include-all-providers: true
filter: "(?i)(新|sg|singapore)"
## 手动选择日本任一节点
- name: 🇯🇵 日本节点
type: select
include-all-providers: true
filter: "(?i)日本|jp|japan"
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车
3. 修改 rules.yaml 文件
连接 SSH 后执行命令 vi $CRASHDIR/yamls/rules.yaml
,按一下 Ins 键(Insert 键),优先在最上方粘贴如下内容:
1
2
3
4
5
6
## 规则
## 自定义规则优先放前面
- RULE-SET,netflix,🎥 奈飞视频
- RULE-SET,netflixip,🎥 奈飞视频,no-resolve
- RULE-SET,bilibili,📺 哔哩哔哩
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车
- 注:若有其它需求,可以进入 blackmatrix7/ios_rule_script/rule/Clash 搜索关键字,通过能够搜索到的关键字来编写策略组和规则(推荐使用“xxx_Classical.yaml”文件,
rule-provider
内须配置behavior: classical
)
五、 添加小规则
仅添加特定网址走直连或走代理,连接 SSH 后执行命令 vi $CRASHDIR/yamls/rules.yaml
,按一下 Ins 键(Insert 键),在最上方粘贴如下内容:
注:
- 以下内容只是举例,请根据自身需要进行增删改
- 其它规则请参考《mihomo Wiki》
1
2
3
4
5
6
7
8
## 规则
## 以 googleapis.cn 为后缀(包括 googleapis.cn)的所有域名走代理
- DOMAIN-SUFFIX,googleapis.cn,🚀 节点选择
## 与哔哩哔哩相关的所有域名走直连
- GEOSITE,bilibili,DIRECT
## 含有 ipv6 关键字的所有域名走直连
- DOMAIN-KEYWORD,ipv6,DIRECT
按一下 Esc 键(退出键),输入英文冒号 :
,继续输入 wq
并回车