luci-app-passwall: sync upstream
This commit is contained in:
parent
102cb34409
commit
adc9715e59
@ -6,7 +6,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=luci-app-passwall
|
PKG_NAME:=luci-app-passwall
|
||||||
PKG_VERSION:=4.76-5
|
PKG_VERSION:=4.77-1
|
||||||
PKG_RELEASE:=
|
PKG_RELEASE:=
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
@ -118,6 +118,8 @@ domain_list.validate = function(self, value)
|
|||||||
flag = 0
|
flag = 0
|
||||||
elseif host:find("ext:") and host:find("ext:") == 1 then
|
elseif host:find("ext:") and host:find("ext:") == 1 then
|
||||||
flag = 0
|
flag = 0
|
||||||
|
elseif host:find("#") and host:find("#") == 1 then
|
||||||
|
flag = 0
|
||||||
end
|
end
|
||||||
if flag == 1 then
|
if flag == 1 then
|
||||||
if not datatypes.hostname(tmp_host) then
|
if not datatypes.hostname(tmp_host) then
|
||||||
@ -132,7 +134,7 @@ domain_list.description = "<br /><ul><li>" .. translate("Plaintext: If this stri
|
|||||||
.. "</li><li>" .. translate("Subdomain (recommended): Begining with 'domain:' and the rest is a domain. When the targeting domain is exactly the value, or is a subdomain of the value, this rule takes effect. Example: rule 'domain:v2ray.com' matches 'www.v2ray.com', 'v2ray.com', but not 'xv2ray.com'.")
|
.. "</li><li>" .. translate("Subdomain (recommended): Begining with 'domain:' and the rest is a domain. When the targeting domain is exactly the value, or is a subdomain of the value, this rule takes effect. Example: rule 'domain:v2ray.com' matches 'www.v2ray.com', 'v2ray.com', but not 'xv2ray.com'.")
|
||||||
.. "</li><li>" .. translate("Full domain: Begining with 'full:' and the rest is a domain. When the targeting domain is exactly the value, the rule takes effect. Example: rule 'domain:v2ray.com' matches 'v2ray.com', but not 'www.v2ray.com'.")
|
.. "</li><li>" .. translate("Full domain: Begining with 'full:' and the rest is a domain. When the targeting domain is exactly the value, the rule takes effect. Example: rule 'domain:v2ray.com' matches 'v2ray.com', but not 'www.v2ray.com'.")
|
||||||
.. "</li><li>" .. translate("Pre-defined domain list: Begining with 'geosite:' and the rest is a name, such as geosite:google or geosite:cn.")
|
.. "</li><li>" .. translate("Pre-defined domain list: Begining with 'geosite:' and the rest is a name, such as geosite:google or geosite:cn.")
|
||||||
.. "</li><li>" .. translate("Domains from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geosite.dat. The tag must exist in the file.")
|
.. "</li><li>" .. translate("Annotation: Begining with #")
|
||||||
.. "</li></ul>"
|
.. "</li></ul>"
|
||||||
ip_list = s:option(TextValue, "ip_list", "IP")
|
ip_list = s:option(TextValue, "ip_list", "IP")
|
||||||
ip_list.rows = 10
|
ip_list.rows = 10
|
||||||
@ -143,6 +145,7 @@ ip_list.validate = function(self, value)
|
|||||||
for index, ipmask in ipairs(ipmasks) do
|
for index, ipmask in ipairs(ipmasks) do
|
||||||
if ipmask:find("geoip:") and ipmask:find("geoip:") == 1 then
|
if ipmask:find("geoip:") and ipmask:find("geoip:") == 1 then
|
||||||
elseif ipmask:find("ext:") and ipmask:find("ext:") == 1 then
|
elseif ipmask:find("ext:") and ipmask:find("ext:") == 1 then
|
||||||
|
elseif ipmask:find("#") and ipmask:find("#") == 1 then
|
||||||
else
|
else
|
||||||
if not (datatypes.ipmask4(ipmask) or datatypes.ipmask6(ipmask)) then
|
if not (datatypes.ipmask4(ipmask) or datatypes.ipmask6(ipmask)) then
|
||||||
return nil, ipmask .. " " .. translate("Not valid IP format, please re-enter!")
|
return nil, ipmask .. " " .. translate("Not valid IP format, please re-enter!")
|
||||||
@ -154,7 +157,7 @@ end
|
|||||||
ip_list.description = "<br /><ul><li>" .. translate("IP: such as '127.0.0.1'.")
|
ip_list.description = "<br /><ul><li>" .. translate("IP: such as '127.0.0.1'.")
|
||||||
.. "</li><li>" .. translate("CIDR: such as '127.0.0.0/8'.")
|
.. "</li><li>" .. translate("CIDR: such as '127.0.0.0/8'.")
|
||||||
.. "</li><li>" .. translate("GeoIP: such as 'geoip:cn'. It begins with geoip: (lower case) and followed by two letter of country code.")
|
.. "</li><li>" .. translate("GeoIP: such as 'geoip:cn'. It begins with geoip: (lower case) and followed by two letter of country code.")
|
||||||
.. "</li><li>" .. translate("IPs from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geoip.dat. The tag must exist in the file.")
|
.. "</li><li>" .. translate("Annotation: Begining with #")
|
||||||
.. "</li></ul>"
|
.. "</li></ul>"
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
@ -1159,6 +1159,7 @@ function gen_config(var)
|
|||||||
geosite = {},
|
geosite = {},
|
||||||
}
|
}
|
||||||
string.gsub(e.domain_list, '[^' .. "\r\n" .. ']+', function(w)
|
string.gsub(e.domain_list, '[^' .. "\r\n" .. ']+', function(w)
|
||||||
|
if w:find("#") == 1 then return end
|
||||||
if w:find("geosite:") == 1 then
|
if w:find("geosite:") == 1 then
|
||||||
table.insert(domain_table.geosite, w:sub(1 + #"geosite:"))
|
table.insert(domain_table.geosite, w:sub(1 + #"geosite:"))
|
||||||
elseif w:find("regexp:") == 1 then
|
elseif w:find("regexp:") == 1 then
|
||||||
@ -1187,6 +1188,7 @@ function gen_config(var)
|
|||||||
local ip_cidr = {}
|
local ip_cidr = {}
|
||||||
local geoip = {}
|
local geoip = {}
|
||||||
string.gsub(e.ip_list, '[^' .. "\r\n" .. ']+', function(w)
|
string.gsub(e.ip_list, '[^' .. "\r\n" .. ']+', function(w)
|
||||||
|
if w:find("#") == 1 then return end
|
||||||
if w:find("geoip:") == 1 then
|
if w:find("geoip:") == 1 then
|
||||||
table.insert(geoip, w:sub(1 + #"geoip:"))
|
table.insert(geoip, w:sub(1 + #"geoip:"))
|
||||||
else
|
else
|
||||||
|
@ -944,6 +944,7 @@ function gen_config(var)
|
|||||||
if e.domain_list then
|
if e.domain_list then
|
||||||
domains = {}
|
domains = {}
|
||||||
string.gsub(e.domain_list, '[^' .. "\r\n" .. ']+', function(w)
|
string.gsub(e.domain_list, '[^' .. "\r\n" .. ']+', function(w)
|
||||||
|
if w:find("#") == 1 then return end
|
||||||
table.insert(domains, w)
|
table.insert(domains, w)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
@ -951,6 +952,7 @@ function gen_config(var)
|
|||||||
if e.ip_list then
|
if e.ip_list then
|
||||||
ip = {}
|
ip = {}
|
||||||
string.gsub(e.ip_list, '[^' .. "\r\n" .. ']+', function(w)
|
string.gsub(e.ip_list, '[^' .. "\r\n" .. ']+', function(w)
|
||||||
|
if w:find("#") == 1 then return end
|
||||||
table.insert(ip, w)
|
table.insert(ip, w)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
@ -1075,8 +1075,8 @@ msgstr "完整匹配: 由'full:'开始,余下部分是一个域名。当此域
|
|||||||
msgid "Pre-defined domain list: Begining with 'geosite:' and the rest is a name, such as geosite:google or geosite:cn."
|
msgid "Pre-defined domain list: Begining with 'geosite:' and the rest is a name, such as geosite:google or geosite:cn."
|
||||||
msgstr "预定义域名列表:由'geosite:'开头,余下部分是一个名称,如geosite:google或者geosite:cn。"
|
msgstr "预定义域名列表:由'geosite:'开头,余下部分是一个名称,如geosite:google或者geosite:cn。"
|
||||||
|
|
||||||
msgid "Domains from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geosite.dat. The tag must exist in the file."
|
msgid "Annotation: Begining with #"
|
||||||
msgstr "从文件中加载域名: 形如'ext:file:tag',必须以ext:(小写)开头,后面跟文件名和标签,文件存放在资源目录中,文件格式与geosite.dat相同,标签必须在文件中存在。"
|
msgstr "注释: 由 # 开头"
|
||||||
|
|
||||||
msgid "IP: such as '127.0.0.1'."
|
msgid "IP: such as '127.0.0.1'."
|
||||||
msgstr "IP: 形如'127.0.0.1'。"
|
msgstr "IP: 形如'127.0.0.1'。"
|
||||||
@ -1087,9 +1087,6 @@ msgstr "CIDR: 形如'10.0.0.0/8'."
|
|||||||
msgid "GeoIP: such as 'geoip:cn'. It begins with geoip: (lower case) and followed by two letter of country code."
|
msgid "GeoIP: such as 'geoip:cn'. It begins with geoip: (lower case) and followed by two letter of country code."
|
||||||
msgstr "GeoIP: 形如'geoip:cn',必须以geoip:(小写)开头,后面跟双字符国家代码,支持几乎所有可以上网的国家。"
|
msgstr "GeoIP: 形如'geoip:cn',必须以geoip:(小写)开头,后面跟双字符国家代码,支持几乎所有可以上网的国家。"
|
||||||
|
|
||||||
msgid "IPs from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geoip.dat. The tag must exist in the file."
|
|
||||||
msgstr "从文件中加载 IP: 形如'ext:file:tag',必须以ext:(小写)开头,后面跟文件名和标签,文件存放在资源目录中,文件格式与geoip.dat相同标签必须在文件中存在。"
|
|
||||||
|
|
||||||
msgid "Clear logs"
|
msgid "Clear logs"
|
||||||
msgstr "清空日志"
|
msgstr "清空日志"
|
||||||
|
|
||||||
|
@ -5,10 +5,12 @@ config global
|
|||||||
option tcp_node 'nil'
|
option tcp_node 'nil'
|
||||||
option udp_node 'nil'
|
option udp_node 'nil'
|
||||||
option tcp_node_socks_port '1070'
|
option tcp_node_socks_port '1070'
|
||||||
option filter_proxy_ipv6 '0'
|
option filter_proxy_ipv6 '1'
|
||||||
option dns_mode 'dns2tcp'
|
option dns_mode 'dns2tcp'
|
||||||
option remote_dns '1.1.1.1'
|
option remote_dns '1.1.1.1'
|
||||||
option use_default_dns 'direct'
|
option use_default_dns 'direct'
|
||||||
|
option chinadns_ng '1'
|
||||||
|
option chinadns_ng_default_tag 'smart'
|
||||||
option use_direct_list '1'
|
option use_direct_list '1'
|
||||||
option use_proxy_list '1'
|
option use_proxy_list '1'
|
||||||
option use_block_list '1'
|
option use_block_list '1'
|
||||||
|
212
luci-app-passwall/root/usr/share/passwall/0_default_config.orig
Normal file
212
luci-app-passwall/root/usr/share/passwall/0_default_config.orig
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
|
||||||
|
config global
|
||||||
|
option enabled '0'
|
||||||
|
option socks_enabled '0'
|
||||||
|
option tcp_node 'nil'
|
||||||
|
option udp_node 'nil'
|
||||||
|
option tcp_node_socks_port '1070'
|
||||||
|
option filter_proxy_ipv6 '1'
|
||||||
|
option dns_mode 'dns2tcp'
|
||||||
|
option remote_dns '1.1.1.1'
|
||||||
|
option use_default_dns 'direct'
|
||||||
|
option chinadns_ng '1'
|
||||||
|
option chinadns_ng_default_tag 'smart'
|
||||||
|
option use_direct_list '1'
|
||||||
|
option use_proxy_list '1'
|
||||||
|
option use_block_list '1'
|
||||||
|
option use_gfw_list '1'
|
||||||
|
option chn_list 'direct'
|
||||||
|
option tcp_proxy_mode 'proxy'
|
||||||
|
option udp_proxy_mode 'proxy'
|
||||||
|
option localhost_proxy '1'
|
||||||
|
option client_proxy '1'
|
||||||
|
option acl_enable '0'
|
||||||
|
option close_log_tcp '0'
|
||||||
|
option close_log_udp '0'
|
||||||
|
option loglevel 'error'
|
||||||
|
option trojan_loglevel '4'
|
||||||
|
|
||||||
|
config global_haproxy
|
||||||
|
option balancing_enable '0'
|
||||||
|
|
||||||
|
config global_delay
|
||||||
|
option auto_on '0'
|
||||||
|
option start_daemon '1'
|
||||||
|
option start_delay '60'
|
||||||
|
|
||||||
|
config global_forwarding
|
||||||
|
option tcp_no_redir_ports 'disable'
|
||||||
|
option udp_no_redir_ports 'disable'
|
||||||
|
option tcp_proxy_drop_ports 'disable'
|
||||||
|
option udp_proxy_drop_ports '443'
|
||||||
|
option tcp_redir_ports '22,25,53,143,465,587,853,993,995,80,443'
|
||||||
|
option udp_redir_ports '1:65535'
|
||||||
|
option accept_icmp '0'
|
||||||
|
option use_nft '0'
|
||||||
|
option tcp_proxy_way 'redirect'
|
||||||
|
option ipv6_tproxy '0'
|
||||||
|
|
||||||
|
config global_xray
|
||||||
|
option sniffing '1'
|
||||||
|
option route_only '0'
|
||||||
|
|
||||||
|
config global_singbox
|
||||||
|
option sniff_override_destination '0'
|
||||||
|
option geoip_path '/usr/share/singbox/geoip.db'
|
||||||
|
option geoip_url 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.db'
|
||||||
|
option geosite_path '/usr/share/singbox/geosite.db'
|
||||||
|
option geosite_url 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.db'
|
||||||
|
|
||||||
|
config global_other
|
||||||
|
option auto_detection_time 'tcping'
|
||||||
|
option show_node_info '0'
|
||||||
|
|
||||||
|
config global_rules
|
||||||
|
option auto_update '0'
|
||||||
|
option chnlist_update '1'
|
||||||
|
option chnroute_update '1'
|
||||||
|
option chnroute6_update '1'
|
||||||
|
option gfwlist_update '1'
|
||||||
|
option geosite_update '0'
|
||||||
|
option geoip_update '0'
|
||||||
|
list gfwlist_url 'https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt'
|
||||||
|
list chnroute_url 'https://ispip.clang.cn/all_cn.txt'
|
||||||
|
list chnroute_url 'https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china.txt'
|
||||||
|
list chnroute6_url 'https://ispip.clang.cn/all_cn_ipv6.txt'
|
||||||
|
list chnroute6_url 'https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china6.txt'
|
||||||
|
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf'
|
||||||
|
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf'
|
||||||
|
option v2ray_location_asset '/usr/share/v2ray/'
|
||||||
|
|
||||||
|
config global_app
|
||||||
|
option singbox_file '/usr/bin/sing-box'
|
||||||
|
option xray_file '/usr/bin/xray'
|
||||||
|
option hysteria_file '/usr/bin/hysteria'
|
||||||
|
option chinadns_ng '/usr/bin/chinadns-ng'
|
||||||
|
|
||||||
|
config global_subscribe
|
||||||
|
option filter_keyword_mode '1'
|
||||||
|
list filter_discard_list '过期时间'
|
||||||
|
list filter_discard_list '剩余流量'
|
||||||
|
list filter_discard_list 'QQ群'
|
||||||
|
list filter_discard_list '官网'
|
||||||
|
|
||||||
|
config nodes 'myshunt'
|
||||||
|
option remarks '分流总节点'
|
||||||
|
option type 'Xray'
|
||||||
|
option protocol '_shunt'
|
||||||
|
option DirectGame '_direct'
|
||||||
|
option ProxyGame '_default'
|
||||||
|
option Proxy '_default'
|
||||||
|
option Netflix '_default'
|
||||||
|
option OpenAI '_default'
|
||||||
|
option Direct '_direct'
|
||||||
|
option default_node 'nil'
|
||||||
|
option domainStrategy 'IPOnDemand'
|
||||||
|
|
||||||
|
config shunt_rules 'DirectGame'
|
||||||
|
option remarks 'DirectGame'
|
||||||
|
option domain_list 'api.steampowered.com
|
||||||
|
regexp:\.cm.steampowered.com$
|
||||||
|
regexp:\.steamserver.net$
|
||||||
|
geosite:category-games@cn'
|
||||||
|
option ip_list '103.10.124.0/24
|
||||||
|
103.10.125.0/24
|
||||||
|
103.28.54.0/24
|
||||||
|
146.66.152.0/24
|
||||||
|
146.66.155.0/24
|
||||||
|
153.254.86.0/24
|
||||||
|
155.133.224.0/23
|
||||||
|
155.133.226.0/24
|
||||||
|
155.133.227.0/24
|
||||||
|
155.133.230.0/24
|
||||||
|
155.133.232.0/24
|
||||||
|
155.133.233.0/24
|
||||||
|
155.133.234.0/24
|
||||||
|
155.133.236.0/23
|
||||||
|
155.133.238.0/24
|
||||||
|
155.133.239.0/24
|
||||||
|
155.133.240.0/23
|
||||||
|
155.133.245.0/24
|
||||||
|
155.133.246.0/24
|
||||||
|
155.133.248.0/24
|
||||||
|
155.133.249.0/24
|
||||||
|
155.133.250.0/24
|
||||||
|
155.133.251.0/24
|
||||||
|
155.133.252.0/24
|
||||||
|
155.133.253.0/24
|
||||||
|
155.133.254.0/24
|
||||||
|
155.133.255.0/24
|
||||||
|
162.254.192.0/24
|
||||||
|
162.254.193.0/24
|
||||||
|
162.254.194.0/23
|
||||||
|
162.254.195.0/24
|
||||||
|
162.254.196.0/24
|
||||||
|
162.254.197.0/24
|
||||||
|
162.254.198.0/24
|
||||||
|
162.254.199.0/24
|
||||||
|
185.25.182.0/24
|
||||||
|
185.25.183.0/24
|
||||||
|
190.217.33.0/24
|
||||||
|
192.69.96.0/22
|
||||||
|
205.185.194.0/24
|
||||||
|
205.196.6.0/24
|
||||||
|
208.64.200.0/24
|
||||||
|
208.64.201.0/24
|
||||||
|
208.64.202.0/24
|
||||||
|
208.64.203.0/24
|
||||||
|
208.78.164.0/22'
|
||||||
|
|
||||||
|
config shunt_rules 'ProxyGame'
|
||||||
|
option remarks 'ProxyGame'
|
||||||
|
option domain_list 'geosite:category-games
|
||||||
|
domain:store.steampowered.com'
|
||||||
|
|
||||||
|
config shunt_rules 'OpenAI'
|
||||||
|
option remarks 'OpenAI'
|
||||||
|
option domain_list 'geosite:openai'
|
||||||
|
|
||||||
|
config shunt_rules 'Proxy'
|
||||||
|
option remarks 'Proxy'
|
||||||
|
option domain_list 'geosite:geolocation-!cn'
|
||||||
|
option ip_list '149.154.160.0/20
|
||||||
|
91.108.4.0/22
|
||||||
|
91.108.56.0/24
|
||||||
|
109.239.140.0/24
|
||||||
|
67.198.55.0/24
|
||||||
|
8.8.4.4
|
||||||
|
8.8.8.8
|
||||||
|
208.67.222.222
|
||||||
|
208.67.220.220
|
||||||
|
1.1.1.1
|
||||||
|
1.1.1.2
|
||||||
|
1.0.0.1
|
||||||
|
9.9.9.9
|
||||||
|
149.112.112.112
|
||||||
|
2001:67c:4e8::/48
|
||||||
|
2001:b28:f23c::/48
|
||||||
|
2001:b28:f23d::/48
|
||||||
|
2001:b28:f23f::/48
|
||||||
|
2001:b28:f242::/48
|
||||||
|
2001:4860:4860::8888
|
||||||
|
2001:4860:4860::8844
|
||||||
|
2606:4700:4700::1111
|
||||||
|
2606:4700:4700::1001'
|
||||||
|
|
||||||
|
config shunt_rules 'Netflix'
|
||||||
|
option remarks 'Netflix'
|
||||||
|
option domain_list 'geosite:netflix'
|
||||||
|
|
||||||
|
config shunt_rules 'Direct'
|
||||||
|
option remarks 'Direct'
|
||||||
|
option domain_list 'geosite:cn'
|
||||||
|
option ip_list '223.5.5.5/32
|
||||||
|
223.6.6.6/32
|
||||||
|
119.29.29.29/32
|
||||||
|
180.76.76.76/32
|
||||||
|
114.114.114.114/32
|
||||||
|
114.114.115.115/32
|
||||||
|
1.12.12.12/32
|
||||||
|
120.53.53.53/32
|
||||||
|
geoip:cn
|
||||||
|
geoip:private'
|
@ -480,47 +480,103 @@ run_dns2socks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_chinadns_ng() {
|
run_chinadns_ng() {
|
||||||
local _listen_port _dns_china _dns_trust _chnlist _gfwlist _no_ipv6_rules _log_path _no_logic_log
|
local _flag _listen_port _dns_china _dns_trust _use_direct_list _use_proxy_list _chnlist _gfwlist _no_ipv6_dns _no_logic_log
|
||||||
eval_set_val $@
|
eval_set_val $@
|
||||||
|
|
||||||
local _LOG_FILE=$LOG_FILE
|
[ -n "$_no_logic_log" ] && {
|
||||||
[ -n "$_no_logic_log" ] && LOG_FILE="/dev/null"
|
local ORIGIN_LOG_FILE=$LOG_FILE
|
||||||
|
LOG_FILE="/dev/null"
|
||||||
|
}
|
||||||
|
|
||||||
echolog " | - (chinadns-ng) 最高支持4级域名过滤..."
|
local _CONF_FILE=$TMP_ACL_PATH/$_flag/chinadns_ng.conf
|
||||||
|
local _LOG_FILE=$TMP_ACL_PATH/$_flag/chinadns_ng.log
|
||||||
|
_LOG_FILE="/dev/null"
|
||||||
|
|
||||||
|
cat <<-EOF > ${_CONF_FILE}
|
||||||
|
verbose
|
||||||
|
bind-addr 127.0.0.1
|
||||||
|
bind-port ${_listen_port}@udp
|
||||||
|
china-dns ${_dns_china}
|
||||||
|
trust-dns ${_dns_trust}
|
||||||
|
filter-qtype 65
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
[ "${_use_direct_list}" = "1" ] && [ -s "${RULES_PATH}/direct_host" ] && {
|
||||||
|
local whitelist4_set="passwall_whitelist"
|
||||||
|
local whitelist6_set="passwall_whitelist6"
|
||||||
|
[ "$nftflag" = "1" ] && {
|
||||||
|
whitelist4_set="inet@fw4@${whitelist4_set}"
|
||||||
|
whitelist6_set="inet@fw4@${whitelist6_set}"
|
||||||
|
}
|
||||||
|
cat <<-EOF >> ${_CONF_FILE}
|
||||||
|
group directlist
|
||||||
|
group-dnl ${RULES_PATH}/direct_host
|
||||||
|
group-upstream ${_dns_china}
|
||||||
|
group-ipset ${whitelist4_set},${whitelist6_set}
|
||||||
|
EOF
|
||||||
|
[ "${_no_ipv6_dns}" = "china" ] && echo "no-ipv6 tag:directlist" >> ${_CONF_FILE}
|
||||||
|
}
|
||||||
|
|
||||||
|
[ "${_use_proxy_list}" = "1" ] && [ -s "${RULES_PATH}/proxy_host" ] && {
|
||||||
|
local blacklist4_set="passwall_blacklist"
|
||||||
|
local blacklist6_set="passwall_blacklist6"
|
||||||
|
[ "$nftflag" = "1" ] && {
|
||||||
|
blacklist4_set="inet@fw4@${blacklist4_set}"
|
||||||
|
blacklist6_set="inet@fw4@${blacklist6_set}"
|
||||||
|
}
|
||||||
|
cat <<-EOF >> ${_CONF_FILE}
|
||||||
|
group proxylist
|
||||||
|
group-dnl ${RULES_PATH}/proxy_host
|
||||||
|
group-upstream ${_dns_trust}
|
||||||
|
group-ipset ${blacklist4_set},${blacklist6_set}
|
||||||
|
EOF
|
||||||
|
[ "${_no_ipv6_dns}" = "trust" ] && echo "no-ipv6 tag:proxylist" >> ${_CONF_FILE}
|
||||||
|
}
|
||||||
|
|
||||||
local _default_tag=$(config_t_get global chinadns_ng_default_tag smart)
|
local _default_tag=$(config_t_get global chinadns_ng_default_tag smart)
|
||||||
local _extra_param=""
|
|
||||||
[ "${_chnlist}" = "direct" ] && {
|
[ "${_chnlist}" = "direct" ] && {
|
||||||
[ -s "${RULES_PATH}/chnlist" ] && {
|
[ -s "${RULES_PATH}/chnlist" ] && {
|
||||||
local _chnlist_file="${TMP_PATH}/chinadns_chnlist"
|
|
||||||
cp -a "${RULES_PATH}/chnlist" "${_chnlist_file}"
|
|
||||||
local chnroute4_set="passwall_chnroute"
|
local chnroute4_set="passwall_chnroute"
|
||||||
local chnroute6_set="passwall_chnroute6"
|
local chnroute6_set="passwall_chnroute6"
|
||||||
[ "$nftflag" = "1" ] && {
|
[ "$nftflag" = "1" ] && {
|
||||||
chnroute4_set="inet@fw4@passwall_chnroute"
|
chnroute4_set="inet@fw4@${chnroute4_set}"
|
||||||
chnroute6_set="inet@fw4@passwall_chnroute6"
|
chnroute6_set="inet@fw4@${chnroute6_set}"
|
||||||
}
|
}
|
||||||
_extra_param="${_extra_param} -4 ${chnroute4_set} -6 ${chnroute6_set} -m ${_chnlist_file} -M -a"
|
cat <<-EOF >> ${_CONF_FILE}
|
||||||
|
chnlist-file ${RULES_PATH}/chnlist
|
||||||
|
ipset-name4 ${chnroute4_set}
|
||||||
|
ipset-name6 ${chnroute6_set}
|
||||||
|
add-tagchn-ip
|
||||||
|
chnlist-first
|
||||||
|
EOF
|
||||||
|
[ "${_no_ipv6_dns}" = "china" ] && echo "no-ipv6 tag:chn" >> ${_CONF_FILE}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[ "${_gfwlist}" = "1" ] && {
|
[ "${_gfwlist}" = "1" ] && {
|
||||||
[ -s "${RULES_PATH}/gfwlist" ] && {
|
[ -s "${RULES_PATH}/gfwlist" ] && {
|
||||||
local _gfwlist_file="${TMP_PATH}/chinadns_gfwlist"
|
local gfwlist4_set="passwall_gfwlist"
|
||||||
cp -a "${RULES_PATH}/gfwlist" "${_gfwlist_file}"
|
local gfwlist6_set="passwall_gfwlist6"
|
||||||
local gfwlist_set="passwall_gfwlist,passwall_gfwlist6"
|
[ "$nftflag" = "1" ] && {
|
||||||
[ "$nftflag" = "1" ] && gfwlist_set="inet@fw4@passwall_gfwlist,inet@fw4@passwall_gfwlist6"
|
gfwlist4_set="inet@fw4@${gfwlist4_set}"
|
||||||
_extra_param="${_extra_param} -g ${_gfwlist_file} -A ${gfwlist_set}"
|
gfwlist6_set="inet@fw4@${gfwlist6_set}"
|
||||||
|
}
|
||||||
|
cat <<-EOF >> ${_CONF_FILE}
|
||||||
|
gfwlist-file ${RULES_PATH}/gfwlist
|
||||||
|
add-taggfw-ip ${gfwlist4_set},${gfwlist6_set}
|
||||||
|
EOF
|
||||||
|
[ "${_no_ipv6_dns}" = "trust" ] && echo "no-ipv6 tag:gfw" >> ${_CONF_FILE}
|
||||||
#当只有使用gfwlist模式时设置默认DNS为本地直连
|
#当只有使用gfwlist模式时设置默认DNS为本地直连
|
||||||
[ "${_gfwlist}" = "1" ] && [ "${_chnlist}" = "0" ] && _default_tag="chn"
|
[ "${_chnlist}" = "0" ] && _default_tag="chn"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -n "$_default_tag" ] && [ "$_default_tag" != "smart" ] && _extra_param="${_extra_param} -d ${_default_tag}"
|
[ -n "$_default_tag" ] && [ "$_default_tag" != "smart" ] && echo "default-tag ${_default_tag}" >> ${_CONF_FILE}
|
||||||
|
|
||||||
_log_path="/dev/null"
|
ln_run "$(first_type chinadns-ng)" chinadns-ng "${_LOG_FILE}" -C ${_CONF_FILE}
|
||||||
ln_run "$(first_type chinadns-ng)" chinadns-ng "$_log_path" -v -b 127.0.0.1 -l "${_listen_port}" ${_dns_china:+-c "${_dns_china}"} ${_dns_trust:+-t "${_dns_trust}"} ${_extra_param} -f ${_no_ipv6_rules:+-N=${_no_ipv6_rules}}
|
echolog " | - 过滤服务:ChinaDNS-NG(127.0.0.1#${_listen_port}):国内DNS:${_dns_china},可信DNS:${_dns_trust}"
|
||||||
echolog " + 过滤服务:ChinaDNS-NG(:${_listen_port}):国内DNS:${_dns_china},可信DNS:${_dns_trust}"
|
|
||||||
LOG_FILE=${_LOG_FILE}
|
[ -n "${ORIGIN_LOG_FILE}" ] && LOG_FILE=${ORIGIN_LOG_FILE}
|
||||||
}
|
}
|
||||||
|
|
||||||
run_socks() {
|
run_socks() {
|
||||||
@ -1256,19 +1312,21 @@ start_dns() {
|
|||||||
|
|
||||||
[ "$CHINADNS_NG" = "1" ] && [ -n "$(first_type chinadns-ng)" ] && ([ "${CHN_LIST}" = "direct" ] || [ "${USE_GFW_LIST}" = "1" ]) && {
|
[ "$CHINADNS_NG" = "1" ] && [ -n "$(first_type chinadns-ng)" ] && ([ "${CHN_LIST}" = "direct" ] || [ "${USE_GFW_LIST}" = "1" ]) && {
|
||||||
[ "$FILTER_PROXY_IPV6" = "1" ] && {
|
[ "$FILTER_PROXY_IPV6" = "1" ] && {
|
||||||
local _no_ipv6_rules="tag:gfw"
|
local _no_ipv6_dns="trust"
|
||||||
FILTER_PROXY_IPV6=0
|
FILTER_PROXY_IPV6=0
|
||||||
}
|
}
|
||||||
local china_ng_listen_port=$(expr $dns_listen_port + 1)
|
local china_ng_listen_port=$(expr $dns_listen_port + 1)
|
||||||
local china_ng_listen="127.0.0.1#${china_ng_listen_port}"
|
local china_ng_listen="127.0.0.1#${china_ng_listen_port}"
|
||||||
run_chinadns_ng \
|
run_chinadns_ng \
|
||||||
|
_flag="default" \
|
||||||
_listen_port=${china_ng_listen_port} \
|
_listen_port=${china_ng_listen_port} \
|
||||||
_dns_china=$(echo -n $(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n2) | tr " " ",") \
|
_dns_china=$(echo -n $(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n2) | tr " " ",") \
|
||||||
_dns_trust="${TUN_DNS}" \
|
_dns_trust="${TUN_DNS}" \
|
||||||
|
_use_direct_list="${USE_DIRECT_LIST}" \
|
||||||
|
_use_proxy_list="${USE_PROXY_LIST}" \
|
||||||
_chnlist="${CHN_LIST}" \
|
_chnlist="${CHN_LIST}" \
|
||||||
_gfwlist="${USE_GFW_LIST}" \
|
_gfwlist="${USE_GFW_LIST}" \
|
||||||
_no_ipv6_rules="${_no_ipv6_rules}" \
|
_no_ipv6_dns="${_no_ipv6_dns}"
|
||||||
_log_path="${TMP_PATH}/chinadns-ng.log"
|
|
||||||
|
|
||||||
USE_DEFAULT_DNS="chinadns_ng"
|
USE_DEFAULT_DNS="chinadns_ng"
|
||||||
}
|
}
|
||||||
@ -1419,20 +1477,22 @@ acl_app() {
|
|||||||
|
|
||||||
[ "$chinadns_ng" = "1" ] && [ -n "$(first_type chinadns-ng)" ] && ([ "${chn_list}" = "direct" ] || [ "${use_gfw_list}" = "1" ]) && {
|
[ "$chinadns_ng" = "1" ] && [ -n "$(first_type chinadns-ng)" ] && ([ "${chn_list}" = "direct" ] || [ "${use_gfw_list}" = "1" ]) && {
|
||||||
[ "$filter_proxy_ipv6" = "1" ] && {
|
[ "$filter_proxy_ipv6" = "1" ] && {
|
||||||
local _no_ipv6_rules="tag:gfw"
|
local _no_ipv6_dns="trust"
|
||||||
filter_proxy_ipv6=0
|
filter_proxy_ipv6=0
|
||||||
}
|
}
|
||||||
chinadns_port=$(expr $chinadns_port + 1)
|
chinadns_port=$(expr $chinadns_port + 1)
|
||||||
_china_ng_listen="127.0.0.1#${chinadns_port}"
|
_china_ng_listen="127.0.0.1#${chinadns_port}"
|
||||||
|
|
||||||
run_chinadns_ng \
|
run_chinadns_ng \
|
||||||
|
_flag="$sid" \
|
||||||
_listen_port=${chinadns_port} \
|
_listen_port=${chinadns_port} \
|
||||||
_dns_china=$(echo -n $(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n2) | tr " " ",") \
|
_dns_china=$(echo -n $(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n2) | tr " " ",") \
|
||||||
_dns_trust="127.0.0.1#${_dns_port}" \
|
_dns_trust="127.0.0.1#${_dns_port}" \
|
||||||
|
_use_direct_list="${use_direct_list}" \
|
||||||
|
_use_proxy_list="${use_proxy_list}" \
|
||||||
_chnlist=${chn_list} \
|
_chnlist=${chn_list} \
|
||||||
_gfwlist=${use_gfw_list} \
|
_gfwlist=${use_gfw_list} \
|
||||||
_no_ipv6_rules="${_no_ipv6_rules}" \
|
_no_ipv6_dns="${_no_ipv6_dns}" \
|
||||||
_log_path="${TMP_ACL_PATH}/${sid}/chinadns-ng.log" \
|
|
||||||
_no_logic_log=1
|
_no_logic_log=1
|
||||||
|
|
||||||
use_default_dns="chinadns_ng"
|
use_default_dns="chinadns_ng"
|
||||||
@ -1573,7 +1633,7 @@ acl_app() {
|
|||||||
[ -n "$redirect_dns_port" ] && echo "${redirect_dns_port}" > $TMP_ACL_PATH/$sid/var_redirect_dns_port
|
[ -n "$redirect_dns_port" ] && echo "${redirect_dns_port}" > $TMP_ACL_PATH/$sid/var_redirect_dns_port
|
||||||
unset enabled sid remarks sources use_global_config tcp_node udp_node use_direct_list use_proxy_list use_block_list use_gfw_list chn_list tcp_proxy_mode udp_proxy_mode filter_proxy_ipv6 dns_mode remote_dns v2ray_dns_mode remote_dns_doh dns_client_ip
|
unset enabled sid remarks sources use_global_config tcp_node udp_node use_direct_list use_proxy_list use_block_list use_gfw_list chn_list tcp_proxy_mode udp_proxy_mode filter_proxy_ipv6 dns_mode remote_dns v2ray_dns_mode remote_dns_doh dns_client_ip
|
||||||
unset _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port config_file _extra_param
|
unset _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port config_file _extra_param
|
||||||
unset _china_ng_listen _china_ng_chn _china_ng_gfw _gfwlist_file _chnlist_file _china_ng_log_file _no_ipv6_rules _china_ng_extra_param
|
unset _china_ng_listen _china_ng_chn _china_ng_gfw _gfwlist_file _chnlist_file _china_ng_log_file _no_ipv6_dns _china_ng_extra_param
|
||||||
unset redirect_dns_port
|
unset redirect_dns_port
|
||||||
done
|
done
|
||||||
unset socks_port redir_port dns_port dnsmasq_port chinadns_port
|
unset socks_port redir_port dns_port dnsmasq_port chinadns_port
|
||||||
|
@ -213,42 +213,58 @@ if not fs.access(CACHE_DNS_PATH) then
|
|||||||
end)
|
end)
|
||||||
log(string.format(" - 节点列表中的域名(vpslist):%s", LOCAL_DNS or "默认"))
|
log(string.format(" - 节点列表中的域名(vpslist):%s", LOCAL_DNS or "默认"))
|
||||||
|
|
||||||
--直连(白名单)列表
|
|
||||||
if USE_DIRECT_LIST == "1" then
|
|
||||||
--始终用国内DNS解析直连(白名单)列表
|
|
||||||
for line in io.lines("/usr/share/passwall/rules/direct_host") do
|
|
||||||
if line ~= "" and not line:find("#") then
|
|
||||||
add_excluded_domain(line)
|
|
||||||
set_domain_dns(line, LOCAL_DNS)
|
|
||||||
set_domain_ipset(line, setflag_4 .. "passwall_whitelist," .. setflag_6 .. "passwall_whitelist6")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
log(string.format(" - 域名白名单(whitelist):%s", LOCAL_DNS or "默认"))
|
|
||||||
end
|
|
||||||
|
|
||||||
local fwd_dns
|
local fwd_dns
|
||||||
local ipset_flag
|
local ipset_flag
|
||||||
local no_ipv6
|
local no_ipv6
|
||||||
|
|
||||||
|
--直连(白名单)列表
|
||||||
|
if USE_DIRECT_LIST == "1" then
|
||||||
|
if fs.access("/usr/share/passwall/rules/direct_host") then
|
||||||
|
fwd_dns = TUN_DNS
|
||||||
|
if USE_DEFAULT_DNS == "chinadns_ng" and CHINADNS_DNS ~= "0" then
|
||||||
|
fwd_dns = nil
|
||||||
|
end
|
||||||
|
if fwd_dns then
|
||||||
|
--始终用国内DNS解析直连(白名单)列表
|
||||||
|
for line in io.lines("/usr/share/passwall/rules/direct_host") do
|
||||||
|
if line ~= "" and not line:find("#") then
|
||||||
|
add_excluded_domain(line)
|
||||||
|
set_domain_dns(line, LOCAL_DNS)
|
||||||
|
set_domain_ipset(line, setflag_4 .. "passwall_whitelist," .. setflag_6 .. "passwall_whitelist6")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
log(string.format(" - 域名白名单(whitelist):%s", fwd_dns or "默认"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--代理(黑名单)列表
|
--代理(黑名单)列表
|
||||||
if USE_PROXY_LIST == "1" then
|
if USE_PROXY_LIST == "1" then
|
||||||
--始终使用远程DNS解析代理(黑名单)列表
|
if fs.access("/usr/share/passwall/rules/proxy_host") then
|
||||||
for line in io.lines("/usr/share/passwall/rules/proxy_host") do
|
fwd_dns = TUN_DNS
|
||||||
if line ~= "" and not line:find("#") then
|
if USE_DEFAULT_DNS == "chinadns_ng" and CHINADNS_DNS ~= "0" then
|
||||||
add_excluded_domain(line)
|
fwd_dns = nil
|
||||||
local ipset_flag = setflag_4 .. "passwall_blacklist," .. setflag_6 .. "passwall_blacklist6"
|
|
||||||
if NO_PROXY_IPV6 == "1" then
|
|
||||||
set_domain_address(line, "::")
|
|
||||||
ipset_flag = setflag_4 .. "passwall_blacklist"
|
|
||||||
end
|
|
||||||
if REMOTE_FAKEDNS == "1" then
|
|
||||||
ipset_flag = nil
|
|
||||||
end
|
|
||||||
set_domain_dns(line, TUN_DNS)
|
|
||||||
set_domain_ipset(line, ipset_flag)
|
|
||||||
end
|
end
|
||||||
|
if fwd_dns then
|
||||||
|
--始终使用远程DNS解析代理(黑名单)列表
|
||||||
|
for line in io.lines("/usr/share/passwall/rules/proxy_host") do
|
||||||
|
if line ~= "" and not line:find("#") then
|
||||||
|
add_excluded_domain(line)
|
||||||
|
local ipset_flag = setflag_4 .. "passwall_blacklist," .. setflag_6 .. "passwall_blacklist6"
|
||||||
|
if NO_PROXY_IPV6 == "1" then
|
||||||
|
set_domain_address(line, "::")
|
||||||
|
ipset_flag = setflag_4 .. "passwall_blacklist"
|
||||||
|
end
|
||||||
|
if REMOTE_FAKEDNS == "1" then
|
||||||
|
ipset_flag = nil
|
||||||
|
end
|
||||||
|
set_domain_dns(line, TUN_DNS)
|
||||||
|
set_domain_ipset(line, ipset_flag)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
log(string.format(" - 代理域名表(blacklist):%s", fwd_dns or "默认"))
|
||||||
end
|
end
|
||||||
log(string.format(" - 代理域名表(blacklist):%s", TUN_DNS or "默认"))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--GFW列表
|
--GFW列表
|
||||||
|
@ -227,9 +227,8 @@ do
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
uci:foreach(appname, "nodes", function(node)
|
uci:foreach(appname, "nodes", function(node)
|
||||||
|
local node_id = node[".name"]
|
||||||
if node.protocol and node.protocol == '_shunt' then
|
if node.protocol and node.protocol == '_shunt' then
|
||||||
local node_id = node[".name"]
|
|
||||||
|
|
||||||
local rules = {}
|
local rules = {}
|
||||||
uci:foreach(appname, "shunt_rules", function(e)
|
uci:foreach(appname, "shunt_rules", function(e)
|
||||||
if e[".name"] and e.remarks then
|
if e[".name"] and e.remarks then
|
||||||
@ -262,7 +261,6 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif node.protocol and node.protocol == '_balancing' then
|
elseif node.protocol and node.protocol == '_balancing' then
|
||||||
local node_id = node[".name"]
|
|
||||||
local nodes = {}
|
local nodes = {}
|
||||||
local new_nodes = {}
|
local new_nodes = {}
|
||||||
if node.balancing_node then
|
if node.balancing_node then
|
||||||
@ -274,7 +272,7 @@ do
|
|||||||
remarks = node,
|
remarks = node,
|
||||||
set = function(o, server)
|
set = function(o, server)
|
||||||
for kk, vv in pairs(CONFIG) do
|
for kk, vv in pairs(CONFIG) do
|
||||||
if (vv.remarks == "负载均衡节点列表" .. node_id) then
|
if (vv.remarks == "Xray负载均衡节点[" .. node_id .. "]列表") then
|
||||||
table.insert(vv.new_nodes, server)
|
table.insert(vv.new_nodes, server)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -283,13 +281,12 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
CONFIG[#CONFIG + 1] = {
|
CONFIG[#CONFIG + 1] = {
|
||||||
remarks = "负载均衡节点列表" .. node_id,
|
remarks = "Xray负载均衡节点[" .. node_id .. "]列表",
|
||||||
nodes = nodes,
|
nodes = nodes,
|
||||||
new_nodes = new_nodes,
|
new_nodes = new_nodes,
|
||||||
set = function(o)
|
set = function(o)
|
||||||
for kk, vv in pairs(CONFIG) do
|
for kk, vv in pairs(CONFIG) do
|
||||||
if (vv.remarks == "负载均衡节点列表" .. node_id) then
|
if (vv.remarks == "Xray负载均衡节点[" .. node_id .. "]列表") then
|
||||||
--log("刷新负载均衡节点列表")
|
|
||||||
uci:foreach(appname, "nodes", function(node2)
|
uci:foreach(appname, "nodes", function(node2)
|
||||||
if node2[".name"] == node[".name"] then
|
if node2[".name"] == node[".name"] then
|
||||||
local section = uci:section(appname, "nodes", node_id)
|
local section = uci:section(appname, "nodes", node_id)
|
||||||
@ -300,6 +297,42 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--后备节点
|
||||||
|
local currentNode = uci:get_all(appname, node_id) or nil
|
||||||
|
if currentNode and currentNode.fallback_node then
|
||||||
|
CONFIG[#CONFIG + 1] = {
|
||||||
|
log = true,
|
||||||
|
id = node_id,
|
||||||
|
remarks = "Xray负载均衡节点[" .. node_id .. "]后备节点",
|
||||||
|
currentNode = uci:get_all(appname, currentNode.fallback_node) or nil,
|
||||||
|
set = function(o, server)
|
||||||
|
uci:set(appname, node_id, "fallback_node", server)
|
||||||
|
o.newNodeId = server
|
||||||
|
end,
|
||||||
|
delete = function(o)
|
||||||
|
uci:delete(appname, node_id, "fallback_node")
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
--落地节点
|
||||||
|
local currentNode = uci:get_all(appname, node_id) or nil
|
||||||
|
if currentNode and currentNode.to_node then
|
||||||
|
CONFIG[#CONFIG + 1] = {
|
||||||
|
log = true,
|
||||||
|
id = node_id,
|
||||||
|
remarks = "节点[" .. node_id .. "]落地节点",
|
||||||
|
currentNode = uci:get_all(appname, currentNode.to_node) or nil,
|
||||||
|
set = function(o, server)
|
||||||
|
uci:set(appname, node_id, "to_node", server)
|
||||||
|
o.newNodeId = server
|
||||||
|
end,
|
||||||
|
delete = function(o)
|
||||||
|
uci:delete(appname, node_id, "to_node")
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user