smartdns: support more arch #14
This commit is contained in:
parent
1c9d458ad4
commit
d20c828ebb
2
package/jsda/luci-app-smartdns/Makefile
Executable file → Normal file
2
package/jsda/luci-app-smartdns/Makefile
Executable file → Normal file
@ -7,7 +7,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI Support for smartdns
|
||||
LUCI_DEPENDS:=@x86_64 +smartdns
|
||||
LUCI_DEPENDS:=+smartdns
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
|
||||
59
package/jsda/luci-app-smartdns/luasrc/controller/smartdns.lua
Executable file → Normal file
59
package/jsda/luci-app-smartdns/luasrc/controller/smartdns.lua
Executable file → Normal file
@ -1,6 +1,7 @@
|
||||
-- Copyright 2018 Nick Peng (pymumu@gmail.com)
|
||||
|
||||
module("luci.controller.smartdns", package.seeall)
|
||||
local smartdns = require "luci.model.smartdns"
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/smartdns") then
|
||||
@ -8,7 +9,61 @@ function index()
|
||||
end
|
||||
|
||||
local page
|
||||
|
||||
page = entry({"admin", "services", "smartdns"}, cbi("smartdns"), _("SmartDNS"), 60)
|
||||
page = entry({"admin", "services", "smartdns"}, cbi("smartdns/smartdns"), _("SmartDNS"), 60)
|
||||
page.dependent = true
|
||||
page = entry({"admin", "services", "smartdns", "status"}, call("act_status"))
|
||||
page.leaf = true
|
||||
page = entry({"admin", "services", "smartdns", "upstream"}, cbi("smartdns/upstream"), nil)
|
||||
page.leaf = true
|
||||
end
|
||||
|
||||
local function is_running()
|
||||
return luci.sys.call("pidof smartdns >/dev/null") == 0
|
||||
end
|
||||
|
||||
function act_status()
|
||||
local e={}
|
||||
local ipv6_server;
|
||||
local redirect_mode="none";
|
||||
|
||||
e.ipv6_works = 2;
|
||||
e.ipv4_works = 2;
|
||||
e.ipv6_server = 1;
|
||||
e.dnsmasq_forward = 0;
|
||||
redirect_mode = smartdns.get_config_option("smartdns", "smartdns", "redirect", nil);
|
||||
if redirect_mode == "redirect" then
|
||||
e.redirect = 1
|
||||
elseif redirect_mode == "dnsmasq-upstream" then
|
||||
e.redirect = 2
|
||||
else
|
||||
e.redirect = 0
|
||||
end
|
||||
|
||||
e.local_port = smartdns.get_config_option("smartdns", "smartdns", "port", nil);
|
||||
ipv6_server = smartdns.get_config_option("smartdns", "smartdns", "ipv6_server", nil);
|
||||
if e.redirect == 1 then
|
||||
if e.local_port ~= nil and e.local_port ~= "53" then
|
||||
e.ipv4_works = luci.sys.call("iptables -t nat -nL PREROUTING 2>/dev/null | grep REDIRECT | grep dpt:53 | grep %q >/dev/null 2>&1" % e.local_port) == 0
|
||||
if ipv6_server == "1" then
|
||||
e.ipv6_works = luci.sys.call("ip6tables -t nat -nL PREROUTING 2>/dev/null| grep REDIRECT | grep dpt:53 | grep %q >/dev/null 2>&1" % e.local_port) == 0
|
||||
else
|
||||
e.ipv6_works = 2
|
||||
end
|
||||
else
|
||||
e.redirect = 0
|
||||
end
|
||||
elseif e.redirect == 2 then
|
||||
local str;
|
||||
local dnsmasq_server = luci.sys.exec("uci get dhcp.@dnsmasq[0].server")
|
||||
if e.local_port ~= nil then
|
||||
str = "127.0.0.1#" .. e.local_port
|
||||
if string.sub(dnsmasq_server,1,string.len(str)) == str then
|
||||
e.dnsmasq_forward = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
e.running = is_running()
|
||||
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
||||
|
||||
@ -1,123 +0,0 @@
|
||||
-- Copyright 2018 Nick Peng (pymumu@gmail.com)
|
||||
|
||||
require("nixio.fs")
|
||||
require("luci.http")
|
||||
|
||||
m = Map("smartdns", translate("SmartDNS"),
|
||||
translate("SmartDNS is a local dns server to find fastest ip."))
|
||||
|
||||
if luci.sys.call("pidof smartdns >/dev/null") == 0 then
|
||||
m = Map("smartdns", translate("SmartDNS"), "%s - %s" %{translate("SmartDNS"), translate("RUNNING")})
|
||||
else
|
||||
m = Map("smartdns", translate("SmartDNS"), "%s - %s" %{translate("SmartDNS"), translate("NOT RUNNING")})
|
||||
end
|
||||
|
||||
-- Basic
|
||||
s = m:section(TypedSection, "smartdns", translate("Settings"), translate("General Settings"))
|
||||
s.anonymous = true
|
||||
|
||||
---- Eanble
|
||||
o = s:option(Flag, "enabled", translate("Enable"), translate("Enable or disable smartdns server"))
|
||||
o.rempty = false
|
||||
|
||||
---- Port
|
||||
o = s:option(Value, "port", translate("Local Port"), translate("Smartdns local server port"))
|
||||
o.placeholder = 5353
|
||||
o.default = 5353
|
||||
o.datatype = "port"
|
||||
o.rempty = false
|
||||
|
||||
o = s:option(Flag, "redirect", translate("redirect"), translate("redirect standard dns query from 53 to smartdns"))
|
||||
o.default = true
|
||||
o.placeholder = "1"
|
||||
o.rempty = false
|
||||
|
||||
---- cache-size
|
||||
o = s:option(Value, "cache_size", translate("Cache Size"), translate("DNS domain result cache size"))
|
||||
o.rempty = true
|
||||
|
||||
---- rr-ttl
|
||||
o = s:option(Value, "rr_ttl", translate("Domain TTL"), translate("TTL for all domain result."))
|
||||
o.rempty = true
|
||||
|
||||
---- rr-ttl-min
|
||||
o = s:option(Value, "rr_ttl_min", translate("Domain TTL Min"), translate("Minimum TTL for all domain result."))
|
||||
o.rempty = true
|
||||
|
||||
---- rr-ttl-max
|
||||
o = s:option(Value, "rr_ttl_max", translate("Domain TTL Max"), translate("Maximum TTL for all domain result."))
|
||||
o.rempty = true
|
||||
|
||||
-- Upstream servers
|
||||
s = m:section(TypedSection, "server", translate("Upstream Servers"), translate("Upstream Servers, support UDP, TCP protocol"))
|
||||
s.anonymous = true
|
||||
s.addremove = true
|
||||
s.template = "cbi/tblsection"
|
||||
|
||||
---- name
|
||||
s:option(Value, "name", translate("Name"), translate("DNS Server name"))
|
||||
---- IP address
|
||||
o = s:option(Value, "ip", translate("ip"), translate("DNS Server ip"))
|
||||
o.datatype = "ipaddr"
|
||||
o.rmempty = false
|
||||
---- port
|
||||
o = s:option(Value, "port", translate("port"), translate("DNS Server port"))
|
||||
o.placeholder = 53
|
||||
o.default = 53
|
||||
o.datatype = "port"
|
||||
o.rempty = false
|
||||
---- type
|
||||
o = s:option(ListValue, "type", translate("type"), translate("DNS Server type"))
|
||||
o.placeholder = "udp"
|
||||
o:value("udp", translate("udp"))
|
||||
o:value("tcp", translate("tcp"))
|
||||
o.default = "udp"
|
||||
o.rempty = false
|
||||
|
||||
-- Doman addresss
|
||||
s = m:section(TypedSection, "smartdns", translate("Domain Address"),
|
||||
translate("DNS Server name"))
|
||||
s.anonymous = true
|
||||
|
||||
---- address
|
||||
addr = s:option(Value, "address",
|
||||
translate(""),
|
||||
translate("Specify an IP address to return for any host in the given domains " ..
|
||||
"Queries in the domains are never forwarded and always replied to with the specified IP address which may be IPv4 or IPv6. " ..
|
||||
""))
|
||||
|
||||
addr.template = "cbi/tvalue"
|
||||
addr.rows = 20
|
||||
|
||||
function addr.cfgvalue(self, section)
|
||||
return nixio.fs.readfile("/etc/smartdns/address.conf")
|
||||
end
|
||||
|
||||
function addr.write(self, section, value)
|
||||
value = value:gsub("\r\n?", "\n")
|
||||
nixio.fs.writefile("/etc/smartdns/address.conf", value)
|
||||
end
|
||||
|
||||
-- Doman addresss
|
||||
s = m:section(TypedSection, "smartdns", translate("Technical Support"),
|
||||
translate("Technical Support"))
|
||||
s.anonymous = true
|
||||
|
||||
o = s:option(Button, "web")
|
||||
o.title = translate("SmartDNS official website")
|
||||
o.inputtitle = translate("open website")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
luci.http.redirect("https://pymumu.github.io/smartdns")
|
||||
end
|
||||
|
||||
o = s:option(Button, "Donate")
|
||||
o.title = translate("Donate to smartdns")
|
||||
o.inputtitle = translate("Donate")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
luci.http.redirect("https://pymumu.github.io/smartdns/#donate")
|
||||
end
|
||||
|
||||
return m
|
||||
|
||||
@ -0,0 +1,232 @@
|
||||
-- Copyright 2018 Nick Peng (pymumu@gmail.com)
|
||||
|
||||
require ("nixio.fs")
|
||||
require ("luci.http")
|
||||
require ("luci.dispatcher")
|
||||
require ("nixio.fs")
|
||||
|
||||
m = Map("smartdns")
|
||||
m.title = translate("SmartDNS Server")
|
||||
m.description = translate("SmartDNS is a local high-performance DNS server, supports finding fastest IP, supports ad filtering, and supports avoiding DNS poisoning.")
|
||||
|
||||
m:section(SimpleSection).template = "smartdns/smartdns_status"
|
||||
|
||||
-- Basic
|
||||
s = m:section(TypedSection, "smartdns", translate("Settings"), translate("General Settings"))
|
||||
s.anonymous = true
|
||||
|
||||
s:tab("settings", translate("General Settings"))
|
||||
s:tab("custom", translate("Custom Settings"))
|
||||
|
||||
---- Eanble
|
||||
o = s:taboption("settings", Flag, "enabled", translate("Enable"), translate("Enable or disable smartdns server"))
|
||||
o.default = o.disabled
|
||||
o.rempty = false
|
||||
|
||||
---- server name
|
||||
o = s:taboption("settings", Value, "server_name", translate("Server Name"), translate("Smartdns server name"))
|
||||
o.default = "smartdns"
|
||||
o.datatype = "hostname"
|
||||
o.rempty = false
|
||||
|
||||
---- Port
|
||||
o = s:taboption("settings", Value, "port", translate("Local Port"), translate("Smartdns local server port"))
|
||||
o.placeholder = 6053
|
||||
o.default = 6053
|
||||
o.datatype = "port"
|
||||
o.rempty = false
|
||||
|
||||
---- Enable TCP server
|
||||
o = s:taboption("settings", Flag, "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
|
||||
|
||||
---- Support IPV6
|
||||
o = s:taboption("settings", Flag, "ipv6_server", translate("IPV6 Server"), translate("Enable IPV6 DNS Server"))
|
||||
o.rmempty = false
|
||||
o.default = o.enabled
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "1"
|
||||
end
|
||||
|
||||
---- Support DualStack ip selection
|
||||
o = s:taboption("settings", Flag, "dualstack_ip_selection", translate("Dual-stack IP Selection"), translate("Enable IP selection between IPV4 and IPV6"))
|
||||
o.rmempty = false
|
||||
o.default = o.disabled
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "0"
|
||||
end
|
||||
|
||||
---- Domain prefetch load
|
||||
o = s:taboption("settings", Flag, "prefetch_domain", translate("Domain prefetch"), translate("Enable domain prefetch, accelerate domain response speed."))
|
||||
o.rmempty = false
|
||||
o.default = o.disabled
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "0"
|
||||
end
|
||||
|
||||
---- Redirect
|
||||
o = s:taboption("settings", ListValue, "redirect", translate("Redirect"), translate("SmartDNS redirect mode"))
|
||||
o.placeholder = "none"
|
||||
o:value("none", translate("none"))
|
||||
o:value("dnsmasq-upstream", translate("Run as dnsmasq upstream server"))
|
||||
o:value("redirect", translate("Redirect 53 port to SmartDNS"))
|
||||
o.default = "none"
|
||||
o.rempty = false
|
||||
|
||||
---- cache-size
|
||||
o = s:taboption("settings", Value, "cache_size", translate("Cache Size"), translate("DNS domain result cache size"))
|
||||
o.rempty = true
|
||||
|
||||
---- rr-ttl
|
||||
o = s:taboption("settings", Value, "rr_ttl", translate("Domain TTL"), translate("TTL for all domain result."))
|
||||
o.rempty = true
|
||||
|
||||
---- rr-ttl-min
|
||||
o = s:taboption("settings", Value, "rr_ttl_min", translate("Domain TTL Min"), translate("Minimum TTL for all domain result."))
|
||||
o.rempty = true
|
||||
o.placeholder = "300"
|
||||
o.default = 300
|
||||
o.optional = true
|
||||
|
||||
---- 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
|
||||
|
||||
----- custom settings
|
||||
custom = s:taboption("custom", Value, "Custom Settings",
|
||||
translate(""),
|
||||
translate("smartdns custom settings"))
|
||||
|
||||
custom.template = "cbi/tvalue"
|
||||
custom.rows = 20
|
||||
|
||||
function custom.cfgvalue(self, section)
|
||||
return nixio.fs.readfile("/etc/smartdns/custom.conf")
|
||||
end
|
||||
|
||||
function custom.write(self, section, value)
|
||||
value = value:gsub("\r\n?", "\n")
|
||||
nixio.fs.writefile("/etc/smartdns/custom.conf", value)
|
||||
end
|
||||
|
||||
o = s:taboption("custom", Flag, "coredump", translate("Generate Coredump"), translate("Generate Coredump file when smartdns crash, coredump file is located at /tmp/smartdns.xxx.core."))
|
||||
o.rmempty = false
|
||||
o.default = o.disabled
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "0"
|
||||
end
|
||||
|
||||
-- Upstream servers
|
||||
s = m:section(TypedSection, "server", translate("Upstream Servers"), translate("Upstream Servers, support UDP, TCP protocol. " ..
|
||||
"Please configure multiple DNS servers, including multiple foreign DNS servers."))
|
||||
|
||||
s.anonymous = true
|
||||
s.addremove = true
|
||||
s.template = "cbi/tblsection"
|
||||
s.extedit = luci.dispatcher.build_url("admin/services/smartdns/upstream/%s")
|
||||
|
||||
---- enable flag
|
||||
o = s:option(Flag, "enabled", translate("Enable"), translate("Enable"))
|
||||
o.rmempty = false
|
||||
o.default = o.enabled
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "1"
|
||||
end
|
||||
|
||||
---- name
|
||||
s:option(Value, "name", translate("DNS Server Name"), translate("DNS Server Name"))
|
||||
|
||||
---- IP address
|
||||
o = s:option(Value, "ip", translate("ip"), translate("DNS Server ip"))
|
||||
o.datatype = "or(ipaddr, string)"
|
||||
o.rmempty = false
|
||||
---- port
|
||||
o = s:option(Value, "port", translate("port"), translate("DNS Server port"))
|
||||
o.placeholder = "default"
|
||||
o.datatype = "port"
|
||||
o.rempty = true
|
||||
o:depends("type", "udp")
|
||||
o:depends("type", "tcp")
|
||||
o:depends("type", "tls")
|
||||
|
||||
---- type
|
||||
o = s:option(ListValue, "type", translate("type"), translate("DNS Server type"))
|
||||
o.placeholder = "udp"
|
||||
o:value("udp", translate("udp"))
|
||||
o:value("tcp", translate("tcp"))
|
||||
o:value("tls", translate("tls"))
|
||||
o:value("https", translate("https"))
|
||||
o.default = "udp"
|
||||
o.rempty = false
|
||||
|
||||
-- Doman addresss
|
||||
s = m:section(TypedSection, "smartdns", translate("Domain Address"),
|
||||
translate("Set Specific domain ip address."))
|
||||
s.anonymous = true
|
||||
|
||||
---- address
|
||||
addr = s:option(Value, "address",
|
||||
translate(""),
|
||||
translate("Specify an IP address to return for any host in the given domains, Queries in the domains are never forwarded and always replied to with the specified IP address which may be IPv4 or IPv6."))
|
||||
|
||||
addr.template = "cbi/tvalue"
|
||||
addr.rows = 20
|
||||
|
||||
function addr.cfgvalue(self, section)
|
||||
return nixio.fs.readfile("/etc/smartdns/address.conf")
|
||||
end
|
||||
|
||||
function addr.write(self, section, value)
|
||||
value = value:gsub("\r\n?", "\n")
|
||||
nixio.fs.writefile("/etc/smartdns/address.conf", value)
|
||||
end
|
||||
|
||||
-- IP Blacklist
|
||||
s = m:section(TypedSection, "smartdns", translate("IP Blacklist"),
|
||||
translate("Set Specific ip blacklist."))
|
||||
s.anonymous = true
|
||||
|
||||
---- blacklist
|
||||
addr = s:option(Value, "blacklist_ip",
|
||||
translate(""),
|
||||
translate("Configure IP blacklists that will be filtered from the results of specific DNS server."))
|
||||
|
||||
addr.template = "cbi/tvalue"
|
||||
addr.rows = 20
|
||||
|
||||
function addr.cfgvalue(self, section)
|
||||
return nixio.fs.readfile("/etc/smartdns/blacklist-ip.conf")
|
||||
end
|
||||
|
||||
function addr.write(self, section, value)
|
||||
value = value:gsub("\r\n?", "\n")
|
||||
nixio.fs.writefile("/etc/smartdns/blacklist-ip.conf", value)
|
||||
end
|
||||
|
||||
-- Doman addresss
|
||||
s = m:section(TypedSection, "smartdns", translate("Technical Support"),
|
||||
translate("If you like this software, please buy me a cup of coffee."))
|
||||
s.anonymous = true
|
||||
|
||||
o = s:option(Button, "web")
|
||||
o.title = translate("SmartDNS official website")
|
||||
o.inputtitle = translate("open website")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
luci.http.redirect("https://pymumu.github.io/smartdns")
|
||||
end
|
||||
|
||||
o = s:option(Button, "Donate")
|
||||
o.title = translate("Donate to smartdns")
|
||||
o.inputtitle = translate("Donate")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
luci.http.redirect("https://pymumu.github.io/smartdns/#donate")
|
||||
end
|
||||
|
||||
return m
|
||||
|
||||
@ -0,0 +1,96 @@
|
||||
local sid = arg[1]
|
||||
|
||||
m = Map("smartdns", "%s - %s" %{translate("SmartDNS Server"), translate("Upstream DNS Server Configuration")})
|
||||
m.redirect = luci.dispatcher.build_url("admin/services/smartdns")
|
||||
|
||||
if m.uci:get("smartdns", sid) ~= "server" then
|
||||
luci.http.redirect(m.redirect)
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ Edit Server ]]--
|
||||
s = m:section(NamedSection, sid, "server")
|
||||
s.anonymous = true
|
||||
s.addremove = false
|
||||
|
||||
---- name
|
||||
s:option(Value, "name", translate("DNS Server Name"), translate("DNS Server Name"))
|
||||
|
||||
---- IP address
|
||||
o = s:option(Value, "ip", translate("ip"), translate("DNS Server ip"))
|
||||
o.datatype = "or(host, string)"
|
||||
o.rmempty = false
|
||||
---- port
|
||||
o = s:option(Value, "port", translate("port"), translate("DNS Server port"))
|
||||
o.placeholder = "default"
|
||||
o.datatype = "port"
|
||||
o.rempty = true
|
||||
o:depends("type", "udp")
|
||||
o:depends("type", "tcp")
|
||||
o:depends("type", "tls")
|
||||
|
||||
---- type
|
||||
o = s:option(ListValue, "type", translate("type"), translate("DNS Server type"))
|
||||
o.placeholder = "udp"
|
||||
o:value("udp", translate("udp"))
|
||||
o:value("tcp", translate("tcp"))
|
||||
o:value("tls", translate("tls"))
|
||||
o:value("https", translate("https"))
|
||||
o.default = "udp"
|
||||
o.rempty = false
|
||||
|
||||
---- SNI host name
|
||||
o = s:option(Value, "host_name", translate("TLS SNI name"), translate("Sets the server name indication"))
|
||||
o.default = ""
|
||||
o.datatype = "hostname"
|
||||
o.rempty = true
|
||||
o:depends("type", "tls")
|
||||
o:depends("type", "https")
|
||||
|
||||
---- http host
|
||||
o = s:option(Value, "http_host", translate("HTTP Host"), translate("Set the HTTP host used for the query. Use this parameter when the host of the URL address is an IP address."))
|
||||
o.default = ""
|
||||
o.datatype = "hostname"
|
||||
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.rmempty = true
|
||||
o.placeholder = "default"
|
||||
o.datatype = "hostname"
|
||||
o.rempty = true
|
||||
|
||||
---- blacklist_ip
|
||||
o = s:option(Flag, "blacklist_ip", translate("IP Blacklist Filtering"), translate("Filtering IP with blacklist"))
|
||||
o.rmempty = false
|
||||
o.default = o.disabled
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "0"
|
||||
end
|
||||
|
||||
---- anti-Answer-Forgery
|
||||
-- o = s:option(Flag, "check_edns", translate("Anti Answer Forgery"), translate("Anti answer forgery, if DNS does not work properly after enabling, please turn off this feature"))
|
||||
-- o.rmempty = false
|
||||
-- o.default = o.disabled
|
||||
-- o:depends("type", "udp")
|
||||
-- o.cfgvalue = function(...)
|
||||
-- return Flag.cfgvalue(...) or "0"
|
||||
-- end
|
||||
|
||||
---- SPKI pin
|
||||
o = s:option(Value, "spki_pin", translate("TLS SPKI Pinning"), translate("Used to verify the validity of the TLS server, The value is Base64 encoded SPKI fingerprint, leaving blank to indicate that the validity of TLS is not verified."))
|
||||
o.default = ""
|
||||
o.datatype = "string"
|
||||
o.rempty = true
|
||||
o:depends("type", "tls")
|
||||
o:depends("type", "https")
|
||||
|
||||
|
||||
---- other args
|
||||
o = s:option(Value, "addition_arg", translate("Additional Server Args"), translate("Additional Args for upstream dns servers"))
|
||||
o.default = ""
|
||||
o.rempty = true
|
||||
o.optional = true
|
||||
|
||||
return m
|
||||
17
package/jsda/luci-app-smartdns/luasrc/model/smartdns.lua
Normal file
17
package/jsda/luci-app-smartdns/luasrc/model/smartdns.lua
Normal file
@ -0,0 +1,17 @@
|
||||
-- Copyright 2018 Nick Peng (pymumu@gmail.com)
|
||||
|
||||
require ("nixio.fs")
|
||||
require ("luci.http")
|
||||
require ("luci.dispatcher")
|
||||
require ("nixio.fs")
|
||||
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
|
||||
module("luci.model.smartdns", package.seeall)
|
||||
|
||||
function get_config_option(module, section, option, default)
|
||||
return uci:get_first(module, section, option) or default
|
||||
end
|
||||
|
||||
return m
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "services", "smartdns", "status")%>', null,
|
||||
function(x, data) {
|
||||
var tb = document.getElementById('smartdns_status');
|
||||
if (data && tb) {
|
||||
var links = "";
|
||||
if (data.running) {
|
||||
links = '<b><font color=green>SmartDNS - <%:RUNNING%></font></b></em>';
|
||||
if (data.redirect) {
|
||||
if (data.redirect == 1) {
|
||||
if (data.ipv4_works == 0) {
|
||||
links += "<br></br><b><font color=red><%:IPV4 53 Port Redirect Failure%></font></b>"
|
||||
}
|
||||
|
||||
if (data.ipv6_works != 2) {
|
||||
if (data.ipv6_works == 0) {
|
||||
links += "<br></br><b><font color=red><%:IPV6 53 Port Redirect Failure%></font></b>"
|
||||
}
|
||||
}
|
||||
} else if (data.redirect == 2) {
|
||||
if (data.dnsmasq_forward == 0) {
|
||||
links += "<br></br><b><font color=red><%:Dnsmasq Forwared To Smartdns Failure%></font></b>"
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
links = '<b><font color=red>SmartDNS - <%:NOT RUNNING%></font></b>';
|
||||
}
|
||||
|
||||
tb.innerHTML = links;
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]>
|
||||
</script>
|
||||
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
|
||||
<fieldset class="cbi-section">
|
||||
<p id="smartdns_status">
|
||||
<em><%:Collecting data...%></em>
|
||||
</p>
|
||||
</fieldset>
|
||||
@ -1,92 +0,0 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
msgid "SmartDNS"
|
||||
msgstr "SmartDNS"
|
||||
|
||||
msgid "LOG"
|
||||
msgstr "日志"
|
||||
|
||||
msgid "log"
|
||||
msgstr "日志"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "日志"
|
||||
|
||||
msgid "SmartDNS is a local dns server to find fastest ip."
|
||||
msgstr "SmartDNS是一个本地DNS服务器组件,能快速帮你解析域名"
|
||||
|
||||
msgid "RUNNING"
|
||||
msgstr "运行"
|
||||
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未运行"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
|
||||
msgid "General Settings"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Enable or disable smartdns server"
|
||||
msgstr "启用或禁用smartdns服务器"
|
||||
|
||||
msgid ""Local Port""
|
||||
msgstr "本地端口"
|
||||
|
||||
msgid "Smartdns local server port"
|
||||
msgstr "Smartdns服务器本地端口"
|
||||
|
||||
msgid "redirect"
|
||||
msgstr "重定向"
|
||||
|
||||
msgid "redirect standard dns query from 53 to smartdns"
|
||||
msgstr "将本地DNS查询从53端口定向至Smartdns服务器"
|
||||
|
||||
msgid "Cache Size"
|
||||
msgstr "缓存大小"
|
||||
|
||||
msgid "DNS domain result cache size"
|
||||
msgstr "DNS查询结果保存至本地缓存大小"
|
||||
|
||||
msgid "Upstream Servers"
|
||||
msgstr "上游服务器"
|
||||
|
||||
msgid "Upstream Servers, support UDP, TCP protocol"
|
||||
msgstr "上游服务器,支持UDP,TCP协议"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
msgid "DNS Server name"
|
||||
msgstr "DNS服务器名称"
|
||||
|
||||
msgid "ip"
|
||||
msgstr "ip"
|
||||
|
||||
msgid "DNS Server ip"
|
||||
msgstr "DNS服务器IP"
|
||||
|
||||
msgid "port"
|
||||
msgstr "端口"
|
||||
|
||||
msgid "DNS Server port"
|
||||
msgstr "DNS服务器端口"
|
||||
|
||||
msgid "type"
|
||||
msgstr "类型"
|
||||
|
||||
msgid "DNS Server type"
|
||||
msgstr "DNS服务器类型"
|
||||
|
||||
msgid "smartdns"
|
||||
msgstr "smartdns"
|
||||
|
||||
msgid "Domain Address"
|
||||
msgstr "域名地址"
|
||||
|
||||
msgid "Technical Support"
|
||||
msgstr "技术支持"
|
||||
Binary file not shown.
29
package/jsda/smartdns/Makefile
Executable file → Normal file
29
package/jsda/smartdns/Makefile
Executable file → Normal file
@ -15,7 +15,7 @@ define Package/$(PKG_NAME)
|
||||
CATEGORY:=Network
|
||||
TITLE:=smartdns
|
||||
URL:=
|
||||
DEPENDS:=@x86_64
|
||||
DEPENDS:=+libopenssl
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
@ -28,14 +28,31 @@ endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(CP) ./files/usr/sbin/smartdns $(1)/usr/sbin/smartdns
|
||||
ifeq ($(ARCH),i386)
|
||||
$(INSTALL_BIN) ./files/usr/sbin/x86 $(1)/usr/sbin/smartdns
|
||||
endif
|
||||
ifeq ($(ARCH),x86_64)
|
||||
$(INSTALL_BIN) ./files/usr/sbin/x86_64 $(1)/usr/sbin/smartdns
|
||||
endif
|
||||
ifeq ($(ARCH),arm)
|
||||
$(INSTALL_BIN) ./files/usr/sbin/arm $(1)/usr/sbin/smartdns
|
||||
endif
|
||||
ifeq ($(ARCH),aarch64)
|
||||
$(INSTALL_BIN) ./files/usr/sbin/aarch64 $(1)/usr/sbin/smartdns
|
||||
endif
|
||||
ifeq ($(ARCH),mips)
|
||||
$(INSTALL_BIN) ./files/usr/sbin/mips $(1)/usr/sbin/smartdns
|
||||
endif
|
||||
ifeq ($(ARCH),mipsel)
|
||||
$(INSTALL_BIN) ./files/usr/sbin/mips $(1)/usr/sbin/smartdns
|
||||
endif
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(CP) ./files/etc/config/smartdns $(1)/etc/config/smartdns
|
||||
$(INSTALL_CONF) ./files/etc/config/smartdns $(1)/etc/config/smartdns
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(CP) ./files/etc/init.d/smartdns $(1)/etc/init.d/smartdns
|
||||
$(INSTALL_BIN) ./files/etc/init.d/smartdns $(1)/etc/init.d/smartdns
|
||||
$(INSTALL_DIR) $(1)/etc/smartdns
|
||||
$(CP) ./files/etc/smartdns/address.conf $(1)/etc/smartdns/address.conf
|
||||
$(CP) ./files/etc/smartdns/smartdns.conf $(1)/etc/smartdns/smartdns.conf
|
||||
$(INSTALL_CONF) ./files/etc/smartdns/address.conf $(1)/etc/smartdns/address.conf
|
||||
$(INSTALL_CONF) ./files/etc/smartdns/smartdns.conf $(1)/etc/smartdns/smartdns.conf
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
|
||||
3
package/jsda/smartdns/files/etc/config/smartdns
Executable file → Normal file
3
package/jsda/smartdns/files/etc/config/smartdns
Executable file → Normal file
@ -1,2 +1,3 @@
|
||||
config 'smartdns'
|
||||
option 'enabled' '0'
|
||||
option 'enabled' '0'
|
||||
|
||||
@ -1,74 +1,279 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2018 Nick Peng (pymumu@gmail.com)
|
||||
|
||||
START=90
|
||||
START=99
|
||||
NAME=smartdns
|
||||
USE_PROCD=1
|
||||
SERVICE_USE_PID=1
|
||||
SERVICE_WRITE_PID=1
|
||||
SERVICE_DAEMONIZE=1
|
||||
SERVICE_PID_FILE="/var/run/smartdns.pid"
|
||||
BASECONFIGFILE="/etc/smartdns/smartdns.conf"
|
||||
SMARTDNS_CONF="/var/etc/smartdns.conf"
|
||||
ADDRESS_CONF="/etc/smartdns/address.conf"
|
||||
SMARTDNS_CONF_DIR="/etc/smartdns"
|
||||
SMARTDNS_VAR_CONF_DIR="/var/etc/smartdns"
|
||||
SMARTDNS_CONF="$SMARTDNS_VAR_CONF_DIR/smartdns.conf"
|
||||
ADDRESS_CONF="$SMARTDNS_CONF_DIR/address.conf"
|
||||
BLACKLIST_IP_CONF="$SMARTDNS_CONF_DIR/blacklist-ip.conf"
|
||||
CUSTOM_CONF="$SMARTDNS_CONF_DIR/custom.conf"
|
||||
SMARTDNS_CONF_TMP="${SMARTDNS_CONF}.tmp"
|
||||
COREDUMP="0"
|
||||
RESPAWN="1"
|
||||
|
||||
set_forward_dnsmasq()
|
||||
{
|
||||
local PORT="$1"
|
||||
addr="127.0.0.1#$PORT"
|
||||
OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
|
||||
echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
uci delete dhcp.@dnsmasq[0].server 2>/dev/null
|
||||
uci add_list dhcp.@dnsmasq[0].server=$addr
|
||||
for server in $OLD_SERVER; do
|
||||
if [ "$server" = "$addr" ]; then
|
||||
continue
|
||||
fi
|
||||
uci add_list dhcp.@dnsmasq[0].server=$server
|
||||
done
|
||||
uci delete dhcp.@dnsmasq[0].resolvfile 2>/dev/null
|
||||
uci set dhcp.@dnsmasq[0].noresolv=1
|
||||
uci commit dhcp
|
||||
/etc/init.d/dnsmasq restart
|
||||
}
|
||||
|
||||
stop_forward_dnsmasq()
|
||||
{
|
||||
local OLD_PORT="$1"
|
||||
addr="127.0.0.1#$OLD_PORT"
|
||||
OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
|
||||
echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
uci del_list dhcp.@dnsmasq[0].server=$addr 2>/dev/null
|
||||
addrlist="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
|
||||
if [ -z "$addrlist" ] ; then
|
||||
uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto 2>/dev/null
|
||||
uci delete dhcp.@dnsmasq[0].noresolv 2>/dev/null
|
||||
fi
|
||||
uci commit dhcp
|
||||
/etc/init.d/dnsmasq restart
|
||||
}
|
||||
|
||||
set_iptable()
|
||||
{
|
||||
IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F: '{print $2}'`"
|
||||
local ipv6_server=$1
|
||||
local tcp_server=$2
|
||||
|
||||
IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
|
||||
for IP in $IPS
|
||||
do
|
||||
if [ "$tcp_server" == "1" ]; then
|
||||
iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1
|
||||
fi
|
||||
iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1
|
||||
done
|
||||
|
||||
if [ "$ipv6_server" == 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
|
||||
for IP in $IPS
|
||||
do
|
||||
if [ "$tcp_server" == "1" ]; then
|
||||
ip6tables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1
|
||||
fi
|
||||
ip6tables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
clear_iptable()
|
||||
{
|
||||
IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F: '{print $2}'`"
|
||||
local OLD_PORT="$1"
|
||||
local ipv6_server=$2
|
||||
IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
|
||||
for IP in $IPS
|
||||
do
|
||||
iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1
|
||||
iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
||||
iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
||||
done
|
||||
|
||||
if [ "$ipv6_server" == 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
|
||||
for IP in $IPS
|
||||
do
|
||||
ip6tables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
||||
ip6tables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger firewall
|
||||
procd_add_reload_trigger smartdns
|
||||
}
|
||||
|
||||
|
||||
conf_append()
|
||||
{
|
||||
echo "$1 $2" >> $SMARTDNS_CONF_TMP
|
||||
}
|
||||
|
||||
get_tz()
|
||||
{
|
||||
SET_TZ=""
|
||||
|
||||
if [ -e "/etc/localtime" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
for tzfile in /etc/TZ /var/etc/TZ
|
||||
do
|
||||
if [ ! -e "$tzfile" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
tz="`cat $tzfile 2>/dev/null`"
|
||||
done
|
||||
|
||||
if [ -z "$tz" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
SET_TZ=$tz
|
||||
}
|
||||
|
||||
load_server()
|
||||
{
|
||||
local section="$1"
|
||||
config_get "port" "$section" "port" "53"
|
||||
local ADDITIONAL_ARGS=""
|
||||
local DNS_ADDRESS=""
|
||||
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "port" "$section" "port" ""
|
||||
config_get "type" "$section" "type" "udp"
|
||||
config_get "ip" "$section" "ip" ""
|
||||
config_get "host_name" "$section" "host_name" ""
|
||||
config_get "http_host" "$section" "http_host" ""
|
||||
config_get "server_group" "$section" "server_group" ""
|
||||
config_get "blacklist_ip" "$section" "blacklist_ip" "0"
|
||||
config_get "check_edns" "$section" "check_edns" "0"
|
||||
config_get "spki_pin" "$section" "spki_pin" ""
|
||||
config_get "addition_arg" "$section" "addition_arg" ""
|
||||
|
||||
if [ -z "$port" ] || [ -z "$ip" ] || [ -z "$type" ]; then
|
||||
if [ "$enabled" = "0" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -z "$ip" ] || [ -z "$type" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
SERVER="server"
|
||||
if [ "$type" = "tcp" ]; then
|
||||
SERVER="server-tcp"
|
||||
elif [ "$type" = "tls" ]; then
|
||||
SERVER="server-tls"
|
||||
elif [ "$type" = "https" ]; then
|
||||
SERVER="server-https"
|
||||
fi
|
||||
|
||||
if [ ! -z "`echo $ip | grep ":"`" ]; then
|
||||
if [ ! -z "`echo $ip | grep ":" | grep -v "https://"`" ]; then
|
||||
if [ -z "`echo $ip | grep "\["`" ]; then
|
||||
ip="[$ip]"
|
||||
fi
|
||||
fi
|
||||
|
||||
conf_append "$SERVER" "$ip:$port"
|
||||
if [ ! -z "$host_name" ]; then
|
||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -host-name $host_name"
|
||||
fi
|
||||
|
||||
if [ ! -z "$http_host" ]; then
|
||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -http-host $http_host"
|
||||
fi
|
||||
|
||||
if [ ! -z "$server_group" ]; then
|
||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -group $server_group"
|
||||
fi
|
||||
|
||||
if [ "$blacklist_ip" != "0" ]; then
|
||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -blacklist-ip"
|
||||
fi
|
||||
|
||||
if [ "$check_edns" != "0" ]; then
|
||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -check-edns"
|
||||
fi
|
||||
|
||||
if [ ! -z "$spki_pin" ]; then
|
||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -spki-pin $spki_pin"
|
||||
fi
|
||||
|
||||
if [ ! -z "$port" ]; then
|
||||
DNS_ADDRESS="$ip:$port"
|
||||
else
|
||||
DNS_ADDRESS="$ip"
|
||||
fi
|
||||
|
||||
if [ "$type" = "https" ]; then
|
||||
DNS_ADDRESS="$ip"
|
||||
fi
|
||||
|
||||
conf_append "$SERVER" "$DNS_ADDRESS $ADDITIONAL_ARGS $addition_arg"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
load_service() {
|
||||
local section="$1"
|
||||
args=""
|
||||
config_get "port" "$section" "port" "5353"
|
||||
conf_append "bind" "[::]:$port"
|
||||
SMARTDNS_PORT="$port"
|
||||
|
||||
mkdir -p $(dirname $SMARTDNS_CONF)
|
||||
mkdir -p $SMARTDNS_VAR_CONF_DIR
|
||||
rm -f $SMARTDNS_CONF_TMP
|
||||
|
||||
config_get_bool "enabled" "$section" "enabled" '0'
|
||||
|
||||
config_get "server_name" "$section" "server_name" ""
|
||||
if [ ! -z "$server_name" ]; then
|
||||
conf_append "server-name" "$server_name"
|
||||
fi
|
||||
|
||||
config_get "coredump" "$section" "coredump" "0"
|
||||
if [ "$coredump" = "1" ]; then
|
||||
COREDUMP="1"
|
||||
fi
|
||||
|
||||
config_get "port" "$section" "port" "6053"
|
||||
config_get "ipv6_server" "$section" "ipv6_server" "1"
|
||||
config_get "tcp_server" "$section" "tcp_server" "1"
|
||||
if [ "$ipv6_server" = "1" ]; then
|
||||
conf_append "bind" "[::]:$port"
|
||||
else
|
||||
conf_append "bind" ":$port"
|
||||
fi
|
||||
|
||||
if [ "$tcp_server" = "1" ]; then
|
||||
if [ "$ipv6_server" = "1" ]; then
|
||||
conf_append "bind-tcp" "[::]:$port"
|
||||
else
|
||||
conf_append "bind-tcp" ":$port"
|
||||
fi
|
||||
fi
|
||||
config_get "dualstack_ip_selection" "$section" "dualstack_ip_selection" "0"
|
||||
if [ "$dualstack_ip_selection" = "1" ]; then
|
||||
conf_append "dualstack-ip-selection" "yes"
|
||||
fi
|
||||
|
||||
config_get "prefetch_domain" "$section" "prefetch_domain" "0"
|
||||
if [ "$prefetch_domain" = "1" ]; then
|
||||
conf_append "prefetch-domain" "yes"
|
||||
fi
|
||||
|
||||
SMARTDNS_PORT="$port"
|
||||
|
||||
config_get "cache_size" "$section" "cache_size" ""
|
||||
if [ ! -z "$cache_size" ]; then
|
||||
@ -90,29 +295,90 @@ start_service() {
|
||||
conf_append "rr-ttl-max" "$rr_ttl_max"
|
||||
fi
|
||||
|
||||
clear_iptable
|
||||
config_get_bool "redirect" "$section" "redirect" '0'
|
||||
if [ "$redirect" -eq 1 ]; then
|
||||
set_iptable
|
||||
config_get "log_size" "$section" "log_size" "64K"
|
||||
if [ ! -z "$log_size" ]; then
|
||||
conf_append "log-size" "$log_size"
|
||||
fi
|
||||
|
||||
config_get "log_num" "$section" "log_num" "1"
|
||||
if [ ! -z "$log_num" ]; then
|
||||
conf_append "log-num" "$log_num"
|
||||
fi
|
||||
|
||||
config_get "log_level" "$section" "log_level" "error"
|
||||
if [ ! -z "$log_level" ]; then
|
||||
conf_append "log-level" "$log_level"
|
||||
fi
|
||||
|
||||
config_get "log_file" "$section" "log_file" ""
|
||||
if [ ! -z "$log_file" ]; then
|
||||
conf_append "log-file" "$log_file"
|
||||
fi
|
||||
|
||||
config_get "redirect" "$section" "redirect" "none"
|
||||
config_get "old_redirect" "$section" "old_redirect" "none"
|
||||
config_get "old_port" "$section" "old_port" "0"
|
||||
config_get "old_enabled" "$section" "old_enabled" "0"
|
||||
|
||||
if [ "$old_redirect" != "$redirect" ] || [ "$old_port" != "$SMARTDNS_PORT" ] || [ "$old_enabled" = "1" -a "$enabled" = "0" ]; then
|
||||
if [ "$old_redirect" != "none" ]; then
|
||||
if [ "$old_port" != "0" ]; then
|
||||
clear_iptable "$old_port" "$ipv6_server"
|
||||
fi
|
||||
if [ "$old_redirect" == "dnsmasq-upstream" ]; then
|
||||
stop_forward_dnsmasq "$old_port"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
uci delete smartdns.@smartdns[0].old_redirect 2>/dev/null
|
||||
uci delete smartdns.@smartdns[0].old_port 2>/dev/null
|
||||
uci delete smartdns.@smartdns[0].old_enabled 2>/dev/null
|
||||
uci add_list smartdns.@smartdns[0].old_redirect="$redirect" 2>/dev/null
|
||||
uci add_list smartdns.@smartdns[0].old_port="$SMARTDNS_PORT" 2>/dev/null
|
||||
uci add_list smartdns.@smartdns[0].old_enabled="$enabled" 2>/dev/null
|
||||
uci commit smartdns
|
||||
|
||||
[ "$enabled" -gt 0 ] || return 1
|
||||
|
||||
if [ "$redirect" = "redirect" ]; then
|
||||
set_iptable $ipv6_server $tcp_server
|
||||
elif [ "$redirect" = "dnsmasq-upstream" ]; then
|
||||
set_forward_dnsmasq "$SMARTDNS_PORT"
|
||||
fi
|
||||
|
||||
config_foreach load_server "server"
|
||||
|
||||
echo "# address" >> $SMARTDNS_CONF_TMP
|
||||
grep "^ *address " $ADDRESS_CONF >> $SMARTDNS_CONF_TMP
|
||||
|
||||
config_get_bool "enabled" "$section" "enabled" '0'
|
||||
echo "conf-file $ADDRESS_CONF" >> $SMARTDNS_CONF_TMP
|
||||
echo "conf-file $BLACKLIST_IP_CONF" >> $SMARTDNS_CONF_TMP
|
||||
echo "conf-file $CUSTOM_CONF" >> $SMARTDNS_CONF_TMP
|
||||
mv $SMARTDNS_CONF_TMP $SMARTDNS_CONF
|
||||
[ "$enabled" -gt 0 ] || return 1
|
||||
service_start /usr/sbin/smartdns $args -c $SMARTDNS_CONF
|
||||
|
||||
procd_open_instance "smartdns"
|
||||
if [ "$COREDUMP" = "1" ]; then
|
||||
args="$args -S"
|
||||
procd_set_param limits core="unlimited"
|
||||
fi
|
||||
|
||||
get_tz
|
||||
if [ ! -z "$SET_TZ" ]; then
|
||||
procd_set_param env TZ="$SET_TZ"
|
||||
fi
|
||||
|
||||
procd_set_param command /usr/sbin/smartdns -f -c $SMARTDNS_CONF $args
|
||||
if [ "$RESPAWN" = "1" ]; then
|
||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
||||
fi
|
||||
procd_set_param file "$SMARTDNS_CONF"
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
start() {
|
||||
start_service() {
|
||||
config_load "smartdns"
|
||||
config_foreach start_service "smartdns"
|
||||
config_foreach load_service "smartdns"
|
||||
}
|
||||
|
||||
stop() {
|
||||
service_stop /usr/sbin/smartdns
|
||||
reload_service(){
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
|
||||
0
package/jsda/smartdns/files/etc/smartdns/address.conf
Executable file → Normal file
0
package/jsda/smartdns/files/etc/smartdns/address.conf
Executable file → Normal file
0
package/jsda/smartdns/files/etc/smartdns/smartdns.conf
Executable file → Normal file
0
package/jsda/smartdns/files/etc/smartdns/smartdns.conf
Executable file → Normal file
BIN
package/jsda/smartdns/files/usr/sbin/aarch64
Executable file
BIN
package/jsda/smartdns/files/usr/sbin/aarch64
Executable file
Binary file not shown.
BIN
package/jsda/smartdns/files/usr/sbin/arm
Executable file
BIN
package/jsda/smartdns/files/usr/sbin/arm
Executable file
Binary file not shown.
BIN
package/jsda/smartdns/files/usr/sbin/mips
Executable file
BIN
package/jsda/smartdns/files/usr/sbin/mips
Executable file
Binary file not shown.
BIN
package/jsda/smartdns/files/usr/sbin/mipsel
Executable file
BIN
package/jsda/smartdns/files/usr/sbin/mipsel
Executable file
Binary file not shown.
Binary file not shown.
BIN
package/jsda/smartdns/files/usr/sbin/x86
Executable file
BIN
package/jsda/smartdns/files/usr/sbin/x86
Executable file
Binary file not shown.
BIN
package/jsda/smartdns/files/usr/sbin/x86_64
Executable file
BIN
package/jsda/smartdns/files/usr/sbin/x86_64
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user