-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathconfig.yaml
164 lines (144 loc) · 5.06 KB
/
config.yaml
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# v5.0.0 分流示例。
# 这个配置是为了展示各种分流规则!不是为了直接复制粘贴使用!!!!
# 有疑问先看注释,再翻 wiki。
# 日志
log:
level: info
file: ""
production: false
# api:
# http: 127.0.0.1:8888
# include: []
plugins:
# forward 可以将所有的 upstream 写一起,sequence 里按需调用 "$插件tag 上游tag..."。看下一条注释。
- tag: cache
type: cache
args:
size: 1024
lazy_cache_ttl: 0
# 自定义Hosts
- tag: hosts
type: hosts
args:
files:
- "./hosts"
- tag: upstreams
type: forward
args:
upstreams:
- tag: cloudflare_tls
addr: tls://1.0.0.1
enable_pipeline: true
idle_timeout: 50
insecure_skip_verify: true
- tag: google_tls
addr: tls://8.8.8.8
enable_pipeline: true
idle_timeout: 50
insecure_skip_verify: true
- tag: dnspod
addr: tls://1.12.12.12
enable_pipeline: true
idle_timeout: 30
insecure_skip_verify: true
- tag: aliyun
addr: tls://dns.alidns.com
bootstrap: 223.5.5.5
enable_pipeline: true
idle_timeout: 30
insecure_skip_verify: true
# 本地域名的规则
- tag: local_seq
type: sequence
args:
- exec: $upstreams dnspod aliyun # 只请求 tag 是 dnspod 的上游。不指定 tag 默认请求 $upstreams 中的全部上游。
# 替换 cloudflare 的 IP 成自己的最优 IP 的规则
# 没找到txt,不用这条
# - tag: fastest_cf
# type: sequence
# args:
# - matches: resp_ip &./geoip_cloudflare.txt # 是不是 cloudflare 的 IP
# exec: black_hole 1.1.1.1 ::1 # 用 black_hole 强制换成这些 IP 的应答。注意,这里的 IP 只是示例不是 cloudflare 的。
# 远程域名的规则
- tag: remote_seq
type: sequence
args:
- exec: prefer_ipv4 # 希望 remote 优先 ipv4.
- exec: $upstreams cloudflare_tls google_tls
# - exec: jump fastest_cf # jump 相对于把 fastest_cf 的规则链插到此处。
# 这个 sequence 转发请求到本地,返回只包含 cn IP 的应答。(过滤掉非 cn 的应答)
- tag: local_must_has_cn
type: sequence
args:
- exec: $upstreams dnspod aliyun
- matches: "!resp_ip &./geoip_cn.txt"
exec: drop_resp # 如果应答里没有 cn IP,丢掉。
# 利用 fallback 机制按 IP 分流。如果 local 服务器返回了 cn 的应答就接受,非 cn 的应答会被丢弃,使用 remote 服务器的应答。
- tag: fallback_ip
type: fallback
args:
primary: local_must_has_cn # 空应答(本地服务器返回了非cn IP然后应答被丢弃了)触发 fallback。
secondary: remote_seq # fallback 后就会使用 remote 的应答。
always_standby: true
##############################
# 配置主 sequence 规则,作为服务器的入口。
- tag: main
type: sequence
args:
- exec: $hosts
- exec: query_summary entry
- matches:
- qname &./geosite_category-ads-all.txt
exec: reject 0
- exec: $cache
- {matches: has_resp, exec: accept} # cache/hosts 等插件不再“命中记录自动跳过后续插件”,需用户自行判断是否有应答。
# 方便需要 ipset/nftables 用户定制流程。
# yaml 支持这种简写。
- matches:
- qname &./geosite_cn.txt # cn 域名
exec: goto local_seq # goto 到 local 规则,不在执行后续规则。
- matches:
- qname &./geosite_geolocation-!cn.txt # 非 cn 域名
exec: goto remote_seq # goto 到 remote 规则。
- exec: $fallback_ip # 剩余域名用 ip 分流。
#### 动态路由 + cache。
# 新版的cache只会将命中的应答放在请求,不再自动终止后续规则。所以需要动态路由时,可以将
# sequence 的转发操作用 !has_resp 短路。做到每次请求都能刷新路由表。
# - tag: s1
# type: sequence
# args:
# - exec: $cache
# - matches:
# - "!has_resp" # 上一步cache命中缓存有应答了就不转发了。
# exec: $forward_remote
# - exec: ipset ...... # ipset 每次请求都能执行。
#####
####### mark 使用示例
# mark 在 exec 内是打标。在 matches 内是匹配。
# mark 当作开关的示例。
# - tag: s1
# type: sequence
# args:
# - exec: mark 1 2 # 先打标。
# - matches:
# - mark 1
# exec: $cache # 有 mark 1 缓存会生效
# - matches:
# - mark 2
# exec: ecs 1.2.3.4 # 有 mark 2 请求会被附加 ecs
# ...
# - matches:
# - mark 3
# exec: jump fastest_cf # 没 mark 3 不会替换 cloudflare ip。
#### 最后配置 server........略
- tag: server
type: udp_server # 目前有 udp/tcp/http_server
args:
entry: main
listen: 0.0.0.0:53
- tag: server_tcp
type: tcp_server
args:
entry: main
listen: 0.0.0.0:53
#######