diff --git a/package/luci/files/luci/i18n/smartdns.zh-cn.po b/package/luci/files/luci/i18n/smartdns.zh-cn.po index 1d03550..567cdf1 100644 --- a/package/luci/files/luci/i18n/smartdns.zh-cn.po +++ b/package/luci/files/luci/i18n/smartdns.zh-cn.po @@ -112,6 +112,60 @@ msgstr "设置所有域名的TTL最大值" msgid "smartdns custom settings" msgstr "smartdns 自定义设置,具体配置参数参考指导" +msgid "Second Server Settings" +msgstr "第二DNS服务器" + +msgid "Enable or disable second DNS server." +msgstr "是否启用第二DNS服务器。" + +msgid "Skip Speed Check" +msgstr "跳过测速" + +msgid "Do not check speed." +msgstr "禁用测速。" + +msgid "Server Group" +msgstr "服务器组" + +msgid "Query DNS through specific dns server group, such as office, home." +msgstr "使用指定服务器组查询,比如office, home。" + +msgid "Skip Address Rules" +msgstr "跳过address规则" + +msgid "Skip address rules." +msgstr "跳过address规则。" + +msgid "Skip Nameserver Rule" +msgstr "跳过Nameserver规则" + +msgid "Skip nameserver rules." +msgstr "跳过Nameserver规则。" + +msgid "Skip Ipset Rule" +msgstr "跳过ipset规则" + +msgid "Skip ipset rules." +msgstr "跳过ipset规则。" + +msgid "Skip SOA Address Rule" +msgstr "跳过address SOA(#)规则" + +msgid "Skip SOA address rules." +msgstr "跳过address SOA(#)规则。" + +msgid "Skip Dualstack Selection" +msgstr "跳过双栈优选" + +msgid "Skip Sualstack Selection." +msgstr "跳过双栈优选。" + +msgid "Skip Cache" +msgstr "跳过cache" + +msgid "Skip Cache." +msgstr "跳过cache。" + msgid "Upstream Servers" msgstr "上游服务器" @@ -142,8 +196,8 @@ msgstr "域名地址" msgid "TLS Hostname Verify" msgstr "校验TLS主机名" -msgid "Set TLS hostname to verify" -msgstr "设置校验TLS主机名" +msgid "Set TLS hostname to verify." +msgstr "设置校验TLS主机名。" msgid "TLS SNI name" msgstr "TLS SNI名称" @@ -151,8 +205,8 @@ msgstr "TLS SNI名称" msgid "HTTP Host" msgstr "HTTP主机" -msgid "Sets the server name indication" -msgstr "设置服务器SNI名称" +msgid "Sets the server name indication for query." +msgstr "设置查询时使用的服务器SNI名称。" msgid "Set the HTTP host used for the query. Use this parameter when the host of the URL address is an IP address." msgstr "设置查询时使用的HTTP主机,当URL地址的host是IP地址时,使用此参数。" @@ -160,7 +214,7 @@ msgstr "设置查询时使用的HTTP主机,当URL地址的host是IP地址时 msgid "Server Group" msgstr "服务器组" -msgid "DNS Server group belongs to, used with nameserver, such as offlce, home." +msgid "DNS Server group belongs to, used with nameserver, such as office, home." msgsr "DNS服务器所属组, 配合nameserver使用,例如:office,home。" msgid "IP Blacklist Filtering" diff --git a/package/luci/files/luci/model/cbi/smartdns/smartdns.lua b/package/luci/files/luci/model/cbi/smartdns/smartdns.lua index 5d1a475..79bb815 100644 --- a/package/luci/files/luci/model/cbi/smartdns/smartdns.lua +++ b/package/luci/files/luci/model/cbi/smartdns/smartdns.lua @@ -16,6 +16,7 @@ s = m:section(TypedSection, "smartdns", translate("Settings"), translate("Genera s.anonymous = true s:tab("settings", translate("General Settings")) +s:tab("seconddns", translate("Second Server Settings")) s:tab("custom", translate("Custom Settings")) ---- Eanble @@ -92,10 +93,92 @@ o.placeholder = "300" o.default = 300 o.optional = true +---- second dns server ---- rr-ttl-max o = s:taboption("settings", Value, "rr_ttl_max", translate("Domain TTL Max"), translate("Maximum TTL for all domain result.")) o.rempty = true +---- Eanble +o = s:taboption("seconddns", Flag, "seconddns_enabled", translate("Enable"), translate("Enable or disable second DNS server.")) +o.default = o.disabled +o.rempty = false + +---- Port +o = s:taboption("seconddns", Value, "seconddns_port", translate("Local Port"), translate("Smartdns local server port")) +o.placeholder = 7053 +o.default = 7053 +o.datatype = "port" +o.rempty = false + +---- Enable TCP server +o = s:taboption("seconddns", Flag, "seconddns_tcp_server", translate("TCP Server"), translate("Enable TCP DNS Server")) +o.rmempty = false +o.default = o.enabled +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 +o.placeholder = "default" +o.datatype = "hostname" +o.rempty = true + +---- skip address rules +o = s:taboption("seconddns", Flag, "seconddns_no_rule_addr", translate("Skip Address Rules"), translate("Skip address rules.")) +o.rmempty = false +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip name server rules +o = s:taboption("seconddns", Flag, "seconddns_no_rule_nameserver", translate("Skip Nameserver Rule"), translate("Skip nameserver rules.")) +o.rmempty = false +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip ipset rules +o = s:taboption("seconddns", Flag, "seconddns_no_rule_ipset", translate("Skip Ipset Rule"), translate("Skip ipset rules.")) +o.rmempty = false +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip soa address rule +o = s:taboption("seconddns", Flag, "seconddns_no_rule_soa", translate("Skip SOA Address Rule"), translate("Skip SOA address rules.")) +o.rmempty = false +o.default = o.disabled +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.rmempty = false +o.default = o.disabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "0" +end + +---- skip cache +o = s:taboption("seconddns", Flag, "seconddns_no_cache", translate("Skip Cache"), translate("Skip Cache.")) +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/model/cbi/smartdns/upstream.lua b/package/luci/files/luci/model/cbi/smartdns/upstream.lua index c564eb3..ad5f580 100644 --- a/package/luci/files/luci/model/cbi/smartdns/upstream.lua +++ b/package/luci/files/luci/model/cbi/smartdns/upstream.lua @@ -40,7 +40,7 @@ o.default = "udp" o.rempty = false ---- TLS host verify -o = s:option(Value, "tls_host_verify", translate("TLS Hostname Verify"), translate("Set TLS hostname to verify")) +o = s:option(Value, "tls_host_verify", translate("TLS Hostname Verify"), translate("Set TLS hostname to verify.")) o.default = "" o.datatype = "string" o.rempty = true @@ -48,7 +48,7 @@ o:depends("type", "tls") o:depends("type", "https") ---- SNI host name -o = s:option(Value, "host_name", translate("TLS SNI name"), translate("Sets the server name indication")) +o = s:option(Value, "host_name", translate("TLS SNI name"), translate("Sets the server name indication for query.")) o.default = "" o.datatype = "hostname" o.rempty = true @@ -63,7 +63,7 @@ o.rempty = true o:depends("type", "https") ---- server group -o = s:option(Value, "server_group", translate("Server Group"), translate("DNS Server group belongs to, used with nameserver, such as offlce, home.")) +o = s:option(Value, "server_group", translate("Server Group"), translate("DNS Server group belongs to, used with nameserver, such as office, home.")) o.rmempty = true o.placeholder = "default" o.datatype = "hostname" diff --git a/package/openwrt/files/etc/init.d/smartdns b/package/openwrt/files/etc/init.d/smartdns index cdacc3b..18aef9a 100644 --- a/package/openwrt/files/etc/init.d/smartdns +++ b/package/openwrt/files/etc/init.d/smartdns @@ -233,7 +233,75 @@ load_server() conf_append "$SERVER" "$DNS_ADDRESS $ADDITIONAL_ARGS $addition_arg" } -load_service() { +load_second_server() +{ + local section="$1" + local ARGS="" + local ADDR="" + + config_get_bool "seconddns_enabled" "$section" "seconddns_enabled" "0" + if [ "$seconddns_enabled" = "0" ]; then + return + fi + + config_get "seconddns_port" "$section" "seconddns_port" "7053" + + config_get_bool "seconddns_no_speed_check" "$section" "seconddns_no_speed_check" "0" + if [ "$seconddns_no_speed_check" = "1" ]; then + ARGS="$ARGS -no-speed-check" + fi + + config_get "seconddns_server_group" "$section" "seconddns_server_group" "" + if [ ! -z "$seconddns_server_group" ]; then + ARGS="$ARGS -group $seconddns_server_group" + fi + + config_get_bool "seconddns_no_rule_addr" "$section" "seconddns_no_rule_addr" "0" + if [ "$seconddns_no_rule_addr" = "1" ]; then + ARGS="$ARGS -no-rule-addr" + fi + + config_get_bool "seconddns_no_rule_nameserver" "$section" "seconddns_no_rule_nameserver" "0" + if [ "$seconddns_no_rule_nameserver" = "1" ]; then + ARGS="$ARGS -no-rule-nameserver" + fi + + config_get_bool "seconddns_no_rule_ipset" "$section" "seconddns_no_rule_ipset" "0" + if [ "$seconddns_no_rule_ipset" = "1" ]; then + ARGS="$ARGS -no-rule-ipset" + fi + + config_get_bool "seconddns_no_rule_soa" "$section" "seconddns_no_rule_soa" "0" + if [ "$seconddns_no_rule_soa" = "1" ]; then + ARGS="$ARGS -no-rule-soa" + fi + + config_get_bool "seconddns_no_dualstack_selection" "$section" "seconddns_no_dualstack_selection" "0" + if [ "$seconddns_no_dualstack_selection" = "1" ]; then + ARGS="$ARGS -no-dualstack-selection" + fi + + config_get_bool "seconddns_no_cache" "$section" "seconddns_no_cache" "0" + if [ "$seconddns_no_cache" = "1" ]; then + ARGS="$ARGS -no-cache" + fi + + config_get "ipv6_server" "$section" "ipv6_server" "1" + if [ "$ipv6_server" = "1" ]; then + ADDR="[::]" + else + ADDR="" + fi + + conf_append "bind" "$ADDR:$seconddns_port $ARGS" + config_get_bool "seconddns_tcp_server" "$section" "seconddns_tcp_server" "1" + if [ "$seconddns_tcp_server" = "1" ]; then + conf_append "bind-tcp" "$ADDR:$seconddns_port $ARGS" + fi +} + +load_service() +{ local section="$1" args="" @@ -352,6 +420,8 @@ load_service() { set_forward_dnsmasq "$SMARTDNS_PORT" fi + load_second_server $section + config_foreach load_server "server" echo "conf-file $ADDRESS_CONF" >> $SMARTDNS_CONF_TMP @@ -378,12 +448,14 @@ load_service() { procd_close_instance } -start_service() { +start_service() +{ config_load "smartdns" config_foreach load_service "smartdns" } -reload_service(){ +reload_service() +{ stop start } diff --git a/src/dns_client.c b/src/dns_client.c index eef7d2d..22d81a9 100644 --- a/src/dns_client.c +++ b/src/dns_client.c @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +#define _GNU_SOURCE #include "dns_client.h" #include "atomic.h" #include "dns.h" @@ -45,6 +46,7 @@ #include #include #include +#include #include #include #include diff --git a/src/dns_conf.c b/src/dns_conf.c index cbf91f5..0a9b752 100644 --- a/src/dns_conf.c +++ b/src/dns_conf.c @@ -745,6 +745,7 @@ static int _config_speed_check_mode(void *data, int argc, char *argv[]) char *ptr; int order = 0; int port = 80; + int i = 0; if (argc <= 1) { return -1; @@ -778,7 +779,7 @@ static int _config_speed_check_mode(void *data, int argc, char *argv[]) dns_conf_check_order.tcp_port = port; } else if (strncmp(field, "none", sizeof("none")) == 0) { dns_conf_check_order.order[order] = DOMAIN_CHECK_NONE; - for (int i = order + 1; i < DOMAIN_CHECK_NUM; i++) { + for (i = order + 1; i < DOMAIN_CHECK_NUM; i++) { dns_conf_check_order.order[i] = DOMAIN_CHECK_NONE; }