luci-app-mosdns: update mosdns v4.x support

This commit is contained in:
sbwml 2022-06-29 03:50:27 +08:00
parent 4ec1be84de
commit 6ebb46c873
9 changed files with 322 additions and 216 deletions

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-mosdns
PKG_VERSION:=1.3
PKG_VERSION:=1.4
PKG_RELEASE:=1
LUCI_TITLE:=LuCI Support for mosdns

View File

@ -60,15 +60,20 @@ cache_size.datatype = "and(uinteger,min(0))"
cache_size.default = "200000"
cache_size:depends( "configfile", "/etc/mosdns/config.yaml")
cache_size = s:option(Value, "cache_survival_time", translate("Cache Survival Time"))
cache_size.datatype = "and(uinteger,min(0))"
cache_size.default = "259200"
cache_size:depends( "configfile", "/etc/mosdns/config.yaml")
minimal_ttl = s:option(Value, "minimal_ttl", translate("Minimum TTL"))
minimal_ttl.datatype = "and(uinteger,min(1))"
minimal_ttl.datatype = "and(uinteger,min(0))"
minimal_ttl.datatype = "and(uinteger,max(3600))"
minimal_ttl.default = "300"
minimal_ttl.default = "0"
minimal_ttl:depends( "configfile", "/etc/mosdns/config.yaml")
maximum_ttl = s:option(Value, "maximum_ttl", translate("Maximum TTL"))
maximum_ttl.datatype = "and(uinteger,min(1))"
maximum_ttl.default = "3600"
maximum_ttl.datatype = "and(uinteger,min(0))"
maximum_ttl.default = "0"
maximum_ttl:depends( "configfile", "/etc/mosdns/config.yaml")
redirect = s:option(Flag, "redirect", translate("Enable DNS Forward"), translate("Forward Dnsmasq Domain Name resolution requests to MosDNS"))
@ -77,7 +82,7 @@ redirect.default = true
adblock = s:option(Flag, "adblock", translate("Enable DNS ADblock"))
adblock:depends( "configfile", "/etc/mosdns/config.yaml")
adblock.default = true
adblock.default = false
config = s:option(TextValue, "manual-config")
config.description = translate("<font color=\"ff0000\"><strong>View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need.</strong></font>")

View File

@ -92,13 +92,16 @@ msgid "Remote DNS"
msgstr "远程 DNS"
msgid "DNS Cache Size"
msgstr "DNS 缓存大小"
msgstr "DNS 缓存大小(条)"
msgid "Cache Survival Time"
msgstr "缓存生存时间(秒)"
msgid "Minimum TTL"
msgstr "覆盖最小 TTL 值"
msgstr "覆盖最小 TTL 值禁用0"
msgid "Maximum TTL"
msgstr "覆盖最大 TTL 值"
msgstr "覆盖最大 TTL 值禁用0"
msgid "Logs"
msgstr "日志"

View File

@ -8,11 +8,12 @@ config mosdns 'mosdns'
option redirect '1'
option adblock '0'
option configfile '/etc/mosdns/config.yaml'
option log_level 'error'
option log_level 'info'
option logfile '/tmp/mosdns.log'
option remote_dns1 'tls://8.8.8.8'
option remote_dns2 'tls://1.1.1.1'
option cache_size '200000'
option minimal_ttl '300'
option maximum_ttl '3600'
option cache_survival_time '259200'
option minimal_ttl '0'
option maximum_ttl '0'

View File

@ -14,6 +14,22 @@ inital_conf() {
config_get "enabled" "mosdns" "enabled" "0"
}
init_yaml() {
log_level=$(uci -q get mosdns.mosdns.log_level)
log_file=$(uci -q get mosdns.mosdns.logfile)
listen_port=$(uci -q get mosdns.mosdns.listen_port)
cache_size=$(uci -q get mosdns.mosdns.cache_size)
cache_survival_time=$(uci -q get mosdns.mosdns.cache_survival_time)
minimal_ttl_custom=$(uci -q get mosdns.mosdns.minimal_ttl)
maximum_ttl_custom=$(uci -q get mosdns.mosdns.maximum_ttl)
local_dns1=$(/usr/share/mosdns/dns.sh 0)
local_dns2=$(/usr/share/mosdns/dns.sh 1)
remote_dns1=$(uci -q get mosdns.mosdns.remote_dns1)
remote_dns2=$(uci -q get mosdns.mosdns.remote_dns2)
adblock=$(/usr/share/mosdns/ad_domain.sh)
sed "s,log_level,$log_level,g;s,log_file,$log_file,g;s,listen_port,$listen_port,g;s,cache_size,$cache_size,g;s,cache_survival_time,$cache_survival_time,g;s,minimal_ttl_custom,$minimal_ttl_custom,g;s,maximum_ttl_custom,$maximum_ttl_custom,g;s,local_dns1,$local_dns1,g;s,local_dns2,$local_dns2,g;s,remote_dns1,$remote_dns1,g;s,remote_dns2,$remote_dns2,g;s,adblock,$adblock,g" /usr/share/mosdns/default.yaml > /etc/mosdns/config.yaml
}
service_triggers() {
procd_add_reload_trigger "mosdns"
}
@ -64,9 +80,10 @@ start_service() {
[ $enabled != 1 ] && return 1
delcron
setcron
init_yaml
cat /dev/null > $(uci -q get mosdns.mosdns.logfile)
procd_open_instance mosdns
procd_set_param command $PROG -c "$CONF"
procd_set_param command $PROG start -c "$CONF"
procd_set_param user root
procd_set_param stdout 1
procd_set_param stderr 1

View File

@ -1,136 +0,0 @@
log:
level: ${{ uci -q get mosdns.mosdns.log_level }}
file: ${{ uci -q get mosdns.mosdns.logfile }}
plugin:
- tag: main_server
type: server
args:
entry:
- _single_flight
- main_sequence
server:
- protocol: udp
addr: ":${{ uci -q get mosdns.mosdns.listen_port }}"
- protocol: tcp
addr: ":${{ uci -q get mosdns.mosdns.listen_port }}"
- tag: main_sequence
type: sequence
args:
exec:
- query_is_hosts_domain
- query_is_redirect_domain
- if:
- query_is_whitelist_domain
exec:
- forward_local
- _return
- if:
- query_is_blocklist_domain
- query_is_ad_domain
exec:
- _block_with_nxdomain
- _return
- mem_cache
- if:
- query_is_local_domain
- "!_query_is_common"
exec:
- forward_local
- _return
- if:
- query_is_non_local_domain
exec:
- _prefer_ipv4
- forward_remote
- _return
- primary:
- forward_local
- if:
- "!response_has_local_ip"
exec:
- _drop_response
secondary:
- _prefer_ipv4
- forward_remote
fast_fallback: 200
always_standby: true
- modify_ttl
- tag: mem_cache
type: cache
args:
size: ${{ uci -q get mosdns.mosdns.cache_size }}
- tag: modify_ttl
type: ttl
args:
minimal_ttl: ${{ uci -q get mosdns.mosdns.minimal_ttl }}
maximum_ttl: ${{ uci -q get mosdns.mosdns.maximum_ttl }}
- tag: forward_local
type: fast_forward
args:
upstream:
- addr: ${{ /usr/share/mosdns/dns.sh 0 }}
- addr: ${{ /usr/share/mosdns/dns.sh 1 }}
- tag: forward_remote
type: fast_forward
args:
upstream:
- addr: ${{ uci -q get mosdns.mosdns.remote_dns1 }}
- addr: ${{ uci -q get mosdns.mosdns.remote_dns2 }}
- tag: query_is_whitelist_domain
type: query_matcher
args:
domain:
- "ext:/etc/mosdns/rule/whitelist.txt"
- tag: query_is_blocklist_domain
type: query_matcher
args:
domain:
- "ext:/etc/mosdns/rule/blocklist.txt"
- tag: query_is_hosts_domain
type: hosts
args:
hosts:
- "ext:/etc/mosdns/rule/hosts.txt"
- tag: query_is_redirect_domain
type: redirect
args:
rule:
- "ext:/etc/mosdns/rule/redirect.txt"
- tag: query_is_local_domain
type: query_matcher
args:
domain:
- "ext:/usr/share/v2ray/geosite.dat:cn"
- "ext:/usr/share/v2ray/geosite.dat:apple-cn"
- tag: query_is_non_local_domain
type: query_matcher
args:
domain:
- "ext:/usr/share/v2ray/geosite.dat:geolocation-!cn"
- tag: response_has_local_ip
type: response_matcher
args:
ip:
- "ext:/usr/share/v2ray/geoip.dat:cn"
- tag: query_is_ad_domain
type: query_matcher
args:
domain:
- ${{ /usr/share/mosdns/ad_domain.sh }}

View File

@ -1,96 +1,156 @@
log:
level: error
file: ""
level: info
file: "/tmp/mosdns.log"
plugin:
- tag: main_server
type: server
args:
entry:
- _no_ecs
- lazy_cache
- _prefer_ipv4
- _single_flight
- main_sequence
server:
- protocol: udp
addr: "127.0.0.1:5335"
- protocol: tcp
addr: "127.0.0.1:5335"
include: []
- tag: main_sequence
type: sequence
args:
exec:
- if:
- query_is_ad_domain
exec:
- _block_with_nxdomain
- _return
- if:
- query_is_local_domain
- "!_query_is_common"
exec:
- forward_local
- _return
- if:
- query_is_non_local_domain
exec:
- forward_remote
- _return
- primary:
- forward_local
- if:
- "!response_has_local_ip"
exec:
- _drop_response
secondary:
- forward_remote
fast_fallback: 150
always_standby: true
data_providers:
- tag: geoip
file: "/usr/share/v2ray/geoip.dat"
auto_reload: true
- tag: forward_local
type: fast_forward
args:
upstream:
- addr: ${{ /usr/share/mosdns/dns.sh 0 }}
- addr: ${{ /usr/share/mosdns/dns.sh 1 }}
- tag: geosite
file: "/usr/share/v2ray/geosite.dat"
auto_reload: true
- tag: forward_remote
type: fast_forward
args:
upstream:
- addr: "tls://8.8.4.4"
idle_timeout: 10
- addr: "tls://9.9.9.9"
idle_timeout: 10
- tag: whitelist
file: "/etc/mosdns/rule/whitelist.txt"
auto_reload: true
- tag: blocklist
file: "/etc/mosdns/rule/blocklist.txt"
auto_reload: true
- tag: hosts
file: "/etc/mosdns/rule/hosts.txt"
auto_reload: true
- tag: redirect
file: "/etc/mosdns/rule/redirect.txt"
auto_reload: true
plugins:
- tag: lazy_cache
type: cache
args:
size: 512000
size: 200000
lazy_cache_ttl: 259200
- tag: modify_ttl
type: ttl
args:
minimal_ttl: 0
maximum_ttl: 0
- tag: "forward_local"
type: fast_forward
args:
upstream:
- addr: 119.29.29.29
- addr: 114.114.114.114
- tag: "forward_remote"
type: fast_forward
args:
upstream:
- addr: tls://8.8.8.8
- addr: tls://1.1.1.1
- tag: query_is_whitelist_domain
type: query_matcher
args:
domain:
- "provider:whitelist"
- tag: query_is_blocklist_domain
type: query_matcher
args:
domain:
- "provider:blocklist"
- tag: query_is_hosts_domain
type: hosts
args:
hosts:
- "provider:hosts"
- tag: query_is_redirect_domain
type: redirect
args:
rule:
- "provider:redirect"
- tag: query_is_local_domain
type: query_matcher
args:
domain:
- "ext:/usr/share/v2ray/geosite.dat:cn"
- "provider:geosite:cn"
- tag: query_is_non_local_domain
type: query_matcher
args:
domain:
- "ext:/usr/share/v2ray/geosite.dat:geolocation-!cn"
- "provider:geosite:geolocation-!cn"
- tag: response_has_local_ip
type: response_matcher
args:
ip:
- "ext:/usr/share/v2ray/geoip.dat:cn"
- "provider:geoip:cn"
- tag: query_is_ad_domain
type: query_matcher
args:
domain:
- "ext:/usr/share/v2ray/geosite.dat:category-ads-all"
- "provider:geosite:category-ads-all"
- tag: "main_sequence"
type: "sequence"
args:
exec:
- query_is_hosts_domain
- query_is_redirect_domain
- if: query_is_whitelist_domain
exec:
- forward_local
- modify_ttl
- _return
- if: "query_is_blocklist_domain || query_is_ad_domain"
exec:
- _new_nxdomain_response
- _return
- lazy_cache
- if: query_is_local_domain
exec:
- forward_local
- modify_ttl
- _return
- if: query_is_non_local_domain
exec:
- _prefer_ipv4
- forward_remote
- modify_ttl
- _return
- primary:
- forward_local
- if: "(! response_has_local_ip) && [_response_valid_answer]"
exec:
- _drop_response
secondary:
- _prefer_ipv4
- forward_remote
- modify_ttl
fast_fallback: 200
servers:
- exec: main_sequence
listeners:
- protocol: udp
addr: ":5335"
- protocol: tcp
addr: ":5335"

View File

@ -2,5 +2,5 @@
adblock=$(uci -q get mosdns.mosdns.adblock)
if [ "$adblock" -eq 1 ];then
echo "ext:/usr/share/v2ray/geosite.dat:category-ads-all"
echo "provider:geosite:category-ads-all"
fi

View File

@ -0,0 +1,156 @@
log:
level: log_level
file: "log_file"
include: []
data_providers:
- tag: geoip
file: "/usr/share/v2ray/geoip.dat"
auto_reload: true
- tag: geosite
file: "/usr/share/v2ray/geosite.dat"
auto_reload: true
- tag: whitelist
file: "/etc/mosdns/rule/whitelist.txt"
auto_reload: true
- tag: blocklist
file: "/etc/mosdns/rule/blocklist.txt"
auto_reload: true
- tag: hosts
file: "/etc/mosdns/rule/hosts.txt"
auto_reload: true
- tag: redirect
file: "/etc/mosdns/rule/redirect.txt"
auto_reload: true
plugins:
- tag: lazy_cache
type: cache
args:
size: cache_size
lazy_cache_ttl: cache_survival_time
- tag: modify_ttl
type: ttl
args:
minimal_ttl: minimal_ttl_custom
maximum_ttl: maximum_ttl_custom
- tag: "forward_local"
type: fast_forward
args:
upstream:
- addr: local_dns1
- addr: local_dns2
- tag: "forward_remote"
type: fast_forward
args:
upstream:
- addr: remote_dns1
- addr: remote_dns2
- tag: query_is_whitelist_domain
type: query_matcher
args:
domain:
- "provider:whitelist"
- tag: query_is_blocklist_domain
type: query_matcher
args:
domain:
- "provider:blocklist"
- tag: query_is_hosts_domain
type: hosts
args:
hosts:
- "provider:hosts"
- tag: query_is_redirect_domain
type: redirect
args:
rule:
- "provider:redirect"
- 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"
- tag: response_has_local_ip
type: response_matcher
args:
ip:
- "provider:geoip:cn"
- tag: query_is_ad_domain
type: query_matcher
args:
domain:
- "adblock"
- tag: "main_sequence"
type: "sequence"
args:
exec:
- query_is_hosts_domain
- query_is_redirect_domain
- if: query_is_whitelist_domain
exec:
- forward_local
- modify_ttl
- _return
- if: "query_is_blocklist_domain || query_is_ad_domain"
exec:
- _new_nxdomain_response
- _return
- lazy_cache
- if: query_is_local_domain
exec:
- forward_local
- modify_ttl
- _return
- if: query_is_non_local_domain
exec:
- _prefer_ipv4
- forward_remote
- modify_ttl
- _return
- primary:
- forward_local
- if: "(! response_has_local_ip) && [_response_valid_answer]"
exec:
- _drop_response
secondary:
- _prefer_ipv4
- forward_remote
- modify_ttl
fast_fallback: 200
servers:
- exec: main_sequence
listeners:
- protocol: udp
addr: ":listen_port"
- protocol: tcp
addr: ":listen_port"