bind-option: support force aaaa soa bind option, secondary DNS support Force-AAAA-SOA options

This commit is contained in:
Nick Peng
2020-02-16 13:01:45 +08:00
parent 3cf2d35c13
commit 5f9167cf07
9 changed files with 49 additions and 18 deletions

View File

@@ -22,6 +22,7 @@
# -no-cache: skip cache. # -no-cache: skip cache.
# -no-rule-soa: Skip address SOA(#) rules. # -no-rule-soa: Skip address SOA(#) rules.
# -no-dualstack-selection: Disable dualstack ip selection. # -no-dualstack-selection: Disable dualstack ip selection.
# -force-aaaa-soa: force AAAA query return SOA.
# example: # example:
# IPV4: # IPV4:
# bind :53 # bind :53

View File

@@ -172,7 +172,7 @@ msgstr "跳过address SOA(#)规则。"
msgid "Skip Dualstack Selection" msgid "Skip Dualstack Selection"
msgstr "跳过双栈优选" msgstr "跳过双栈优选"
msgid "Skip Sualstack Selection." msgid "Skip Dualstack Selection."
msgstr "跳过双栈优选。" msgstr "跳过双栈优选。"
msgid "Skip Cache" msgid "Skip Cache"

View File

@@ -141,13 +141,6 @@ o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1" return Flag.cfgvalue(...) or "1"
end 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 ---- 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 = 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 o.rmempty = true
@@ -155,6 +148,13 @@ o.placeholder = "default"
o.datatype = "hostname" o.datatype = "hostname"
o.rempty = true 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 ---- skip address rules
o = s:taboption("seconddns", Flag, "seconddns_no_rule_addr", translate("Skip Address Rules"), translate("Skip address rules.")) o = s:taboption("seconddns", Flag, "seconddns_no_rule_addr", translate("Skip Address Rules"), translate("Skip address rules."))
o.rmempty = false o.rmempty = false
@@ -187,7 +187,7 @@ o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "0" return Flag.cfgvalue(...) or "0"
end 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.rmempty = false
o.default = o.disabled o.default = o.disabled
o.cfgvalue = function(...) o.cfgvalue = function(...)
@@ -202,6 +202,14 @@ o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "0" return Flag.cfgvalue(...) or "0"
end 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 settings
custom = s:taboption("custom", Value, "Custom Settings", custom = s:taboption("custom", Value, "Custom Settings",
translate(""), translate(""),

View File

@@ -251,11 +251,6 @@ return L.view.extend({
o.rmempty = false; o.rmempty = false;
o.default = o.enabled; 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; // dns server group;
o = s.taboption("seconddns", form.Value, "seconddns_server_group", _("Server Group"), o = s.taboption("seconddns", form.Value, "seconddns_server_group", _("Server Group"),
_("Query DNS through specific dns server group, such as office, home.")); _("Query DNS through specific dns server group, such as office, home."));
@@ -264,6 +259,11 @@ return L.view.extend({
o.datatype = "hostname"; o.datatype = "hostname";
o.rempty = true; 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; // skip address rules;
o = s.taboption("seconddns", form.Flag, "seconddns_no_rule_addr", _("Skip Address Rules"), o = s.taboption("seconddns", form.Flag, "seconddns_no_rule_addr", _("Skip Address Rules"),
_("Skip address rules.")); _("Skip address rules."));
@@ -289,7 +289,7 @@ return L.view.extend({
o.default = o.disabled; o.default = o.disabled;
o = s.taboption("seconddns", form.Flag, "seconddns_no_dualstack_selection", _("Skip Dualstack Selection"), o = s.taboption("seconddns", form.Flag, "seconddns_no_dualstack_selection", _("Skip Dualstack Selection"),
_("Skip Sualstack Selection.")); _("Skip Dualstack Selection."));
o.rmempty = false; o.rmempty = false;
o.default = o.disabled; o.default = o.disabled;
@@ -298,6 +298,11 @@ return L.view.extend({
o.rmempty = false; o.rmempty = false;
o.default = o.disabled; 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; // custom settings;
o = s.taboption("custom", form.TextValue, "custom_conf", o = s.taboption("custom", form.TextValue, "custom_conf",
_(""), _(""),

View File

@@ -178,7 +178,7 @@ msgstr "跳过address SOA(#)规则。"
msgid "Skip Dualstack Selection" msgid "Skip Dualstack Selection"
msgstr "跳过双栈优选" msgstr "跳过双栈优选"
msgid "Skip Sualstack Selection." msgid "Skip Dualstack Selection."
msgstr "跳过双栈优选。" msgstr "跳过双栈优选。"
msgid "Skip Cache" msgid "Skip Cache"
@@ -187,6 +187,12 @@ msgstr "跳过cache"
msgid "Skip Cache." msgid "Skip Cache."
msgstr "跳过cache。" msgstr "跳过cache。"
msgid "Force AAAA SOA"
msgstr "停用IPV6地址解析"
msgid "Force AAAA SOA."
msgstr "停用IPV6地址解析。"
msgid "Upstream Servers" msgid "Upstream Servers"
msgstr "上游服务器" msgstr "上游服务器"

View File

@@ -242,6 +242,9 @@ load_second_server()
config_get_bool seconddns_no_cache "$section" "seconddns_no_cache" "0" config_get_bool seconddns_no_cache "$section" "seconddns_no_cache" "0"
[ "$seconddns_no_cache" = "1" ] && ARGS="$ARGS -no-cache" [ "$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" config_get ipv6_server "$section" "ipv6_server" "1"
if [ "$ipv6_server" = "1" ]; then if [ "$ipv6_server" = "1" ]; then
ADDR="[::]" ADDR="[::]"

View File

@@ -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-speed-check", no_argument, NULL, 'S'},
{"no-cache", no_argument, NULL, 'C'}, {"no-cache", no_argument, NULL, 'C'},
{"no-dualstack-selection", no_argument, NULL, 'D'}, {"no-dualstack-selection", no_argument, NULL, 'D'},
{"force-aaaa-soa", no_argument, NULL, 'F'},
{NULL, no_argument, NULL, 0} {NULL, no_argument, NULL, 0}
}; };
/* clang-format on */ /* 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; server_flag |= BIND_FLAG_NO_DUALSTACK_SELECTION;
break; break;
} }
case 'F': {
server_flag |= BIND_FLAG_FORCE_AAAA_SOA;
break;
}
default: default:
break; break;
} }

View File

@@ -90,6 +90,7 @@ typedef enum {
#define BIND_FLAG_NO_SPEED_CHECK (1 << 5) #define BIND_FLAG_NO_SPEED_CHECK (1 << 5)
#define BIND_FLAG_NO_CACHE (1 << 6) #define BIND_FLAG_NO_CACHE (1 << 6)
#define BIND_FLAG_NO_DUALSTACK_SELECTION (1 << 7) #define BIND_FLAG_NO_DUALSTACK_SELECTION (1 << 7)
#define BIND_FLAG_FORCE_AAAA_SOA (1 << 8)
struct dns_rule_flags { struct dns_rule_flags {
unsigned int flags; unsigned int flags;

View File

@@ -261,8 +261,10 @@ static int _dns_server_is_return_soa(struct dns_request *request)
return 0; return 0;
} }
if (dns_conf_force_AAAA_SOA == 1 && request->qtype == DNS_T_AAAA) { if (request->qtype == DNS_T_AAAA) {
return 1; 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]; rule_flag = request->domain_rule.rules[DOMAIN_RULE_FLAGS];