luci-app-ssr-plus: global socks5 server is back

This commit is contained in:
lean 2020-03-23 00:16:02 +08:00
parent c6b4cf5a32
commit 4ed0db41c4
9 changed files with 94 additions and 68 deletions

View File

@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-ssr-plus PKG_NAME:=luci-app-ssr-plus
PKG_VERSION:=172 PKG_VERSION:=173
PKG_RELEASE:=2 PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

View File

@ -12,9 +12,7 @@ function index()
entry({"admin", "services", "shadowsocksr", "servers"}, arcombine(cbi("shadowsocksr/servers", {autoapply=true}), cbi("shadowsocksr/client-config")),_("Severs Nodes"), 20).leaf = true entry({"admin", "services", "shadowsocksr", "servers"}, arcombine(cbi("shadowsocksr/servers", {autoapply=true}), 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", "control"},cbi("shadowsocksr/control"), _("Access Control"), 30).leaf = true
entry({"admin", "services", "shadowsocksr", "advanced"},cbi("shadowsocksr/advanced"),_("Advanced Settings"), 50).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 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"), 70).leaf = true entry({"admin", "services", "shadowsocksr", "status"},form("shadowsocksr/status"),_("Status"), 70).leaf = true
entry({"admin", "services", "shadowsocksr", "check"}, call("check_status")) entry({"admin", "services", "shadowsocksr", "check"}, call("check_status"))
entry({"admin", "services", "shadowsocksr", "refresh"}, call("refresh_data")) entry({"admin", "services", "shadowsocksr", "refresh"}, call("refresh_data"))

View File

@ -1,3 +1,22 @@
local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor()
local server_table = {}
uci:foreach(shadowsocksr, "servers", function(s)
if s.alias then
server_table[s[".name"]] = "[%s]:%s" %{string.upper(s.type), s.alias}
elseif s.server and s.server_port then
server_table[s[".name"]] = "[%s]:%s:%s" %{string.upper(s.type), s.server, s.server_port}
end
end)
local key_table = {}
for key,_ in pairs(server_table) do
table.insert(key_table,key)
end
table.sort(key_table)
m = Map("shadowsocksr") m = Map("shadowsocksr")
-- [[ global ]]-- -- [[ global ]]--
s = m:section(TypedSection, "global", translate("Server failsafe auto swith and custom update settings")) s = m:section(TypedSection, "global", translate("Server failsafe auto swith and custom update settings"))
@ -27,52 +46,36 @@ o:depends("enable_switch", "1")
o.default = 3 o.default = 3
o = s:option(Value, "chnroute_url", translate("Chnroute Update url")) o = s:option(Value, "chnroute_url", translate("Chnroute Update url"))
o:value("https://ispip.clang.cn/all_cn.txt", translate("https://ispip.clang.cn/all_cn.txt"))
o.default = "https://ispip.clang.cn/all_cn.txt" o.default = "https://ispip.clang.cn/all_cn.txt"
o = s:option(Value, "nfip_url", translate("nfip_url"))
o:value("https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt", translate("https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt"))
o.default = "https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt"
o.description = translate("Customize Netflix IP Url")
o = s:option(Flag, "adblock", translate("Enable adblock")) o = s:option(Flag, "adblock", translate("Enable adblock"))
o.rmempty = false o.rmempty = false
o = s:option(Value, "nfip_url", translate("nfip_url"))
o.default = "https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt"
o.description = translate("Customize Netflix IP Url")
o = s:option(Value, "adblock_url", translate("adblock_url")) o = s:option(Value, "adblock_url", translate("adblock_url"))
o:value("https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf", translate("https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf"))
o.default = "https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf" o.default = "https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf"
o:depends("adblock", "1") o:depends("adblock", "1")
o.description = translate("Support AdGuardHome and DNSMASQ format list") o.description = translate("Support AdGuardHome and DNSMASQ format list")
-- [[ SOCKS Proxy ]]-- -- [[ SOCKS5 Proxy ]]--
if nixio.fs.access("/usr/bin/microsocks") then s = m:section(TypedSection, "socks5_proxy", translate("Global SOCKS5 Proxy Server"))
s = m:section(TypedSection, "socks5_proxy", translate("SOCKS5 Proxy Server Settings"))
s.anonymous = true s.anonymous = true
o = s:option(Flag, "socks", translate("Enable SOCKS5 Proxy Server")) o = s:option(ListValue, "server", translate("Server"))
o:value("nil", translate("Disable"))
for _,key in pairs(key_table) do o:value(key,server_table[key]) end
o.default = "nil"
o.rmempty = false o.rmempty = false
o = s:option(Value, "local_port", translate("Local Port")) o = s:option(Value, "local_port", translate("Local Port"))
o.datatype = "port" o.datatype = "port"
o.default = 10800 o.default = 1080
o.rmempty = true
o:depends("socks", "1")
o = s:option(Flag, "auth_enable", translate("Enable Authentication"))
o.rmempty = false o.rmempty = false
o.default = "0"
o:depends("socks", "1")
o = s:option(Value, "username", translate("Username"))
o.default = "username"
o:depends("auth_enable", "1")
o = s:option(Value, "password", translate("Password"))
o.password = true
o.default = "password"
o:depends("auth_enable", "1")
o = s:option(Flag, "wan_enable", translate("Enable WAN Access"))
o.rmempty = true
o.default = "0"
o:depends("auth_enable", "1")
end
return m return m

View File

@ -60,6 +60,11 @@ o = s:option(Flag, "enable", translate("Enable"))
o.default = 1 o.default = 1
o.rmempty = false o.rmempty = false
o = s:option(ListValue, "type", translate("Server Type"))
o:value("ssr", translate("ShadowsocksR"))
o:value("socks5", translate("Socks5"))
o.default = "socks5"
o = s:option(Value, "server_port", translate("Server Port")) o = s:option(Value, "server_port", translate("Server Port"))
o.datatype = "port" o.datatype = "port"
o.default = 8388 o.default = 8388
@ -69,6 +74,11 @@ o = s:option(Value, "timeout", translate("Connection Timeout"))
o.datatype = "uinteger" o.datatype = "uinteger"
o.default = 60 o.default = 60
o.rmempty = false o.rmempty = false
o:depends("type", "ssr")
o = s:option(Value, "username", translate("Username"))
o.rmempty = false
o:depends("type", "socks5")
o = s:option(Value, "password", translate("Password")) o = s:option(Value, "password", translate("Password"))
o.password = true o.password = true
@ -77,19 +87,24 @@ o.rmempty = false
o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) o = s:option(ListValue, "encrypt_method", translate("Encrypt Method"))
for _, v in ipairs(encrypt_methods) do o:value(v) end for _, v in ipairs(encrypt_methods) do o:value(v) end
o.rmempty = false o.rmempty = false
o:depends("type", "ssr")
o = s:option(ListValue, "protocol", translate("Protocol")) o = s:option(ListValue, "protocol", translate("Protocol"))
for _, v in ipairs(protocol) do o:value(v) end for _, v in ipairs(protocol) do o:value(v) end
o.rmempty = false o.rmempty = false
o:depends("type", "ssr")
o = s:option(ListValue, "obfs", translate("Obfs")) o = s:option(ListValue, "obfs", translate("Obfs"))
for _, v in ipairs(obfs) do o:value(v) end for _, v in ipairs(obfs) do o:value(v) end
o.rmempty = false o.rmempty = false
o:depends("type", "ssr")
o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) 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 = s:option(Flag, "fast_open", translate("TCP Fast Open"))
o.rmempty = false o.rmempty = false
o:depends("type", "ssr")
return m return m

View File

@ -6,7 +6,7 @@ local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
m = Map(shadowsocksr, translate("ShadowSocksR Server")) m = Map(shadowsocksr)
local encrypt_methods = { local encrypt_methods = {
"table", "table",
@ -78,25 +78,35 @@ function o.cfgvalue(...)
end end
o.rmempty = false o.rmempty = false
o = sec:option(DummyValue, "type", translate("Server Type"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or "ssr"
end
o = sec:option(DummyValue, "server_port", translate("Server Port")) o = sec:option(DummyValue, "server_port", translate("Server Port"))
function o.cfgvalue(...) function o.cfgvalue(...)
return Value.cfgvalue(...) or "?" return Value.cfgvalue(...) or "-"
end
o = sec:option(DummyValue, "username", translate("Username"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or "-"
end end
o = sec:option(DummyValue, "encrypt_method", translate("Encrypt Method")) o = sec:option(DummyValue, "encrypt_method", translate("Encrypt Method"))
function o.cfgvalue(...) function o.cfgvalue(...)
local v = Value.cfgvalue(...) local v = Value.cfgvalue(...)
return v and v:upper() or "?" return v and v:upper() or "-"
end end
o = sec:option(DummyValue, "protocol", translate("Protocol")) o = sec:option(DummyValue, "protocol", translate("Protocol"))
function o.cfgvalue(...) function o.cfgvalue(...)
return Value.cfgvalue(...) or "?" return Value.cfgvalue(...) or "-"
end end
o = sec:option(DummyValue, "obfs", translate("Obfs")) o = sec:option(DummyValue, "obfs", translate("Obfs"))
function o.cfgvalue(...) function o.cfgvalue(...)
return Value.cfgvalue(...) or "?" return Value.cfgvalue(...) or "-"
end end
return m return m

View File

@ -67,7 +67,7 @@ if luci.sys.call("busybox ps -w | grep ssr-retcp | grep -v grep >/dev/null") ==
redir_run=1 redir_run=1
end end
if luci.sys.call("busybox ps -w | grep ssr-socks | grep -v grep >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-local | grep -v grep >/dev/null") == 0 then
sock5_run=1 sock5_run=1
end end
@ -75,7 +75,7 @@ if luci.sys.call("pidof kcptun-client >/dev/null") == 0 then
kcptun_run=1 kcptun_run=1
end end
if luci.sys.call("pidof ssr-server >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-server | grep -v grep >/dev/null") == 0 then
server_run=1 server_run=1
end end
@ -117,27 +117,21 @@ s.value = translate("Not Running")
end end
end end
if uci:get_first(shadowsocksr, 'socks5_proxy', 'socks', '0') == '1' then s=m:field(DummyValue,"sock5_run",translate("Global SOCKS5 Proxy Server"))
if nixio.fs.access("/usr/bin/microsocks") then
s=m:field(DummyValue,"sock5_run",translate("SOCKS5 Proxy Server"))
s.rawhtml = true s.rawhtml = true
if sock5_run == 1 then if sock5_run == 1 then
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
end
end
if nixio.fs.access("/usr/bin/ssr-server") then s=m:field(DummyValue,"server_run",translate("Local Servers"))
s=m:field(DummyValue,"server_run",translate("Global SSR Server"))
s.rawhtml = true s.rawhtml = true
if server_run == 1 then if server_run == 1 then
s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off
else else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
end
if nixio.fs.access("/usr/bin/kcptun-client") then if nixio.fs.access("/usr/bin/kcptun-client") then
s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) s=m:field(DummyValue,"kcp_version",translate("KcpTun Version"))

View File

@ -656,7 +656,16 @@ msgid "Netflix IP List"
msgstr "Netflix 分流IP列表" msgstr "Netflix 分流IP列表"
msgid "External Proxy Mode" msgid "External Proxy Mode"
msgstr "分流服务器套娃模式" msgstr "分流服务器(前置)代理"
msgid "Forward Netflix Proxy through Main Proxy" msgid "Forward Netflix Proxy through Main Proxy"
msgstr "分流服务器流量通过主服务节点(前置)中转代理转发" msgstr "分流服务器流量通过主服务节点中转代理转发"
msgid "Server Type"
msgstr "服务端类型"
msgid "Local Servers"
msgstr "本机服务端"
msgid "Global SOCKS5 Proxy Server"
msgstr "SOCKS5 代理服务端(全局)"

View File

@ -533,8 +533,12 @@ start_service() {
iptables -t filter -I INPUT -j SSR-SERVER-RULE iptables -t filter -I INPUT -j SSR-SERVER-RULE
fi fi
fi fi
if [ "$(uci_get_by_name $1 type ssr)" == "ssr" ]; then
gen_service_file $1 /var/etc/${NAME}_$server_count.json gen_service_file $1 /var/etc/${NAME}_$server_count.json
/usr/bin/ssr-server -c /var/etc/${NAME}_$server_count.json -u -f /var/run/ssr-server$server_count.pid >/dev/null 2>&1 /usr/bin/ssr-server -c /var/etc/${NAME}_$server_count.json -u -f /var/run/ssr-server$server_count.pid >/dev/null 2>&1
else
microsocks -i :: -p $(uci_get_by_name $1 server_port) -1 -u $(uci_get_by_name $1 username) -P $(uci_get_by_name $1 password) ssr-server$server_count >/dev/null 2>&1 &
fi
iptables -t filter -A SSR-SERVER-RULE -p tcp --dport $(uci_get_by_name $1 server_port) -j ACCEPT iptables -t filter -A SSR-SERVER-RULE -p tcp --dport $(uci_get_by_name $1 server_port) -j ACCEPT
iptables -t filter -A SSR-SERVER-RULE -p udp --dport $(uci_get_by_name $1 server_port) -j ACCEPT iptables -t filter -A SSR-SERVER-RULE -p udp --dport $(uci_get_by_name $1 server_port) -j ACCEPT
return 0 return 0
@ -706,7 +710,7 @@ stop() {
killall -q -9 v2ray killall -q -9 v2ray
killall -q -9 trojan killall -q -9 trojan
killall -q -9 ipt2socks killall -q -9 ipt2socks
killall -q -9 ssr-server kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1
killall -q -9 ssr-local killall -q -9 ssr-local
killall -q -9 ss-local killall -q -9 ss-local
killall -q -9 kcptun-client killall -q -9 kcptun-client

View File

@ -80,10 +80,8 @@ while [ "1" == "1" ]; do #死循环
icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l) icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l)
if [ "$icount" -lt "$server_process_count" ]; then #如果进程挂掉就重启它 if [ "$icount" -lt "$server_process_count" ]; then #如果进程挂掉就重启它
logger -t "$NAME" "ssr server error.restart!" logger -t "$NAME" "ssr server error.restart!"
killall -q -9 ssr-server kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1
for i in $(seq $server_process_count); do /etc/init.d/shadowsocksr restart
/usr/bin/ssr-server -c /var/etc/shadowsocksr_$i.json -u -f /var/run/ssr-server$i.pid
done
fi fi
fi fi
#kcptun #kcptun
@ -97,16 +95,11 @@ while [ "1" == "1" ]; do #死循环
fi fi
#localsocks #localsocks
if [ "$local_process" -gt 0 ]; then if [ "$local_process" -gt 0 ]; then
icount=$(busybox ps -w | grep ssr-socks | grep -v grep | wc -l) icount=$(busybox ps -w | grep ssr-local | grep -v grep | wc -l)
if [ "$icount" -lt "$local_process" ]; then #如果进程挂掉就重启它 if [ "$icount" -lt "$local_process" ]; then #如果进程挂掉就重启它
logger -t "$NAME" "microsocks error.restart!" logger -t "$NAME" "global socks server error.restart!"
kill -9 $(busybox ps -w | grep ssr-socks | grep -v grep | awk '{print $1}') >/dev/null 2>&1 kill -9 $(busybox ps -w | grep ssr-local | grep -v grep | awk '{print $1}') >/dev/null 2>&1
auth_enable=$(uci_get_by_type socks5_proxy auth_enable 0) /etc/init.d/shadowsocksr restart
if [ "$auth_enable" == "1" ]; then
microsocks -i 0.0.0.0 -p $(uci_get_by_type socks5_proxy local_port 1080) -1 -u $(uci_get_by_type socks5_proxy username) -P $(uci_get_by_type socks5_proxy password) ssr-socks >/dev/null 2>&1 &
else
microsocks -i 0.0.0.0 -p $(uci_get_by_type socks5_proxy local_port 1080) ssr-socks >/dev/null 2>&1 &
fi
fi fi
fi fi
#pdnsd #pdnsd