mirror of
https://github.com/kenzok8/small-package.git
synced 2026-02-08 07:37:13 +08:00
update 2023-02-03 23:36:33
This commit is contained in:
@@ -1,16 +1,16 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=luci-app-mosdns
|
PKG_NAME:=luci-app-mosdns
|
||||||
PKG_VERSION:=1.4.4
|
PKG_VERSION:=1.5
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI Support for mosdns
|
LUCI_TITLE:=LuCI Support for mosdns
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=all
|
||||||
LUCI_DEPENDS:=+mosdns +jsonfilter +luci-compat +curl +v2ray-geoip +v2ray-geosite
|
LUCI_DEPENDS:=+mosdns-v5 +jsonfilter +bash +luci-compat +zoneinfo-asia
|
||||||
|
|
||||||
define Package/$(PKG_NAME)/conffiles
|
define Package/$(PKG_NAME)/conffiles
|
||||||
|
/etc/mosdns/cus_config.yaml
|
||||||
/etc/config/mosdns
|
/etc/config/mosdns
|
||||||
/etc/mosdns/config_custom.yaml
|
|
||||||
/etc/mosdns/rule
|
/etc/mosdns/rule
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ function index()
|
|||||||
if not nixio.fs.access("/etc/config/mosdns") then
|
if not nixio.fs.access("/etc/config/mosdns") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local page = entry({"admin", "services", "mosdns"}, alias("admin", "services", "mosdns", "basic"), _("MosDNS"), 30)
|
local page = entry({"admin", "services", "mosdns"}, alias("admin", "services", "mosdns", "basic"), _("MosDNS"), 30)
|
||||||
page.dependent = true
|
page.dependent = true
|
||||||
page.acl_depends = { "luci-app-mosdns" }
|
page.acl_depends = { "luci-app-mosdns" }
|
||||||
|
|
||||||
entry({"admin", "services", "mosdns", "basic"}, cbi("mosdns/basic"), _("Basic Setting"), 1).leaf = true
|
entry({"admin", "services", "mosdns", "basic"}, cbi("mosdns/basic"), _("Basic Setting"), 1).leaf = true
|
||||||
entry({"admin", "services", "mosdns", "rule_list"}, cbi("mosdns/rule_list"), _("Rule List"), 2).leaf = true
|
entry({"admin", "services", "mosdns", "rule_list"}, cbi("mosdns/rule_list"), _("Rule List"), 2).leaf = true
|
||||||
entry({"admin", "services", "mosdns", "update"}, cbi("mosdns/update"), _("Geodata Update"), 3).leaf = true
|
entry({"admin", "services", "mosdns", "update"}, cbi("mosdns/update"), _("Geodata Update"), 3).leaf = true
|
||||||
@@ -16,7 +16,6 @@ function index()
|
|||||||
entry({"admin", "services", "mosdns", "status"}, call("act_status")).leaf = true
|
entry({"admin", "services", "mosdns", "status"}, call("act_status")).leaf = true
|
||||||
entry({"admin", "services", "mosdns", "get_log"}, call("get_log")).leaf = true
|
entry({"admin", "services", "mosdns", "get_log"}, call("get_log")).leaf = true
|
||||||
entry({"admin", "services", "mosdns", "clear_log"}, call("clear_log")).leaf = true
|
entry({"admin", "services", "mosdns", "clear_log"}, call("clear_log")).leaf = true
|
||||||
entry({"admin", "services", "mosdns", "geo_update"}, call("geo_update")).leaf = true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_status()
|
function act_status()
|
||||||
@@ -27,16 +26,9 @@ function act_status()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function get_log()
|
function get_log()
|
||||||
luci.http.write(luci.sys.exec("cat $(/usr/share/mosdns/mosdns.sh logfile)"))
|
luci.http.write(luci.sys.exec("cat $(/etc/mosdns/lib.sh logfile)"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function clear_log()
|
function clear_log()
|
||||||
luci.sys.call("cat /dev/null > $(/usr/share/mosdns/mosdns.sh logfile)")
|
luci.sys.call("true > $(/etc/mosdns/lib.sh logfile)")
|
||||||
end
|
|
||||||
|
|
||||||
function geo_update()
|
|
||||||
local e = {}
|
|
||||||
e.updating = luci.sys.call("/usr/share/mosdns/mosdns.sh geodata >/dev/null") == 0
|
|
||||||
luci.http.prepare_content("application/json")
|
|
||||||
luci.http.write_json(e)
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,126 +11,75 @@ s.anonymous = true
|
|||||||
enable = s:option(Flag, "enabled", translate("Enable"))
|
enable = s:option(Flag, "enabled", translate("Enable"))
|
||||||
enable.rmempty = false
|
enable.rmempty = false
|
||||||
|
|
||||||
configfile = s:option(ListValue, "configfile", translate("Config File"))
|
configfile = s:option(ListValue, "configfile", translate("MosDNS Config File"))
|
||||||
configfile:value("/etc/mosdns/config.yaml", translate("Default Config"))
|
configfile:value("./def_config.yaml", translate("Def Config"))
|
||||||
configfile:value("/etc/mosdns/config_custom.yaml", translate("Custom Config"))
|
configfile:value("./cus_config.yaml", translate("Cus Config"))
|
||||||
configfile.default = "/etc/mosdns/config.yaml"
|
configfile.default = "./def_config.yaml"
|
||||||
|
|
||||||
listenport = s:option(Value, "listen_port", translate("Listen port"))
|
listenport = s:option(Value, "listen_port", translate("Listen port"))
|
||||||
listenport.datatype = "and(port,min(1))"
|
listenport.datatype = "and(port,min(1))"
|
||||||
listenport.default = 5335
|
listenport.default = 5335
|
||||||
listenport:depends( "configfile", "/etc/mosdns/config.yaml")
|
listenport:depends( "configfile", "./def_config.yaml")
|
||||||
|
|
||||||
loglevel = s:option(ListValue, "log_level", translate("Log Level"))
|
loglv = s:option(ListValue, "loglv", translate("Log Level"))
|
||||||
loglevel:value("debug", translate("Debug"))
|
loglv:value("debug", translate("Debug"))
|
||||||
loglevel:value("info", translate("Info"))
|
loglv:value("info", translate("Info"))
|
||||||
loglevel:value("warn", translate("Warning"))
|
loglv:value("warn", translate("Warning"))
|
||||||
loglevel:value("error", translate("Error"))
|
loglv:value("error", translate("Error"))
|
||||||
loglevel.default = "info"
|
loglv.default = "error"
|
||||||
loglevel:depends( "configfile", "/etc/mosdns/config.yaml")
|
loglv:depends( "configfile", "./def_config.yaml")
|
||||||
|
|
||||||
logfile = s:option(Value, "logfile", translate("Log File"))
|
logfile = s:option(Value, "logfile", translate("MosDNS Log File"))
|
||||||
logfile.placeholder = "/tmp/mosdns.log"
|
logfile.placeholder = "/tmp/mosdns.txt"
|
||||||
logfile.default = "/tmp/mosdns.log"
|
logfile.default = "/tmp/mosdns.txt"
|
||||||
logfile:depends( "configfile", "/etc/mosdns/config.yaml")
|
logfile:depends( "configfile", "./def_config.yaml")
|
||||||
|
|
||||||
redirect = s:option(Flag, "redirect", translate("DNS Forward"), translate("Forward Dnsmasq Domain Name resolution requests to MosDNS"))
|
remote_dns = s:option(Value, "remote_dns1", translate("Remote DNS"))
|
||||||
redirect.default = true
|
remote_dns.default = "tls://8.8.4.4"
|
||||||
|
|
||||||
custom_local_dns = s:option(Flag, "custom_local_dns", translate("Local DNS"), translate("Follow WAN interface DNS if not enabled"))
|
|
||||||
custom_local_dns:depends( "configfile", "/etc/mosdns/config.yaml")
|
|
||||||
custom_local_dns.default = false
|
|
||||||
|
|
||||||
custom_local_dns = s:option(DynamicList, "local_dns", translate("Upstream DNS servers"))
|
|
||||||
custom_local_dns:value("119.29.29.29", "119.29.29.29 (DNSPod Primary)")
|
|
||||||
custom_local_dns:value("119.28.28.28", "119.28.28.28 (DNSPod Secondary)")
|
|
||||||
custom_local_dns:value("223.5.5.5", "223.5.5.5 (AliDNS Primary)")
|
|
||||||
custom_local_dns:value("223.6.6.6", "223.6.6.6 (AliDNS Secondary)")
|
|
||||||
custom_local_dns:value("114.114.114.114", "114.114.114.114 (114DNS Primary)")
|
|
||||||
custom_local_dns:value("114.114.115.115", "114.114.115.115 (114DNS Secondary)")
|
|
||||||
custom_local_dns:value("180.76.76.76", "180.76.76.76 (Baidu DNS)")
|
|
||||||
custom_local_dns:depends("custom_local_dns", "1")
|
|
||||||
|
|
||||||
custom_local_dns = s:option(ListValue, "bootstrap_dns", translate("Bootstrap DNS servers"), translate("Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT resolvers you specify as upstreams"))
|
|
||||||
custom_local_dns:value("119.29.29.29", "119.29.29.29 (DNSPod Primary)")
|
|
||||||
custom_local_dns:value("119.28.28.28", "119.28.28.28 (DNSPod Secondary)")
|
|
||||||
custom_local_dns:value("223.5.5.5", "223.5.5.5 (AliDNS Primary)")
|
|
||||||
custom_local_dns:value("223.6.6.6", "223.6.6.6 (AliDNS Secondary)")
|
|
||||||
custom_local_dns:value("114.114.114.114", "114.114.114.114 (114DNS Primary)")
|
|
||||||
custom_local_dns:value("114.114.115.115", "114.114.115.115 (114DNS Secondary)")
|
|
||||||
custom_local_dns:value("180.76.76.76", "180.76.76.76 (Baidu DNS)")
|
|
||||||
custom_local_dns.default = "119.29.29.29"
|
|
||||||
custom_local_dns:depends("custom_local_dns", "1")
|
|
||||||
|
|
||||||
remote_dns = s:option(DynamicList, "remote_dns", translate("Remote DNS"))
|
|
||||||
remote_dns:value("tls://1.1.1.1", "1.1.1.1 (CloudFlare DNS)")
|
|
||||||
remote_dns:value("tls://1.0.0.1", "1.0.0.1 (CloudFlare DNS)")
|
|
||||||
remote_dns:value("tls://8.8.8.8", "8.8.8.8 (Google DNS)")
|
remote_dns:value("tls://8.8.8.8", "8.8.8.8 (Google DNS)")
|
||||||
remote_dns:value("tls://8.8.4.4", "8.8.4.4 (Google DNS)")
|
remote_dns:value("tls://8.8.4.4", "8.8.4.4 (Google DNS)")
|
||||||
remote_dns:value("tls://9.9.9.9", "9.9.9.9 (Quad9 DNS)")
|
remote_dns:value("tls://1.1.1.1", "1.1.1.1 (CloudFlare DNS)")
|
||||||
remote_dns:value("tls://149.112.112.112", "149.112.112.112 (Quad9 DNS)")
|
remote_dns:value("tls://1.0.0.1", "1.0.0.1 (CloudFlare DNS)")
|
||||||
remote_dns:value("tls://45.11.45.11", "45.11.45.11 (DNS.SB)")
|
|
||||||
remote_dns:value("tls://208.67.222.222", "208.67.222.222 (Open DNS)")
|
remote_dns:value("tls://208.67.222.222", "208.67.222.222 (Open DNS)")
|
||||||
remote_dns:value("tls://208.67.220.220", "208.67.220.220 (Open DNS)")
|
remote_dns:value("tls://208.67.220.220", "208.67.220.220 (Open DNS)")
|
||||||
remote_dns:depends( "configfile", "/etc/mosdns/config.yaml")
|
remote_dns:value("tls://94.140.14.140", "94.140.14.140 (AdGuard)")
|
||||||
|
remote_dns:value("tls://94.140.14.141", "94.140.14.141 (AdGuard)")
|
||||||
|
remote_dns:depends( "configfile", "./def_config.yaml")
|
||||||
|
remote_dns = s:option(Value, "remote_dns2", " ")
|
||||||
|
remote_dns.default = "tls://1.0.0.1"
|
||||||
|
remote_dns:value("tls://8.8.8.8", "8.8.8.8 (Google DNS)")
|
||||||
|
remote_dns:value("tls://8.8.4.4", "8.8.4.4 (Google DNS)")
|
||||||
|
remote_dns:value("tls://1.1.1.1", "1.1.1.1 (CloudFlare DNS)")
|
||||||
|
remote_dns:value("tls://1.0.0.1", "1.0.0.1 (CloudFlare DNS)")
|
||||||
|
remote_dns:value("tls://208.67.222.222", "208.67.222.222 (Open DNS)")
|
||||||
|
remote_dns:value("tls://208.67.220.220", "208.67.220.220 (Open DNS)")
|
||||||
|
remote_dns:value("tls://94.140.14.140", "94.140.14.140 (AdGuard)")
|
||||||
|
remote_dns:value("tls://94.140.14.141", "94.140.14.141 (AdGuard)")
|
||||||
|
remote_dns:depends( "configfile", "./def_config.yaml")
|
||||||
|
|
||||||
remote_dns_pipeline = s:option(Flag, "enable_pipeline", translate("Remote DNS Connection Multiplexing"), translate("Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode"))
|
redirect = s:option(Flag, "redirect", translate("Enable DNS Redirect"))
|
||||||
remote_dns_pipeline.rmempty = false
|
redirect:depends( "configfile", "./def_config.yaml")
|
||||||
remote_dns_pipeline.default = false
|
redirect.default = true
|
||||||
remote_dns_pipeline:depends( "configfile", "/etc/mosdns/config.yaml")
|
|
||||||
|
|
||||||
cache_size = s:option(Value, "cache_size", translate("DNS Cache Size"))
|
|
||||||
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(0))"
|
|
||||||
minimal_ttl.datatype = "and(uinteger,max(3600))"
|
|
||||||
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(0))"
|
|
||||||
maximum_ttl.default = "0"
|
|
||||||
maximum_ttl:depends( "configfile", "/etc/mosdns/config.yaml")
|
|
||||||
|
|
||||||
adblock = s:option(Flag, "adblock", translate("Enable DNS ADblock"))
|
adblock = s:option(Flag, "adblock", translate("Enable DNS ADblock"))
|
||||||
adblock:depends( "configfile", "/etc/mosdns/config.yaml")
|
adblock:depends( "configfile", "./def_config.yaml")
|
||||||
adblock.default = false
|
adblock.default = false
|
||||||
|
|
||||||
adblock = s:option(Value, "ad_source", translate("ADblock Source"))
|
set_config = s:option(Button, "set_config", translate("DNS Helper"))
|
||||||
adblock:depends("adblock", "1")
|
set_config.inputtitle = translate("Apply")
|
||||||
adblock.default = "https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt"
|
set_config.inputstyle = "reload"
|
||||||
adblock:value("geosite.dat", "v2ray-geosite")
|
set_config.description = translate("This will make the necessary adjustments to other plug-in settings.")
|
||||||
adblock:value("https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt", "anti-AD")
|
set_config.write = function()
|
||||||
adblock:value("https://raw.githubusercontent.com/sjhgvr/oisd/main/dbl_basic.txt", "oisd (basic)")
|
luci.sys.exec("/etc/mosdns/set.sh &> /dev/null &")
|
||||||
adblock:value("https://raw.githubusercontent.com/QiuSimons/openwrt-mos/master/dat/serverlist.txt", "QiuSimons/openwrt-mos")
|
|
||||||
|
|
||||||
reload_service = s:option( Button, "_reload", translate("Reload Service"), translate("Reload service to take effect of new configuration"))
|
|
||||||
reload_service.write = function()
|
|
||||||
luci.sys.exec("/etc/init.d/mosdns reload")
|
|
||||||
end
|
end
|
||||||
reload_service:depends( "configfile", "/etc/mosdns/config_custom.yaml")
|
set_config:depends( "configfile", "./def_config.yaml")
|
||||||
|
|
||||||
config = s:option(TextValue, "manual-config")
|
unset_config = s:option(Button, "unset_config", translate("Revert Settings"))
|
||||||
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>")
|
unset_config.inputtitle = translate("Apply")
|
||||||
config.template = "cbi/tvalue"
|
unset_config.inputstyle = "reload"
|
||||||
config.rows = 25
|
unset_config.description = translate("This will revert the adjustments.")
|
||||||
config:depends( "configfile", "/etc/mosdns/config_custom.yaml")
|
unset_config.write = function()
|
||||||
|
luci.sys.exec("/etc/mosdns/set.sh unset &> /dev/null &")
|
||||||
function config.cfgvalue(self, section)
|
|
||||||
return nixio.fs.readfile("/etc/mosdns/config_custom.yaml")
|
|
||||||
end
|
|
||||||
|
|
||||||
function config.write(self, section, value)
|
|
||||||
value = value:gsub("\r\n?", "\n")
|
|
||||||
nixio.fs.writefile("/etc/mosdns/config_custom.yaml", value)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ local datatypes = require "luci.cbi.datatypes"
|
|||||||
|
|
||||||
local white_list_file = "/etc/mosdns/rule/whitelist.txt"
|
local white_list_file = "/etc/mosdns/rule/whitelist.txt"
|
||||||
local block_list_file = "/etc/mosdns/rule/blocklist.txt"
|
local block_list_file = "/etc/mosdns/rule/blocklist.txt"
|
||||||
local grey_list_file = "/etc/mosdns/rule/greylist.txt"
|
|
||||||
local hosts_list_file = "/etc/mosdns/rule/hosts.txt"
|
local hosts_list_file = "/etc/mosdns/rule/hosts.txt"
|
||||||
local redirect_list_file = "/etc/mosdns/rule/redirect.txt"
|
local redirect_list_file = "/etc/mosdns/rule/redirect.txt"
|
||||||
local local_ptr_file = "/etc/mosdns/rule/local-ptr.txt"
|
local cus_config_file = "/etc/mosdns/cus_config.yaml"
|
||||||
|
|
||||||
m = Map("mosdns")
|
m = Map("mosdns")
|
||||||
|
|
||||||
@@ -14,10 +13,9 @@ s.anonymous = true
|
|||||||
|
|
||||||
s:tab("white_list", translate("White Lists"))
|
s:tab("white_list", translate("White Lists"))
|
||||||
s:tab("block_list", translate("Block Lists"))
|
s:tab("block_list", translate("Block Lists"))
|
||||||
s:tab("grey_list", translate("Grey Lists"))
|
|
||||||
s:tab("hosts_list", translate("Hosts"))
|
s:tab("hosts_list", translate("Hosts"))
|
||||||
s:tab("redirect_list", translate("Redirect"))
|
s:tab("redirect_list", translate("Redirect"))
|
||||||
s:tab("local_ptr_list", translate("Block PTR"))
|
s:tab("cus_config", translate("Cus Config"))
|
||||||
|
|
||||||
o = s:taboption("white_list", TextValue, "whitelist", "", "<font color='red'>" .. translate("These domain names allow DNS resolution with the highest priority. Please input the domain names of websites, every line can input only one website domain. For example: hm.baidu.com.") .. "</font>" .. "<font color='#00bd3e'>" .. translate("<br>The list of rules only apply to 'Default Config' profiles.") .. "</font>")
|
o = s:taboption("white_list", TextValue, "whitelist", "", "<font color='red'>" .. translate("These domain names allow DNS resolution with the highest priority. Please input the domain names of websites, every line can input only one website domain. For example: hm.baidu.com.") .. "</font>" .. "<font color='#00bd3e'>" .. translate("<br>The list of rules only apply to 'Default Config' profiles.") .. "</font>")
|
||||||
o.rows = 15
|
o.rows = 15
|
||||||
@@ -39,16 +37,6 @@ o.validate = function(self, value)
|
|||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
|
||||||
o = s:taboption("grey_list", TextValue, "greylist", "", "<font color='red'>" .. translate("These domains are always resolved using remote DNS. Please input the domain names of websites, every line can input only one website domain. For example: google.com.") .. "</font>" .. "<font color='#00bd3e'>" .. translate("<br>The list of rules only apply to 'Default Config' profiles.") .. "</font>")
|
|
||||||
o.rows = 15
|
|
||||||
o.wrap = "off"
|
|
||||||
o.cfgvalue = function(self, section) return nixio.fs.readfile(grey_list_file) or "" end
|
|
||||||
o.write = function(self, section, value) nixio.fs.writefile(grey_list_file, value:gsub("\r\n", "\n")) end
|
|
||||||
o.remove = function(self, section, value) nixio.fs.writefile(grey_list_file, "") end
|
|
||||||
o.validate = function(self, value)
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
|
|
||||||
o = s:taboption("hosts_list", TextValue, "hosts", "", "<font color='red'>" .. translate("Hosts For example: baidu.com 10.0.0.1") .. "</font>" .. "<font color='#00bd3e'>" .. translate("<br>The list of rules only apply to 'Default Config' profiles.") .. "</font>")
|
o = s:taboption("hosts_list", TextValue, "hosts", "", "<font color='red'>" .. translate("Hosts For example: baidu.com 10.0.0.1") .. "</font>" .. "<font color='#00bd3e'>" .. translate("<br>The list of rules only apply to 'Default Config' profiles.") .. "</font>")
|
||||||
o.rows = 15
|
o.rows = 15
|
||||||
o.wrap = "off"
|
o.wrap = "off"
|
||||||
@@ -69,12 +57,12 @@ o.validate = function(self, value)
|
|||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
|
||||||
o = s:taboption("local_ptr_list", TextValue, "local_ptr", "", "<font color='red'>" .. translate("These domains are blocked from PTR requests") .. "</font>" .. "<font color='#00bd3e'>" .. translate("<br>The list of rules only apply to 'Default Config' profiles.") .. "</font>")
|
o = s:taboption("cus_config", TextValue, "Cus Config", "", "<font color='red'>" .. translate("View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need.") .. "</font>" .. "<font color='#00bd3e'>" .. translate("<br>The list of rules only apply to 'Custom Config' profiles.") .. "</font>")
|
||||||
o.rows = 15
|
o.rows = 30
|
||||||
o.wrap = "off"
|
o.wrap = "off"
|
||||||
o.cfgvalue = function(self, section) return nixio.fs.readfile(local_ptr_file) or "" end
|
o.cfgvalue = function(self, section) return nixio.fs.readfile(cus_config_file) or "" end
|
||||||
o.write = function(self, section, value) nixio.fs.writefile(local_ptr_file, value:gsub("\r\n", "\n")) end
|
o.write = function(self, section, value) nixio.fs.writefile(cus_config_file, value:gsub("\r\n", "\n")) end
|
||||||
o.remove = function(self, section, value) nixio.fs.writefile(local_ptr_file, "") end
|
o.remove = function(self, section, value) nixio.fs.writefile(cus_config_file, "") end
|
||||||
o.validate = function(self, value)
|
o.validate = function(self, value)
|
||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
m = Map("mosdns")
|
m = Map("mosdns")
|
||||||
|
|
||||||
s = m:section(TypedSection, "mosdns", translate("Update GeoIP & GeoSite dat"))
|
s = m:section(TypedSection, "mosdns", translate("Geodata Update"))
|
||||||
s.addremove = false
|
s.addremove = false
|
||||||
s.anonymous = true
|
s.anonymous = true
|
||||||
|
|
||||||
enable = s:option(Flag, "geo_auto_update", translate("Enable Auto Database Update"))
|
enable = s:option(Flag, "geo_auto_update", translate("Enable Auto Database Update"))
|
||||||
enable.rmempty = false
|
enable.rmempty = false
|
||||||
|
|
||||||
|
enable = s:option(Flag, "syncconfig", translate("Enable Config Update"))
|
||||||
|
enable.rmempty = false
|
||||||
|
|
||||||
o = s:option(ListValue, "geo_update_week_time", translate("Update Cycle"))
|
o = s:option(ListValue, "geo_update_week_time", translate("Update Cycle"))
|
||||||
o:value("*", translate("Every Day"))
|
o:value("*", translate("Every Day"))
|
||||||
o:value("1", translate("Every Monday"))
|
o:value("1", translate("Every Monday"))
|
||||||
@@ -18,14 +21,17 @@ o:value("6", translate("Every Saturday"))
|
|||||||
o:value("7", translate("Every Sunday"))
|
o:value("7", translate("Every Sunday"))
|
||||||
o.default = "*"
|
o.default = "*"
|
||||||
|
|
||||||
update_time = s:option(ListValue, "geo_update_day_time", translate("Update Time"))
|
update_time = s:option(ListValue, "geo_update_day_time", translate("Update Time (Every Day)"))
|
||||||
for t = 0, 23 do
|
for t = 0, 23 do
|
||||||
update_time:value(t, t..":00")
|
update_time:value(t, t..":00")
|
||||||
end
|
end
|
||||||
update_time.default = 0
|
update_time.default = 0
|
||||||
|
|
||||||
data_update = s:option(Button, "geo_update_database", translate("Database Update"))
|
data_update = s:option(Button, "geo_update_database", translate("Database Update"))
|
||||||
data_update.rawhtml = true
|
data_update.inputtitle = translate("Check And Update")
|
||||||
data_update.template = "mosdns/geo_update"
|
data_update.inputstyle = "reload"
|
||||||
|
data_update.write = function()
|
||||||
|
luci.sys.exec("/etc/mosdns/mosupdater.sh &> /dev/null &")
|
||||||
|
end
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
<%+cbi/valueheader%>
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
function update_data(btn, dataname)
|
|
||||||
{
|
|
||||||
btn.disabled = true;
|
|
||||||
btn.value = '<%:Updating...%> ';
|
|
||||||
st=dataname;
|
|
||||||
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "mosdns", "geo_update")%>',
|
|
||||||
{ set:st },
|
|
||||||
function(x,data)
|
|
||||||
{
|
|
||||||
var tb = document.getElementById(dataname+'-status');
|
|
||||||
if (tb)
|
|
||||||
{
|
|
||||||
switch (data.updating)
|
|
||||||
{
|
|
||||||
case true:
|
|
||||||
tb.innerHTML = "<font color='green'>" + "<%:Update success%>" + "</font>";
|
|
||||||
break;
|
|
||||||
case false:
|
|
||||||
tb.innerHTML = "<font color='red'>" + "<%:Update failed, Please check the network status%>" + "</font>";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
btn.disabled = false;
|
|
||||||
btn.value = '<%:Check And Update%>';
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//]]></script>
|
|
||||||
<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check And Update%>" onclick="return update_data(this,'<%=self.option%>')" />
|
|
||||||
<span id="<%=self.option%>-status"><em><%=self.value%></em></span>
|
|
||||||
<%+cbi/valuefooter%>
|
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
msgid "Basic Setting"
|
msgid "Basic Setting"
|
||||||
msgstr "基本设置"
|
msgstr "基本设置"
|
||||||
|
|
||||||
|
msgid "Manual Configuration"
|
||||||
|
msgstr "手动配置"
|
||||||
|
|
||||||
msgid "MosDNS is a 'programmable' DNS forwarder."
|
msgid "MosDNS is a 'programmable' DNS forwarder."
|
||||||
msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。"
|
msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。"
|
||||||
|
|
||||||
@@ -16,41 +19,20 @@ msgstr "获取数据中..."
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "启用"
|
msgstr "启用"
|
||||||
|
|
||||||
msgid "Listen port"
|
msgid "Enable DNS Redirect"
|
||||||
msgstr "监听端口"
|
msgstr "启用 DNS 重定向"
|
||||||
|
|
||||||
msgid "Log Level"
|
|
||||||
msgstr "日志等级"
|
|
||||||
|
|
||||||
msgid "DNS Forward"
|
|
||||||
msgstr "DNS 转发"
|
|
||||||
|
|
||||||
msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS"
|
|
||||||
msgstr "将 Dnsmasq 域名解析请求转发到 MosDNS 服务器"
|
|
||||||
|
|
||||||
msgid "Enable DNS ADblock"
|
msgid "Enable DNS ADblock"
|
||||||
msgstr "启用 DNS 广告过滤"
|
msgstr "启用 DNS 广告过滤"
|
||||||
|
|
||||||
msgid "ADblock Source"
|
msgid "View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need."
|
||||||
msgstr "广告过滤来源"
|
msgstr "注意!此页的更改仅当 'MosDNS 配置文件选择' 为 '自定义配置' 时才会生效"
|
||||||
|
|
||||||
msgid "Reload Service"
|
|
||||||
msgstr "重载服务"
|
|
||||||
|
|
||||||
msgid "Reload service to take effect of new configuration"
|
|
||||||
msgstr "重载 MosDNS 服务生效配置文件"
|
|
||||||
|
|
||||||
msgid "<font color=\"ff0000\"><strong>View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need.</strong></font>"
|
|
||||||
msgstr "<font color=\"ff0000\"><strong>注意!此页的更改仅当配置文件为 “自定义” 时才会生效</strong></font>"
|
|
||||||
|
|
||||||
msgid "Geodata Update"
|
msgid "Geodata Update"
|
||||||
msgstr "更新数据库"
|
msgstr "数据库更新"
|
||||||
|
|
||||||
msgid "Update GeoIP & GeoSite dat"
|
msgid "Update Time (Every Day)"
|
||||||
msgstr "更新 GeoIP & GeoSite 数据库"
|
msgstr "更新时间(每天)"
|
||||||
|
|
||||||
msgid "Update Time"
|
|
||||||
msgstr "更新时间"
|
|
||||||
|
|
||||||
msgid "Update Cycle"
|
msgid "Update Cycle"
|
||||||
msgstr "更新周期"
|
msgstr "更新周期"
|
||||||
@@ -86,70 +68,49 @@ msgid "Check And Update"
|
|||||||
msgstr "检查并更新"
|
msgstr "检查并更新"
|
||||||
|
|
||||||
msgid "Enable Auto Database Update"
|
msgid "Enable Auto Database Update"
|
||||||
msgstr "启用自动更新"
|
msgstr "启用数据库自动更新"
|
||||||
|
|
||||||
msgid "Updating..."
|
msgid "Enable Config Update"
|
||||||
msgstr "正在更新..."
|
msgstr "启用配置文件同步"
|
||||||
|
|
||||||
msgid "Update success"
|
msgid "Enable AutoConfiguration"
|
||||||
msgstr "更新成功"
|
msgstr "启用自动化配置"
|
||||||
|
|
||||||
msgid "Update failed, Please check the network status"
|
msgid "This will make the necessary adjustments to other plug-in settings."
|
||||||
msgstr "更新失败,请检查网络状态"
|
msgstr "对其他插件的设置进行必要的设置,目前仅支持 SSRP VSSR PASSWALL。"
|
||||||
|
|
||||||
msgid "Config File"
|
msgid "This will revert the adjustments."
|
||||||
msgstr "配置文件"
|
msgstr "还原设置助手对其他插件进行的配置设定。"
|
||||||
|
|
||||||
msgid "Default Config"
|
msgid "DNS Helper"
|
||||||
|
msgstr "DNS 设置助手"
|
||||||
|
|
||||||
|
msgid "Revert Settings"
|
||||||
|
msgstr "DNS 设置还原"
|
||||||
|
|
||||||
|
msgid "Apply"
|
||||||
|
msgstr "应用"
|
||||||
|
|
||||||
|
msgid "MosDNS Config File"
|
||||||
|
msgstr "MosDNS 配置文件选择"
|
||||||
|
|
||||||
|
msgid "Def Config"
|
||||||
msgstr "内置预设"
|
msgstr "内置预设"
|
||||||
|
|
||||||
msgid "Custom Config"
|
msgid "Cus Config"
|
||||||
msgstr "自定义"
|
msgstr "自定义配置"
|
||||||
|
|
||||||
msgid "Log File"
|
msgid "Log Level"
|
||||||
|
msgstr "日志级别"
|
||||||
|
|
||||||
|
msgid "MosDNS Log File"
|
||||||
msgstr "日志文件"
|
msgstr "日志文件"
|
||||||
|
|
||||||
msgid "Local DNS"
|
|
||||||
msgstr "本地 DNS"
|
|
||||||
|
|
||||||
msgid "Follow WAN interface DNS if not enabled"
|
|
||||||
msgstr "不启用则遵循 WAN 接口 DNS"
|
|
||||||
|
|
||||||
msgid "Upstream DNS servers"
|
|
||||||
msgstr "上游 DNS 服务器"
|
|
||||||
|
|
||||||
msgid "Bootstrap DNS servers"
|
|
||||||
msgstr "Bootstrap DNS 服务器"
|
|
||||||
|
|
||||||
msgid "Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT resolvers you specify as upstreams"
|
|
||||||
msgstr "Bootstrap DNS 服务器用于解析所指定为上游的 DoH / DoT 解析器的 IP 地址"
|
|
||||||
|
|
||||||
msgid "Remote DNS"
|
msgid "Remote DNS"
|
||||||
msgstr "远程 DNS"
|
msgstr "远程 DNS"
|
||||||
|
|
||||||
msgid "Remote DNS Connection Multiplexing"
|
msgid "Listen port"
|
||||||
msgstr "远程 DNS 连接复用"
|
msgstr "监听端口"
|
||||||
|
|
||||||
msgid "Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode"
|
|
||||||
msgstr "启用 TCP/DoT RFC 7766 新型 Query Pipelining 连接复用模式"
|
|
||||||
|
|
||||||
msgid "DNS Cache Size"
|
|
||||||
msgstr "DNS 缓存大小(条)"
|
|
||||||
|
|
||||||
msgid "Cache Survival Time"
|
|
||||||
msgstr "缓存生存时间(秒)"
|
|
||||||
|
|
||||||
msgid "Minimum TTL"
|
|
||||||
msgstr "覆盖最小 TTL 值(默认 0)"
|
|
||||||
|
|
||||||
msgid "Maximum TTL"
|
|
||||||
msgstr "覆盖最大 TTL 值(默认 0)"
|
|
||||||
|
|
||||||
msgid "Logs"
|
|
||||||
msgstr "日志"
|
|
||||||
|
|
||||||
msgid "Clear logs"
|
|
||||||
msgstr "清空日志"
|
|
||||||
|
|
||||||
msgid "Rule List"
|
msgid "Rule List"
|
||||||
msgstr "规则列表"
|
msgstr "规则列表"
|
||||||
@@ -157,6 +118,9 @@ msgstr "规则列表"
|
|||||||
msgid "Rule Settings"
|
msgid "Rule Settings"
|
||||||
msgstr "自定义规则列表"
|
msgstr "自定义规则列表"
|
||||||
|
|
||||||
|
msgid "<br>The list of rules only apply to 'Custom Config' profiles."
|
||||||
|
msgstr "<br>规则列表仅适用于 “自定义配置” 配置文件"
|
||||||
|
|
||||||
msgid "<br>The list of rules only apply to 'Default Config' profiles."
|
msgid "<br>The list of rules only apply to 'Default Config' profiles."
|
||||||
msgstr "<br>规则列表仅适用于 “内置预设” 配置文件"
|
msgstr "<br>规则列表仅适用于 “内置预设” 配置文件"
|
||||||
|
|
||||||
@@ -164,19 +128,13 @@ msgid "White Lists"
|
|||||||
msgstr "白名单"
|
msgstr "白名单"
|
||||||
|
|
||||||
msgid "These domain names allow DNS resolution with the highest priority. Please input the domain names of websites, every line can input only one website domain. For example: hm.baidu.com."
|
msgid "These domain names allow DNS resolution with the highest priority. Please input the domain names of websites, every line can input only one website domain. For example: hm.baidu.com."
|
||||||
msgstr "加入的域名始终允许使用 “本地 DNS” 进行解析,且优先级最高(每个域名一行,支持域名匹配规则)"
|
msgstr "加入的域名始终允许 DNS 解析,且优先级最高(每个域名一行,允许使用规则匹配)"
|
||||||
|
|
||||||
msgid "Block Lists"
|
msgid "Block Lists"
|
||||||
msgstr "黑名单"
|
msgstr "黑名单"
|
||||||
|
|
||||||
msgid "These domains are blocked from DNS resolution. Please input the domain names of websites, every line can input only one website domain. For example: baidu.com."
|
msgid "These domains are blocked from DNS resolution. Please input the domain names of websites, every line can input only one website domain. For example: baidu.com."
|
||||||
msgstr "加入的域名将屏蔽 DNS 解析(每个域名一行,支持域名匹配规则)"
|
msgstr "加入的域名将屏蔽 DNS 解析(每个域名一行,允许使用规则匹配)"
|
||||||
|
|
||||||
msgid "Grey Lists"
|
|
||||||
msgstr "灰名单"
|
|
||||||
|
|
||||||
msgid "These domains are always resolved using remote DNS. Please input the domain names of websites, every line can input only one website domain. For example: google.com."
|
|
||||||
msgstr "加入的域名始终使用 “远程 DNS” 进行解析(每个域名一行,支持域名匹配规则)"
|
|
||||||
|
|
||||||
msgid "Hosts For example: baidu.com 10.0.0.1"
|
msgid "Hosts For example: baidu.com 10.0.0.1"
|
||||||
msgstr "自定义 Hosts 重写,如:baidu.com 10.0.0.1(每个规则一行)"
|
msgstr "自定义 Hosts 重写,如:baidu.com 10.0.0.1(每个规则一行)"
|
||||||
@@ -187,8 +145,8 @@ msgstr "重定向"
|
|||||||
msgid "The domain name to redirect the request to. Requests domain A, but returns records for domain B. example: a.com b.com"
|
msgid "The domain name to redirect the request to. Requests domain A, but returns records for domain B. example: a.com b.com"
|
||||||
msgstr "重定向请求的域名。请求域名 A,但返回域名 B 的记录,如:baidu.com qq.com(每个规则一行)"
|
msgstr "重定向请求的域名。请求域名 A,但返回域名 B 的记录,如:baidu.com qq.com(每个规则一行)"
|
||||||
|
|
||||||
msgid "Block PTR"
|
msgid "Logs"
|
||||||
msgstr "PTR 黑名单"
|
msgstr "日志"
|
||||||
|
|
||||||
msgid "These domains are blocked from PTR requests"
|
msgid "Clear logs"
|
||||||
msgstr "加入的域名将阻止 PTR 请求(每个域名一行,支持域名匹配规则)"
|
msgstr "清空日志"
|
||||||
|
|||||||
@@ -1,21 +1,17 @@
|
|||||||
|
|
||||||
config mosdns 'config'
|
config mosdns 'mosdns'
|
||||||
|
option not_first_start '0'
|
||||||
option enabled '0'
|
option enabled '0'
|
||||||
option listen_port '5335'
|
|
||||||
option geo_auto_update '0'
|
option geo_auto_update '0'
|
||||||
option geo_update_week_time '*'
|
option geo_update_week_time 'all'
|
||||||
option geo_update_day_time '2'
|
option geo_update_day_time '2'
|
||||||
option redirect '1'
|
option redirect '1'
|
||||||
|
option autoconf '1'
|
||||||
|
option syncconfig '1'
|
||||||
option adblock '0'
|
option adblock '0'
|
||||||
option configfile '/etc/mosdns/config.yaml'
|
option configfile './def_config.yaml'
|
||||||
option log_level 'info'
|
option loglv 'info'
|
||||||
option logfile '/tmp/mosdns.log'
|
option logfile '/tmp/mosdns.txt'
|
||||||
option cache_size '200000'
|
option remote_dns1 'tls://8.8.4.4'
|
||||||
option cache_survival_time '259200'
|
option remote_dns2 'tls://1.0.0.1'
|
||||||
option minimal_ttl '0'
|
option listen_port '5335'
|
||||||
option maximum_ttl '0'
|
|
||||||
option custom_local_dns '0'
|
|
||||||
option enable_pipeline '0'
|
|
||||||
list remote_dns 'tls://8.8.8.8'
|
|
||||||
list remote_dns 'tls://1.1.1.1'
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,157 +1,153 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
#
|
# Copyright (C) 2020 IrineSistiana
|
||||||
# Copyright (C) 2020-2022, IrineSistiana
|
# shellcheck disable=SC2034
|
||||||
#
|
|
||||||
# This file is part of mosdns.
|
|
||||||
#
|
|
||||||
# mosdns is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# mosdns is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
START=99
|
START=99
|
||||||
USE_PROCD=1
|
USE_PROCD=1
|
||||||
|
|
||||||
PROG=/usr/bin/mosdns
|
##### ONLY CHANGE THIS BLOCK ######
|
||||||
CONF=$(uci -q get mosdns.config.configfile)
|
PROG=/usr/bin/mosdns # where is mosdns
|
||||||
|
RES_DIR=/etc/mosdns/ # resource dir / working dir / the dir where you store ip/domain lists
|
||||||
|
CONF=$(uci -q get mosdns.mosdns.configfile) # where is the config file, it can be a relative path to $RES_DIR
|
||||||
CRON_FILE=/etc/crontabs/root
|
CRON_FILE=/etc/crontabs/root
|
||||||
|
##### ONLY CHANGE THIS BLOCK ######
|
||||||
|
|
||||||
get_config() {
|
inital_conf() {
|
||||||
config_get enabled $1 enabled 0
|
config_load "mosdns"
|
||||||
config_get adblock $1 adblock 0
|
config_get "enabled" "mosdns" "enabled" "0"
|
||||||
config_get ad_source $1 ad_source ""
|
|
||||||
config_get cache_size $1 cache_size 200000
|
|
||||||
config_get cache_survival_time $1 cache_survival_time 259200
|
|
||||||
config_get enable_pipeline $1 enable_pipeline 0
|
|
||||||
config_get geo_auto_update $1 geo_auto_update 0
|
|
||||||
config_get geo_update_day_time $1 geo_update_day_time 2
|
|
||||||
config_get geo_update_week_time $1 geo_update_week_time "*"
|
|
||||||
config_get listen_port $1 listen_port 5335
|
|
||||||
config_get log_file $1 logfile "/tmp/mosdns.log"
|
|
||||||
config_get log_level $1 log_level "info"
|
|
||||||
config_get maximum_ttl_custom $1 maximum_ttl 0
|
|
||||||
config_get minimal_ttl_custom $1 minimal_ttl 0
|
|
||||||
config_get redirect $1 redirect 0
|
|
||||||
config_get remote_dns $1 remote_dns "tls://8.8.8.8 tls://1.1.1.1"
|
|
||||||
config_get custom_local_dns $1 custom_local_dns 0
|
|
||||||
config_get bootstrap_dns $1 bootstrap_dns "119.29.29.29"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init_yaml() {
|
|
||||||
tmpdir=$(mktemp -d) || exit 1
|
|
||||||
adlist=$(/usr/share/mosdns/mosdns.sh ad)
|
|
||||||
[ $enable_pipeline = 1 ] && enable_pipeline=true || enable_pipeline=false
|
|
||||||
local_dns=$(/usr/share/mosdns/mosdns.sh dns | xargs -n1 echo " - addr:")
|
|
||||||
remote_dns=$(echo $remote_dns | awk '{for(i=1;i<=NF;i++)printf "%s- addr: %s\n%s enable_pipeline: '${enable_pipeline}'\n",s,$i,s}' s=' ')
|
|
||||||
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,adblock,$adlist,g;s,remote_dns_pipeline,$enable_pipeline,g" \
|
|
||||||
/usr/share/mosdns/default.yaml > $CONF
|
|
||||||
[ "$custom_local_dns" -eq 0 ] && sed -i "/bootstrap/d" $CONF || \
|
|
||||||
sed -i "s,bootstrap_dns,$bootstrap_dns,g" $CONF
|
|
||||||
echo "${local_dns}" > $tmpdir/local_dns.txt
|
|
||||||
echo "${remote_dns}" > $tmpdir/remote_dns.txt
|
|
||||||
sed -i -e '/- addr: local_dns/{r '$tmpdir/local_dns.txt -e';d};/- addr: remote_dns/{r '$tmpdir/remote_dns.txt -e';d}' \
|
|
||||||
$CONF
|
|
||||||
rm -rf $tmpdir
|
|
||||||
}
|
|
||||||
|
|
||||||
service_triggers() {
|
service_triggers() {
|
||||||
procd_add_reload_trigger "mosdns"
|
procd_add_reload_trigger "mosdns"
|
||||||
}
|
}
|
||||||
|
|
||||||
restore_setting() {
|
restore_setting() {
|
||||||
rm -f /etc/mosdns/redirect.lock
|
sed -i "/list server/d" /etc/config/dhcp
|
||||||
sed -i "/list server/d" /etc/config/dhcp
|
uci set dhcp.@dnsmasq[0].noresolv='0'
|
||||||
uci set dhcp.@dnsmasq[0].noresolv='0'
|
uci del dhcp.@dnsmasq[0].cachesize
|
||||||
uci del dhcp.@dnsmasq[0].cachesize
|
uci set dhcp.@dnsmasq[0].filter_aaaa='1'
|
||||||
uci commit dhcp
|
uci del dhcp.@dnsmasq[0].setbymosdns
|
||||||
|
uci commit dhcp
|
||||||
}
|
}
|
||||||
|
|
||||||
redirect_setting() {
|
prepare_setting() {
|
||||||
if [ "${CONF}" = "/etc/mosdns/config.yaml" ]; then
|
redirect=$(uci -q get mosdns.mosdns.redirect)
|
||||||
sed -i "/list server/d" /etc/config/dhcp
|
if [ "$redirect" -eq 1 ]; then
|
||||||
uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#$listen_port"
|
sed -i "/list server/d" /etc/config/dhcp
|
||||||
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#$(uci -q get mosdns.mosdns.listen_port)"
|
||||||
uci set dhcp.@dnsmasq[0].noresolv="1"
|
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
||||||
uci set dhcp.@dnsmasq[0].cachesize='0'
|
uci set dhcp.@dnsmasq[0].noresolv="1"
|
||||||
uci commit dhcp
|
uci set dhcp.@dnsmasq[0].cachesize='0'
|
||||||
else
|
uci set dhcp.@dnsmasq[0].filter_aaaa='0'
|
||||||
sed -i "/list server/d" /etc/config/dhcp
|
uci set dhcp.@dnsmasq[0].setbymosdns='1'
|
||||||
uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#$(cat /etc/mosdns/config_custom.yaml | awk -F'[:" ]+' '/^\s+addr:/{for(i=1;i<=NF;i++){if($i~/^[0-9]+$/){print $i;exit}}}')"
|
uci commit dhcp
|
||||||
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
fi
|
||||||
uci set dhcp.@dnsmasq[0].noresolv="1"
|
|
||||||
uci set dhcp.@dnsmasq[0].cachesize='0'
|
|
||||||
uci commit dhcp
|
|
||||||
fi
|
|
||||||
touch /etc/mosdns/redirect.lock
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reload_others() {
|
restart_others() {
|
||||||
/etc/init.d/network reload
|
/etc/init.d/network reload
|
||||||
/etc/init.d/dnsmasq reload
|
/etc/init.d/dnsmasq reload
|
||||||
}
|
}
|
||||||
|
|
||||||
reload_service() {
|
reload_service() {
|
||||||
stop
|
stop
|
||||||
sleep 1
|
sleep 2s
|
||||||
start
|
echo "MosDNS is restarted!"
|
||||||
|
start
|
||||||
}
|
}
|
||||||
|
|
||||||
setcron() {
|
setcron() {
|
||||||
sed -i '/mosdns.sh/d' $CRON_FILE 2>/dev/null
|
touch $CRON_FILE
|
||||||
[ "$geo_auto_update" -eq 1 ] && echo "0 $geo_update_day_time * * $geo_update_week_time /usr/share/mosdns/mosdns.sh geodata" >>$CRON_FILE
|
sed -i '/mosupdater.sh/d' $CRON_FILE 2> /dev/null
|
||||||
crontab $CRON_FILE
|
[ "$(uci -q get mosdns.mosdns.geo_auto_update)" -eq 1 ] && echo "0 $(uci -q get mosdns.mosdns.geo_update_day_time) * * $(uci -q get mosdns.mosdns.geo_update_week_time) /etc/mosdns/mosupdater.sh" >> $CRON_FILE
|
||||||
|
crontab $CRON_FILE
|
||||||
}
|
}
|
||||||
|
|
||||||
delcron() {
|
delcron() {
|
||||||
sed -i '/mosdns.sh/d' $CRON_FILE 2>/dev/null
|
sed -i '/mosupdater.sh/d' $CRON_FILE 2> /dev/null
|
||||||
crontab $CRON_FILE
|
crontab $CRON_FILE
|
||||||
|
}
|
||||||
|
|
||||||
|
adblock() {
|
||||||
|
cp -f /etc/mosdns/rule/serverlist.txt /etc/mosdns/rule/serverlist.bak
|
||||||
|
modns_adblock=$(uci -q get mosdns.mosdns.adblock)
|
||||||
|
if [ "$modns_adblock" = 0 ]; then
|
||||||
|
: > /etc/mosdns/rule/serverlist.txt
|
||||||
|
else
|
||||||
|
cat /etc/mosdns/rule/serverlist.bak > /etc/mosdns/rule/serverlist.txt
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
v4config() {
|
||||||
|
rm -rf /etc/mosdns/def_config.yaml
|
||||||
|
cp -rf /etc/mosdns/def_config_orig.yaml /etc/mosdns/def_config.yaml
|
||||||
|
sed -i "s,listenport,$(uci -q get mosdns.mosdns.listen_port),g" /etc/mosdns/def_config.yaml
|
||||||
|
sed -i "s,loglvl,$(uci -q get mosdns.mosdns.loglv),g" /etc/mosdns/def_config.yaml
|
||||||
|
sed -i "s,logfile,$(uci -q get mosdns.mosdns.logfile),g" /etc/mosdns/def_config.yaml
|
||||||
|
sed -i "s,remotedns1,$(uci -q get mosdns.mosdns.remote_dns1),g" /etc/mosdns/def_config.yaml
|
||||||
|
sed -i "s,remotedns2,$(uci -q get mosdns.mosdns.remote_dns2),g" /etc/mosdns/def_config.yaml
|
||||||
|
sed -i "s,localdns1,$(/etc/mosdns/lib.sh dns 0),g" /etc/mosdns/def_config.yaml
|
||||||
|
sed -i "s,localdns2,$(/etc/mosdns/lib.sh dns 1),g" /etc/mosdns/def_config.yaml
|
||||||
}
|
}
|
||||||
|
|
||||||
start_service() {
|
start_service() {
|
||||||
config_load "mosdns"
|
|
||||||
config_foreach get_config "mosdns"
|
# Reading config
|
||||||
[ $enabled != 1 ] && return 1
|
inital_conf
|
||||||
delcron
|
if [ "$enabled" -eq 0 ]; then
|
||||||
setcron
|
firstblood=$(uci -q get mosdns.mosdns.not_first_start)
|
||||||
[ "${CONF}" = "/etc/mosdns/config.yaml" ] && init_yaml
|
[ "${firstblood}" = "0" ] && restore_setting
|
||||||
:> $(/usr/share/mosdns/mosdns.sh logfile)
|
[ "${firstblood}" = "0" ] && restart_others
|
||||||
procd_open_instance mosdns
|
uci set mosdns.mosdns.not_first_start='1'
|
||||||
procd_set_param command $PROG start -c "$CONF"
|
uci commit mosdns
|
||||||
procd_set_param user root
|
echo "MosDNS has turned off"
|
||||||
procd_set_param stdout 1
|
return 1
|
||||||
procd_set_param stderr 1
|
fi
|
||||||
procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
|
delcron
|
||||||
procd_close_instance mosdns
|
setcron
|
||||||
[ "$redirect" -ne 1 ] && [ -f "/etc/mosdns/redirect.lock" ] && restore_setting
|
adblock
|
||||||
[ "$redirect" -eq 1 ] && redirect_setting
|
true > "$(/etc/mosdns/lib.sh logfile)"
|
||||||
reload_others
|
sysctl -w net.core.rmem_max=2500000
|
||||||
update_list=0
|
v4config
|
||||||
[ "$adblock" -eq 1 ] && [ "$ad_source" != "geosite.dat" ] && {
|
procd_open_instance mosdns
|
||||||
[ -s "/etc/mosdns/rule/adlist.txt" ] && [ -f "/etc/mosdns/rule/.ad_source" ] && url_adlist=$(cat /etc/mosdns/rule/.ad_source) || update_list=1
|
procd_set_param command $PROG start -d $RES_DIR -c "$CONF"
|
||||||
[ "$ad_source" != "$url_adlist" ] && update_list=1
|
procd_set_param user root
|
||||||
}
|
procd_set_param stdout 1
|
||||||
[ "$update_list" -eq 1 ] && /usr/share/mosdns/mosdns.sh adlist_update &> /dev/null &
|
procd_set_param stderr 1
|
||||||
|
procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
|
||||||
|
procd_close_instance mosdns
|
||||||
|
|
||||||
|
configfile=$(uci -q get mosdns.mosdns.configfile)
|
||||||
|
if [ "${configfile}" = "./def_config.yaml" ]; then
|
||||||
|
restore_setting
|
||||||
|
prepare_setting
|
||||||
|
if [ "$(uci -q get mosdns.mosdns.redirect)" -eq 1 ] && [ "$(uci -q get shadowsocksr.@global[0].run_mode)" != gfw ]; then
|
||||||
|
true > /etc/ssrplus/gfw_list.conf
|
||||||
|
sed -i '/update.lua/d' /usr/share/shadowsocksr/ssrplusupdate.sh
|
||||||
|
sed -i '/bin\/sh/a\/usr/bin/lua /usr/share/shadowsocksr/update.lua ad_data' /usr/share/shadowsocksr/ssrplusupdate.sh
|
||||||
|
sed -i '/bin\/sh/a\/usr/bin/lua /usr/share/shadowsocksr/update.lua nfip_data' /usr/share/shadowsocksr/ssrplusupdate.sh
|
||||||
|
sed -i '/bin\/sh/a\/usr/bin/lua /usr/share/shadowsocksr/update.lua ip_data' /usr/share/shadowsocksr/ssrplusupdate.sh
|
||||||
|
fi
|
||||||
|
restart_others
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "MosDNS turn on"
|
||||||
|
echo "enabled=$enabled"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_service() {
|
stop_service() {
|
||||||
pgrep -f /usr/bin/mosdns | xargs kill -9 >/dev/null 2>&1
|
|
||||||
config_load "mosdns"
|
pgrep -f /usr/bin/mosdns | xargs kill -9
|
||||||
config_foreach get_config "mosdns"
|
echo "MosDNS turn off"
|
||||||
[ "$enabled" = "0" ] && [ -f "/etc/mosdns/redirect.lock" ] && restore_setting
|
echo "enabled=$enabled"
|
||||||
reload_others
|
|
||||||
delcron
|
configfile=$(uci -q get mosdns.mosdns.configfile)
|
||||||
|
if [ "${configfile}" = "./def_config.yaml" ]; then
|
||||||
|
config_load "mosdns"
|
||||||
|
enabled=$(uci -q get mosdns.mosdns.enabled)
|
||||||
|
[ "${enabled}" = "0" ] && [ "$(uci -q get dhcp.@dnsmasq[0].setbymosdns)" -eq 1 ] && restore_setting
|
||||||
|
restart_others
|
||||||
|
fi
|
||||||
|
delcron
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,162 +0,0 @@
|
|||||||
log:
|
|
||||||
level: info
|
|
||||||
file: "/tmp/mosdns.log"
|
|
||||||
|
|
||||||
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: 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:
|
|
||||||
- "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:
|
|
||||||
- "provider:geosite:category-ads-all"
|
|
||||||
|
|
||||||
- tag: match_qtype65
|
|
||||||
type: query_matcher
|
|
||||||
args:
|
|
||||||
qtype: [65]
|
|
||||||
|
|
||||||
- tag: "main_sequence"
|
|
||||||
type: "sequence"
|
|
||||||
args:
|
|
||||||
exec:
|
|
||||||
- _misc_optm
|
|
||||||
- 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 || match_qtype65"
|
|
||||||
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"
|
|
||||||
31
luci-app-mosdns/root/etc/mosdns/cus_config.yaml
Normal file
31
luci-app-mosdns/root/etc/mosdns/cus_config.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# 日志设置
|
||||||
|
log:
|
||||||
|
level: info # 日志级别。可选 "debug" "info" "warn" "error"。默认 "info"。
|
||||||
|
file: "/path/to/log/file" # 记录日志到文件。
|
||||||
|
|
||||||
|
# 数据源设置
|
||||||
|
data_providers:
|
||||||
|
- tag: data1 # 数据源的 tag。由用户自由设定。不能重复。
|
||||||
|
file: "/path/to/data/file" # 文件位置
|
||||||
|
auto_reload: true # 文件有变化时是否自动重载。
|
||||||
|
|
||||||
|
# 插件设置
|
||||||
|
plugins:
|
||||||
|
- tag: tag1 # 插件的 tag。由用户自由设定。不能重复。
|
||||||
|
type: type1 # 插件类型。详见下文。
|
||||||
|
args: # 插件参数。取决于插件类型。详见下文。
|
||||||
|
key1: value1
|
||||||
|
key2: value2
|
||||||
|
|
||||||
|
# 服务器设置
|
||||||
|
servers:
|
||||||
|
- exec: tag1 # 本服务器运行插件的 tag。
|
||||||
|
timeout: 5 # 请求处理超时时间。单位: 秒。默认: 5。
|
||||||
|
listener: # 监听设置
|
||||||
|
- protocol: https # 协议,支持 "udp", "tcp", "tls", "https" 和 "http"
|
||||||
|
addr: ":443" # 监听地址。
|
||||||
|
cert: "/path/to/my/cert" # TLS 所需证书文件。
|
||||||
|
key: "/path/to/my/key" # TLS 所需密钥文件。
|
||||||
|
url_path: "/dns-query" # DoH 路径。
|
||||||
|
get_user_ip_from_header: "X-Forwarded-For" # DoH 尝试从 HTTP 头获取用户 IP。
|
||||||
|
idle_timeout: 10 # 连接复用空连接超时时间。单位: 秒。默认: 10。
|
||||||
206
luci-app-mosdns/root/etc/mosdns/def_config_orig.yaml
Normal file
206
luci-app-mosdns/root/etc/mosdns/def_config_orig.yaml
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
log:
|
||||||
|
level: loglvl
|
||||||
|
file: "logfile"
|
||||||
|
|
||||||
|
# api:
|
||||||
|
# http: "127.0.0.1:8080" # 在该地址启动 api 接口。
|
||||||
|
|
||||||
|
plugins:
|
||||||
|
# 加载配置
|
||||||
|
# 国内域名
|
||||||
|
- tag: geosite_cn
|
||||||
|
type: domain_set
|
||||||
|
args:
|
||||||
|
files: # 从文本文件载入
|
||||||
|
- "/etc/mosdns/rule/geosite_cn.txt"
|
||||||
|
|
||||||
|
# 国内ip
|
||||||
|
- tag: geoip_cn
|
||||||
|
type: ip_set
|
||||||
|
args:
|
||||||
|
files: # 从文本文件载入
|
||||||
|
- "/etc/mosdns/rule/geoip_cn.txt"
|
||||||
|
|
||||||
|
# 国外域名
|
||||||
|
- tag: geosite_no_cn
|
||||||
|
type: domain_set
|
||||||
|
args:
|
||||||
|
files: # 从文本文件载入
|
||||||
|
- "/etc/mosdns/rule/geosite_no_cn.txt"
|
||||||
|
|
||||||
|
# 白名单 加入的域名始终允许使用 “本地 DNS” 进行解析
|
||||||
|
- tag: whitelist
|
||||||
|
type: domain_set
|
||||||
|
args:
|
||||||
|
files: # 从文本文件载入
|
||||||
|
- "/etc/mosdns/rule/whitelist.txt"
|
||||||
|
|
||||||
|
# 黑名单 加入的域名将屏蔽 DNS 解析
|
||||||
|
- tag: blocklist
|
||||||
|
type: domain_set
|
||||||
|
args:
|
||||||
|
files: # 从文本文件载入
|
||||||
|
- "/etc/mosdns/rule/blocklist.txt"
|
||||||
|
|
||||||
|
# 自定义 Hosts 重写
|
||||||
|
- 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/rule/serverlist.txt"
|
||||||
|
|
||||||
|
# 缓存
|
||||||
|
- tag: cache
|
||||||
|
type: cache
|
||||||
|
args:
|
||||||
|
size: 200000
|
||||||
|
lazy_cache_ttl: 259200
|
||||||
|
|
||||||
|
# 转发至本地服务器
|
||||||
|
- tag: forward_local
|
||||||
|
type: forward
|
||||||
|
args:
|
||||||
|
upstreams:
|
||||||
|
- addr: localdns1
|
||||||
|
- addr: localdns2
|
||||||
|
|
||||||
|
# 转发至远程服务器
|
||||||
|
- tag: forward_remote
|
||||||
|
type: forward
|
||||||
|
args:
|
||||||
|
upstreams:
|
||||||
|
- addr: remotedns1
|
||||||
|
enable_pipeline: true
|
||||||
|
- addr: remotedns2
|
||||||
|
enable_pipeline: true
|
||||||
|
|
||||||
|
# 国内解析
|
||||||
|
- tag: local_sequence
|
||||||
|
type: sequence
|
||||||
|
args:
|
||||||
|
- exec: $forward_local
|
||||||
|
|
||||||
|
# 国外解析
|
||||||
|
- tag: remote_sequence
|
||||||
|
type: sequence
|
||||||
|
args:
|
||||||
|
- exec: prefer_ipv4
|
||||||
|
- exec: $forward_remote
|
||||||
|
|
||||||
|
# 有响应终止返回
|
||||||
|
- tag: has_resp_sequence
|
||||||
|
type: sequence
|
||||||
|
args:
|
||||||
|
- matches: has_resp
|
||||||
|
exec: accept
|
||||||
|
|
||||||
|
|
||||||
|
# fallback 用本地服务器 sequence
|
||||||
|
# 返回不包含本地 ip 则 reject
|
||||||
|
- tag: query_is_local_ip
|
||||||
|
type: sequence
|
||||||
|
args:
|
||||||
|
- exec: $local_sequence
|
||||||
|
- matches: resp_ip $geoip_cn
|
||||||
|
exec: accept
|
||||||
|
- exec: reject
|
||||||
|
|
||||||
|
# fallback 用远程服务器 sequence
|
||||||
|
- tag: query_is_remote
|
||||||
|
type: sequence
|
||||||
|
args:
|
||||||
|
- exec: $remote_sequence
|
||||||
|
- exec: accept
|
||||||
|
|
||||||
|
# fallback 用远程服务器 sequence
|
||||||
|
- tag: fallback
|
||||||
|
type: fallback
|
||||||
|
args:
|
||||||
|
primary: query_is_local_ip
|
||||||
|
secondary: query_is_remote
|
||||||
|
threshold: 150
|
||||||
|
always_standby: true
|
||||||
|
|
||||||
|
|
||||||
|
# 查询国内域名
|
||||||
|
- 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
|
||||||
|
- exec: jump has_resp_sequence
|
||||||
|
|
||||||
|
# 拒绝名单
|
||||||
|
- tag: query_is_reject_domain
|
||||||
|
type: sequence
|
||||||
|
args:
|
||||||
|
- matches: qname $blocklist
|
||||||
|
exec: reject 3
|
||||||
|
- matches: qname $adlist
|
||||||
|
exec: reject 3
|
||||||
|
- matches:
|
||||||
|
- qtype 12
|
||||||
|
exec: reject 3
|
||||||
|
- matches: qtype 65
|
||||||
|
exec: reject 3
|
||||||
|
|
||||||
|
# 主要的运行逻辑插件
|
||||||
|
# sequence 插件中调用的插件 tag 必须在 sequence 前定义,
|
||||||
|
# 否则 sequence 找不到对应插件。
|
||||||
|
- tag: main_sequence
|
||||||
|
type: sequence
|
||||||
|
args:
|
||||||
|
- exec: $hosts
|
||||||
|
- exec: jump has_resp_sequence
|
||||||
|
- exec: $redirect
|
||||||
|
- exec: jump has_resp_sequence
|
||||||
|
- exec: $query_is_whitelist_domain
|
||||||
|
- exec: $query_is_reject_domain
|
||||||
|
- exec: $cache
|
||||||
|
- 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
|
||||||
|
|
||||||
|
# 启动 udp 服务器。
|
||||||
|
- tag: udp_server
|
||||||
|
type: udp_server
|
||||||
|
args:
|
||||||
|
entry: main_sequence
|
||||||
|
listen: "127.0.0.1:listenport"
|
||||||
|
# 启动 tcp 服务器。
|
||||||
|
- tag: tcp_server
|
||||||
|
type: tcp_server
|
||||||
|
args:
|
||||||
|
entry: main_sequence
|
||||||
|
listen: "127.0.0.1:listenport"
|
||||||
79
luci-app-mosdns/root/etc/mosdns/lib.sh
Executable file
79
luci-app-mosdns/root/etc/mosdns/lib.sh
Executable file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC2034 # Unused variables left for readability
|
||||||
|
LAN_DNS0="119.29.29.29"
|
||||||
|
LAN_DNS1="101.226.4.6"
|
||||||
|
WAN_DNS0="8.8.4.4"
|
||||||
|
WAN_DNS1="8.8.8.8"
|
||||||
|
REPO_URL="https://github.com/QiuSimons/openwrt-mos/raw/master/dat"
|
||||||
|
CDN_URL="https://gh.404delivr.workers.dev"
|
||||||
|
DAT_PREFIX="$CDN_URL/$REPO_URL"
|
||||||
|
|
||||||
|
logfile_path() (
|
||||||
|
configfile=$(uci -q get mosdns.mosdns.configfile)
|
||||||
|
if [ "$configfile" = "./def_config.yaml" ]; then
|
||||||
|
uci -q get mosdns.mosdns.logfile
|
||||||
|
else
|
||||||
|
[ ! -f /etc/mosdns/cus_config.yaml ] && exit 1
|
||||||
|
awk '/^log:/{f=1;next}f==1{if($0~/file:/){print;exit}if($0~/^[^ ]/)exit}' /etc/mosdns/cus_config.yaml | grep -Eo "/[^'\"]+"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
|
ext() {
|
||||||
|
command -v "$1" > /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
uci_ext() {
|
||||||
|
if [ "$1" == "ssrp" ]; then
|
||||||
|
uci get shadowsocksr.@global[0].global_server &> /dev/null
|
||||||
|
elif [ "$1" == "pw" ]; then
|
||||||
|
uci get passwall.@global[0].enabled &> /dev/null
|
||||||
|
elif [ "$1" == "pw2" ]; then
|
||||||
|
uci get passwall2.@global[0].enabled &> /dev/null
|
||||||
|
elif [ "$1" == "vssr" ]; then
|
||||||
|
uci get vssr.@global[0].global_server &> /dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
bakdns() {
|
||||||
|
if [ "$1" -eq 0 ]; then
|
||||||
|
echo "$LAN_DNS0"
|
||||||
|
elif [ "$1" -eq 1 ]; then
|
||||||
|
echo "$LAN_DNS1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
getdat() {
|
||||||
|
if ext curl; then
|
||||||
|
curl -fSLo "$TMPDIR/$1" "$DAT_PREFIX/$1"
|
||||||
|
else
|
||||||
|
wget "$DAT_PREFIX/$1" --no-check-certificate -O "$TMPDIR/$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
getdns() {
|
||||||
|
if [ "$2" == "inactive" ]; then
|
||||||
|
ubus call network.interface.wan status | jsonfilter -e "@['inactive']['dns-server'][$1]"
|
||||||
|
else
|
||||||
|
ubus call network.interface.wan status | jsonfilter -e "@['dns-server'][$1]"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
pid() {
|
||||||
|
pgrep -f "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$1" == "logfile" ]; then
|
||||||
|
logfile_path
|
||||||
|
elif [[ "$1" == "dns" && "$2" -le 1 ]]; then
|
||||||
|
if [ "$(ifconfig | grep -c wan)" = 0 ]; then
|
||||||
|
bakdns "$2"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [[ "$(getdns 0)" =~ ^127\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
getdns "$2" inactive
|
||||||
|
elif [[ "$(getdns "$2")" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
getdns "$2"
|
||||||
|
else
|
||||||
|
bakdns "$2"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
45
luci-app-mosdns/root/etc/mosdns/mosupdater.sh
Executable file
45
luci-app-mosdns/root/etc/mosdns/mosupdater.sh
Executable file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
set -o pipefail
|
||||||
|
source /etc/mosdns/lib.sh
|
||||||
|
|
||||||
|
TMPDIR=$(mktemp -d) || exit 1
|
||||||
|
getdat geosite_cn.txt
|
||||||
|
getdat geosite_no_cn.txt
|
||||||
|
getdat geoip_cn.txt
|
||||||
|
if [ "$(grep -o cn "$TMPDIR"/geosite_cn.txt | wc -l)" -lt 100 ]; then
|
||||||
|
rm -rf "$TMPDIR"/geosite_cn.txt
|
||||||
|
fi
|
||||||
|
if [ "$(grep -o google "$TMPDIR"/geosite_no_cn.txt | wc -l)" -eq 0 ]; then
|
||||||
|
rm -rf "$TMPDIR"/geosite_no_cn.txt
|
||||||
|
fi
|
||||||
|
cp -rf "$TMPDIR"/* /etc/mosdns/rule
|
||||||
|
rm -rf "$TMPDIR"
|
||||||
|
|
||||||
|
syncconfig=$(uci -q get mosdns.mosdns.syncconfig)
|
||||||
|
if [ "$syncconfig" -eq 1 ]; then
|
||||||
|
TMPDIR=$(mktemp -d) || exit 2
|
||||||
|
getdat def_config_v5.yaml
|
||||||
|
|
||||||
|
if [ "$(grep -o plugin "$TMPDIR"/def_config_v5.yaml | wc -l)" -eq 0 ]; then
|
||||||
|
rm -rf "$TMPDIR"/def_config_v5.yaml
|
||||||
|
else
|
||||||
|
mv "$TMPDIR"/def_config_v5.yaml "$TMPDIR"/def_config_orig.yaml
|
||||||
|
fi
|
||||||
|
cp -rf "$TMPDIR"/* /etc/mosdns
|
||||||
|
rm -rf "$TMPDIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
adblock=$(uci -q get mosdns.mosdns.adblock)
|
||||||
|
if [ "$adblock" -eq 1 ]; then
|
||||||
|
TMPDIR=$(mktemp -d) || exit 3
|
||||||
|
getdat serverlist.txt
|
||||||
|
|
||||||
|
if [ "$(grep -o .com "$TMPDIR"/serverlist.txt | wc -l)" -lt 1000 ]; then
|
||||||
|
rm -rf "$TMPDIR"/serverlist.txt
|
||||||
|
fi
|
||||||
|
cp -rf "$TMPDIR"/* /etc/mosdns/rule
|
||||||
|
rm -rf /etc/mosdns/rule/serverlist.bak "$TMPDIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
7952
luci-app-mosdns/root/etc/mosdns/rule/geoip_cn.txt
Normal file
7952
luci-app-mosdns/root/etc/mosdns/rule/geoip_cn.txt
Normal file
File diff suppressed because it is too large
Load Diff
66120
luci-app-mosdns/root/etc/mosdns/rule/geosite_cn.txt
Normal file
66120
luci-app-mosdns/root/etc/mosdns/rule/geosite_cn.txt
Normal file
File diff suppressed because it is too large
Load Diff
35138
luci-app-mosdns/root/etc/mosdns/rule/geosite_no_cn.txt
Normal file
35138
luci-app-mosdns/root/etc/mosdns/rule/geosite_no_cn.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,3 +0,0 @@
|
|||||||
domain:gstatic.com
|
|
||||||
domain:kernel.org
|
|
||||||
keyword:github
|
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
0.in-addr.arpa
|
# from unbound.conf
|
||||||
10.in-addr.arpa
|
|
||||||
127.in-addr.arpa
|
127.in-addr.arpa
|
||||||
|
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa
|
||||||
|
onion
|
||||||
|
test
|
||||||
|
invalid
|
||||||
|
10.in-addr.arpa
|
||||||
16.172.in-addr.arpa
|
16.172.in-addr.arpa
|
||||||
17.172.in-addr.arpa
|
17.172.in-addr.arpa
|
||||||
18.172.in-addr.arpa
|
18.172.in-addr.arpa
|
||||||
@@ -17,6 +21,21 @@
|
|||||||
29.172.in-addr.arpa
|
29.172.in-addr.arpa
|
||||||
30.172.in-addr.arpa
|
30.172.in-addr.arpa
|
||||||
31.172.in-addr.arpa
|
31.172.in-addr.arpa
|
||||||
|
168.192.in-addr.arpa
|
||||||
|
0.in-addr.arpa
|
||||||
|
254.169.in-addr.arpa
|
||||||
|
2.0.192.in-addr.arpa
|
||||||
|
100.51.198.in-addr.arpa
|
||||||
|
113.0.203.in-addr.arpa
|
||||||
|
255.255.255.255.in-addr.arpa
|
||||||
|
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa
|
||||||
|
d.f.ip6.arpa
|
||||||
|
8.e.f.ip6.arpa
|
||||||
|
9.e.f.ip6.arpa
|
||||||
|
a.e.f.ip6.arpa
|
||||||
|
b.e.f.ip6.arpa
|
||||||
|
8.b.d.0.1.0.0.2.ip6.arpa
|
||||||
|
# 100.64.0.0/10 保留地址
|
||||||
64.100.in-addr.arpa
|
64.100.in-addr.arpa
|
||||||
65.100.in-addr.arpa
|
65.100.in-addr.arpa
|
||||||
66.100.in-addr.arpa
|
66.100.in-addr.arpa
|
||||||
@@ -80,8 +99,4 @@
|
|||||||
124.100.in-addr.arpa
|
124.100.in-addr.arpa
|
||||||
125.100.in-addr.arpa
|
125.100.in-addr.arpa
|
||||||
126.100.in-addr.arpa
|
126.100.in-addr.arpa
|
||||||
127.100.in-addr.arpa
|
127.100.in-addr.arpa
|
||||||
2.0.192.in-addr.arpa
|
|
||||||
168.192.in-addr.arpa
|
|
||||||
255.255.255.255.in-addr.arpa
|
|
||||||
domain:ip6.arpa
|
|
||||||
65077
luci-app-mosdns/root/etc/mosdns/rule/serverlist.txt
Normal file
65077
luci-app-mosdns/root/etc/mosdns/rule/serverlist.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,24 +1,29 @@
|
|||||||
domain:bing.com
|
tracking.miui.com
|
||||||
domain:live.com
|
tracking.intl.miui.com
|
||||||
domain:msn.com
|
api.intl.miui.com
|
||||||
domain:ntp.org
|
stat.xiaomi.com
|
||||||
domain:office.com
|
checkip.synology.com
|
||||||
domain:qlogo.cn
|
checkipv6.synology.com
|
||||||
domain:qq.com
|
checkport.synology.com
|
||||||
domain:redhat.com
|
ddns.synology.com
|
||||||
keyword:aaplimg
|
account.synology.com
|
||||||
keyword:aicdn
|
whatismyip.akamai.com
|
||||||
keyword:akadns
|
checkip.dyndns.org
|
||||||
keyword:akamai
|
teamviewer.com
|
||||||
|
bing.com
|
||||||
|
api.ipify.org
|
||||||
|
epicgames.com
|
||||||
|
emby.kyarucloud.moe
|
||||||
|
ntp.aliyun.com
|
||||||
|
ntp.tencent.com
|
||||||
|
cn.ntp.org.cn
|
||||||
|
ntp.ntsc.ac.cn
|
||||||
|
keyword:sglong
|
||||||
|
keyword:sgshort
|
||||||
|
keyword:sgminorshort
|
||||||
|
keyword:sgaxshort
|
||||||
|
keyword:sgfindershort
|
||||||
keyword:apple
|
keyword:apple
|
||||||
keyword:douyin
|
keyword:aaplimg
|
||||||
keyword:fclouddns
|
|
||||||
keyword:icloud
|
|
||||||
keyword:itunes
|
keyword:itunes
|
||||||
keyword:microsoft
|
keyword:icloud
|
||||||
keyword:mzstatic
|
|
||||||
keyword:ssrcdn
|
|
||||||
keyword:windows
|
|
||||||
keyword:xxpkg
|
|
||||||
keyword:yximgs
|
|
||||||
keyword:yxygslb
|
|
||||||
|
|||||||
75
luci-app-mosdns/root/etc/mosdns/set.sh
Executable file
75
luci-app-mosdns/root/etc/mosdns/set.sh
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source /etc/mosdns/lib.sh
|
||||||
|
|
||||||
|
if uci_ext ssrp; then
|
||||||
|
if [ "$1" = "unset" ]; then
|
||||||
|
uci set shadowsocksr.@global[0].pdnsd_enable='1'
|
||||||
|
uci set shadowsocksr.@global[0].tunnel_forward="$WAN_DNS0:53"
|
||||||
|
elif [ "$1" = "" ]; then
|
||||||
|
if [ "$(uci -q get mosdns.mosdns.listen_port)" -eq 5335 ]; then
|
||||||
|
uci set shadowsocksr.@global[0].pdnsd_enable='0'
|
||||||
|
uci del shadowsocksr.@global[0].tunnel_forward
|
||||||
|
uci del shadowsocksr.@global[0].adblock_url
|
||||||
|
else
|
||||||
|
uci set shadowsocksr.@global[0].pdnsd_enable='1'
|
||||||
|
uci set shadowsocksr.@global[0].tunnel_forward="127.0.0.1:$(uci -q get mosdns.mosdns.listen_port)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
uci commit shadowsocksr
|
||||||
|
if [ "$(pid ssrplus)" ]; then
|
||||||
|
/etc/init.d/shadowsocksr restart
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if uci_ext pw; then
|
||||||
|
if [ "$1" = "unset" ]; then
|
||||||
|
uci set passwall.@global[0].dns_mode='dns2tcp'
|
||||||
|
uci set passwall.@global[0].dns_forward="$WAN_DNS1"
|
||||||
|
uci set passwall.@global[0].remote_dns="$WAN_DNS1"
|
||||||
|
uci set passwall.@global[0].dns_cache='1'
|
||||||
|
uci set passwall.@global[0].chinadns_ng='1'
|
||||||
|
elif [ "$1" = "" ]; then
|
||||||
|
uci set passwall.@global[0].dns_mode='udp'
|
||||||
|
uci set passwall.@global[0].dns_forward="127.0.0.1:$(uci -q get mosdns.mosdns.listen_port)"
|
||||||
|
uci set passwall.@global[0].remote_dns="127.0.0.1:$(uci -q get mosdns.mosdns.listen_port)"
|
||||||
|
uci del passwall.@global[0].dns_cache
|
||||||
|
uci del passwall.@global[0].chinadns_ng
|
||||||
|
fi
|
||||||
|
uci commit passwall
|
||||||
|
if [ "$(pid passwall)" ]; then
|
||||||
|
/etc/init.d/passwall restart
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if uci_ext pw2; then
|
||||||
|
if [ "$1" = "unset" ]; then
|
||||||
|
uci set passwall2.@global[0].direct_dns_protocol='auto'
|
||||||
|
uci del passwall2.@global[0].direct_dns
|
||||||
|
uci set passwall2.@global[0].remote_dns="$WAN_DNS0"
|
||||||
|
uci set passwall2.@global[0].dns_query_strategy='UseIPv4'
|
||||||
|
elif [ "$1" = "" ]; then
|
||||||
|
uci set passwall2.@global[0].direct_dns_protocol='udp'
|
||||||
|
uci set passwall2.@global[0].direct_dns="127.0.0.1:$(uci -q get mosdns.mosdns.listen_port)"
|
||||||
|
uci set passwall2.@global[0].remote_dns_protocol='udp'
|
||||||
|
uci set passwall2.@global[0].remote_dns="127.0.0.1:$(uci -q get mosdns.mosdns.listen_port)"
|
||||||
|
uci set passwall2.@global[0].dns_query_strategy='UseIP'
|
||||||
|
fi
|
||||||
|
uci commit passwall2
|
||||||
|
if [ "$(pid passwall2)" ]; then
|
||||||
|
/etc/init.d/passwall2 restart
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if uci_ext vssr; then
|
||||||
|
if [ "$1" = "unset" ]; then
|
||||||
|
uci set vssr.@global[0].pdnsd_enable='1'
|
||||||
|
elif [ "$1" = "" ]; then
|
||||||
|
uci set vssr.@global[0].pdnsd_enable='0'
|
||||||
|
fi
|
||||||
|
uci commit vssr
|
||||||
|
if [ "$(pid vssr)" ]; then
|
||||||
|
/etc/init.d/vssr restart
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -1,193 +0,0 @@
|
|||||||
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: greylist
|
|
||||||
file: "/etc/mosdns/rule/greylist.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
|
|
||||||
|
|
||||||
- tag: local_ptr
|
|
||||||
file: "/etc/mosdns/rule/local-ptr.txt"
|
|
||||||
auto_reload: true
|
|
||||||
|
|
||||||
- tag: adlist
|
|
||||||
file: "/etc/mosdns/rule/adlist.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: forward
|
|
||||||
args:
|
|
||||||
upstream:
|
|
||||||
- addr: local_dns
|
|
||||||
bootstrap:
|
|
||||||
- "bootstrap_dns"
|
|
||||||
|
|
||||||
- tag: "forward_remote"
|
|
||||||
type: fast_forward
|
|
||||||
args:
|
|
||||||
upstream:
|
|
||||||
- addr: remote_dns
|
|
||||||
|
|
||||||
- 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_greylist_domain
|
|
||||||
type: query_matcher
|
|
||||||
args:
|
|
||||||
domain:
|
|
||||||
- "provider:greylist"
|
|
||||||
|
|
||||||
- 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: match_local_ptr
|
|
||||||
type: query_matcher
|
|
||||||
args:
|
|
||||||
qtype: [12]
|
|
||||||
domain:
|
|
||||||
- "provider:local_ptr"
|
|
||||||
|
|
||||||
- tag: match_qtype65
|
|
||||||
type: query_matcher
|
|
||||||
args:
|
|
||||||
qtype: [65]
|
|
||||||
|
|
||||||
- tag: "main_sequence"
|
|
||||||
type: "sequence"
|
|
||||||
args:
|
|
||||||
exec:
|
|
||||||
- _misc_optm
|
|
||||||
- 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 || match_local_ptr || match_qtype65"
|
|
||||||
exec:
|
|
||||||
- _new_nxdomain_response
|
|
||||||
- _return
|
|
||||||
|
|
||||||
- lazy_cache
|
|
||||||
|
|
||||||
- if: query_is_greylist_domain
|
|
||||||
exec:
|
|
||||||
- forward_remote
|
|
||||||
- modify_ttl
|
|
||||||
- _return
|
|
||||||
|
|
||||||
- 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"
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
script_action=${1}
|
|
||||||
|
|
||||||
logfile_path() (
|
|
||||||
configfile=$(uci -q get mosdns.config.configfile)
|
|
||||||
if [ "$configfile" = "/etc/mosdns/config.yaml" ]; then
|
|
||||||
uci -q get mosdns.config.logfile
|
|
||||||
else
|
|
||||||
[ ! -f /etc/mosdns/config_custom.yaml ] && exit 1
|
|
||||||
awk '/^log:/{f=1;next}f==1{if($0~/file:/){print;exit}if($0~/^[^ ]/)exit}' /etc/mosdns/config_custom.yaml | grep -Eo "/[^'\"]+"
|
|
||||||
fi
|
|
||||||
)
|
|
||||||
|
|
||||||
interface_dns() (
|
|
||||||
if [ "$(uci -q get mosdns.config.custom_local_dns)" -eq 1 ]; then
|
|
||||||
uci -q get mosdns.config.local_dns
|
|
||||||
else
|
|
||||||
peerdns=$(uci -q get network.wan.peerdns)
|
|
||||||
proto=$(uci -q get network.wan.proto)
|
|
||||||
if [ "$peerdns" = 0 ] || [ "$proto" = "static" ]; then
|
|
||||||
uci -q get network.wan.dns
|
|
||||||
else
|
|
||||||
interface_status=$(ubus call network.interface.wan status)
|
|
||||||
echo $interface_status | jsonfilter -e "@['dns-server'][0]"
|
|
||||||
echo $interface_status | jsonfilter -e "@['dns-server'][1]"
|
|
||||||
fi
|
|
||||||
[ $? -ne 0 ] && echo "119.29.29.29"
|
|
||||||
fi
|
|
||||||
)
|
|
||||||
|
|
||||||
ad_block() (
|
|
||||||
adblock=$(uci -q get mosdns.config.adblock)
|
|
||||||
if [ "$adblock" -eq 1 ]; then
|
|
||||||
ad_source=$(uci -q get mosdns.config.ad_source)
|
|
||||||
if [ "$ad_source" = "geosite.dat" ]; then
|
|
||||||
echo "provider:geosite:category-ads-all"
|
|
||||||
else
|
|
||||||
echo "provider:adlist"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "full:disable-category-ads-all.null"
|
|
||||||
fi
|
|
||||||
)
|
|
||||||
|
|
||||||
adlist_update() (
|
|
||||||
ad_source=$(uci -q get mosdns.config.ad_source)
|
|
||||||
[ "$ad_source" = "geosite.dat" ] || [ -z "$ad_source" ] && exit 0
|
|
||||||
AD_TMPDIR=$(mktemp -d) || exit 1
|
|
||||||
if echo "$ad_source" | grep -Eq "^https://raw.githubusercontent.com" ; then
|
|
||||||
google_status=$(curl -I -4 -m 3 -o /dev/null -s -w %{http_code} http://www.google.com/generate_204)
|
|
||||||
[ "$google_status" -ne "204" ] && mirror="https://ghproxy.com/"
|
|
||||||
fi
|
|
||||||
echo -e "\e[1;32mDownloading $mirror$ad_source\e[0m"
|
|
||||||
curl --connect-timeout 60 -m 90 --ipv4 -fSLo "$AD_TMPDIR/adlist.txt" "$mirror$ad_source"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
rm -rf "$AD_TMPDIR"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
\cp "$AD_TMPDIR/adlist.txt" /etc/mosdns/rule/adlist.txt
|
|
||||||
echo "$ad_source" > /etc/mosdns/rule/.ad_source
|
|
||||||
rm -rf "$AD_TMPDIR"
|
|
||||||
fi
|
|
||||||
)
|
|
||||||
|
|
||||||
geodat_update() (
|
|
||||||
geodat_download() (
|
|
||||||
google_status=$(curl -I -4 -m 3 -o /dev/null -s -w %{http_code} http://www.google.com/generate_204)
|
|
||||||
[ "$google_status" -ne "204" ] && mirror="https://ghproxy.com/"
|
|
||||||
echo -e "\e[1;32mDownloading "$mirror"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/$1\e[0m"
|
|
||||||
curl --connect-timeout 60 -m 900 --ipv4 -fSLo "$TMPDIR/$1" ""$mirror"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/$1"
|
|
||||||
)
|
|
||||||
TMPDIR=$(mktemp -d) || exit 1
|
|
||||||
geodat_download geoip.dat && geodat_download geosite.dat
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
rm -rf "$TMPDIR"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
cp -f "$TMPDIR"/* /usr/share/v2ray
|
|
||||||
rm -rf "$TMPDIR"
|
|
||||||
)
|
|
||||||
|
|
||||||
case $script_action in
|
|
||||||
"dns")
|
|
||||||
interface_dns
|
|
||||||
;;
|
|
||||||
"ad")
|
|
||||||
ad_block
|
|
||||||
;;
|
|
||||||
"geodata")
|
|
||||||
geodat_update && adlist_update
|
|
||||||
;;
|
|
||||||
"logfile")
|
|
||||||
logfile_path
|
|
||||||
;;
|
|
||||||
"adlist_update")
|
|
||||||
adlist_update
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -5,41 +5,86 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=mosdns
|
PKG_NAME:=mosdns
|
||||||
PKG_VERSION:=4.5.3
|
PKG_VERSION:=1d985e2
|
||||||
PKG_RELEASE:=$(AUTORELEASE)
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=mosdns-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/IrineSistiana/mosdns/tar.gz/v$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/IrineSistiana/mosdns/tar.gz/$(PKG_VERSION)?
|
||||||
PKG_HASH:=2a13b1b1d862731cf946a8ceaa99523a0eb0eaae56045dd31207b61a5a6d47ae
|
PKG_HASH:=skip
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-3.0
|
PKG_LICENSE:=GPL-3.0
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
PKG_LICENSE_FILE:=LICENSE
|
||||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
CONFIG_MOSDNS_COMPRESS_GOPROXY \
|
||||||
|
CONFIG_MOSDNS_COMPRESS_UPX
|
||||||
|
|
||||||
|
PKG_BUILD_DEPENDS:=golang/host upx/host
|
||||||
PKG_BUILD_PARALLEL:=1
|
PKG_BUILD_PARALLEL:=1
|
||||||
PKG_USE_MIPS16:=0
|
PKG_USE_MIPS16:=0
|
||||||
|
|
||||||
GO_PKG:=github.com/IrineSistiana/mosdns
|
GO_PKG:=github.com/IrineSistiana/mosdns
|
||||||
GO_PKG_LDFLAGS_X:=main.version=v$(PKG_VERSION)
|
GO_PKG_LDFLAGS:=-s -w
|
||||||
|
GO_PKG_LDFLAGS_X:=main.version=$(PKG_VERSION)
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||||
|
|
||||||
define Package/mosdns
|
define Package/mosdns/Default
|
||||||
SECTION:=net
|
SECTION:=net
|
||||||
CATEGORY:=Network
|
CATEGORY:=Network
|
||||||
SUBMENU:=IP Addresses and Names
|
SUBMENU:=IP Addresses and Names
|
||||||
TITLE:=A plug-in DNS forwarder/splitter
|
TITLE:=A plug-in DNS forwarder/splitter
|
||||||
URL:=https://github.com/IrineSistiana/mosdns
|
URL:=https://github.com/IrineSistiana/mosdns
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
endef
|
||||||
|
|
||||||
|
define Package/mosdns
|
||||||
|
$(call Package/mosdns/Default)
|
||||||
|
DEPENDS:=$(GO_ARCH_DEPENDS)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/mosdns-v5
|
||||||
|
$(call Package/mosdns/Default)
|
||||||
|
DEPENDS:=$(GO_ARCH_DEPENDS)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/mosdns/config
|
||||||
|
config MOSDNS_COMPRESS_GOPROXY
|
||||||
|
bool "Compiling with GOPROXY proxy"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config MOSDNS_COMPRESS_UPX
|
||||||
|
bool "Compress executable files with UPX"
|
||||||
|
default y
|
||||||
|
endef
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_MOSDNS_COMPRESS_GOPROXY),y)
|
||||||
|
export GO111MODULE=on
|
||||||
|
export GOPROXY=https://mirrors.aliyun.com/goproxy/
|
||||||
|
endif
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
$(call Build/Prepare/Default)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
GO_PKG_TARGET_VARS:=$(filter-out CGO_ENABLED=%,$(GO_PKG_TARGET_VARS)) CGO_ENABLED=0
|
GO_PKG_TARGET_VARS:=$(filter-out CGO_ENABLED=%,$(GO_PKG_TARGET_VARS)) CGO_ENABLED=0
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call GoPackage/Build/Compile)
|
||||||
|
ifneq ($(CONFIG_MOSDNS_COMPRESS_UPX),)
|
||||||
|
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/mosdns
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/mosdns/install
|
define Package/mosdns/install
|
||||||
$(call GoPackage/Package/Install/Bin,$(1))
|
$(call GoPackage/Package/Install/Bin,$(1))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/mosdns-v5/install
|
||||||
|
$(call GoPackage/Package/Install/Bin,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,mosdns))
|
$(eval $(call GoBinPackage,mosdns))
|
||||||
$(eval $(call BuildPackage,mosdns))
|
$(eval $(call BuildPackage,mosdns))
|
||||||
|
$(eval $(call BuildPackage,mosdns-v5))
|
||||||
|
|||||||
Reference in New Issue
Block a user