You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
我也分享一个,适用于fakeip网关方案。
mosdns监听5454,在5454端口提供服务
forward_cf 发送带ecs信息的dns请求到8.8.4.4,根据返回的结果判断是否存在cn ip
forward_xinfeng_udp 专门给apple域名服务的dns,为本地dns,优化ios访问速度
forward_local 给cn域名提供服务的dns
forward_remote sing-box或者clash的dns服务端口,国外的域名和没有cn ip返回的域名,都发给此dns
dns处理逻辑
1:geosite_cn域名列表中的,发送到forward_local
2:geosite_apple域名列表中的,发送到forward_xinfeng_udp
3:geosite_no_cn域名列表中的,发送到forward_remote
4:其它域名的逻辑在如下代码中实现,先发送带ecs信息的dns请求至forward_cf,判断结果是否为rcode 2(无返回结果),如果没有结果,
就回落到forward_local解析;然后判断是否有中国ip(在geoip_cn中),如果有结果,就回落到forward_local解析;如果不是以上2种情况,
则发到remote_sequence进行解析。
tag: fallback_sequence
type: sequence
args:
exec: $forward_cf_upstream
matches: "rcode 2"
exec: goto local_sequence
matches: "resp_ip $geoip_cn"
exec: goto local_sequence
exec: $remote_sequence
具体的配置
level: error
file: "/etc/mosdns/mosdns.log"
http: "0.0.0.0:9091"
include: []
plugins:
tag: geosite_cn
type: domain_set
args:
files:
- "/var/mosdns/geosite_cn.txt"
tag: geoip_cn
type: ip_set
args:
files:
- "/etc/mosdns/unpack/geoip_cn.txt"
tag: geosite_apple
type: domain_set
args:
files:
- "/var/mosdns/geosite_apple.txt"
tag: geosite_no_cn
type: domain_set
args:
files:
- "/var/mosdns/geosite_geolocation-!cn.txt"
tag: whitelist
type: domain_set
args:
files:
- "/etc/mosdns/rule/whitelist.txt"
tag: blocklist
type: domain_set
args:
files:
- "/etc/mosdns/rule/blocklist.txt"
tag: greylist
type: domain_set
args:
files:
- "/etc/mosdns/rule/greylist.txt"
tag: ddnslist
type: domain_set
args:
files:
- "/etc/mosdns/rule/ddnslist.txt"
tag: hosts
type: hosts
args:
files:
- "/etc/mosdns/rule/hosts.txt"
tag: redirect
type: redirect
args:
files:
- "/etc/mosdns/rule/redirect.txt"
tag: adlist
type: domain_set
args:
files:
- "/etc/mosdns/unpack/disable-ads.txt"
tag: local_ptr
type: domain_set
args:
files:
- "/etc/mosdns/rule/local-ptr.txt"
tag: lazy_cache
type: cache
args:
size: 20000000
lazy_cache_ttl: 259200000
dump_file: /etc/mosdns/cache.dump
dump_interval: 3600
tag: reject_3
type: sequence
args:
exec: reject 3
tag: reject_blocklist
type: sequence
args:
exec: query_summary reject_blocklist
exec: $reject_3
tag: reject_adlist
type: sequence
args:
exec: query_summary reject_adlist
exec: $reject_3
tag: reject_ptrlist
type: sequence
args:
exec: query_summary reject_ptrlist
exec: $reject_3
tag: reject_qtype65
type: sequence
args:
exec: query_summary reject_qtype65
exec: $reject_3
tag: forward_cf
type: forward
args:
concurrent: 3
upstreams:
- addr: "tls://8.8.4.4:853"
socks5: "10.10.10.4:7891"
enable_pipeline: false
insecure_skip_verify: false
idle_timeout: 30
enable_http3: false
tag: forward_xinfeng_udp
type: forward
args:
concurrent: 2
upstreams:
- addr: "127.0.0.1:8055"
tag: forward_local
type: forward
args:
concurrent: 1
upstreams:
- addr: "127.0.0.1:8055"
enable_pipeline: false
insecure_skip_verify: false
idle_timeout: 10
tag: forward_remote
type: forward
args:
concurrent: 1
upstreams:
- addr: "10.10.10.4:7874"
enable_pipeline: false
insecure_skip_verify: false
idle_timeout: 10
enable_http3: false
tag: modify_ttl
type: sequence
args:
exec: ttl 0-0
tag: modify_ddns_ttl
type: sequence
args:
exec: ttl 5-5
tag: local_sequence
type: sequence
args:
exec: $forward_local
tag: remote_sequence
type: sequence
args:
exec: prefer_ipv4
exec: $forward_remote
tag: forward_cf_upstream
type: sequence
args:
exec: prefer_ipv4
exec: ecs 119.167.219.177
exec: $forward_cf
tag: has_resp_sequence
type: sequence
args:
matches: qname $ddnslist
exec: $modify_ddns_ttl
matches: "!qname $ddnslist"
exec: $modify_ttl
matches: has_resp
exec: accept
tag: query_is_ddns_domain
type: sequence
args:
matches: qname $ddnslist
exec: $local_sequence
tag: query_is_local_domain
type: sequence
args:
matches: qname $geosite_cn
exec: $local_sequence
tag: query_is_no_local_domain
type: sequence
args:
matches: qname $geosite_no_cn
exec: $remote_sequence
tag: query_is_whitelist_domain
type: sequence
args:
matches: qname $whitelist
exec: $local_sequence
tag: query_is_greylist_domain
type: sequence
args:
matches: qname $greylist
exec: $remote_sequence
tag: query_is_reject_domain
type: sequence
args:
matches: qname $blocklist
exec: $reject_blocklist
matches: qname $adlist
exec: $reject_adlist
matches:
qtype 12
qname $local_ptr
exec: $reject_ptrlist
matches: qtype 65
exec: $reject_qtype65
tag: query_is_non_local_ip
type: sequence
args:
exec: $forward_local
matches: "!resp_ip $geoip_cn"
exec: drop_resp
tag: apple_domain_fallback
type: fallback
args:
primary: query_is_non_local_ip
secondary: forward_xinfeng_udp
threshold: 100
always_standby: true
tag: query_is_apple_domain
type: sequence
args:
matches: "!qname $geosite_apple"
exec: return
exec: $apple_domain_fallback
tag: fallback_sequence
type: sequence
args:
exec: $forward_cf_upstream
matches: "rcode 2"
exec: goto local_sequence
matches: "resp_ip $geoip_cn"
exec: goto local_sequence
exec: $remote_sequence
tag: main_sequence
type: sequence
args:
exec: $hosts
exec: jump has_resp_sequence
matches:
"!qname $ddnslist"
"!qname $blocklist"
"!qname $adlist"
"!qname $local_ptr"
exec: $lazy_cache
exec: $redirect
exec: jump has_resp_sequence
exec: $query_is_apple_domain
exec: jump has_resp_sequence
exec: $query_is_ddns_domain
exec: jump has_resp_sequence
exec: $query_is_whitelist_domain
exec: jump has_resp_sequence
exec: $query_is_reject_domain
exec: jump has_resp_sequence
exec: $query_is_greylist_domain
exec: jump has_resp_sequence
exec: $query_is_local_domain
exec: jump has_resp_sequence
exec: $query_is_no_local_domain
exec: jump has_resp_sequence
exec: $fallback_sequence
tag: udp_server
type: udp_server
args:
entry: main_sequence
listen: ":5454"
tag: tcp_server
type: tcp_server
args:
entry: main_sequence
listen: ":5454"
- exec: $private_sequence
- matches: "resp_ip $geoip_cn"
exec: goto local_sequence # 这句也可以不要
# 好像应该把- exec: accept 这一行改成下面的,意思是,如果返回国内ip就去local_sequence ,不是就丢弃,触发secondary
- exec: drop_resp
或者这样直接点
- exec: $local_sequence
- matches: "!resp_ip $geoip_cn" # 取反,不是国内,直接丢弃
exec: drop_resp
# fallback
- tag: fallback
type: fallback
args:
primary: fallback_sequence
secondary: remote_sequence
threshold: 2000
always_standby: true