diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile
index 1f9d40ac..7dacc800 100644
--- a/luci-app-passwall/Makefile
+++ b/luci-app-passwall/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=26.8.1
-PKG_RELEASE:=205
+PKG_RELEASE:=206
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall/luasrc/controller/passwall.lua b/luci-app-passwall/luasrc/controller/passwall.lua
index 2b9cde82..4721fc0b 100644
--- a/luci-app-passwall/luasrc/controller/passwall.lua
+++ b/luci-app-passwall/luasrc/controller/passwall.lua
@@ -310,7 +310,7 @@ end
function get_socks_log()
local name = http.formvalue("name")
- local path = "/tmp/etc/passwall/SOCKS_" .. name .. ".log"
+ local path = "/tmp/etc/passwall/" .. name .. ".log"
if fs.access(path) then
local content = luci.sys.exec("cat ".. path)
content = content:gsub("\n", "
")
@@ -466,7 +466,7 @@ function socks_status()
local index = http.formvalue("index")
local id = http.formvalue("id")
e.index = index
- e.socks_status = luci.sys.call(string.format("/bin/busybox top -bn1 | grep -v 'grep' | grep '/tmp/etc/passwall/bin/' | grep -v '_acl_' | grep '%s' | grep 'SOCKS_' > /dev/null", id)) == 0
+ e.socks_status = luci.sys.call(string.format("/bin/busybox top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep '%s' > /dev/null", appname, id)) == 0
local use_http = uci:get(appname, id, "http_port") or 0
e.use_http = 0
if tonumber(use_http) > 0 then
@@ -631,7 +631,7 @@ end
function clear_all_nodes()
uci:set(appname, '@global[0]', "enabled", "0")
uci:set(appname, '@global[0]', "socks_enabled", "0")
- uci:set(appname, '@haproxy_config[0]', "balancing_enable", "0")
+ uci:set(appname, '@global_haproxy[0]', "balancing_enable", "0")
uci:delete(appname, '@global[0]', "tcp_node")
uci:delete(appname, '@global[0]', "udp_node")
uci:foreach(appname, "socks", function(t)
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
index e881ac22..c83415c2 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
@@ -65,7 +65,7 @@ m.uci:foreach(appname, "socks", function(s)
remark = id .. " - " .. (remark or translate("Misconfigured"))
}
socks_list[#socks_list + 1] = {
- id = "Socks_" .. s[".name"],
+ id = s[".name"],
remark = translate("Socks Config") .. " " .. string.format("[%s %s]", s.port, translate("Port")),
group = "Socks"
}
@@ -735,10 +735,10 @@ s2.anonymous = true
s2.addremove = true
s2.extedit = api.url("socks_config", "%s")
function s2.create(e, t)
- local uuid = api.gen_short_uuid()
- t = uuid
- TypedSection.create(e, t)
- luci.http.redirect(e.extedit:format(t))
+ local uuid = api.gen_short_uuid(5)
+ uuid = "socks_" .. uuid
+ TypedSection.create(e, uuid)
+ luci.http.redirect(e.extedit:format(uuid))
end
function s2.remove(e, t)
local socks = "Socks_" .. t
@@ -805,7 +805,7 @@ o.group = {}
o = s2:option(DummyValue, "now_node", translate("Current Node"))
o.rawhtml = true
o.cfgvalue = function(_, n)
- local current_node = api.get_cache_var("socks_" .. n)
+ local current_node = api.get_cache_var(n)
if current_node then
local node = m:get(current_node)
if node then
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/haproxy.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/haproxy.lua
index c4784a87..9818b537 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/haproxy.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/haproxy.lua
@@ -114,7 +114,9 @@ s.anonymous = true
s.addremove = true
s.create = function(e, t)
- TypedSection.create(e, api.gen_short_uuid())
+ local uuid = api.gen_short_uuid(5)
+ uuid = "haproxy_" .. uuid
+ TypedSection.create(e, uuid)
end
s.remove = function(self, section)
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua
index efe0cccc..069aad75 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua
@@ -222,7 +222,9 @@ if has_xray then
s_xray_noise.addremove = true
s_xray_noise.create = function(e, t)
- TypedSection.create(e, api.gen_short_uuid())
+ local uuid = api.gen_short_uuid(5)
+ uuid = "xray_noise_" .. uuid
+ TypedSection.create(e, uuid)
end
s_xray_noise.remove = function(self, section)
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
index ebfed516..d0da3dfe 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
@@ -32,7 +32,7 @@ o.default = 1
o.rmempty = false
local auto_switch_tip
-local current_node = api.get_cache_var("socks_" .. arg[1])
+local current_node = api.get_cache_var(arg[1])
if current_node then
local n = m:get(current_node)
if n then
diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua
index c340cb7b..3cf885fd 100644
--- a/luci-app-passwall/luasrc/passwall/api.lua
+++ b/luci-app-passwall/luasrc/passwall/api.lua
@@ -556,7 +556,7 @@ function get_node_list()
uci:foreach(appname, "socks", function(s)
if s.enabled == "1" and s.node then
node_list.socks_list[#node_list.socks_list + 1] = {
- id = "Socks_" .. s[".name"],
+ id = s[".name"],
remark = i18n.translate("Socks Config") .. " [" .. s.port .. i18n.translate("Port") .. "]",
group = "Socks"
}
@@ -650,8 +650,9 @@ function gen_uuid(format)
return uuid
end
-function gen_short_uuid()
- return sys.exec("echo -n $(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8)")
+function gen_short_uuid(length)
+ if not length then length = 8 end
+ return sys.exec("echo -n $(head /dev/urandom | tr -dc A-Za-z0-9 | head -c %s)" % length)
end
function uci_get_type(type, config, default)
diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
index afb9ad3b..e17d3e33 100644
--- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua
+++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
@@ -1266,36 +1266,25 @@ function gen_config(var)
})
end
- function gen_socks_config_node(node_id, socks_id, remarks)
- if node_id then
- socks_id = node_id:sub(1 + #"Socks_")
- end
- local result
- local socks_node = uci:get_all(appname, socks_id) or nil
- if socks_node then
- if not remarks then
- remarks = socks_node.port
- end
- result = {
- [".name"] = "Socksid_" .. socks_id,
- remarks = remarks,
+ function get_node_by_id(node_id)
+ if not node_id or node_id == "" or node_id == "nil" then return nil end
+ local section = uci:get_all(appname, node_id) or {}
+ if section[".type"] == "socks" then
+ local result = {
+ [".name"] = node_id,
+ remarks = "socks[%s]" % section.port,
type = "sing-box",
protocol = "socks",
address = "127.0.0.1",
- port = socks_node.port,
+ port = section.port,
uot = "1"
}
+ return result
end
- return result
- end
-
- function get_node_by_id(node_id)
- if not node_id or node_id == "" or node_id == "nil" then return nil end
- if node_id:find("Socks_") then
- return gen_socks_config_node(node_id)
- else
- return uci:get_all(appname, node_id)
+ if section[".type"] == "nodes" then
+ return section
end
+ return nil
end
function gen_urltest_outbound(_node)
diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua
index e384d8b0..985a4577 100644
--- a/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -981,37 +981,26 @@ function gen_config(var)
end
- function gen_socks_config_node(node_id, socks_id, remarks)
- if node_id then
- socks_id = node_id:sub(1 + #"Socks_")
- end
- local result
- local socks_node = uci:get_all(appname, socks_id) or nil
- if socks_node then
- if not remarks then
- remarks = socks_node.port
- end
- result = {
- [".name"] = "Socksid_" .. socks_id,
- remarks = remarks,
+ function get_node_by_id(node_id)
+ if not node_id or node_id == "" or node_id == "nil" then return nil end
+ local section = uci:get_all(appname, node_id) or {}
+ if section[".type"] == "socks" then
+ local result = {
+ [".name"] = node_id,
+ remarks = "socks[%s]" % section.port,
type = "Xray",
protocol = "socks",
address = "127.0.0.1",
- port = socks_node.port,
+ port = section.port,
transport = "tcp",
stream_security = "none"
}
+ return result
end
- return result
- end
-
- function get_node_by_id(node_id)
- if not node_id or node_id == "" or node_id == "nil" then return nil end
- if node_id:find("Socks_") then
- return gen_socks_config_node(node_id)
- else
- return uci:get_all(appname, node_id)
+ if section[".type"] == "nodes" then
+ return section
end
+ return nil
end
function gen_loopback(outbound_tag, loopback_dst)
diff --git a/luci-app-passwall/luasrc/view/passwall/global/footer.htm b/luci-app-passwall/luasrc/view/passwall/global/footer.htm
index 5c7daa9f..6ac90957 100644
--- a/luci-app-passwall/luasrc/view/passwall/global/footer.htm
+++ b/luci-app-passwall/luasrc/view/passwall/global/footer.htm
@@ -55,8 +55,8 @@ local appname = api.appname
return;
}
let to_url = '<%=api.url("node_config")%>/' + node_select_value;
- if (node_select_value.indexOf("Socks_") === 0) {
- to_url = '<%=api.url("socks_config")%>/' + node_select_value.substring("Socks_".length);
+ if (node_select_value.indexOf("socks_") === 0) {
+ to_url = '<%=api.url("socks_config")%>/' + node_select_value;
}
location.href = to_url;
}
diff --git a/luci-app-passwall/luasrc/view/passwall/include/shunt_options.htm b/luci-app-passwall/luasrc/view/passwall/include/shunt_options.htm
index 5a5b3608..7c8f4656 100644
--- a/luci-app-passwall/luasrc/view/passwall/include/shunt_options.htm
+++ b/luci-app-passwall/luasrc/view/passwall/include/shunt_options.htm
@@ -30,7 +30,7 @@
const selectNode = document.getElementById(dom_id + "_node");
val = selectNode.value;
}
- if (val == "" || val.startsWith("_") || val.startsWith("Socks_") || !normal_list.find(element => element.id == val)) {
+ if (val == "" || val.startsWith("_") || val.startsWith("socks_") || !normal_list.find(element => element.id == val)) {
const hiddenSelect = document.getElementById(cbid);
const panel = document.getElementById(cbid + ".panel");
const display = document.getElementById(cbid + ".display");
diff --git a/luci-app-passwall/root/etc/uci-defaults/luci-passwall b/luci-app-passwall/root/etc/uci-defaults/luci-passwall
index 6a2bd24d..07472230 100644
--- a/luci-app-passwall/root/etc/uci-defaults/luci-passwall
+++ b/luci-app-passwall/root/etc/uci-defaults/luci-passwall
@@ -60,6 +60,15 @@ chmod +x /usr/share/passwall/*.sh
[ "$(uci -q get passwall.@global_xray[0].sniffing)" == "1" ] && [ "$(uci -q get passwall.@global_xray[0].route_only)" != "1" ] && uci -q set passwall.@global_xray[0].sniffing_override_dest=1
uci -q delete passwall.@global_xray[0].sniffing
uci -q delete passwall.@global_xray[0].route_only
+
+for sid in $(uci show passwall | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}'); do
+ if [ -z "$(echo ${sid} | grep '^socks_')" ]; then
+ new_id="socks_$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 5)"
+ uci -q rename passwall.${sid}="${new_id}"
+ unset sid new_id
+ fi
+done
+
uci -q commit passwall
sed -i "s#add_from#group#g" /etc/config/passwall 2>/dev/null
diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh
index a6e26174..0797852e 100755
--- a/luci-app-passwall/root/usr/share/passwall/app.sh
+++ b/luci-app-passwall/root/usr/share/passwall/app.sh
@@ -341,8 +341,8 @@ run_socks() {
local node2socks_port=0
local type remarks server_host server_port
- if is_socks_wrap "$node"; then
- node2socks_port=$(config_n_get ${node#Socks_} port 0)
+ if [ "$(config_get_type $node)" = "socks" ]; then
+ node2socks_port=$(config_n_get $node port 0)
fi
if [ "$node2socks_port" = "0" ]; then
type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
@@ -546,8 +546,8 @@ run_redir() {
local node2socks_port=0
local type remarks server_host port
- if is_socks_wrap "$node"; then
- node2socks_port=$(config_n_get ${node#Socks_} port 0)
+ if [ "$(config_get_type $node)" = "socks" ]; then
+ node2socks_port=$(config_n_get $node port 0)
fi
if [ "$node2socks_port" = "0" ]; then
type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
@@ -999,8 +999,8 @@ start_socks() {
local bind="0.0.0.0"
[ "$bind_local" = "1" ] && bind="127.0.0.1"
local port=$(config_n_get $id port)
- local config_file="SOCKS_${id}.json"
- local log_file="SOCKS_${id}.log"
+ local config_file="${id}.json"
+ local log_file="${id}.log"
local log=$(config_n_get $id log 1)
[ "$log" = "0" ] && log_file=""
local http_port=$(config_n_get $id http_port 0)
@@ -1009,7 +1009,7 @@ start_socks() {
local no_rec=0
[ "$enable_autoswitch" = "1" ] && no_rec=1
NO_REC_PROCESS=$no_rec $APP_PATH/app.sh run_socks flag=$id node=$node bind=$bind socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file log_file=$log_file
- set_cache_var "socks_${id}" "$node"
+ set_cache_var "${id}" "$node"
#自动切换逻辑
[ "$enable_autoswitch" = "1" ] && { $APP_PATH/socks_auto_switch.sh ${id} > /dev/null 2>&1 & }
done
@@ -1024,13 +1024,13 @@ socks_node_switch() {
local prefix pf filename
# 结束 SS 插件进程
for prefix in "" "HTTP_"; do
- pf="$TMP_PATH/${prefix}SOCKS_${flag}_plugin.pid"
+ pf="$TMP_PATH/${prefix}${flag}_plugin.pid"
[ -s "$pf" ] && kill -9 "$(head -n1 "$pf")" >/dev/null 2>&1
done
busybox pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1 && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1
for prefix in "" "HTTP_" "HTTP2"; do
- rm -rf "$TMP_PATH/${prefix}SOCKS_${flag}"*
+ rm -rf "$TMP_PATH/${prefix}${flag}"*
done
for filename in $(ls ${TMP_SCRIPT_FUNC_PATH}); do
@@ -1041,15 +1041,15 @@ socks_node_switch() {
local bind="0.0.0.0"
[ "$bind_local" = "1" ] && bind="127.0.0.1"
local port=$(config_n_get $flag port)
- local config_file="SOCKS_${flag}.json"
- local log_file="SOCKS_${flag}.log"
+ local config_file="${flag}.json"
+ local log_file="${flag}.log"
local log=$(config_n_get $flag log 1)
[ "$log" = "0" ] && log_file=""
local http_port=$(config_n_get $flag http_port 0)
local http_config_file="HTTP2SOCKS_${flag}.json"
LOG_FILE="/dev/null"
run_socks flag=$flag node=$new_node bind=$bind socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file log_file=$log_file
- set_cache_var "socks_${flag}" "$new_node"
+ set_cache_var "${flag}" "$new_node"
local ENABLED_DEFAULT_ACL=$(get_cache_var "ENABLED_DEFAULT_ACL")
local ENABLED_ACLS=$(get_cache_var "ENABLED_ACLS")
[ "$ENABLED_DEFAULT_ACL" != "1" ] && [ "$ENABLED_ACLS" != "1" ] && return
@@ -1604,7 +1604,7 @@ acl_app() {
echolog " - 全局节点未启用,跳过【${remarks}】"
fi
else
- [ "$(config_get_type $tcp_node)" = "nodes" ] || [ "$(config_get_type ${tcp_node#Socks_})" = "socks" ] && {
+ [ "$(config_get_type $tcp_node)" = "nodes" ] || [ "$(config_get_type $tcp_node)" = "socks" ] && {
if [ -n "${GLOBAL_TCP_NODE}" ] && [ "$tcp_node" = "${GLOBAL_TCP_NODE}" ]; then
set_cache_var "ACL_${sid}_tcp_node" "${GLOBAL_TCP_NODE}"
set_cache_var "ACL_${sid}_tcp_redir_port" "${GLOBAL_TCP_redir_port}"
@@ -1613,7 +1613,7 @@ acl_app() {
[ "$GLOBAL_SHUNT_NODE_FAKEDNS" = "1" ] && use_fakedns=1
else
local type protocol
- if [ "$(config_get_type ${tcp_node#Socks_})" = "socks" ]; then
+ if [ "$(config_get_type $tcp_node)" = "socks" ]; then
if [ "${dns_mode}" = "xray" ]; then
type="xray"
elif [ "${dns_mode}" = "sing-box" ]; then
@@ -1800,7 +1800,7 @@ acl_app() {
set_cache_var "ACL_${sid}_udp_node" "${udp_node}"
set_cache_var "ACL_${sid}_udp_redir_port" "${udp_port}"
else
- [ "$(config_get_type $udp_node)" = "nodes" ] || [ "$(config_get_type ${udp_node#Socks_})" = "socks" ] && {
+ [ "$(config_get_type $udp_node)" = "nodes" ] || [ "$(config_get_type $udp_node)" = "socks" ] && {
if [ -n "${GLOBAL_UDP_NODE}" ] && [ "$udp_node" = "${GLOBAL_UDP_NODE}" ]; then
set_cache_var "ACL_${sid}_udp_node" "${GLOBAL_UDP_NODE}"
set_cache_var "ACL_${sid}_udp_redir_port" "${GLOBAL_UDP_redir_port}"
@@ -1821,7 +1821,7 @@ acl_app() {
[ "${log}" = "1" ] && log_file="${TMP_ACL_PATH}/${sid}/UDP.log"
local type
- if [ "$(config_get_type ${udp_node#Socks_})" = "socks" ]; then
+ if [ "$(config_get_type $udp_node)" = "socks" ]; then
if [ "${dns_mode}" = "xray" ]; then
type="xray"
elif [ "${dns_mode}" = "sing-box" ]; then
@@ -1997,10 +1997,9 @@ get_config() {
[ "$ENABLED" = 1 ] && {
local _node
for _node in "$TCP_NODE" "$UDP_NODE"; do
- [ -n "$_node" ] && case "$_node" in
- Socks_*) [ "$(config_get_type "${_node#Socks_}")" = "socks" ] && ENABLED_DEFAULT_ACL=1 ;;
- *) [ "$(config_get_type "$_node")" = "nodes" ] && ENABLED_DEFAULT_ACL=1 ;;
- esac
+ if [ -n "$_node" ] && ([ "$(config_get_type $_node)" = "nodes" ] || [ "$(config_get_type $_node)" = "socks" ]); then
+ ENABLED_DEFAULT_ACL=1
+ fi
done
}
ENABLED_ACLS=$(config_t_get global acl_enable 0)
diff --git a/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh b/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
index e20c70a0..a3a07f33 100755
--- a/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
+++ b/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
@@ -142,8 +142,8 @@ test_auto_switch() {
local b_nodes=$1
local now_node=$2
[ -z "$now_node" ] && {
- if [ -n "$(get_cache_var "socks_${id}")" ]; then
- now_node=$(get_cache_var "socks_${id}")
+ if [ -n "$(get_cache_var "${id}")" ]; then
+ now_node=$(get_cache_var "${id}")
else
#echolog "Socks切换检测:未知错误"
return 1
diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua
index b0d11daf..3437b004 100755
--- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua
+++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua
@@ -180,10 +180,10 @@ do
local flag = "Socks节点列表[" .. i .. "]备用节点的列表"
local currentNodes = {}
local newNodes = {}
- for k, node_id in ipairs(t.autoswitch_backup_node) do
- if node_id then
- local currentNode = uci:get_all(appname, node_id) or nil
- if currentNode then
+ for k, asb_node in ipairs(t.autoswitch_backup_node) do
+ if asb_node then
+ local currentNode = uci:get_all(appname, asb_node) or {}
+ if currentNode[".type"] == "nodes" then
currentNodes[#currentNodes + 1] = {
log = true,
remarks = flag .. "[" .. k .. "]",
@@ -291,17 +291,20 @@ do
for k, e in pairs(rules) do
local _node_id = node[e[".name"]] or nil
- if _node_id and not _node_id:find("Socks_") then
- CONFIG[#CONFIG + 1] = {
- log = false,
- currentNode = _node_id and uci:get_all(appname, _node_id) or nil,
- remarks = "分流" .. e.remarks .. "节点",
- set = function(o, server)
- if not server then server = "" end
- uci:set(appname, node_id, e[".name"], server)
- o.newNodeId = server
- end
- }
+ if _node_id then
+ local section = uci:get_all(appname, _node_id) or {}
+ if section[".type"] == "nodes" then
+ CONFIG[#CONFIG + 1] = {
+ log = false,
+ currentNode = section,
+ remarks = "分流" .. e.remarks .. "节点",
+ set = function(o, server)
+ if not server then server = "" end
+ uci:set(appname, node_id, e[".name"], server)
+ o.newNodeId = server
+ end
+ }
+ end
end
end
elseif node.protocol and node.protocol == '_balancing' then
@@ -309,17 +312,18 @@ do
local currentNodes = {}
local newNodes = {}
if node.balancing_node then
- for k, node in pairs(node.balancing_node) do
+ for k, b_node_id in pairs(node.balancing_node) do
currentNodes[#currentNodes + 1] = {
log = true,
- node = node,
+ node = b_node_id,
currentNode = (function()
- if node and node:find("Socks_") then
- return { Socks = node }
+ local section = uci:get_all(appname, b_node_id) or {}
+ if section[".type"] == "socks" then
+ return { Socks = b_node_id }
end
- return node and uci:get_all(appname, node) or nil
+ return section
end)(),
- remarks = node,
+ remarks = b_node_id,
set = function(o, server)
if o and server and server ~= "nil" then
table.insert(o.newNodes, server)
@@ -342,37 +346,41 @@ do
--后备节点
local currentNode = uci:get_all(appname, node_id) or nil
- if currentNode and currentNode.fallback_node and not currentNode.fallback_node:find("Socks_") 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
- }
+ if currentNode and currentNode.fallback_node then
+ local section = uci:get_all(appname, currentNode.fallback_node) or {}
+ if section[".type"] == "nodes" then
+ CONFIG[#CONFIG + 1] = {
+ log = true,
+ id = node_id,
+ remarks = "Xray负载均衡节点[" .. node_id .. "]后备节点",
+ currentNode = section,
+ 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
end
elseif node.protocol and node.protocol == '_urltest' then
local flag = "Sing-Box URLTest节点[" .. node_id .. "]列表"
local currentNodes = {}
local newNodes = {}
if node.urltest_node then
- for k, node in pairs(node.urltest_node) do
+ for k, u_node_id in pairs(node.urltest_node) do
currentNodes[#currentNodes + 1] = {
log = true,
- node = node,
+ node = u_node_id,
currentNode = (function()
- if node and node:find("Socks_") then
- return { Socks = node }
+ local section = uci:get_all(appname, u_node_id) or {}
+ if section[".type"] == "socks" then
+ return { Socks = u_node_id }
end
- return node and uci:get_all(appname, node) or nil
+ return section
end)(),
- remarks = node,
+ remarks = u_node_id,
set = function(o, server)
if o and server and server ~= "nil" then
table.insert(o.newNodes, server)
@@ -395,37 +403,43 @@ do
else
--前置代理节点
local currentNode = uci:get_all(appname, node_id) or nil
- if currentNode and currentNode.preproxy_node and not currentNode.preproxy_node:find("Socks_") then
- CONFIG[#CONFIG + 1] = {
- log = true,
- id = node_id,
- remarks = "节点[" .. node_id .. "]前置代理节点",
- currentNode = uci:get_all(appname, currentNode.preproxy_node) or nil,
- set = function(o, server)
- uci:set(appname, node_id, "preproxy_node", server)
- o.newNodeId = server
- end,
- delete = function(o)
- uci:delete(appname, node_id, "preproxy_node")
- end
- }
+ if currentNode and currentNode.preproxy_node then
+ local section = uci:get_all(appname, currentNode.preproxy_node) or {}
+ if section[".type"] == "nodes" then
+ CONFIG[#CONFIG + 1] = {
+ log = true,
+ id = node_id,
+ remarks = "节点[" .. node_id .. "]前置代理节点",
+ currentNode = uci:get_all(appname, currentNode.preproxy_node) or nil,
+ set = function(o, server)
+ uci:set(appname, node_id, "preproxy_node", server)
+ o.newNodeId = server
+ end,
+ delete = function(o)
+ uci:delete(appname, node_id, "preproxy_node")
+ end
+ }
+ end
end
--落地节点
local currentNode = uci:get_all(appname, node_id) or nil
- if currentNode and currentNode.to_node and not currentNode.to_node:find("Socks_") 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
- }
+ if currentNode and currentNode.to_node then
+ local section = uci:get_all(appname, currentNode.to_node) or {}
+ if section[".type"] == "nodes" 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)
diff --git a/luci-app-passwall/root/usr/share/passwall/utils.sh b/luci-app-passwall/root/usr/share/passwall/utils.sh
index 167d18ae..72dd3ed8 100755
--- a/luci-app-passwall/root/usr/share/passwall/utils.sh
+++ b/luci-app-passwall/root/usr/share/passwall/utils.sh
@@ -508,13 +508,6 @@ ln_run() {
echo "${file_func:-echolog " - ${ln_name}"} $@ >${output}" > $TMP_SCRIPT_FUNC_PATH/$process_count
}
-is_socks_wrap() {
- case "$1" in
- Socks_*) return 0 ;;
- *) return 1 ;;
- esac
-}
-
kill_all() {
kill -9 $(pidof "$@") >/dev/null 2>&1
}
diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile
index 2c9d6139..2cfad31e 100644
--- a/luci-app-passwall2/Makefile
+++ b/luci-app-passwall2/Makefile
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall2
PKG_VERSION:=26.8.7
-PKG_RELEASE:=69
+PKG_RELEASE:=70
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall2/luasrc/controller/passwall2.lua b/luci-app-passwall2/luasrc/controller/passwall2.lua
index 4751f83e..ebf2f86b 100644
--- a/luci-app-passwall2/luasrc/controller/passwall2.lua
+++ b/luci-app-passwall2/luasrc/controller/passwall2.lua
@@ -329,7 +329,7 @@ end
function get_acl_log()
local id = http.formvalue("id")
- local path = "/tmp/log/passwall2_acl_" .. id .. ".log"
+ local path = api.TMP_PATH .. "/acl/" .. id .. "/node.log"
if nixio.fs.access(path) then
local content = luci.sys.exec("tail -n 5000 '" .. path .. "'")
content = content:gsub("\n", "
")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua
index 522170ee..979e5580 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua
@@ -46,6 +46,15 @@ sys.net.mac_hints(function(e, t)
}
end)
+i = s:option(DummyValue, "interface", translate("Source Interface"))
+i.cfgvalue = function(t, n)
+ local v = Value.cfgvalue(t, n) or ''
+ if v == "" then
+ return translate("All")
+ end
+ return v
+end
+
o = s:option(DummyValue, "sources", translate("Source"))
o.rawhtml = true
o.cfgvalue = function(t, n)
@@ -64,10 +73,13 @@ o.cfgvalue = function(t, n)
return e
end
-i = s:option(DummyValue, "interface", translate("Source Interface"))
+i = s:option(DummyValue, "mode", translate("Mode"))
i.cfgvalue = function(t, n)
- local v = Value.cfgvalue(t, n) or '-'
- return v
+ local v = Value.cfgvalue(t, n) or '0'
+ if v == "1" then
+ return translate("Proxy")
+ end
+ return translate("No Proxy")
end
local sortable = Template(appname .. "/cbi/sortable")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua
index 2a766582..0bcba726 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua
@@ -78,33 +78,6 @@ o = s:option(Value, "remarks", translate("Remarks"))
o.default = arg[1]
o.rmempty = false
----- Log
-o = s:option(Flag, "log", translate("Enable Log"))
-o.default = 0
-o.rmempty = false
-
-o = s:option(ListValue, "loglevel", translate("Log Level"))
-o.default = "warn"
-o:value("debug", "Debug")
-o:value("info", "Info")
-o:value("warn", "Warning")
-o:value("error", "Error")
-o:depends("log", "1")
-
-o = s:option(DummyValue, "_acl_log", translate("Log File"))
-o.rawhtml = true
-o.cfgvalue = function(t, n)
- local log_path = "/tmp/log/passwall2_acl_" .. arg[1] .. ".log"
- local log_url = api.url("get_acl_log") .. "?id=" .. arg[1]
- return string.format(
- '%s ',
- log_path,
- translate("View Log"),
- log_url
- )
-end
-o:depends("log", "1")
-
o = s:option(Value, "interface", translate("Source Interface"))
o:value("", translate("All"))
local iface = api.get_network_devices()
@@ -205,28 +178,32 @@ sources.validate = function(self, value, t)
end
sources.write = dynamicList_write
+o = s:option(ListValue, "mode", translate("Mode"))
+o:value("0", translate("No Proxy"))
+o:value("1", translate("Proxy"))
+
---- TCP No Redir Ports
local TCP_NO_REDIR_PORTS = m:get("@global_forwarding[0]", "tcp_no_redir_ports")
o = s:option(Value, "tcp_no_redir_ports", translate("TCP No Redir Ports"))
o:value("", translate("Use global config") .. "(" .. TCP_NO_REDIR_PORTS .. ")")
o:value("disable", translate("No patterns are used"))
o:value("1:65535", translate("All"))
+o:depends("mode", "1")
o.validate = port_validate
---- UDP No Redir Ports
local UDP_NO_REDIR_PORTS = m:get("@global_forwarding[0]", "udp_no_redir_ports")
-o = s:option(Value, "udp_no_redir_ports", translate("UDP No Redir Ports"),
- "" ..
- translate("If you don't want to let the device in the list to go proxy, please choose all.") ..
- "")
+o = s:option(Value, "udp_no_redir_ports", translate("UDP No Redir Ports"))
o:value("", translate("Use global config") .. "(" .. UDP_NO_REDIR_PORTS .. ")")
o:value("disable", translate("No patterns are used"))
o:value("1:65535", translate("All"))
+o:depends("mode", "1")
o.validate = port_validate
o = s:option(DummyValue, "_hide_node_option", "")
o.template = "passwall2/cbi/hidevalue"
o.value = "1"
+o:depends("mode", "0")
o:depends({ tcp_no_redir_ports = "1:65535", udp_no_redir_ports = "1:65535" })
if TCP_NO_REDIR_PORTS == "1:65535" and UDP_NO_REDIR_PORTS == "1:65535" then
o:depends({ tcp_no_redir_ports = "", udp_no_redir_ports = "" })
@@ -250,13 +227,30 @@ if not current_node_id then
end
current_node = current_node_id and m.uci:get_all(appname, current_node_id) or {}
-o = s:option(DummyValue, "_hide_dns_option", "")
-o.template = "passwall2/cbi/hidevalue"
-o.value = "1"
-o:depends({ node = "" })
-if GLOBAL_ENABLED == "1" and NODE then
- o:depends({ node = NODE })
+o = s:option(Flag, "log", translate("Enable Node Log"))
+o:depends({ _hide_node_option = "1", ['!reverse'] = true })
+
+o = s:option(ListValue, "loglevel", translate("Log Level"))
+o.default = "warn"
+o:value("debug", "Debug")
+o:value("info", "Info")
+o:value("warn", "Warning")
+o:value("error", "Error")
+o:depends("log", "1")
+
+o = s:option(DummyValue, "_acl_log", translate("Log File"))
+o.rawhtml = true
+o.cfgvalue = function(t, n)
+ local log_path = api.TMP_PATH .. "/acl/" .. arg[1] .. "/node.log"
+ local log_url = api.url("get_acl_log") .. "?id=" .. arg[1]
+ return string.format(
+ '%s ',
+ log_path,
+ translate("View Log"),
+ log_url
+ )
end
+o:depends("log", "1")
---- TCP Redir Ports
local TCP_REDIR_PORTS = m:get("@global_forwarding[0]", "tcp_redir_ports")
@@ -282,6 +276,15 @@ o.cfgvalue = function(t, n)
return string.format('%s',
translate("The port settings support single ports and ranges.
Separate multiple ports with commas (,).
Example: 21,80,443,1000:2000."))
end
+o:depends({ _hide_node_option = "1", ['!reverse'] = true })
+
+o = s:option(DummyValue, "_hide_dns_option", "")
+o.template = "passwall2/cbi/hidevalue"
+o.value = "1"
+o:depends({ node = "" })
+if GLOBAL_ENABLED == "1" and NODE then
+ o:depends({ node = NODE })
+end
o = s:option(ListValue, "direct_dns_query_strategy", translate("Direct Query Strategy"))
o.default = "UseIP"
@@ -377,6 +380,7 @@ o = s:option(ListValue, "dns_hosts_mode", translate("Domain Override"))
o:value("default", translate("Use global config"))
o:value("disable", translate("No patterns are used"))
o:value("custom", translate("-- custom --"))
+o:depends({ _hide_dns_option = "1", ['!reverse'] = true })
o = s:option(TextValue, "dns_hosts", translate("Domain Override"))
o.rows = 5
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua
index 2a449120..17714348 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua
@@ -287,12 +287,26 @@ o.default = "1"
o.rmempty = false
loglevel = s:taboption("log", ListValue, "loglevel", translate("Log Level"))
-loglevel.default = "warning"
+loglevel.default = "warn"
loglevel:value("debug")
loglevel:value("info")
-loglevel:value("warning")
+loglevel:value("warn")
loglevel:value("error")
+o = s:taboption("log", DummyValue, "_log", translate("Log File"))
+o.rawhtml = true
+o.cfgvalue = function(t, n)
+ local log_path = api.TMP_PATH .. "/acl/default/global.log"
+ local log_url = api.url("get_redir_log") .. "?id=default&name=global"
+ return string.format(
+ '%s ',
+ log_path,
+ translate("View Log"),
+ log_url
+ )
+end
+o:depends("log_node", "1")
+
s:tab("faq", "FAQ")
o = s:taboption("faq", DummyValue, "")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua
index 138922bc..934c3945 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua
@@ -574,6 +574,9 @@ o.validate = function(self, value)
return value
end
+o = s:option(Value, _n("cipherSuites"), translate("Cipher Suites"), '***' .. " " .. translate("Configures the list of supported cipher suites, separated by :"))
+o:depends({ [_n("tls")] = true })
+
o = s:option(Flag, _n("ech"), translate("ECH"))
o.default = "0"
o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
index 903c5856..f6f87fd8 100644
--- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
+++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
@@ -91,6 +91,11 @@ local function convert_geofile()
convert(GEO_VAR.IP_PATH, "geoip", GEO_VAR.IP_TAGS)
end
+local function get_log_level(s)
+ if s == "warning" then s = "warn" end
+ return s
+end
+
function parseDNS(str)
local result_dns_server
-- [proto]://[ip]
@@ -256,6 +261,7 @@ function gen_outbound(flag, node, tag, proxy_table)
fragment = fragment,
record_fragment = record_fragment,
certificate = (node.tls_certificate == "1" and node.tls_certificate_pem ~= "") and split(node.tls_certificate_pem, "\n") or nil,
+ cipher_suites = node.cipherSuites or nil,
ech = (node.ech == "1") and (function()
local function get_ech_domain(s) --兼容xray "域名+DNS" 格式ech
local domain, dns = s:match("^([^+]+)%+(.+)$")
@@ -1072,7 +1078,7 @@ function gen_config_server(node)
local config = {
log = {
disabled = (not node or node.log == "0") and true or false,
- level = node.loglevel or "info",
+ level = get_log_level(node.loglevel) or "info",
timestamp = true,
--output = logfile,
},
@@ -2160,7 +2166,7 @@ function gen_config(var)
local config = {
log = {
disabled = log == "0" and true or false,
- level = loglevel,
+ level = get_log_level(loglevel),
timestamp = true,
output = logfile,
},
diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua
index 9558730e..d3031ba9 100644
--- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua
+++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua
@@ -31,6 +31,11 @@ local function get_domain_excluded()
return hosts
end
+local function get_log_level(s)
+ if s == "warn" then s = "warning" end
+ return s
+end
+
function parseDNS(str)
local result_dns_server
-- [proto]://[ip]
@@ -657,7 +662,7 @@ function gen_config_server(node)
local config = {
log = {
- loglevel = ("1" == node.log) and node.loglevel or "none"
+ loglevel = ("1" == node.log) and get_log_level(node.loglevel) or "none"
},
inbounds = {
{
@@ -1981,7 +1986,7 @@ function gen_config(var)
--access = string.format("/tmp/etc/%s/%s_access.log", appname, "global"),
--error = string.format("/tmp/etc/%s/%s_error.log", appname, "global"),
--dnsLog = true,
- loglevel = loglevel
+ loglevel = get_log_level(loglevel)
},
dns = dns,
fakedns = fakedns,
diff --git a/luci-app-passwall2/po/fa/passwall2.po b/luci-app-passwall2/po/fa/passwall2.po
index 1d8f7068..8d0f000b 100644
--- a/luci-app-passwall2/po/fa/passwall2.po
+++ b/luci-app-passwall2/po/fa/passwall2.po
@@ -1507,6 +1507,12 @@ msgstr "فعالسازی گزارش گره"
msgid "Log Level"
msgstr "سطح گزارش"
+msgid "Log File"
+msgstr "فایل لاگ"
+
+msgid "View Log"
+msgstr "مشاهده گزارش"
+
msgid "Not enabled log"
msgstr "گزارش فعال نیست"
@@ -2381,6 +2387,9 @@ msgstr "گره [%s] با موفقیت حل شد، تعداد: %s"
msgid "Get subscription content for [%s] is empty. This may be due to an invalid subscription address or a network problem. Please diagnose the issue!"
msgstr "دریافت محتوای اشتراک برای [%s] خالی است. این ممکن است به دلیل آدرس اشتراک نامعتبر یا مشکل شبکه باشد. لطفاً مشکل را بررسی کنید!"
+msgid "No Proxy"
+msgstr "بدون پروکسی"
+
msgid "Proxy"
msgstr "پروکسی"
diff --git a/luci-app-passwall2/po/ru/passwall2.po b/luci-app-passwall2/po/ru/passwall2.po
index 9461436f..0d3b7c3a 100644
--- a/luci-app-passwall2/po/ru/passwall2.po
+++ b/luci-app-passwall2/po/ru/passwall2.po
@@ -1508,6 +1508,12 @@ msgstr "Запись журнала"
msgid "Log Level"
msgstr "Уровень записи журнала"
+msgid "Log File"
+msgstr "Файл журнала"
+
+msgid "View Log"
+msgstr "Просмотреть журнал"
+
msgid "Not enabled log"
msgstr "Запись журнала отключена"
@@ -2379,6 +2385,9 @@ msgstr "Успешно разобран [%s], количество узлов: %
msgid "Get subscription content for [%s] is empty. This may be due to an invalid subscription address or a network problem. Please diagnose the issue!"
msgstr "Содержимое подписки [%s] пусто. Возможно, адрес подписки неверен или есть проблема с сетью. Пожалуйста, проведите диагностику!"
+msgid "No Proxy"
+msgstr "Без прокси"
+
msgid "Proxy"
msgstr "Прокси"
diff --git a/luci-app-passwall2/po/zh-cn/passwall2.po b/luci-app-passwall2/po/zh-cn/passwall2.po
index 19f8e055..326e3f82 100644
--- a/luci-app-passwall2/po/zh-cn/passwall2.po
+++ b/luci-app-passwall2/po/zh-cn/passwall2.po
@@ -1499,6 +1499,12 @@ msgstr "启用节点日志"
msgid "Log Level"
msgstr "日志等级"
+msgid "Log File"
+msgstr "日志文件"
+
+msgid "View Log"
+msgstr "查看日志"
+
msgid "Not enabled log"
msgstr "未启用日志"
@@ -2367,6 +2373,9 @@ msgstr "成功解析【%s】节点,数量:%s"
msgid "Get subscription content for [%s] is empty. This may be due to an invalid subscription address or a network problem. Please diagnose the issue!"
msgstr "获取到的【%s】订阅内容为空,可能是订阅地址无效,或是网络问题,请诊断!"
+msgid "No Proxy"
+msgstr "不代理"
+
msgid "Proxy"
msgstr "代理"
diff --git a/luci-app-passwall2/po/zh-tw/passwall2.po b/luci-app-passwall2/po/zh-tw/passwall2.po
index 9961c93b..e6962d53 100644
--- a/luci-app-passwall2/po/zh-tw/passwall2.po
+++ b/luci-app-passwall2/po/zh-tw/passwall2.po
@@ -1499,6 +1499,12 @@ msgstr "啟用節點日誌"
msgid "Log Level"
msgstr "日誌等級"
+msgid "Log File"
+msgstr "日誌檔案"
+
+msgid "View Log"
+msgstr "查看日誌"
+
msgid "Not enabled log"
msgstr "未啟用日誌"
@@ -2373,6 +2379,9 @@ msgstr "成功解析【%s】節點,數量:%s"
msgid "Get subscription content for [%s] is empty. This may be due to an invalid subscription address or a network problem. Please diagnose the issue!"
msgstr "獲取到的【%s】訂閱內容為空,可能是訂閱地址無效,或是網絡問題,請診斷!"
+msgid "No Proxy"
+msgstr "不代理"
+
msgid "Proxy"
msgstr "代理"
diff --git a/luci-app-passwall2/root/usr/share/passwall2/app.sh b/luci-app-passwall2/root/usr/share/passwall2/app.sh
index ba5561cb..6c418286 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/app.sh
+++ b/luci-app-passwall2/root/usr/share/passwall2/app.sh
@@ -209,7 +209,6 @@ run_singbox() {
node_protocol=$(config_n_get $node protocol)
[ -n "$log_file" ] || local log_file="/dev/null"
[ -z "$loglevel" ] && local loglevel=$(config_t_get global loglevel "warn")
- [ "$loglevel" = "warning" ] && loglevel="warn"
local singbox_tag=$($SINGBOX_BIN version | grep 'Tags:' | awk '{print $2}')
json_init
@@ -413,7 +412,6 @@ run_socks() {
}
[ "${log_file}" != "/dev/null" ] && {
local loglevel=$(config_t_get global loglevel "warn")
- [ "$loglevel" = "warning" ] && loglevel="warn"
json_add_string "log" "1"
json_add_string "loglevel" "${loglevel}"
json_add_string "logfile" "${log_file}"
@@ -440,6 +438,11 @@ run_socks() {
json_add_null "server_host"
json_add_null "server_port"
}
+ [ "${log_file}" != "/dev/null" ] && {
+ local loglevel=$(config_t_get global loglevel "warn")
+ json_add_string "log" "1"
+ json_add_string "loglevel" "${loglevel}"
+ }
[ -n "$no_run" ] && json_add_string "no_run" "1"
json_add_string "flag" "${flag}"
json_add_string "local_socks_address" "${bind}"
@@ -1029,10 +1032,6 @@ acl_app() {
[ "$(config_n_get $sid enabled)" = "1" ] || continue
has_enabled=1
eval $(uci -q show "${CONFIG}.${sid}" | cut -d'.' -sf 3-)
- log=${log:-0}
- loglevel=${loglevel:-warn}
- log_file="/dev/null"
- [ "${log}" = "1" ] && log_file="/tmp/log/passwall2_acl_${sid}.log"
if [ -n "${sources}" ]; then
for s in $sources; do
@@ -1061,6 +1060,11 @@ acl_app() {
mkdir -p ${acl_path}
[ -n "${source_list}" ] && echo -e "${source_list}" | sed '/^$/d' > ${acl_path}/source_list
+ log=${log:-0}
+ loglevel=${loglevel:-warn}
+ log_file="/dev/null"
+ [ "${log}" = "1" ] && log_file="${acl_path}/node.log"
+
node=${node:-default}
tcp_no_redir_ports=${tcp_no_redir_ports:-default}
udp_no_redir_ports=${udp_no_redir_ports:-default}
diff --git a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh
index e05e4f10..f7900322 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh
+++ b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh
@@ -261,6 +261,7 @@ load_acl() {
for sid in $(ls -F ${TMP_ACL_PATH} | grep '/$' | awk -F '/' '{print $1}' | grep -v 'default'); do
eval $(uci -q show "${CONFIG}.${sid}" | cut -d'.' -sf 3-)
+ mode=${mode:-0}
tcp_no_redir_ports=${tcp_no_redir_ports:-default}
udp_no_redir_ports=${udp_no_redir_ports:-default}
tcp_proxy_mode="global"
@@ -268,6 +269,10 @@ load_acl() {
tcp_redir_ports=${tcp_redir_ports:-default}
udp_redir_ports=${udp_redir_ports:-default}
node=${node:-default}
+ [ "$mode" = "0" ] && {
+ tcp_no_redir_ports="1:65535"
+ udp_no_redir_ports="1:65535"
+ }
[ "$tcp_no_redir_ports" = "default" ] && tcp_no_redir_ports=$TCP_NO_REDIR_PORTS
[ "$udp_no_redir_ports" = "default" ] && udp_no_redir_ports=$UDP_NO_REDIR_PORTS
[ "$tcp_redir_ports" = "default" ] && tcp_redir_ports=$TCP_REDIR_PORTS
diff --git a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh
index d04cdbf8..e2af0912 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh
+++ b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh
@@ -299,6 +299,7 @@ load_acl() {
for sid in $(ls -F ${TMP_ACL_PATH} | grep '/$' | awk -F '/' '{print $1}' | grep -v 'default'); do
eval $(uci -q show "${CONFIG}.${sid}" | cut -d'.' -sf 3-)
+ mode=${mode:-0}
tcp_no_redir_ports=${tcp_no_redir_ports:-default}
udp_no_redir_ports=${udp_no_redir_ports:-default}
tcp_proxy_mode="global"
@@ -306,6 +307,10 @@ load_acl() {
tcp_redir_ports=${tcp_redir_ports:-default}
udp_redir_ports=${udp_redir_ports:-default}
node=${node:-default}
+ [ "$mode" = "0" ] && {
+ tcp_no_redir_ports="1:65535"
+ udp_no_redir_ports="1:65535"
+ }
[ "$tcp_no_redir_ports" = "default" ] && tcp_no_redir_ports=$TCP_NO_REDIR_PORTS
[ "$udp_no_redir_ports" = "default" ] && udp_no_redir_ports=$UDP_NO_REDIR_PORTS
[ "$tcp_redir_ports" = "default" ] && tcp_redir_ports=$TCP_REDIR_PORTS
diff --git a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
index 97cf756b..f2571450 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
+++ b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
@@ -168,9 +168,9 @@ do
local flag = i18n.translatef("Socks node list [%s]", i) .. " " .. i18n.translatef("Backup node list")
local currentNodes = {}
local newNodes = {}
- for k, asb_node in ipairs(t.autoswitch_backup_node) do
- if asb_node then
- local currentNode = uci:get_all(appname, asb_node) or {}
+ for k, asb_node_id in ipairs(t.autoswitch_backup_node) do
+ if asb_node_id then
+ local currentNode = uci:get_all(appname, asb_node_id) or {}
if currentNode[".type"] == "nodes" then
currentNodes[#currentNodes + 1] = {
log = true,
@@ -277,7 +277,7 @@ do
for k, e in pairs(rules) do
local _node_id = node[e[".name"]] or nil
if _node_id then
- local section = uci:get_all(appname, node_id) or {}
+ local section = uci:get_all(appname, _node_id) or {}
if section[".type"] == "nodes" then
CONFIG[#CONFIG + 1] = {
log = false,