From 48abbc4c75e757d5dd84223fed5469817b5016b5 Mon Sep 17 00:00:00 2001 From: Gzxhwq Date: Thu, 9 Jun 2022 20:16:53 +0800 Subject: [PATCH] luci: add shadowsocks-rust server --- luci-app-passwall/Makefile | 6 +++++ .../model/cbi/passwall/server/api/app.lua | 3 +++ .../cbi/passwall/server/api/shadowsocks.lua | 8 ++++++- .../luasrc/model/cbi/passwall/server/user.lua | 22 +++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 01698eac7..e1c228a19 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -46,6 +46,7 @@ LUCI_DEPENDS:=+coreutils +coreutils-base64 +coreutils-nohup +curl \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server:shadowsocks-libev-ss-server \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client:shadowsocks-rust-sslocal \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server:shadowsocks-rust-ssserver \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-local \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-redir \ +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server:shadowsocksr-libev-ssr-server \ @@ -113,6 +114,11 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client depends on aarch64||arm||i386||mips||mipsel||x86_64 default y if aarch64 +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server + bool "Include Shadowsocks Rust Server" + depends on aarch64||arm||i386||mips||mipsel||x86_64 + default n + config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client bool "Include ShadowsocksR Libev Client" default y diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua index 93a797f48..cfed8fa71 100755 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua @@ -121,6 +121,9 @@ local function start() end type = type:lower() bin = ln_run("/usr/bin/" .. type .. "-server", type .. "-server", "-c " .. config_file .. " " .. udp_param, log_path) + elseif type == "SS-Rust" then + config = require(require_dir .. "shadowsocks").gen_config(user) + bin = ln_run("/usr/bin/ssserver", "ssserver", "-c " .. config_file, log_path) elseif type == "V2ray" then config = require(require_dir .. "v2ray").gen_config(user) bin = ln_run(api.get_v2ray_path(), "v2ray", "run -c " .. config_file, log_path) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua index fdd18e0e2..5b32c4645 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua @@ -1,13 +1,19 @@ module("luci.model.cbi.passwall.server.api.shadowsocks", package.seeall) function gen_config(user) local config = {} - config.server = {"[::0]", "0.0.0.0"} config.server_port = tonumber(user.port) config.password = user.password config.timeout = tonumber(user.timeout) config.fast_open = (user.tcp_fast_open and user.tcp_fast_open == "1") and true or false config.method = user.method + if user.type == "SS-Rust" then + config.server = "::" + config.mode = "tcp_and_udp" + else + config.server = {"[::0]", "0.0.0.0"} + end + if user.type == "SSR" then config.protocol = user.protocol config.protocol_param = user.protocol_param diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua index d0174e641..cc016c343 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua @@ -9,6 +9,12 @@ local ss_encrypt_method_list = { "xchacha20-ietf-poly1305" } +local ss_rust_encrypt_method_list = { + "plain", "none", + "aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", + "2022-blake3-aes-128-gcm","2022-blake3-aes-256-gcm","2022-blake3-chacha8-poly1305","2022-blake3-chacha20-poly1305" +} + local ssr_encrypt_method_list = { "none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", @@ -68,6 +74,9 @@ end if api.is_finded("ss-server") then type:value("SS", translate("Shadowsocks")) end +if api.is_finded("ssserver") then + type:value("SS-Rust", translate("Shadowsocks Rust")) +end if api.is_finded("ssr-server") then type:value("SSR", translate("ShadowsocksR")) end @@ -150,6 +159,7 @@ password = s:option(Value, "password", translate("Password")) password.password = true password:depends("auth", true) password:depends("type", "SS") +password:depends("type", "SS-Rust") password:depends("type", "SSR") password:depends("type", "Brook") password:depends({ type = "V2ray", protocol = "shadowsocks" }) @@ -245,6 +255,16 @@ function ss_encrypt_method.write(self, section, value) m:set(section, "method", value) end +ss_rust_encrypt_method = s:option(ListValue, "ss_rust_encrypt_method", translate("Encrypt Method")) +for a, t in ipairs(ss_rust_encrypt_method_list) do ss_rust_encrypt_method:value(t) end +ss_rust_encrypt_method:depends("type", "SS-Rust") +function ss_rust_encrypt_method.cfgvalue(self, section) + return m:get(section, "method") +end +function ss_rust_encrypt_method.write(self, section, value) + m:set(section, "method", value) +end + ssr_encrypt_method = s:option(ListValue, "ssr_encrypt_method", translate("Encrypt Method")) for a, t in ipairs(ssr_encrypt_method_list) do ssr_encrypt_method:value(t) end ssr_encrypt_method:depends("type", "SSR") @@ -311,6 +331,7 @@ timeout = s:option(Value, "timeout", translate("Connection Timeout")) timeout.datatype = "uinteger" timeout.default = 300 timeout:depends("type", "SS") +timeout:depends("type", "SS-Rust") timeout:depends("type", "SSR") udp_forward = s:option(Flag, "udp_forward", translate("UDP Forward")) @@ -617,6 +638,7 @@ ss_aead_pwd:depends("ss_aead", true) tcp_fast_open = s:option(Flag, "tcp_fast_open", translate("TCP Fast Open")) tcp_fast_open.default = "0" tcp_fast_open:depends("type", "SS") +tcp_fast_open:depends("type", "SS-Rust") tcp_fast_open:depends("type", "SSR") tcp_fast_open:depends("type", "Trojan") tcp_fast_open:depends("type", "Trojan-Plus")