mirror of
https://github.com/kenzok8/openwrt-packages
synced 2025-01-07 07:06:45 +08:00
update 2023-02-03 17:07:36
This commit is contained in:
parent
5db1fc767e
commit
e01a3beeb4
@ -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.5
|
PKG_VERSION:=1.4.4
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=2
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI Support for mosdns
|
LUCI_TITLE:=LuCI Support for mosdns
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=all
|
||||||
LUCI_DEPENDS:=+mosdns-v5 +jsonfilter +bash +luci-compat +zoneinfo-asia
|
LUCI_DEPENDS:=+mosdns +jsonfilter +luci-compat +curl +v2ray-geoip +v2ray-geosite
|
||||||
|
|
||||||
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,6 +16,7 @@ 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()
|
||||||
@ -26,9 +27,16 @@ function act_status()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function get_log()
|
function get_log()
|
||||||
luci.http.write(luci.sys.exec("cat $(/etc/mosdns/lib.sh logfile)"))
|
luci.http.write(luci.sys.exec("cat $(/usr/share/mosdns/mosdns.sh logfile)"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function clear_log()
|
function clear_log()
|
||||||
luci.sys.call("true > $(/etc/mosdns/lib.sh logfile)")
|
luci.sys.call("cat /dev/null > $(/usr/share/mosdns/mosdns.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,75 +11,126 @@ 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("MosDNS Config File"))
|
configfile = s:option(ListValue, "configfile", translate("Config File"))
|
||||||
configfile:value("./def_config.yaml", translate("Def Config"))
|
configfile:value("/etc/mosdns/config.yaml", translate("Default Config"))
|
||||||
configfile:value("./cus_config.yaml", translate("Cus Config"))
|
configfile:value("/etc/mosdns/config_custom.yaml", translate("Custom Config"))
|
||||||
configfile.default = "./def_config.yaml"
|
configfile.default = "/etc/mosdns/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", "./def_config.yaml")
|
listenport:depends( "configfile", "/etc/mosdns/config.yaml")
|
||||||
|
|
||||||
loglv = s:option(ListValue, "loglv", translate("Log Level"))
|
loglevel = s:option(ListValue, "log_level", translate("Log Level"))
|
||||||
loglv:value("debug", translate("Debug"))
|
loglevel:value("debug", translate("Debug"))
|
||||||
loglv:value("info", translate("Info"))
|
loglevel:value("info", translate("Info"))
|
||||||
loglv:value("warn", translate("Warning"))
|
loglevel:value("warn", translate("Warning"))
|
||||||
loglv:value("error", translate("Error"))
|
loglevel:value("error", translate("Error"))
|
||||||
loglv.default = "error"
|
loglevel.default = "info"
|
||||||
loglv:depends( "configfile", "./def_config.yaml")
|
loglevel:depends( "configfile", "/etc/mosdns/config.yaml")
|
||||||
|
|
||||||
logfile = s:option(Value, "logfile", translate("MosDNS Log File"))
|
logfile = s:option(Value, "logfile", translate("Log File"))
|
||||||
logfile.placeholder = "/tmp/mosdns.txt"
|
logfile.placeholder = "/tmp/mosdns.log"
|
||||||
logfile.default = "/tmp/mosdns.txt"
|
logfile.default = "/tmp/mosdns.log"
|
||||||
logfile:depends( "configfile", "./def_config.yaml")
|
logfile:depends( "configfile", "/etc/mosdns/config.yaml")
|
||||||
|
|
||||||
remote_dns = s:option(Value, "remote_dns1", translate("Remote DNS"))
|
redirect = s:option(Flag, "redirect", translate("DNS Forward"), translate("Forward Dnsmasq Domain Name resolution requests to MosDNS"))
|
||||||
remote_dns.default = "tls://8.8.4.4"
|
|
||||||
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 = 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")
|
|
||||||
|
|
||||||
redirect = s:option(Flag, "redirect", translate("Enable DNS Redirect"))
|
|
||||||
redirect:depends( "configfile", "./def_config.yaml")
|
|
||||||
redirect.default = true
|
redirect.default = true
|
||||||
|
|
||||||
|
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.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://149.112.112.112", "149.112.112.112 (Quad9 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.220.220", "208.67.220.220 (Open DNS)")
|
||||||
|
remote_dns:depends( "configfile", "/etc/mosdns/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"))
|
||||||
|
remote_dns_pipeline.rmempty = false
|
||||||
|
remote_dns_pipeline.default = false
|
||||||
|
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", "./def_config.yaml")
|
adblock:depends( "configfile", "/etc/mosdns/config.yaml")
|
||||||
adblock.default = false
|
adblock.default = false
|
||||||
|
|
||||||
set_config = s:option(Button, "set_config", translate("DNS Helper"))
|
adblock = s:option(Value, "ad_source", translate("ADblock Source"))
|
||||||
set_config.inputtitle = translate("Apply")
|
adblock:depends("adblock", "1")
|
||||||
set_config.inputstyle = "reload"
|
adblock.default = "https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt"
|
||||||
set_config.description = translate("This will make the necessary adjustments to other plug-in settings.")
|
adblock:value("geosite.dat", "v2ray-geosite")
|
||||||
set_config.write = function()
|
adblock:value("https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt", "anti-AD")
|
||||||
luci.sys.exec("/etc/mosdns/set.sh &> /dev/null &")
|
adblock:value("https://raw.githubusercontent.com/sjhgvr/oisd/main/dbl_basic.txt", "oisd (basic)")
|
||||||
end
|
adblock:value("https://raw.githubusercontent.com/QiuSimons/openwrt-mos/master/dat/serverlist.txt", "QiuSimons/openwrt-mos")
|
||||||
set_config:depends( "configfile", "./def_config.yaml")
|
|
||||||
|
|
||||||
unset_config = s:option(Button, "unset_config", translate("Revert Settings"))
|
reload_service = s:option( Button, "_reload", translate("Reload Service"), translate("Reload service to take effect of new configuration"))
|
||||||
unset_config.inputtitle = translate("Apply")
|
reload_service.write = function()
|
||||||
unset_config.inputstyle = "reload"
|
luci.sys.exec("/etc/init.d/mosdns reload")
|
||||||
unset_config.description = translate("This will revert the adjustments.")
|
end
|
||||||
unset_config.write = function()
|
reload_service:depends( "configfile", "/etc/mosdns/config_custom.yaml")
|
||||||
luci.sys.exec("/etc/mosdns/set.sh unset &> /dev/null &")
|
|
||||||
|
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>")
|
||||||
|
config.template = "cbi/tvalue"
|
||||||
|
config.rows = 25
|
||||||
|
config:depends( "configfile", "/etc/mosdns/config_custom.yaml")
|
||||||
|
|
||||||
|
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,9 +2,10 @@ 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 cus_config_file = "/etc/mosdns/cus_config.yaml"
|
local local_ptr_file = "/etc/mosdns/rule/local-ptr.txt"
|
||||||
|
|
||||||
m = Map("mosdns")
|
m = Map("mosdns")
|
||||||
|
|
||||||
@ -13,9 +14,10 @@ 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("cus_config", translate("Cus Config"))
|
s:tab("local_ptr_list", translate("Block PTR"))
|
||||||
|
|
||||||
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
|
||||||
@ -37,6 +39,16 @@ 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"
|
||||||
@ -57,12 +69,12 @@ o.validate = function(self, value)
|
|||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
|
||||||
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 = 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.rows = 30
|
o.rows = 15
|
||||||
o.wrap = "off"
|
o.wrap = "off"
|
||||||
o.cfgvalue = function(self, section) return nixio.fs.readfile(cus_config_file) or "" end
|
o.cfgvalue = function(self, section) return nixio.fs.readfile(local_ptr_file) or "" end
|
||||||
o.write = function(self, section, value) nixio.fs.writefile(cus_config_file, value:gsub("\r\n", "\n")) end
|
o.write = function(self, section, value) nixio.fs.writefile(local_ptr_file, value:gsub("\r\n", "\n")) end
|
||||||
o.remove = function(self, section, value) nixio.fs.writefile(cus_config_file, "") end
|
o.remove = function(self, section, value) nixio.fs.writefile(local_ptr_file, "") end
|
||||||
o.validate = function(self, value)
|
o.validate = function(self, value)
|
||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
m = Map("mosdns")
|
m = Map("mosdns")
|
||||||
|
|
||||||
s = m:section(TypedSection, "mosdns", translate("Geodata Update"))
|
s = m:section(TypedSection, "mosdns", translate("Update GeoIP & GeoSite dat"))
|
||||||
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"))
|
||||||
@ -21,17 +18,14 @@ 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 (Every Day)"))
|
update_time = s:option(ListValue, "geo_update_day_time", translate("Update Time"))
|
||||||
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.inputtitle = translate("Check And Update")
|
data_update.rawhtml = true
|
||||||
data_update.inputstyle = "reload"
|
data_update.template = "mosdns/geo_update"
|
||||||
data_update.write = function()
|
|
||||||
luci.sys.exec("/etc/mosdns/mosupdater.sh &> /dev/null &")
|
|
||||||
end
|
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
34
luci-app-mosdns/luasrc/view/mosdns/geo_update.htm
Normal file
34
luci-app-mosdns/luasrc/view/mosdns/geo_update.htm
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<%+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,9 +1,6 @@
|
|||||||
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 转发/分流器。"
|
||||||
|
|
||||||
@ -19,20 +16,41 @@ msgstr "获取数据中..."
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "启用"
|
msgstr "启用"
|
||||||
|
|
||||||
msgid "Enable DNS Redirect"
|
msgid "Listen port"
|
||||||
msgstr "启用 DNS 重定向"
|
msgstr "监听端口"
|
||||||
|
|
||||||
|
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 "View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need."
|
msgid "ADblock Source"
|
||||||
msgstr "注意!此页的更改仅当 'MosDNS 配置文件选择' 为 '自定义配置' 时才会生效"
|
msgstr "广告过滤来源"
|
||||||
|
|
||||||
|
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 Time (Every Day)"
|
msgid "Update GeoIP & GeoSite dat"
|
||||||
msgstr "更新时间(每天)"
|
msgstr "更新 GeoIP & GeoSite 数据库"
|
||||||
|
|
||||||
|
msgid "Update Time"
|
||||||
|
msgstr "更新时间"
|
||||||
|
|
||||||
msgid "Update Cycle"
|
msgid "Update Cycle"
|
||||||
msgstr "更新周期"
|
msgstr "更新周期"
|
||||||
@ -68,49 +86,70 @@ msgid "Check And Update"
|
|||||||
msgstr "检查并更新"
|
msgstr "检查并更新"
|
||||||
|
|
||||||
msgid "Enable Auto Database Update"
|
msgid "Enable Auto Database Update"
|
||||||
msgstr "启用数据库自动更新"
|
msgstr "启用自动更新"
|
||||||
|
|
||||||
msgid "Enable Config Update"
|
msgid "Updating..."
|
||||||
msgstr "启用配置文件同步"
|
msgstr "正在更新..."
|
||||||
|
|
||||||
msgid "Enable AutoConfiguration"
|
msgid "Update success"
|
||||||
msgstr "启用自动化配置"
|
msgstr "更新成功"
|
||||||
|
|
||||||
msgid "This will make the necessary adjustments to other plug-in settings."
|
msgid "Update failed, Please check the network status"
|
||||||
msgstr "对其他插件的设置进行必要的设置,目前仅支持 SSRP VSSR PASSWALL。"
|
msgstr "更新失败,请检查网络状态"
|
||||||
|
|
||||||
msgid "This will revert the adjustments."
|
msgid "Config File"
|
||||||
msgstr "还原设置助手对其他插件进行的配置设定。"
|
msgstr "配置文件"
|
||||||
|
|
||||||
msgid "DNS Helper"
|
msgid "Default Config"
|
||||||
msgstr "DNS 设置助手"
|
|
||||||
|
|
||||||
msgid "Revert Settings"
|
|
||||||
msgstr "DNS 设置还原"
|
|
||||||
|
|
||||||
msgid "Apply"
|
|
||||||
msgstr "应用"
|
|
||||||
|
|
||||||
msgid "MosDNS Config File"
|
|
||||||
msgstr "MosDNS 配置文件选择"
|
|
||||||
|
|
||||||
msgid "Def Config"
|
|
||||||
msgstr "内置预设"
|
msgstr "内置预设"
|
||||||
|
|
||||||
msgid "Cus Config"
|
msgid "Custom Config"
|
||||||
msgstr "自定义配置"
|
msgstr "自定义"
|
||||||
|
|
||||||
msgid "Log Level"
|
msgid "Log File"
|
||||||
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 "Listen port"
|
msgid "Remote DNS Connection Multiplexing"
|
||||||
msgstr "监听端口"
|
msgstr "远程 DNS 连接复用"
|
||||||
|
|
||||||
|
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 "规则列表"
|
||||||
@ -118,9 +157,6 @@ 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>规则列表仅适用于 “内置预设” 配置文件"
|
||||||
|
|
||||||
@ -128,13 +164,19 @@ 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(每个规则一行)"
|
||||||
@ -145,8 +187,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 "Logs"
|
msgid "Block PTR"
|
||||||
msgstr "日志"
|
msgstr "PTR 黑名单"
|
||||||
|
|
||||||
msgid "Clear logs"
|
msgid "These domains are blocked from PTR requests"
|
||||||
msgstr "清空日志"
|
msgstr "加入的域名将阻止 PTR 请求(每个域名一行,支持域名匹配规则)"
|
||||||
|
@ -1,17 +1,21 @@
|
|||||||
|
|
||||||
config mosdns 'mosdns'
|
config mosdns 'config'
|
||||||
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 'all'
|
option geo_update_week_time '*'
|
||||||
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 './def_config.yaml'
|
option configfile '/etc/mosdns/config.yaml'
|
||||||
option loglv 'info'
|
option log_level 'info'
|
||||||
option logfile '/tmp/mosdns.txt'
|
option logfile '/tmp/mosdns.log'
|
||||||
option remote_dns1 'tls://8.8.4.4'
|
option cache_size '200000'
|
||||||
option remote_dns2 'tls://1.0.0.1'
|
option cache_survival_time '259200'
|
||||||
option listen_port '5335'
|
option minimal_ttl '0'
|
||||||
|
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,153 +1,157 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
# Copyright (C) 2020 IrineSistiana
|
#
|
||||||
# shellcheck disable=SC2034
|
# Copyright (C) 2020-2022, IrineSistiana
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
##### ONLY CHANGE THIS BLOCK ######
|
PROG=/usr/bin/mosdns
|
||||||
PROG=/usr/bin/mosdns # where is mosdns
|
CONF=$(uci -q get mosdns.config.configfile)
|
||||||
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 ######
|
|
||||||
|
|
||||||
inital_conf() {
|
get_config() {
|
||||||
config_load "mosdns"
|
config_get enabled $1 enabled 0
|
||||||
config_get "enabled" "mosdns" "enabled" "0"
|
config_get adblock $1 adblock 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() {
|
||||||
sed -i "/list server/d" /etc/config/dhcp
|
rm -f /etc/mosdns/redirect.lock
|
||||||
uci set dhcp.@dnsmasq[0].noresolv='0'
|
sed -i "/list server/d" /etc/config/dhcp
|
||||||
uci del dhcp.@dnsmasq[0].cachesize
|
uci set dhcp.@dnsmasq[0].noresolv='0'
|
||||||
uci set dhcp.@dnsmasq[0].filter_aaaa='1'
|
uci del dhcp.@dnsmasq[0].cachesize
|
||||||
uci del dhcp.@dnsmasq[0].setbymosdns
|
uci commit dhcp
|
||||||
uci commit dhcp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_setting() {
|
redirect_setting() {
|
||||||
redirect=$(uci -q get mosdns.mosdns.redirect)
|
if [ "${CONF}" = "/etc/mosdns/config.yaml" ]; then
|
||||||
if [ "$redirect" -eq 1 ]; then
|
sed -i "/list server/d" /etc/config/dhcp
|
||||||
sed -i "/list server/d" /etc/config/dhcp
|
uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#$listen_port"
|
||||||
uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#$(uci -q get mosdns.mosdns.listen_port)"
|
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
||||||
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
uci set dhcp.@dnsmasq[0].noresolv="1"
|
||||||
uci set dhcp.@dnsmasq[0].noresolv="1"
|
uci set dhcp.@dnsmasq[0].cachesize='0'
|
||||||
uci set dhcp.@dnsmasq[0].cachesize='0'
|
uci commit dhcp
|
||||||
uci set dhcp.@dnsmasq[0].filter_aaaa='0'
|
else
|
||||||
uci set dhcp.@dnsmasq[0].setbymosdns='1'
|
sed -i "/list server/d" /etc/config/dhcp
|
||||||
uci commit dhcp
|
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}}}')"
|
||||||
fi
|
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
||||||
|
uci set dhcp.@dnsmasq[0].noresolv="1"
|
||||||
|
uci set dhcp.@dnsmasq[0].cachesize='0'
|
||||||
|
uci commit dhcp
|
||||||
|
fi
|
||||||
|
touch /etc/mosdns/redirect.lock
|
||||||
}
|
}
|
||||||
|
|
||||||
restart_others() {
|
reload_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 2s
|
sleep 1
|
||||||
echo "MosDNS is restarted!"
|
start
|
||||||
start
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setcron() {
|
setcron() {
|
||||||
touch $CRON_FILE
|
sed -i '/mosdns.sh/d' $CRON_FILE 2>/dev/null
|
||||||
sed -i '/mosupdater.sh/d' $CRON_FILE 2> /dev/null
|
[ "$geo_auto_update" -eq 1 ] && echo "0 $geo_update_day_time * * $geo_update_week_time /usr/share/mosdns/mosdns.sh geodata" >>$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
|
||||||
crontab $CRON_FILE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delcron() {
|
delcron() {
|
||||||
sed -i '/mosupdater.sh/d' $CRON_FILE 2> /dev/null
|
sed -i '/mosdns.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"
|
||||||
# Reading config
|
config_foreach get_config "mosdns"
|
||||||
inital_conf
|
[ $enabled != 1 ] && return 1
|
||||||
if [ "$enabled" -eq 0 ]; then
|
delcron
|
||||||
firstblood=$(uci -q get mosdns.mosdns.not_first_start)
|
setcron
|
||||||
[ "${firstblood}" = "0" ] && restore_setting
|
[ "${CONF}" = "/etc/mosdns/config.yaml" ] && init_yaml
|
||||||
[ "${firstblood}" = "0" ] && restart_others
|
:> $(/usr/share/mosdns/mosdns.sh logfile)
|
||||||
uci set mosdns.mosdns.not_first_start='1'
|
procd_open_instance mosdns
|
||||||
uci commit mosdns
|
procd_set_param command $PROG start -c "$CONF"
|
||||||
echo "MosDNS has turned off"
|
procd_set_param user root
|
||||||
return 1
|
procd_set_param stdout 1
|
||||||
fi
|
procd_set_param stderr 1
|
||||||
delcron
|
procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
|
||||||
setcron
|
procd_close_instance mosdns
|
||||||
adblock
|
[ "$redirect" -ne 1 ] && [ -f "/etc/mosdns/redirect.lock" ] && restore_setting
|
||||||
true > "$(/etc/mosdns/lib.sh logfile)"
|
[ "$redirect" -eq 1 ] && redirect_setting
|
||||||
sysctl -w net.core.rmem_max=2500000
|
reload_others
|
||||||
v4config
|
update_list=0
|
||||||
procd_open_instance mosdns
|
[ "$adblock" -eq 1 ] && [ "$ad_source" != "geosite.dat" ] && {
|
||||||
procd_set_param command $PROG start -d $RES_DIR -c "$CONF"
|
[ -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 user root
|
[ "$ad_source" != "$url_adlist" ] && update_list=1
|
||||||
procd_set_param stdout 1
|
}
|
||||||
procd_set_param stderr 1
|
[ "$update_list" -eq 1 ] && /usr/share/mosdns/mosdns.sh adlist_update &> /dev/null &
|
||||||
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
|
||||||
pgrep -f /usr/bin/mosdns | xargs kill -9
|
config_load "mosdns"
|
||||||
echo "MosDNS turn off"
|
config_foreach get_config "mosdns"
|
||||||
echo "enabled=$enabled"
|
[ "$enabled" = "0" ] && [ -f "/etc/mosdns/redirect.lock" ] && restore_setting
|
||||||
|
reload_others
|
||||||
configfile=$(uci -q get mosdns.mosdns.configfile)
|
delcron
|
||||||
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
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
162
luci-app-mosdns/root/etc/mosdns/config_custom.yaml
Normal file
162
luci-app-mosdns/root/etc/mosdns/config_custom.yaml
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
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"
|
@ -1,31 +0,0 @@
|
|||||||
# 日志设置
|
|
||||||
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。
|
|
@ -1,206 +0,0 @@
|
|||||||
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"
|
|
@ -1,79 +0,0 @@
|
|||||||
#!/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
|
|
@ -1,45 +0,0 @@
|
|||||||
#!/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
|
|
0
luci-app-mosdns/root/etc/mosdns/rule/adlist.txt
Normal file
0
luci-app-mosdns/root/etc/mosdns/rule/adlist.txt
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
3
luci-app-mosdns/root/etc/mosdns/rule/greylist.txt
Normal file
3
luci-app-mosdns/root/etc/mosdns/rule/greylist.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
domain:gstatic.com
|
||||||
|
domain:kernel.org
|
||||||
|
keyword:github
|
@ -1,10 +1,6 @@
|
|||||||
# from unbound.conf
|
0.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
|
10.in-addr.arpa
|
||||||
|
127.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
|
||||||
@ -21,21 +17,6 @@ invalid
|
|||||||
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
|
||||||
@ -99,4 +80,8 @@ b.e.f.ip6.arpa
|
|||||||
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
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,29 +1,24 @@
|
|||||||
tracking.miui.com
|
domain:bing.com
|
||||||
tracking.intl.miui.com
|
domain:live.com
|
||||||
api.intl.miui.com
|
domain:msn.com
|
||||||
stat.xiaomi.com
|
domain:ntp.org
|
||||||
checkip.synology.com
|
domain:office.com
|
||||||
checkipv6.synology.com
|
domain:qlogo.cn
|
||||||
checkport.synology.com
|
domain:qq.com
|
||||||
ddns.synology.com
|
domain:redhat.com
|
||||||
account.synology.com
|
|
||||||
whatismyip.akamai.com
|
|
||||||
checkip.dyndns.org
|
|
||||||
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:aaplimg
|
keyword:aaplimg
|
||||||
keyword:itunes
|
keyword:aicdn
|
||||||
|
keyword:akadns
|
||||||
|
keyword:akamai
|
||||||
|
keyword:apple
|
||||||
|
keyword:douyin
|
||||||
|
keyword:fclouddns
|
||||||
keyword:icloud
|
keyword:icloud
|
||||||
|
keyword:itunes
|
||||||
|
keyword:microsoft
|
||||||
|
keyword:mzstatic
|
||||||
|
keyword:ssrcdn
|
||||||
|
keyword:windows
|
||||||
|
keyword:xxpkg
|
||||||
|
keyword:yximgs
|
||||||
|
keyword:yxygslb
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
#!/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
|
|
193
luci-app-mosdns/root/usr/share/mosdns/default.yaml
Normal file
193
luci-app-mosdns/root/usr/share/mosdns/default.yaml
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
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"
|
102
luci-app-mosdns/root/usr/share/mosdns/mosdns.sh
Executable file
102
luci-app-mosdns/root/usr/share/mosdns/mosdns.sh
Executable file
@ -0,0 +1,102 @@
|
|||||||
|
#!/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
|
@ -1,4 +1,6 @@
|
|||||||
# LuCI Theme Ifit Freedom
|
# LuCI Theme Infinity Freedom
|
||||||
|
#
|
||||||
|
#
|
||||||
# Licensed under the Apache License v2.0
|
# Licensed under the Apache License v2.0
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
@ -8,7 +10,8 @@ THEME_NAME:=ifit
|
|||||||
THEME_TITLE:=ifit
|
THEME_TITLE:=ifit
|
||||||
|
|
||||||
PKG_NAME:=luci-theme-$(THEME_NAME)
|
PKG_NAME:=luci-theme-$(THEME_NAME)
|
||||||
PKG_VERSION:=1.6
|
PKG_VERSION:=1.5.2
|
||||||
|
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
@ -18,7 +21,7 @@ define Package/luci-theme-$(THEME_NAME)
|
|||||||
CATEGORY:=LuCI
|
CATEGORY:=LuCI
|
||||||
SUBMENU:=4. Themes
|
SUBMENU:=4. Themes
|
||||||
DEPENDS:=+libc
|
DEPENDS:=+libc
|
||||||
TITLE:=Ifit by kenzo
|
TITLE:=Ifit Theme
|
||||||
URL:=https://github.com/kenzok8/luci-theme-ifit
|
URL:=https://github.com/kenzok8/luci-theme-ifit
|
||||||
PKGARCH:=all
|
PKGARCH:=all
|
||||||
endef
|
endef
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* InfinityFreedom is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
* ifit is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
||||||
*
|
*
|
||||||
* luci-theme-ifit
|
* luci-theme-ifit
|
||||||
|
* Copyright 2020-2023 Richard Yu <xiaoqingfengatgm@gmail.com>
|
||||||
*
|
*
|
||||||
* Have a bug? Please create an issue here on GitHub!
|
* Have a bug? Please create an issue here on GitHub!
|
||||||
* https://github.com/kenzok8/luci-theme-ifit/issues
|
* https://github.com/kenzok8/luci-theme-ifit/issues
|
||||||
@ -1763,6 +1764,15 @@ small {
|
|||||||
background-color: #9876AA;
|
background-color: #9876AA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cbi-button-selectAll,
|
||||||
|
.cbi-button-test {
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 0;
|
||||||
|
padding: 0.2rem 0.3rem;
|
||||||
|
font-size: 10pt;
|
||||||
|
background-color: #9876AA;
|
||||||
|
}
|
||||||
|
|
||||||
.cbi-optionals {
|
.cbi-optionals {
|
||||||
padding: 1rem 1rem 0 1rem;
|
padding: 1rem 1rem 0 1rem;
|
||||||
border-top: 1px solid #CCC;
|
border-top: 1px solid #CCC;
|
||||||
@ -2209,6 +2219,7 @@ div#cbi-passwall.cbi-map fieldset > fieldset > div#add_link_div
|
|||||||
position: fixed;
|
position: fixed;
|
||||||
width: 55rem;
|
width: 55rem;
|
||||||
height: 20rem;
|
height: 20rem;
|
||||||
|
background-color: rgba(7,34,62,.95);
|
||||||
}
|
}
|
||||||
|
|
||||||
#add_link_div > div:nth-child(1) > label
|
#add_link_div > div:nth-child(1) > label
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* InfinityFreedom is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
* ifit is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
||||||
*
|
*
|
||||||
* luci-theme-ifit
|
* luci-theme-ifit
|
||||||
|
*
|
||||||
*
|
*
|
||||||
* Have a bug? Please create an issue here on GitHub!
|
* Have a bug? Please create an issue here on GitHub!
|
||||||
* https://github.com/kenzok8/luci-theme-ifit/issues
|
* https://github.com/kenzok8/luci-theme-ifit/issues
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
<%#
|
<%#
|
||||||
|
|
||||||
InfinityFreedom is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
ifit is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
||||||
|
|
||||||
luci-theme-ifit
|
luci-theme-ifit
|
||||||
|
|
||||||
|
|
||||||
Have a bug? Please create an issue here on GitHub!
|
Have a bug? Please create an issue here on GitHub!
|
||||||
https://github.com/kenzok8/luci-theme-ifit/issues
|
https://github.com/kenzok8/luci-theme-ifit/issues
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
<%#
|
<%#
|
||||||
|
|
||||||
InfinityFreedom is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
ifit is a clean HTML5 theme for LuCI. It is based on luci-theme-material.
|
||||||
|
|
||||||
luci-theme-ifit
|
luci-theme-ifit
|
||||||
|
|
||||||
|
|
||||||
Have a bug? Please create an issue here on GitHub!
|
Have a bug? Please create an issue here on GitHub!
|
||||||
https://github.com/kenzok8/luci-theme-ifit/issues
|
https://github.com/kenzok8/luci-theme-ifit/issues
|
||||||
|
@ -5,86 +5,41 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=mosdns
|
PKG_NAME:=mosdns
|
||||||
PKG_VERSION:=5.0.1
|
PKG_VERSION:=4.5.3
|
||||||
PKG_RELEASE:=$(AUTORELEASE)
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_SOURCE:=mosdns-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(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/v$(PKG_VERSION)?
|
||||||
PKG_HASH:=036007a5e38f1853203c038f34c966a8cc3cb05d06624e73c4bf705938989b56
|
PKG_HASH:=2a13b1b1d862731cf946a8ceaa99523a0eb0eaae56045dd31207b61a5a6d47ae
|
||||||
|
|
||||||
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_CONFIG_DEPENDS:= \
|
PKG_BUILD_DEPENDS:=golang/host
|
||||||
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:=-s -w
|
GO_PKG_LDFLAGS_X:=main.version=v$(PKG_VERSION)
|
||||||
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/Default
|
define Package/mosdns
|
||||||
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
|
||||||
endef
|
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
||||||
|
|
||||||
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))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user