From c1a0532460eb56aa8ee8a4064d723b5bb38a7a74 Mon Sep 17 00:00:00 2001 From: action Date: Sun, 31 May 2026 18:11:14 +0800 Subject: [PATCH] update 2026-05-31 18:11:14 --- .../model/cbi/shadowsocksr/client-config.lua | 8 ++-- luci-app-ssr-plus/po/templates/ssr-plus.pot | 20 ++++---- luci-app-ssr-plus/po/zh_Hans/ssr-plus.po | 39 ++++++++-------- .../usr/share/shadowsocksr/gen_config.lua | 46 +++++++++++++------ 4 files changed, 65 insertions(+), 48 deletions(-) diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua index 341ecc90..e7e46d5c 100644 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -555,7 +555,7 @@ if is_finded("xray-plugin") then o:value("xray-plugin", translate("xray-plugin")) end if has_mihomo or is_finded("shadow-tls") then - o:value("shadow-tls", translate("shadow-tls")) + o:value("shadow-tls", translate("Shadow-TLS")) end if has_mihomo then o:value("restls", translate("restls")) @@ -771,7 +771,7 @@ end o.default = "sslocal" o.rmempty = false -o = s:option(Value, "sslocal_password",translate("Shadowsocks password")) +o = s:option(Value, "sslocal_password",translate("Shadowsocks Password")) o:depends({type = "shadowtls", chain_type = "sslocal"}) o.rmempty = true @@ -1227,12 +1227,12 @@ o.default = "0" o.rmempty = true o = s:option(DynamicList, "local_addresses", translate("Local addresses")) -o.datatype = "cidr" +--o.datatype = "cidr" o:depends({type = "v2ray", v2ray_protocol = "wireguard"}) o.rmempty = true o = s:option(DynamicList, "reserved", translate("Reserved bytes(optional)")) -o.description = translate("Decimal numbers separated by \",\" or Base64-encoded strings.") +o.description = translate("Supports decimal numbers separated by \",\" or Base64-encoded strings, with a maximum length of 3 bytes.") o:depends({type = "v2ray", v2ray_protocol = "wireguard"}) o.rmempty = true diff --git a/luci-app-ssr-plus/po/templates/ssr-plus.pot b/luci-app-ssr-plus/po/templates/ssr-plus.pot index c51f71f8..f460f804 100644 --- a/luci-app-ssr-plus/po/templates/ssr-plus.pot +++ b/luci-app-ssr-plus/po/templates/ssr-plus.pot @@ -633,10 +633,6 @@ msgstr "" msgid "Day/Week" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1235 -msgid "Decimal numbers separated by \",\" or Base64-encoded strings." -msgstr "" - #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:193 msgid "Decryption" msgstr "" @@ -2234,6 +2230,7 @@ msgid "Session Ticket" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:358 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:558 msgid "Shadow-TLS" msgstr "" @@ -2268,14 +2265,11 @@ msgstr "" msgid "Shadowsocks" msgstr "" +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:774 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:166 msgid "Shadowsocks Password" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:774 -msgid "Shadowsocks password" -msgstr "" - #: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:383 msgid "Shadowsocks-rust" msgstr "" @@ -2395,6 +2389,12 @@ msgstr "" msgid "Supports a fixed value or a random range (e.g., 30, 5-30), minimum 5." msgstr "" +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1235 +msgid "" +"Supports decimal numbers separated by \",\" or Base64-encoded strings, with " +"a maximum length of 3 bytes." +msgstr "" + #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84 msgid "Switch check cycly(second)" msgstr "" @@ -3131,10 +3131,6 @@ msgstr "" msgid "shadow-TLS SNI" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:558 -msgid "shadow-tls" -msgstr "" - #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:734 msgid "shadowTLS protocol Version" msgstr "" diff --git a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po index 7ee0fecd..08082677 100644 --- a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po +++ b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po @@ -98,7 +98,7 @@ msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:387 msgid "Accept LAN Access" -msgstr "" +msgstr "接受局域网访问" #: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:627 msgid "Access Control" @@ -340,7 +340,7 @@ msgstr "伪装类型" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:227 msgid "Certificate File Path" -msgstr "" +msgstr "证书文件路径" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1513 msgid "Certificate fingerprint" @@ -638,10 +638,6 @@ msgstr "数据库" msgid "Day/Week" msgstr "日/周" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1235 -msgid "Decimal numbers separated by \",\" or Base64-encoded strings." -msgstr "用“,”隔开的十进制数字或 Base64 编码字符串。" - #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:193 msgid "Decryption" msgstr "解密" @@ -955,7 +951,7 @@ msgstr "每周三" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:606 msgid "Example:" -msgstr "" +msgstr "示例:" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:223 msgid "Expecting: %s" @@ -1902,7 +1898,7 @@ msgstr "上一页" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:232 msgid "Private Key File Path" -msgstr "" +msgstr "私钥文件路径" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1239 msgid "Private key" @@ -1933,7 +1929,7 @@ msgstr "公钥" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:371 msgid "QUIC Camouflage Type" -msgstr "" +msgstr "QUIC 伪装(混淆)类型" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1162 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:367 @@ -2212,7 +2208,7 @@ msgstr "服务器节点数量" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:223 msgid "Server Name (SNI)" -msgstr "" +msgstr "服务器名称(SNI)" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:335 msgid "Server Node Type" @@ -2250,6 +2246,7 @@ msgid "Session Ticket" msgstr "会话凭据" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:358 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:558 msgid "Shadow-TLS" msgstr "" @@ -2284,14 +2281,11 @@ msgstr "ShadowTLS" msgid "Shadowsocks" msgstr "Shadowsocks" +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:774 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:166 msgid "Shadowsocks Password" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:774 -msgid "Shadowsocks password" -msgstr "shadowsocks密码" - #: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:383 msgid "Shadowsocks-rust" msgstr "Shadowsocks-rust" @@ -2411,6 +2405,14 @@ msgstr "同时支持 AdGuard Home 和 DNSMASQ 格式的过滤列表" msgid "Supports a fixed value or a random range (e.g., 30, 5-30), minimum 5." msgstr "支持固定值或随机范围(如 30 或 5-30),最小 5 秒。" +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1235 +msgid "" +"Supports decimal numbers separated by \",\" or Base64-encoded strings, with " +"a maximum length of 3 bytes." +msgstr "" +"支持以“,”分隔的十进制数字,或者经过 Base64 编码的字符串,其最大长度为 3 个字" +"节。" + #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84 msgid "Switch check cycly(second)" msgstr "自动切换检查周期(秒)" @@ -3105,7 +3107,7 @@ msgstr "使用 QUIC 流的无损 UDP 中继" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:300 msgid "mKCP Camouflage Type" -msgstr "" +msgstr "mKCP 伪装(混淆)类型" #: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/component.htm:46 msgid "mihomo binary not found in archive" @@ -3157,10 +3159,6 @@ msgstr "" msgid "shadow-TLS SNI" msgstr "服务器名称指示" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:558 -msgid "shadow-tls" -msgstr "" - #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:734 msgid "shadowTLS protocol Version" msgstr "ShadowTLS 协议版本" @@ -3212,6 +3210,9 @@ msgstr "UDP 最大并发连接数" msgid "xudpProxyUDP443" msgstr "对被代理的 UDP/443 流量处理方式" +#~ msgid "Shadowsocks password" +#~ msgstr "shadowsocks密码" + #~ msgid "Are you sure you want to delete subscribe link: %s ? " #~ msgstr "确定删除此订阅链接:%s 吗?" diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua index bf4ff26e..10e3fda8 100755 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua @@ -237,20 +237,33 @@ function wireguard() -- 处理 reserved 字段,支持逗号分隔的数字或 Base64 编码 local reserved = nil if server.reserved then - local bytes = {} - if not server.reserved:match("[^%d,]+") then - -- 纯数字和逗号,解析为数字列表 - server.reserved:gsub("%d+", function(b) - bytes[#bytes + 1] = tonumber(b) - end) - else - -- Base64 编码的二进制数据 - local result = base64Decode(server.reserved) - for i = 1, #result do - bytes[i] = result:byte(i) + local all_bytes = {} + local reserved_values = server.reserved + + -- 确保是 table 类型 + if type(reserved_values) ~= "table" then + reserved_values = {reserved_values} + end + + for _, reserved_str in ipairs(reserved_values) do + if type(reserved_str) == "string" then + if not reserved_str:match("[^%d,]+") then + -- 数字和逗号格式 + reserved_str:gsub("%d+", function(b) + all_bytes[#all_bytes + 1] = tonumber(b) + end) + else + -- Base64 格式 + local result = base64Decode(reserved_str) + if result then + for i = 1, #result do + all_bytes[#all_bytes + 1] = result:byte(i) + end + end + end end end - reserved = #bytes > 0 and bytes or nil + reserved = #all_bytes > 0 and all_bytes or nil end outbound_settings = { @@ -265,10 +278,17 @@ function wireguard() allowedIPs = (server.allowedips) or nil, } }, - noKernelTun = (server.kernelmode == "1") and true or false, + kernelMode = (server.kernelmode == "1") and true or false, reserved = reserved, mtu = tonumber(server.mtu) } + if server.finalmask and server.finalmask ~= "" then + local ok, fm = pcall(json.parse, base64Decode(server.finalmask)) + if ok and type(fm) == "table" then + outbound_settings.streamSettings = outbound_settings.streamSettings or {} + outbound_settings.streamSettings.finalmask = fm + end + end end function xray_hysteria2() outbound_settings = {