forked from Plutonium141/mosdns-config
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mosdns_config.yaml
138 lines (119 loc) · 4.99 KB
/
mosdns_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
log:
level: info
file: "/tmp/mosdns.txt"
#可能需要修改日志路径mosdns才能运行
data_providers:
- tag: geosite
file: /usr/share/v2ray/geosite.dat
#可能需要修改geosite文件的路径mosdns才能运行
auto_reload: true
- tag: geoip
file: /usr/share/v2ray/geoip.dat
#可能需要修改geoip文件的路径mosdns才能运行
auto_reload: true
plugins:
# 缓存
- tag: cache
type: cache
args:
size: 40960
lazy_cache_ttl: 259200
lazy_cache_reply_ttl: 10
# 保留应答的ip保留时间为ttl(秒)(实验性功能,可能没有效果)
- tag: save_reverse_lookup
type: reverse_lookup
args:
ttl: 120
# 转发至国内dns服务器的插件,请填写速度最快的dns服务器,比如运营商的dns建议使用udp协议,一两个就行不用太多
- tag: forward_local
type: fast_forward
args:
upstream:
- addr: 223.5.5.5
- addr: 114.114.114.114
# 转发至海外dns服务器的插件,填写海外的dns服务器,建议使用1.1.1.1或者8.8.8.8,一两个就行,不使用代理时推荐使用tls或者https请求均可防污染防泄露(https类型可能无法使用,可以改用tls,如果可以确保海外组dns可以走代理,那么用哪个协议都可以)
- tag: forward_remote
type: fast_forward
args:
upstream:
- addr: https://1.1.1.1/dns-query
idle_timeout: 60
#idle_timeout为空连接复用时间(秒)可以加快短时间内的多次https dns请求时间,原理:建立连接后保持一段时间再断开如有dns请求可直接使用该连接无需频繁握手
- addr: tls://8.8.8.8:853
enable_pipeline: true
#enable_pipeline为针对tcp与dns over tls的连接复用开关,可以减少握手次数降低延迟
# 匹配国内域名的插件
- tag: query_is_local_domain
type: query_matcher
args:
domain:
- 'provider:geosite:cn'
# 匹配非国内域名的插件
- tag: query_is_non_local_domain
type: query_matcher
args:
domain:
- 'provider:geosite:geolocation-!cn'
# 匹配国内 ip 的插件
- tag: response_has_local_ip
type: response_matcher
args:
ip:
- 'provider:geoip:cn'
# 匹配dns泄露测试网站域名
- tag: query_is_dnsleak_domain
type: query_matcher
args:
domain:
- 'domain:browserleaks.org'
- 'domain:dnsleaktest.com'
- 'domain:dnsleak.asn247.net'
- 'domain:whrq.net'
- 'domain:ipleak.net'
# 主要的运行逻辑插件
# sequence 插件中调用的插件 tag 必须在 sequence 前定义(就是上面),否则 sequence 找不到对应插件。
- tag: main_sequence
type: sequence
args:
exec:
# 保留ip到dns记录方便ip反查dns
- save_reverse_lookup
# 把部分检查dns泄露的测试域名直接分流至海外dns组,看着舒服点
# 因为网站测试用的随机生成域名很可能不在geosite数据库里,所以会使用fallback机制查询,最后导致无论如何测试都存在dns泄露的情况(实际情况是大部分的域名都已经分流)
- if: query_is_dnsleak_domain
exec:
- _prefer_ipv4
- forward_remote
- _return
# 缓存,如果已经有其他程序开启了dns缓存则应该关闭(默认已用井号注释,如需启用请删除井号)
#- cache
# 已知的国内域名用本地dns组解析
- if: query_is_local_domain
exec:
- forward_local #交给本地dns组处理
- _return
# 已知的非国内域名用海外dns组解析
- if: query_is_non_local_domain
exec:
- _prefer_ipv4 #优先ipv4,如果域名为ipv4和ipv6双栈则抛弃ipv6结果
- forward_remote #交给海外dns组处理
- _return
# 剩下的未知域名不再分流,将采用fallback机制选择最合适的结果
# 国内组与海外组并发查询域名,如果结果不是国内ip并且为有效应答则丢弃国内dns组的结果
- primary:
- forward_local #交给国内dns组处理
- if: "(! response_has_local_ip) && [_response_valid_answer]"
exec:
- _drop_response # 符合条件将丢弃结果
secondary:
- _prefer_ipv4 #优先ipv4,同上
- forward_remote #交给海外dns组处理
fast_fallback: 200
# 单位: 毫秒(ms)这里建议设置成本地dns服务器正常延时的 2~5 倍。
# 如果国内dns组返回结果时间超过设定值将使用海外dns组的解析结果(如果本地dns组应答被丢弃相当于没有回应),如果本地dns超过这个时间还没响应,可以认为本地的上游dns出现了问题
servers:
- exec: main_sequence
listeners:
- protocol: udp
addr: 0.0.0.0:5301
#mosdns监听的协议,地址和端口,可以有多个 默认监听协议udp任意ip的5301端口