diff --git a/package/lean/luci-app-ssr-plus/Makefile b/package/lean/luci-app-ssr-plus/Makefile index a6f66718b..c8b60cde0 100644 --- a/package/lean/luci-app-ssr-plus/Makefile +++ b/package/lean/luci-app-ssr-plus/Makefile @@ -6,10 +6,10 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI support for SSR Plus -LUCI_DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget +LUCI_DEPENDS:=+shadowsocksr-libev-alt +shadowsocks-libev-ss-redir +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget LUCI_PKGARCH:=all PKG_VERSION:=1 -PKG_RELEASE:=31 +PKG_RELEASE:=35 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua index 1c0f437bb..86a6a1788 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua @@ -13,21 +13,25 @@ function index() entry({"admin", "services", "shadowsocksr", "client"},cbi("shadowsocksr/client"),_("SSR Client"), 10).leaf = true - entry({"admin", "services", "shadowsocksr", "servers"}, arcombine(cbi("shadowsocksr/servers"), cbi("shadowsocksr/client-config")),_("Servers Manage"), 20).leaf = true + entry({"admin", "services", "shadowsocksr", "servers"}, arcombine(cbi("shadowsocksr/servers"), cbi("shadowsocksr/client-config")),_("Severs Nodes"), 20).leaf = true entry({"admin", "services", "shadowsocksr", "control"},cbi("shadowsocksr/control"),_("Access Control"), 30).leaf = true entry({"admin", "services", "shadowsocksr", "list"},form("shadowsocksr/list"),_("GFW List"), 40).leaf = true entry({"admin", "services", "shadowsocksr", "advanced"},cbi("shadowsocksr/advanced"),_("Advanced Settings"), 50).leaf = true + + if nixio.fs.access("/usr/bin/ssr-server") then + entry({"admin", "services", "shadowsocksr", "server"},arcombine(cbi("shadowsocksr/server"), cbi("shadowsocksr/server-config")),_("SSR Server"), 60).leaf = true + end - entry({"admin", "services", "shadowsocksr", "status"},form("shadowsocksr/status"),_("Status"), 60).leaf = true - - entry({"admin", "services", "shadowsocksr", "check"}, call("check_status")) + entry({"admin", "services", "shadowsocksr", "status"},form("shadowsocksr/status"),_("Status"), 70).leaf = true + + entry({"admin", "services", "shadowsocksr", "check"}, call("check_status")) entry({"admin", "services", "shadowsocksr", "refresh"}, call("refresh_data")) entry({"admin", "services", "shadowsocksr", "checkport"}, call("check_port")) - entry({"admin", "services", "shadowsocksr", "log"},form("shadowsocksr/log"),_("Log"), 70).leaf = true + entry({"admin", "services", "shadowsocksr", "log"},form("shadowsocksr/log"),_("Log"), 80).leaf = true entry({"admin", "services", "shadowsocksr","run"},call("act_status")).leaf=true diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua index c27341c6c..fb9ced1b0 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua @@ -31,19 +31,4 @@ o.default = 5 -- o = s:option(Flag, "monitor_enable", translate("Enable Process Deamon")) -- o.rmempty = false --- [[ SOCKS5 Proxy ]]-- -s = m:section(TypedSection, "socks5_proxy", translate("SOCKS5 Proxy")) -s.anonymous = true - -o = s:option(ListValue, "server", translate("Server")) -o:value("nil", translate("Disable")) -for k, v in pairs(server_table) do o:value(k, v) end -o.default = "nil" -o.rmempty = false - -o = s:option(Value, "local_port", translate("Local Port")) -o.datatype = "port" -o.default = 1080 -o.rmempty = false - return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua index 4417378aa..d783d9efa 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -46,6 +46,32 @@ local encrypt_methods = { "chacha20-ietf", } +local encrypt_methods_ss = { + -- aead + "aes-128-gcm", + "aes-192-gcm", + "aes-256-gcm", + "chacha20-ietf-poly1305", + "xchacha20-ietf-poly1305", + -- stream + "table", + "rc4", + "rc4-md5", + "aes-128-cfb", + "aes-192-cfb", + "aes-256-cfb", + "aes-128-ctr", + "aes-192-ctr", + "aes-256-ctr", + "bf-cfb", + "camellia-128-cfb", + "camellia-192-cfb", + "camellia-256-cfb", + "salsa20", + "chacha20", + "chacha20-ietf", +} + local protocol = { "origin", "verify_deflate", @@ -68,6 +94,14 @@ obfs = { "tls1.2_ticket_auth", } +local securitys = { + "auto", + "none", + "aes-128-gcm", + "chacha20-poly1305" +} + + m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers") if m.uci:get(shadowsocksr, sid) ~= "servers" then @@ -84,11 +118,22 @@ o = s:option(DummyValue,"ssr_url","SSR URL") o.rawhtml = true o.template = "shadowsocksr/ssrurl" o.value =sid +o:depends("type", "ssr") o = s:option(Value, "alias", translate("Alias(optional)")) --- o = s:option(Flag, "auth_enable", translate("Onetime Authentication")) --- o.rmempty = false +if nixio.fs.access("/usr/bin/v2ray") then +o = s:option(ListValue, "type", translate("Server Node Type")) +o:value("ssr", translate("ShadowsocksR")) +o:value("ss", translate("Shadowsocks New Vesion")) +o:value("v2ray", translate("V2Ray")) +o.description = translate("Using incorrect encryption mothod may causes service fail to start") +else +o = s:option(ListValue, "type", translate("Server Node Type")) +o:value("ssr", translate("ShadowsocksR")) +o:value("ss", translate("Shadowsocks New Vesion")) +o.description = translate("Using incorrect encryption mothod may causes service fail to start") +end o = s:option(Value, "server", translate("Server Address")) o.datatype = "host" @@ -110,21 +155,159 @@ o.rmempty = false o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) for _, v in ipairs(encrypt_methods) do o:value(v) end o.rmempty = false +o:depends("type", "ssr") + +o = s:option(ListValue, "encrypt_method_ss", translate("Encrypt Method")) +for _, v in ipairs(encrypt_methods_ss) do o:value(v) end +o.rmempty = false +o:depends("type", "ss") o = s:option(ListValue, "protocol", translate("Protocol")) for _, v in ipairs(protocol) do o:value(v) end o.rmempty = false +o:depends("type", "ssr") o = s:option(Value, "protocol_param", translate("Protocol param(optional)")) +o:depends("type", "ssr") o = s:option(ListValue, "obfs", translate("Obfs")) for _, v in ipairs(obfs) do o:value(v) end o.rmempty = false +o:depends("type", "ssr") o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) +o:depends("type", "ssr") --- o = s:option(Flag, "fast_open", translate("TCP Fast Open")) --- o.rmempty = false +-- AlterId +o = s:option(Value, "alter_id", translate("AlterId")) +o.datatype = "port" +o.default = 16 +o.rmempty = false +o:depends("type", "v2ray") + +-- VmessId +o = s:option(Value, "vmess_id", translate("VmessId")) +o.rmempty = false +o:depends("type", "v2ray") + +-- 加密方式 +o = s:option(ListValue, "security", translate("Encrypt Method")) +for _, v in ipairs(securitys) do o:value(v, v:upper()) end +o.rmempty = false +o:depends("type", "v2ray") + +-- 传输协议 +o = s:option(ListValue, "transport", translate("Transport")) +o:value("tcp", "TCP") +o:value("kcp", "mKCP") +o:value("ws", "WebSocket") +o:value("h2", "HTTP/2") +o.rmempty = false +o:depends("type", "v2ray") + +-- [[ TCP部分 ]]-- + +-- TCP伪装 +o = s:option(ListValue, "tcp_guise", translate("Camouflage Type")) +o:depends("transport", "tcp") +o:value("none", translate("None")) +o:value("http", "HTTP") +o.rmempty = true + +-- HTTP域名 +o = s:option(DynamicList, "http_host", translate("HTTP Host")) +o:depends("tcp_guise", "http") +o.rmempty = true + +-- HTTP路径 +o = s:option(DynamicList, "http_path", translate("HTTP Path")) +o:depends("tcp_guise", "http") +o.rmempty = true + +-- [[ WS部分 ]]-- + +-- WS域名 +o = s:option(Value, "ws_host", translate("WebSocket Host")) +o:depends("transport", "ws") +o.rmempty = true + +-- WS路径 +o = s:option(Value, "ws_path", translate("WebSocket Path")) +o:depends("transport", "ws") +o.rmempty = true + +-- [[ H2部分 ]]-- + +-- H2域名 +o = s:option(DynamicList, "h2_host", translate("HTTP/2 Host")) +o:depends("transport", "h2") +o.rmempty = true + +-- H2路径 +o = s:option(Value, "h2_path", translate("HTTP/2 Path")) +o:depends("transport", "h2") +o.rmempty = true + +-- [[ mKCP部分 ]]-- + +o = s:option(ListValue, "kcp_guise", translate("Camouflage Type")) +o:depends("transport", "kcp") +o:value("none", translate("None")) +o:value("srtp", translate("VideoCall (SRTP)")) +o:value("utp", translate("BitTorrent (uTP)")) +o:value("wechat-video", translate("WechatVideo")) +o:value("dtls", "DTLS 1.2") +o:value("wireguard", "WireGuard") +o.rmempty = true + +o = s:option(Value, "mtu", translate("MTU")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o.default = 1350 +o.rmempty = true + +o = s:option(Value, "tti", translate("TTI")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o.default = 50 +o.rmempty = true + +o = s:option(Value, "uplink_capacity", translate("Uplink Capacity")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o.default = 5 +o.rmempty = true + +o = s:option(Value, "downlink_capacity", translate("Downlink Capacity")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o.default = 20 +o.rmempty = true + +o = s:option(Value, "read_buffer_size", translate("Read Buffer Size")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o.default = 2 +o.rmempty = true + +o = s:option(Value, "write_buffer_size", translate("Write Buffer Size")) +o.datatype = "uinteger" +o:depends("transport", "kcp") +o.default = 2 +o.rmempty = true + +o = s:option(Flag, "congestion", translate("Congestion")) +o:depends("transport", "kcp") +o.rmempty = true + +-- [[ TLS ]]-- +o = s:option(Flag, "tls", translate("TLS")) +o.rmempty = false +o:depends("type", "v2ray") + +o = s:option(Flag, "fast_open", translate("TCP Fast Open")) +o.rmempty = false +o.default = "0" o = s:option(Flag, "switch_enable", translate("Enable Auto Switch")) o.rmempty = false diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua index 55b871193..205a8b692 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua @@ -42,20 +42,10 @@ o:value("router", translate("IP Route Mode")) o.default = gfw o = s:option(ListValue, "pdnsd_enable", translate("Resolve Dns Mode")) -o:depends("run_mode", "gfw") o:value("1", translate("Use Pdnsd tcp query and cache")) -o:value("0", translate("Use SSR DNS Tunnel")) +o:value("0", translate("Use Local DNS Service listen port 5335")) o.default = 1 -o = s:option(Flag, "tunnel_enable", translate("Enable Tunnel(DNS)")) -o:depends("run_mode", "router") -o.default = 1 - -o = s:option(Value, "tunnel_port", translate("Tunnel Port")) -o:depends("run_mode", "router") -o.datatype = "port" -o.default = 5300 - o = s:option(ListValue, "tunnel_forward", translate("Anti-pollution DNS Server")) o:value("8.8.4.4:53", translate("Google Public DNS (8.8.4.4)")) o:value("8.8.8.8:53", translate("Google Public DNS (8.8.8.8)")) @@ -68,5 +58,6 @@ o:value("4.2.2.2:53", translate("Level 3 Public DNS (4.2.2.2)")) o:value("4.2.2.3:53", translate("Level 3 Public DNS (4.2.2.3)")) o:value("4.2.2.4:53", translate("Level 3 Public DNS (4.2.2.4)")) o:value("1.1.1.1:53", translate("Cloudflare DNS (1.1.1.1)")) +o:depends("pdnsd_enable", "1") return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua new file mode 100644 index 000000000..cf263b5db --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua @@ -0,0 +1,108 @@ +-- Copyright (C) 2017 yushi studio +-- Licensed to the public under the GNU General Public License v3. + +local m, s, o +local shadowsocksr = "shadowsocksr" +local sid = arg[1] + +local encrypt_methods = { + "table", + "rc4", + "rc4-md5", + "rc4-md5-6", + "aes-128-cfb", + "aes-192-cfb", + "aes-256-cfb", + "aes-128-ctr", + "aes-192-ctr", + "aes-256-ctr", + "bf-cfb", + "camellia-128-cfb", + "camellia-192-cfb", + "camellia-256-cfb", + "cast5-cfb", + "des-cfb", + "idea-cfb", + "rc2-cfb", + "seed-cfb", + "salsa20", + "chacha20", + "chacha20-ietf", +} + +local protocol = { + "origin", + "verify_deflate", + "auth_sha1_v4", + "auth_aes128_sha1", + "auth_aes128_md5", + "auth_chain_a", +} + +obfs = { + "plain", + "http_simple", + "http_post", + "random_head", + "tls1.2_ticket_auth", + "tls1.2_ticket_fastauth", +} + +m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) + +m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/server") +if m.uci:get(shadowsocksr, sid) ~= "server_config" then + luci.http.redirect(m.redirect) + return +end + + + + +-- [[ Server Setting ]]-- +s = m:section(NamedSection, sid, "server_config") +s.anonymous = true +s.addremove = false + +o = s:option(Flag, "enable", translate("Enable")) +o.default = 1 +o.rmempty = false + +o = s:option(Value, "server", translate("Server Address")) +o.datatype = "ipaddr" +o.default = "0.0.0.0" +o.rmempty = false + +o = s:option(Value, "server_port", translate("Server Port")) +o.datatype = "port" +o.default = 8388 +o.rmempty = false + +o = s:option(Value, "timeout", translate("Connection Timeout")) +o.datatype = "uinteger" +o.default = 60 +o.rmempty = false + +o = s:option(Value, "password", translate("Password")) +o.password = true +o.rmempty = false + +o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) +for _, v in ipairs(encrypt_methods) do o:value(v) end +o.rmempty = false + +o = s:option(ListValue, "protocol", translate("Protocol")) +for _, v in ipairs(protocol) do o:value(v) end +o.rmempty = false + + +o = s:option(ListValue, "obfs", translate("Obfs")) +for _, v in ipairs(obfs) do o:value(v) end +o.rmempty = false + +o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) + +o = s:option(Flag, "fast_open", translate("TCP Fast Open")) +o.rmempty = false + +return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua new file mode 100644 index 000000000..2157a7537 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua @@ -0,0 +1,122 @@ +-- Copyright (C) 2017 yushi studio +-- Licensed to the public under the GNU General Public License v3. + +local m, sec, o +local shadowsocksr = "shadowsocksr" +local uci = luci.model.uci.cursor() +local ipkg = require("luci.model.ipkg") + + +m = Map(shadowsocksr, translate("ShadowSocksR Server")) + +local encrypt_methods = { + "table", + "rc4", + "rc4-md5", + "rc4-md5-6", + "aes-128-cfb", + "aes-192-cfb", + "aes-256-cfb", + "aes-128-ctr", + "aes-192-ctr", + "aes-256-ctr", + "bf-cfb", + "camellia-128-cfb", + "camellia-192-cfb", + "camellia-256-cfb", + "cast5-cfb", + "des-cfb", + "idea-cfb", + "rc2-cfb", + "seed-cfb", + "salsa20", + "chacha20", + "chacha20-ietf", +} + +local protocol = { + "origin", + "verify_deflate", + "auth_sha1_v4", + "auth_aes128_sha1", + "auth_aes128_md5", + "auth_chain_a", +} + +obfs = { + "plain", + "http_simple", + "http_post", + "random_head", + "tls1.2_ticket_auth", + "tls1.2_ticket_fastauth", +} + + + + + +-- [[ Global Setting ]]-- +sec = m:section(TypedSection, "server_global", translate("Global Setting")) +sec.anonymous = true + + + +o = sec:option(Flag, "enable_server", translate("Enable Server")) +o.rmempty = false + +-- [[ Server Setting ]]-- +sec = m:section(TypedSection, "server_config", translate("Server Setting")) +sec.anonymous = true +sec.addremove = true +sec.sortable = true +sec.template = "cbi/tblsection" +sec.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/server/%s") +function sec.create(...) + local sid = TypedSection.create(...) + if sid then + luci.http.redirect(sec.extedit % sid) + return + end +end + +o = sec:option(Flag, "enable", translate("Enable")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("0") +end +o.rmempty = false + +o = sec:option(DummyValue, "server", translate("Server Address")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "?" +end + +o = sec:option(DummyValue, "server_port", translate("Server Port")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "?" +end + + +o = sec:option(DummyValue, "encrypt_method", translate("Encrypt Method")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v and v:upper() or "?" +end + +o = sec:option(DummyValue, "protocol", translate("Protocol")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "?" +end + + + +o = sec:option(DummyValue, "obfs", translate("Obfs")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "?" +end + + + + + +return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua index b6d6814ee..181bb3a23 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua @@ -66,6 +66,11 @@ function s.create(...) end end +o = s:option(DummyValue, "type", translate("Type")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("") +end + o = s:option(DummyValue, "alias", translate("Alias")) function o.cfgvalue(...) return Value.cfgvalue(...) or translate("None") diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua index 7bec5acd6..0e3e2293e 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua @@ -114,16 +114,17 @@ else s.value = translate("Not Running") end -s=m:field(DummyValue,"tunnel_run",translate("DNS Tunnel")) +if nixio.fs.access("/usr/bin/ssr-server") then +s=m:field(DummyValue,"server_run",translate("Global SSR Server")) s.rawhtml = true -if tunnel_run == 1 then +if server_run == 1 then s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off else s.value = translate("Not Running") end +end if nixio.fs.access("/usr/bin/ssr-kcptun") then - s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) s.rawhtml = true s.value =kcptun_version @@ -135,7 +136,6 @@ s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off else s.value = translate("Not Running") end - end s=m:field(DummyValue,"google",translate("Google Connectivity")) diff --git a/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po b/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po index abcf3ec58..a2fc72d4f 100644 --- a/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po +++ b/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po @@ -455,3 +455,15 @@ msgstr "服务器节点故障自动切换设置" msgid "Delete all severs" msgstr "删除所有服务器" +msgid "Severs Nodes" +msgstr "服务器节点" + +msgid "Use Local DNS Service listen port 5335" +msgstr "使用本机端口为5335的DNS服务" + +msgid "Server Node Type" +msgstr "服务器节点类型" + +msgid "Using incorrect encryption mothod may causes service fail to start" +msgstr "输入不正确的参数组合可能会导致服务无法启动" + diff --git a/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr index 7eb822313..2a8da1b92 100755 --- a/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr +++ b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -87,6 +87,21 @@ gen_config_file() { else fastopen="false"; fi +local stype=$(uci_get_by_name $1 type) +if [ "$stype" == "ss" ] ;then + cat <<-EOF >$config_file + { + "server": "$hostip", + "server_port": $(uci_get_by_name $1 server_port), + "local_address": "0.0.0.0", + "local_port": $(uci_get_by_name $1 local_port), + "password": "$(uci_get_by_name $1 password)", + "timeout": $(uci_get_by_name $1 timeout 60), + "method": "$(uci_get_by_name $1 encrypt_method_ss)", + "fast_open": $fastopen + } +EOF + elif [ "$stype" == "ssr" ] ;then cat <<-EOF >$config_file { @@ -104,6 +119,7 @@ gen_config_file() { "fast_open": $fastopen } EOF +fi } get_arg_out() { @@ -232,26 +248,6 @@ EOF /usr/sbin/pdnsd -c /var/etc/pdnsd.conf -d } -start_tunnel() { - local tunnel_config_file=$CONFIG_FILE - if [ "$ARG_UDP" = "-U" ]; then - tunnel_config_file=$CONFIG_UDP_FILE - fi - - local local_dns_port=$(uci_get_by_type global tunnel_port) - if [ "$run_mode" = "gfw" ] ;then - local_dns_port=5335 - fi - - /usr/bin/ssr-tunnel \ - -c $tunnel_config_file $ARG_OTA -u \ - -l $local_dns_port \ - -b $(uci_get_by_type global tunnel_address 0.0.0.0) \ - -L $(uci_get_by_type global tunnel_forward 8.8.4.4:53) \ - -f /var/run/ssr-tunnel.pid - tunnel_enable=1 - return $? -} start_redir() { case "$(uci_get_by_name $GLOBAL_SERVER auth_enable)" in @@ -278,16 +274,32 @@ start_redir() { fi gen_config_file $GLOBAL_SERVER 0 + local stype=$(uci_get_by_name $GLOBAL_SERVER type) + if [ "$stype" == "ss" ] ;then + sscmd="/usr/bin/ss-redir" + elif [ "$stype" == "ssr" ] ;then + sscmd="/usr/bin/ssr-redir" + elif [ "$stype" == "v2ray" ] ;then + sscmd="/usr/bin/v2ray" + fi + + local utype=$(uci_get_by_name $UDP_RELAY_SERVER type) + if [ "$utype" == "ss" ] ;then + ucmd="/usr/bin/ss-redir" + elif [ "$utype" == "ssr" ] ;then + ucmd="/usr/bin/ssr-redir" + elif [ "$utype" == "v2ray" ] ;then + ucmd="/usr/bin/v2ray" + fi redir_tcp=1 local last_config_file=$CONFIG_FILE local pid_file="/var/run/ssr-retcp.pid" - - if [ "$ARG_UDP" = "-U" ]; then - /usr/bin/ssr-redir \ + $sscmd \ -c $CONFIG_FILE $ARG_OTA \ -f /var/run/ssr-retcp.pid - + + if [ "$ARG_UDP" = "-U" ]; then case "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable)" in 1|on|true|yes|enabled) ARG_OTA="-A";; *) ARG_OTA="";; @@ -296,27 +308,21 @@ start_redir() { last_config_file=$CONFIG_UDP_FILE pid_file="/var/run/ssr-reudp.pid" redir_udp=1 - fi - - /usr/bin/ssr-redir \ + $ucmd \ -c $last_config_file $ARG_OTA $ARG_UDP \ -f $pid_file + fi #deal with dns - if [ "$run_mode" = "gfw" ] ;then - if [ "$(uci_get_by_type global pdnsd_enable)" = "0" ] ;then - start_tunnel - fi - - if [ "$(uci_get_by_type global pdnsd_enable)" = "1" ] ;then - local dnsstr="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)" - local dnsserver=`echo "$dnsstr"|awk -F ':' '{print $1}'` - local dnsport=`echo "$dnsstr"|awk -F ':' '{print $2}'` - ipset add gfwlist $dnsserver 2>/dev/null - start_pdnsd $dnsserver $dnsport - pdnsd_enable_flag=1 - fi - fi + + if [ "$(uci_get_by_type global pdnsd_enable)" = "1" ] ;then + local dnsstr="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)" + local dnsserver=`echo "$dnsstr"|awk -F ':' '{print $1}'` + local dnsport=`echo "$dnsstr"|awk -F ':' '{print $2}'` + ipset add gfwlist $dnsserver 2>/dev/null + start_pdnsd $dnsserver $dnsport + pdnsd_enable_flag=1 + fi if [ "$(uci_get_by_type global enable_switch)" = "1" ] ;then if [ "$(uci_get_by_name $GLOBAL_SERVER switch_enable)" = "1" ] ;then @@ -432,13 +438,7 @@ start() { if rules ;then start_redir - if ! [ "$run_mode" = "gfw" ] ;then - case "$(uci_get_by_type global tunnel_enable)" in - 1|on|true|yes|enabled) - start_tunnel - ;; - esac - else + if ! [ "$run_mode" = "oversea" ] ;then mkdir -p /tmp/dnsmasq.d cat > /tmp/dnsmasq.d/dnsmasq-ssr.conf </dev/null 2>&1 fi + killall -q -9 ss-redir killall -q -9 ssr-redir - killall -q -9 ssr-tunnel killall -q -9 ssr-server killall -q -9 ssr-kcptun killall -q -9 ssr-local diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.sh b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.sh index aa969f48d..afa4c3188 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.sh +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.sh @@ -13,6 +13,7 @@ Server_Update() { ${uci_set}alias="[$ssr_group] $ssr_remarks" ${uci_set}auth_enable="0" ${uci_set}switch_enable="1" + ${uci_set}type="ssr" ${uci_set}server="$ssr_host" ${uci_set}server_port="$ssr_port" ${uci_set}local_port="1234" diff --git a/package/lean/shadowsocksr-libev/Makefile b/package/lean/shadowsocksr-libev/Makefile index c909ce9d5..602083fd8 100644 --- a/package/lean/shadowsocksr-libev/Makefile +++ b/package/lean/shadowsocksr-libev/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=shadowsocksr-libev PKG_VERSION:=2.5.6 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz @@ -46,8 +46,6 @@ endef define Package/shadowsocksr-libev-alt/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-redir $(1)/usr/bin/ssr-redir - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-local $(1)/usr/bin/ssr-local - $(LN) ssr-local $(1)/usr/bin/ssr-tunnel $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/ss-check $(1)/usr/bin/ssr-check endef