diff --git a/Makefile b/Makefile
index 97c152f..ee3e2c8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-mosdns
-PKG_VERSION:=1.2
+PKG_VERSION:=1.3
PKG_RELEASE:=1
LUCI_TITLE:=LuCI Support for mosdns
@@ -9,8 +9,9 @@ LUCI_PKGARCH:=all
LUCI_DEPENDS:=+mosdns +jsonfilter +bash +v2ray-geoip +v2ray-geosite
define Package/$(PKG_NAME)/conffiles
-/etc/mosdns/config_custom.yaml
/etc/config/mosdns
+/etc/mosdns/config_custom.yaml
+/etc/mosdns/rule
endef
include $(TOPDIR)/feeds/luci/luci.mk
diff --git a/luasrc/controller/mosdns.lua b/luasrc/controller/mosdns.lua
index 8050df0..c8f0ad1 100644
--- a/luasrc/controller/mosdns.lua
+++ b/luasrc/controller/mosdns.lua
@@ -10,7 +10,7 @@ function index()
page.acl_depends = { "luci-app-mosdns" }
entry({"admin", "services", "mosdns", "basic"}, cbi("mosdns/basic"), _("Basic Setting"), 1).leaf = true
- entry({"admin", "services", "mosdns", "whitelist"}, cbi("mosdns/whitelist"), _("ADblock whitelist"), 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", "log"}, cbi("mosdns/log"), _("Logs"), 4).leaf = true
entry({"admin", "services", "mosdns", "status"}, call("act_status")).leaf = true
diff --git a/luasrc/model/cbi/mosdns/basic.lua b/luasrc/model/cbi/mosdns/basic.lua
index 542a261..1324d53 100644
--- a/luasrc/model/cbi/mosdns/basic.lua
+++ b/luasrc/model/cbi/mosdns/basic.lua
@@ -11,9 +11,9 @@ s.anonymous = true
enable = s:option(Flag, "enabled", translate("Enable"))
enable.rmempty = false
-configfile = s:option(ListValue, "configfile", translate("MosDNS Config File"))
-configfile:value("/etc/mosdns/config.yaml", translate("Def Config"))
-configfile:value("/etc/mosdns/config_custom.yaml", translate("Cus Config"))
+configfile = s:option(ListValue, "configfile", translate("Config File"))
+configfile:value("/etc/mosdns/config.yaml", translate("Default Config"))
+configfile:value("/etc/mosdns/config_custom.yaml", translate("Custom Config"))
configfile.default = "/etc/mosdns/config.yaml"
listenport = s:option(Value, "listen_port", translate("Listen port"))
@@ -30,9 +30,9 @@ loglevel:value("error", translate("Error"))
loglevel.default = "error"
loglevel:depends( "configfile", "/etc/mosdns/config.yaml")
-logfile = s:option(Value, "logfile", translate("MosDNS Log File"))
-logfile.placeholder = "/dev/null"
-logfile.default = "/dev/null"
+logfile = s:option(Value, "logfile", translate("Log File"))
+logfile.placeholder = "/tmp/mosdns.log"
+logfile.default = "/tmp/mosdns.log"
logfile:depends( "configfile", "/etc/mosdns/config.yaml")
dnsforward = s:option(Value, "dns_forward", translate("Remote DNS"))
diff --git a/luasrc/model/cbi/mosdns/rule_list.lua b/luasrc/model/cbi/mosdns/rule_list.lua
new file mode 100644
index 0000000..6da04d7
--- /dev/null
+++ b/luasrc/model/cbi/mosdns/rule_list.lua
@@ -0,0 +1,59 @@
+local datatypes = require "luci.cbi.datatypes"
+
+local white_list_file = "/etc/mosdns/rule/whitelist.txt"
+local block_list_file = "/etc/mosdns/rule/blocklist.txt"
+
+m = Map("mosdns")
+
+s = m:section(TypedSection, "mosdns", translate("Black and White List Settings"))
+s.anonymous = true
+
+s:tab("white_list", translate("White Lists"))
+s:tab("block_list", translate("Block Lists"))
+
+o = s:taboption("white_list", TextValue, "whitelist", "", "" .. 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.") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "")
+o.rows = 15
+o.wrap = "off"
+o.cfgvalue = function(self, section) return nixio.fs.readfile(white_list_file) or "" end
+o.write = function(self, section, value) nixio.fs.writefile(white_list_file , value:gsub("\r\n", "\n")) end
+o.remove = function(self, section, value) nixio.fs.writefile(white_list_file , "") end
+o.validate = function(self, value)
+ local hosts= {}
+ string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end)
+ for index, host in ipairs(hosts) do
+ if host:find("#") and host:find("#") == 1 then
+ return value
+ end
+ if not datatypes.hostname(host) then
+ return nil, host .. " " .. translate("Not valid domain name, Please Re-enter.")
+ end
+ end
+ return value
+end
+
+o = s:taboption("block_list", TextValue, "blocklist", "", "" .. translate("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.") .. "" .. "" .. translate("
The list of rules only apply to 'Default Config' profiles.") .. "")
+o.rows = 15
+o.wrap = "off"
+o.cfgvalue = function(self, section) return nixio.fs.readfile(block_list_file) or "" end
+o.write = function(self, section, value) nixio.fs.writefile(block_list_file, value:gsub("\r\n", "\n")) end
+o.remove = function(self, section, value) nixio.fs.writefile(block_list_file, "") end
+o.validate = function(self, value)
+ local hosts= {}
+ string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end)
+ for index, host in ipairs(hosts) do
+ if host:find("#") and host:find("#") == 1 then
+ return value
+ end
+ if not datatypes.hostname(host) then
+ return nil, host .. " " .. translate("Not valid domain name, Please Re-enter.")
+ end
+ end
+ return value
+end
+
+local apply = luci.http.formvalue("cbi.apply")
+if apply then
+ luci.sys.exec("/etc/init.d/mosdns reload")
+end
+
+return m
diff --git a/luasrc/model/cbi/mosdns/update.lua b/luasrc/model/cbi/mosdns/update.lua
index ce5aff9..4f71de6 100644
--- a/luasrc/model/cbi/mosdns/update.lua
+++ b/luasrc/model/cbi/mosdns/update.lua
@@ -1,6 +1,6 @@
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.anonymous = true
@@ -18,7 +18,7 @@ o:value("6", translate("Every Saturday"))
o:value("7", translate("Every Sunday"))
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
update_time:value(t, t..":00")
end
diff --git a/luasrc/model/cbi/mosdns/whitelist.lua b/luasrc/model/cbi/mosdns/whitelist.lua
deleted file mode 100644
index 8478051..0000000
--- a/luasrc/model/cbi/mosdns/whitelist.lua
+++ /dev/null
@@ -1,26 +0,0 @@
-m = Map("mosdns")
-
-s = m:section(TypedSection, "mosdns", translate("ADblock whitelist"))
-s.addremove = false
-s.anonymous = true
-
-config = s:option(TextValue, "whitelist")
-config.description = translate("ADblock whitelist only apply to 'Def Config' profiles.")
-config.template = "cbi/tvalue"
-config.rows = 25
-
-function config.cfgvalue(self, section)
- return nixio.fs.readfile("/etc/mosdns/whitelist.txt")
-end
-
-function config.write(self, section, value)
- value = value:gsub("\r\n?", "\n")
- nixio.fs.writefile("/etc/mosdns/whitelist.txt", value)
-end
-
-local apply = luci.http.formvalue("cbi.apply")
-if apply then
- luci.sys.exec("/etc/init.d/mosdns reload")
-end
-
-return m
diff --git a/po/zh-cn/mosdns.po b/po/zh-cn/mosdns.po
index a3ba814..94b90ec 100644
--- a/po/zh-cn/mosdns.po
+++ b/po/zh-cn/mosdns.po
@@ -1,9 +1,6 @@
msgid "Basic Setting"
msgstr "基本设置"
-msgid "Manual Configuration"
-msgstr "手动配置"
-
msgid "MosDNS is a 'programmable' DNS forwarder."
msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。"
@@ -32,19 +29,13 @@ msgid "Enable DNS ADblock"
msgstr "启用 DNS 广告过滤"
msgid "View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need."
-msgstr "注意!此页的更改仅当 'MosDNS 配置文件选择' 为 '自定义配置' 时才会生效"
-
-msgid "ADblock whitelist only apply to 'Def Config' profiles."
-msgstr "注意!广告过滤白名单仅当 'MosDNS 配置文件选择' 为 '内置预设' 时才会生效"
-
-msgid "ADblock whitelist"
-msgstr "广告白名单"
+msgstr "注意!此页的更改仅当配置文件为 “自定义” 时才会生效"
msgid "Geodata Update"
-msgstr "数据库更新"
+msgstr "更新数据库"
-msgid "Update Time (Every Day)"
-msgstr "更新时间(每天)"
+msgid "Update Time"
+msgstr "更新时间"
msgid "Update Cycle"
msgstr "更新周期"
@@ -80,19 +71,19 @@ msgid "Check And Update"
msgstr "检查并更新"
msgid "Enable Auto Database Update"
-msgstr "启用数据库自动更新"
+msgstr "启用自动更新"
-msgid "MosDNS Config File"
-msgstr "MosDNS 配置文件选择"
+msgid "Config File"
+msgstr "配置文件"
-msgid "Def Config"
+msgid "Default Config"
msgstr "内置预设"
-msgid "Cus Config"
-msgstr "自定义配置"
+msgid "Custom Config"
+msgstr "自定义"
-msgid "MosDNS Log File"
-msgstr "MosDNS 日志文件"
+msgid "Log File"
+msgstr "日志文件"
msgid "Remote DNS"
msgstr "远程 DNS"
@@ -111,3 +102,27 @@ msgstr "日志"
msgid "Clear logs"
msgstr "清空日志"
+
+msgid "Rule List"
+msgstr "规则列表"
+
+msgid "Black and White List Settings"
+msgstr "自定义黑白名单"
+
+msgid "
The list of rules only apply to 'Default Config' profiles."
+msgstr "
规则列表仅适用于 “内置预设” 配置文件"
+
+msgid "White Lists"
+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."
+msgstr "加入的域名始终允许 DNS 解析,且优先级最高(每行只能输入一个域名)"
+
+msgid "Block Lists"
+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."
+msgstr "加入的域名将屏蔽 DNS 解析(每行只能输入一个域名)"
+
+msgid "Not valid domain name, Please Re-enter."
+msgstr "不是有效域名,请重新输入"
diff --git a/root/etc/init.d/mosdns b/root/etc/init.d/mosdns
index ac53c13..ae9b00c 100755
--- a/root/etc/init.d/mosdns
+++ b/root/etc/init.d/mosdns
@@ -5,12 +5,9 @@
START=91
USE_PROCD=1
-##### ONLY CHANGE THIS BLOCK ######
-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
+PROG=/usr/bin/mosdns
+CONF=$(uci -q get mosdns.mosdns.configfile)
CRON_FILE=/etc/crontabs/root
-##### ONLY CHANGE THIS BLOCK ######
inital_conf() {
config_load "mosdns"
@@ -48,7 +45,6 @@ reload_others() {
reload_service() {
stop
sleep 1
- echo "MosDNS is restarted!"
start
}
@@ -64,15 +60,13 @@ delcron() {
}
start_service() {
-
- # Reading config
inital_conf
[ $enabled != 1 ] && return 1
delcron
setcron
echo '' > $(uci -q get mosdns.mosdns.logfile)
procd_open_instance mosdns
- procd_set_param command $PROG -dir $RES_DIR -c "$CONF"
+ procd_set_param command $PROG -c "$CONF"
procd_set_param user root
procd_set_param stdout 1
procd_set_param stderr 1
@@ -85,14 +79,10 @@ start_service() {
redirect_setting
reload_others
fi
- echo "MosDNS turn on"
}
stop_service() {
-
pgrep -f /usr/bin/mosdns | xargs kill -9
- echo "MosDNS turn off"
-
configfile=$(uci -q get mosdns.mosdns.configfile)
if [ "${configfile}" = "/etc/mosdns/config.yaml" ]; then
config_load "mosdns"
@@ -101,5 +91,4 @@ stop_service() {
reload_others
fi
delcron
-
}
diff --git a/root/etc/mosdns/config.yaml b/root/etc/mosdns/config.yaml
index bf7e555..0d5a8b6 100644
--- a/root/etc/mosdns/config.yaml
+++ b/root/etc/mosdns/config.yaml
@@ -27,6 +27,7 @@ plugin:
- forward_local
- _return
- if:
+ - query_is_blocklist_domain
- query_is_ad_domain
exec:
- _block_with_nxdomain
@@ -80,7 +81,13 @@ plugin:
type: query_matcher
args:
domain:
- - "ext:./whitelist.txt"
+ - "ext:/etc/mosdns/rule/whitelist.txt"
+
+ - tag: query_is_blocklist_domain
+ type: query_matcher
+ args:
+ domain:
+ - "ext:/etc/mosdns/rule/blocklist.txt"
- tag: forward_remote
type: fast_forward
diff --git a/root/etc/mosdns/rule/blocklist.txt b/root/etc/mosdns/rule/blocklist.txt
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/mosdns/whitelist.txt b/root/etc/mosdns/rule/whitelist.txt
similarity index 100%
rename from root/etc/mosdns/whitelist.txt
rename to root/etc/mosdns/rule/whitelist.txt