Просмотр исходного кода

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

Nick Peng 5 лет назад
Родитель
Сommit
5f9167cf07

+ 1 - 0
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

+ 1 - 1
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"

+ 16 - 8
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(""), 

+ 11 - 6
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",
 			_(""),

+ 7 - 1
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 "上游服务器"
 

+ 3 - 0
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="[::]"

+ 5 - 0
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;
 		}

+ 1 - 0
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;

+ 4 - 2
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];