From e4cbc7d7c44a3cea7d8bf2776dd8b944b74b253a Mon Sep 17 00:00:00 2001 From: actions Date: Sun, 31 Mar 2024 22:30:04 +0800 Subject: [PATCH] luci-app-passwall: sync upstream --- .../cbi/passwall/client/type/hysteria2.lua | 4 +- .../model/cbi/passwall/client/type/ray.lua | 9 +++ .../luasrc/passwall/util_xray.lua | 64 +++++++++++++------ luci-app-passwall/po/zh-cn/passwall.po | 3 + 4 files changed, 58 insertions(+), 22 deletions(-) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/hysteria2.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/hysteria2.lua index 4028a4003..1ce53af54 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/hysteria2.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/hysteria2.lua @@ -56,10 +56,10 @@ o.rewrite_option = o.option o = s:option(Value, option_name("hop_interval"), translate("Hop Interval")) o.rewrite_option = o.option -o = s:option(Value, option_name("recv_window_conn"), translate("QUIC stream receive window")) +o = s:option(Value, option_name("recv_window_conn"), translate("QUIC connection receive window")) o.rewrite_option = o.option -o = s:option(Value, option_name("recv_window"), translate("QUIC connection receive window")) +o = s:option(Value, option_name("recv_window"), translate("QUIC stream receive window")) o.rewrite_option = o.option o = s:option(Value, option_name("idle_timeout"), translate("Idle Timeout")) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua index cb18e7683..6140f7bcb 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua @@ -94,6 +94,15 @@ o:value("leastPing") o:value("leastLoad") o.default = "leastLoad" +-- Fallback Node +if api.compare_versions(api.get_app_version("xray"), ">=", "1.8.10") then + local o = s:option(ListValue, option_name("fallback_node"), translate("Fallback Node")) + o:depends({ [option_name("protocol")] = "_balancing" }) + o:value("",translate("Null")) + o.default = "" + for k, v in pairs(nodes_table) do o:value(v.id, v.remark) end +end + -- 探测地址 local o = s:option(Flag, option_name("useCustomProbeUrl"), translate("Use Custome Probe URL"), translate("By default the built-in probe URL will be used, enable this option to use a custom probe URL.")) o:depends({ [option_name("balancingStrategy")] = "leastPing" }) diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index d7c5b2a77..9c1e13541 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -646,6 +646,7 @@ function gen_config(var) local function gen_balancer(_node, loopbackTag) local blc_nodes = _node.balancing_node + local fallback_node_id = _node.fallback_node local length = #blc_nodes local valid_nodes = {} for i = 1, length do @@ -668,6 +669,27 @@ function gen_config(var) end end end + if fallback_node_id == "" then + fallback_node_id = nil + end + if fallback_node_id then + local is_new_node = true + for _, outbound in ipairs(outbounds) do + if outbound.tag == fallback_node_id then + is_new_node = false + break + end + end + if is_new_node then + local fallback_node = uci:get_all(appname, fallback_node_id) + local outbound = gen_outbound(flag, fallback_node, fallback_node_id, { fragment = xray_settings.fragment == "1" or nil }) + if outbound then + table.insert(outbounds, outbound) + else + fallback_node_id = nil + end + end + end local balancer, rule if #valid_nodes > 0 then @@ -675,6 +697,7 @@ function gen_config(var) balancer = { tag = balancerTag, selector = valid_nodes, + fallbackTag = fallback_node_id, strategy = { type = _node.balancingStrategy or "random" } } if _node.balancingStrategy == "leastPing" or _node.balancingStrategy == "leastLoad" then @@ -683,23 +706,22 @@ function gen_config(var) subjectSelector = { "blc-" }, probeUrl = _node.useCustomProbeUrl and _node.probeUrl or nil, probeInterval = _node.probeInterval or "1m", - enableConcurrency = node.type == "Xray" and true or nil --这里只判断顶层节点(分流总节点/单独的负载均衡节点)类型为Xray,就可以启用并发 + enableConcurrency = true } end end - if loopbackTag and loopbackTag ~= "" then - local inboundTag = loopbackTag .. "-in" - table.insert(outbounds, { - protocol = "loopback", - tag = loopbackTag, - settings = { inboundTag = inboundTag } - }) - rule = { - type = "field", - inboundTag = { inboundTag }, - balancerTag = balancerTag - } - end + if loopbackTag == nil or loopbackTag =="" then loopbackTag = _node[".name"] end + local inboundTag = loopbackTag .. "-in" + table.insert(outbounds, { + protocol = "loopback", + tag = loopbackTag, + settings = { inboundTag = inboundTag } + }) + rule = { + type = "field", + inboundTag = { inboundTag }, + balancerTag = balancerTag + } end return balancer, rule end @@ -891,9 +913,10 @@ function gen_config(var) end end if is_new_balancer then - local balancer = gen_balancer(_node) + local balancer, rule = gen_balancer(_node) if balancer then table.insert(balancers, balancer) + table.insert(rules, rule) rule_balancerTag = balancer.tag end end @@ -1020,11 +1043,12 @@ function gen_config(var) } elseif node.protocol == "_balancing" then if node.balancing_node then - local balancer = gen_balancer(node) + local balancer, rule = gen_balancer(node) routing = { balancers = { balancer }, rules = { - { type = "field", network = "tcp,udp", balancerTag = balancer.tag } + { type = "field", network = "tcp,udp", balancerTag = balancer.tag }, + rule } } end @@ -1286,7 +1310,7 @@ function gen_config(var) -- } } } - + if xray_settings.fragment == "1" then table.insert(outbounds, { protocol = "freedom", @@ -1305,9 +1329,9 @@ function gen_config(var) tcpNoDelay = true } } - }) + }) end - + table.insert(outbounds, { protocol = "freedom", tag = "direct", diff --git a/luci-app-passwall/po/zh-cn/passwall.po b/luci-app-passwall/po/zh-cn/passwall.po index ffe9ee92b..6fb0c6021 100644 --- a/luci-app-passwall/po/zh-cn/passwall.po +++ b/luci-app-passwall/po/zh-cn/passwall.po @@ -388,6 +388,9 @@ msgstr "负载均衡" msgid "Balancing Strategy" msgstr "负载均衡策略" +msgid "Fallback Node" +msgstr "后备节点" + msgid "Use Custome Probe URL" msgstr "使用自定义探测网址"