diff --git a/etc/smartdns/smartdns.conf b/etc/smartdns/smartdns.conf index eb412d4..a1e30d9 100644 --- a/etc/smartdns/smartdns.conf +++ b/etc/smartdns/smartdns.conf @@ -22,6 +22,7 @@ # -no-cache: skip cache. # -no-rule-soa: Skip address SOA(#) rules. # -no-dualstack-selection: Disable dualstack ip selection. +# -force-aaaa-soa: force AAAA query return SOA. # example: # IPV4: # bind :53 diff --git a/package/luci-compat/files/luci/i18n/smartdns.zh-cn.po b/package/luci-compat/files/luci/i18n/smartdns.zh-cn.po index 4c01a00..03453ad 100644 --- a/package/luci-compat/files/luci/i18n/smartdns.zh-cn.po +++ b/package/luci-compat/files/luci/i18n/smartdns.zh-cn.po @@ -172,7 +172,7 @@ msgstr "跳过address SOA(#)规则。" msgid "Skip Dualstack Selection" msgstr "跳过双栈优选" -msgid "Skip Sualstack Selection." +msgid "Skip Dualstack Selection." msgstr "跳过双栈优选。" msgid "Skip Cache" diff --git a/package/luci-compat/files/luci/model/cbi/smartdns/smartdns.lua b/package/luci-compat/files/luci/model/cbi/smartdns/smartdns.lua index f334f0e..c0039e4 100644 --- a/package/luci-compat/files/luci/model/cbi/smartdns/smartdns.lua +++ b/package/luci-compat/files/luci/model/cbi/smartdns/smartdns.lua @@ -141,13 +141,6 @@ o.cfgvalue = function(...) return Flag.cfgvalue(...) or "1" end -o = s:taboption("seconddns", Flag, "seconddns_no_speed_check", translate("Skip Speed Check"), translate("Do not check speed.")) -o.rmempty = false -o.default = o.disabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "0" -end - ---- dns server group o = s:taboption("seconddns", Value, "seconddns_server_group", translate("Server Group"), translate("Query DNS through specific dns server group, such as office, home.")) o.rmempty = true @@ -155,6 +148,13 @@ o.placeholder = "default" o.datatype = "hostname" o.rempty = true +o = s:taboption("seconddns", Flag, "seconddns_no_speed_check", translate("Skip Speed Check"), translate("Do not check speed.")) +o.rmempty = false +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + ---- skip address rules o = s:taboption("seconddns", Flag, "seconddns_no_rule_addr", translate("Skip Address Rules"), translate("Skip address rules.")) o.rmempty = false @@ -187,7 +187,7 @@ o.cfgvalue = function(...) return Flag.cfgvalue(...) or "0" end -o = s:taboption("seconddns", Flag, "seconddns_no_dualstack_selection", translate("Skip Dualstack Selection"), translate("Skip Sualstack Selection.")) +o = s:taboption("seconddns", Flag, "seconddns_no_dualstack_selection", translate("Skip Dualstack Selection"), translate("Skip Dualstack Selection.")) o.rmempty = false o.default = o.disabled o.cfgvalue = function(...) @@ -202,6 +202,14 @@ o.cfgvalue = function(...) return Flag.cfgvalue(...) or "0" end +---- Force AAAA SOA +o = s:taboption("seconddns", Flag, "force_aaaa_soa", translate("Force AAAA SOA"), translate("Force AAAA SOA.")) +o.rmempty = false +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + ----- custom settings custom = s:taboption("custom", Value, "Custom Settings", translate(""), diff --git a/package/luci/files/luci/htdocs/luci-static/resources/view/smartdns/smartdns.js b/package/luci/files/luci/htdocs/luci-static/resources/view/smartdns/smartdns.js index 5daaa42..f4f9de8 100644 --- a/package/luci/files/luci/htdocs/luci-static/resources/view/smartdns/smartdns.js +++ b/package/luci/files/luci/htdocs/luci-static/resources/view/smartdns/smartdns.js @@ -251,11 +251,6 @@ return L.view.extend({ o.rmempty = false; o.default = o.enabled; - o = s.taboption("seconddns", form.Flag, "seconddns_no_speed_check", _("Skip Speed Check"), - _("Do not check speed.")); - o.rmempty = false; - o.default = o.disabled; - // dns server group; o = s.taboption("seconddns", form.Value, "seconddns_server_group", _("Server Group"), _("Query DNS through specific dns server group, such as office, home.")); @@ -264,6 +259,11 @@ return L.view.extend({ o.datatype = "hostname"; o.rempty = true; + o = s.taboption("seconddns", form.Flag, "seconddns_no_speed_check", _("Skip Speed Check"), + _("Do not check speed.")); + o.rmempty = false; + o.default = o.disabled; + // skip address rules; o = s.taboption("seconddns", form.Flag, "seconddns_no_rule_addr", _("Skip Address Rules"), _("Skip address rules.")); @@ -289,7 +289,7 @@ return L.view.extend({ o.default = o.disabled; o = s.taboption("seconddns", form.Flag, "seconddns_no_dualstack_selection", _("Skip Dualstack Selection"), - _("Skip Sualstack Selection.")); + _("Skip Dualstack Selection.")); o.rmempty = false; o.default = o.disabled; @@ -298,6 +298,11 @@ return L.view.extend({ o.rmempty = false; o.default = o.disabled; + // Force AAAA SOA + o = s.taboption("seconddns", form.Flag, "force_aaaa_soa", _("Force AAAA SOA"), _("Force AAAA SOA.")); + o.rmempty = false; + o.default = o.disabled; + // custom settings; o = s.taboption("custom", form.TextValue, "custom_conf", _(""), diff --git a/package/luci/files/luci/i18n/smartdns.zh-cn.po b/package/luci/files/luci/i18n/smartdns.zh-cn.po index e47742c..4cab4fe 100644 --- a/package/luci/files/luci/i18n/smartdns.zh-cn.po +++ b/package/luci/files/luci/i18n/smartdns.zh-cn.po @@ -178,7 +178,7 @@ msgstr "跳过address SOA(#)规则。" msgid "Skip Dualstack Selection" msgstr "跳过双栈优选" -msgid "Skip Sualstack Selection." +msgid "Skip Dualstack Selection." msgstr "跳过双栈优选。" msgid "Skip Cache" @@ -187,6 +187,12 @@ msgstr "跳过cache" msgid "Skip Cache." msgstr "跳过cache。" +msgid "Force AAAA SOA" +msgstr "停用IPV6地址解析" + +msgid "Force AAAA SOA." +msgstr "停用IPV6地址解析。" + msgid "Upstream Servers" msgstr "上游服务器" diff --git a/package/openwrt/files/etc/init.d/smartdns b/package/openwrt/files/etc/init.d/smartdns index da83ee2..c9bab54 100644 --- a/package/openwrt/files/etc/init.d/smartdns +++ b/package/openwrt/files/etc/init.d/smartdns @@ -242,6 +242,9 @@ load_second_server() config_get_bool seconddns_no_cache "$section" "seconddns_no_cache" "0" [ "$seconddns_no_cache" = "1" ] && ARGS="$ARGS -no-cache" + config_get_bool force_aaaa_soa "$section" "force_aaaa_soa" "0" + [ "$force_aaaa_soa" = "1" ] && ARGS="$ARGS -force-aaaa-soa" + config_get ipv6_server "$section" "ipv6_server" "1" if [ "$ipv6_server" = "1" ]; then ADDR="[::]" diff --git a/src/dns_conf.c b/src/dns_conf.c index 96b4714..581ce6d 100644 --- a/src/dns_conf.c +++ b/src/dns_conf.c @@ -853,6 +853,7 @@ static int _config_bind_ip(int argc, char *argv[], DNS_BIND_TYPE type) {"no-speed-check", no_argument, NULL, 'S'}, {"no-cache", no_argument, NULL, 'C'}, {"no-dualstack-selection", no_argument, NULL, 'D'}, + {"force-aaaa-soa", no_argument, NULL, 'F'}, {NULL, no_argument, NULL, 0} }; /* clang-format on */ @@ -918,6 +919,10 @@ static int _config_bind_ip(int argc, char *argv[], DNS_BIND_TYPE type) server_flag |= BIND_FLAG_NO_DUALSTACK_SELECTION; break; } + case 'F': { + server_flag |= BIND_FLAG_FORCE_AAAA_SOA; + break; + } default: break; } diff --git a/src/dns_conf.h b/src/dns_conf.h index ccf575a..1166375 100644 --- a/src/dns_conf.h +++ b/src/dns_conf.h @@ -90,6 +90,7 @@ typedef enum { #define BIND_FLAG_NO_SPEED_CHECK (1 << 5) #define BIND_FLAG_NO_CACHE (1 << 6) #define BIND_FLAG_NO_DUALSTACK_SELECTION (1 << 7) +#define BIND_FLAG_FORCE_AAAA_SOA (1 << 8) struct dns_rule_flags { unsigned int flags; diff --git a/src/dns_server.c b/src/dns_server.c index f44220b..694b8ef 100644 --- a/src/dns_server.c +++ b/src/dns_server.c @@ -261,8 +261,10 @@ static int _dns_server_is_return_soa(struct dns_request *request) return 0; } - if (dns_conf_force_AAAA_SOA == 1 && request->qtype == DNS_T_AAAA) { - return 1; + if (request->qtype == DNS_T_AAAA) { + if (_dns_server_has_bind_flag(request, BIND_FLAG_FORCE_AAAA_SOA) == 0 || dns_conf_force_AAAA_SOA == 1) { + return 1; + } } rule_flag = request->domain_rule.rules[DOMAIN_RULE_FLAGS];