add ss node support ins luci ssr plus

This commit is contained in:
coolsnowwolf 2018-11-10 10:47:58 +08:00
parent 8be56849a9
commit 01d511c6ba
13 changed files with 502 additions and 93 deletions

View File

@ -6,10 +6,10 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for SSR Plus 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 LUCI_PKGARCH:=all
PKG_VERSION:=1 PKG_VERSION:=1
PKG_RELEASE:=31 PKG_RELEASE:=35
include $(TOPDIR)/feeds/luci/luci.mk include $(TOPDIR)/feeds/luci/luci.mk

View File

@ -13,7 +13,7 @@ function index()
entry({"admin", "services", "shadowsocksr", "client"},cbi("shadowsocksr/client"),_("SSR Client"), 10).leaf = true 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", "control"},cbi("shadowsocksr/control"),_("Access Control"), 30).leaf = true
@ -21,13 +21,17 @@ function index()
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
entry({"admin", "services", "shadowsocksr", "status"},form("shadowsocksr/status"),_("Status"), 60).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"), 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"))
entry({"admin", "services", "shadowsocksr", "checkport"}, call("check_port")) 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 entry({"admin", "services", "shadowsocksr","run"},call("act_status")).leaf=true

View File

@ -31,19 +31,4 @@ o.default = 5
-- o = s:option(Flag, "monitor_enable", translate("Enable Process Deamon")) -- o = s:option(Flag, "monitor_enable", translate("Enable Process Deamon"))
-- o.rmempty = false -- 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 return m

View File

@ -46,6 +46,32 @@ local encrypt_methods = {
"chacha20-ietf", "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 = { local protocol = {
"origin", "origin",
"verify_deflate", "verify_deflate",
@ -68,6 +94,14 @@ obfs = {
"tls1.2_ticket_auth", "tls1.2_ticket_auth",
} }
local securitys = {
"auto",
"none",
"aes-128-gcm",
"chacha20-poly1305"
}
m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) m = Map(shadowsocksr, translate("Edit ShadowSocksR Server"))
m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers") m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers")
if m.uci:get(shadowsocksr, sid) ~= "servers" then if m.uci:get(shadowsocksr, sid) ~= "servers" then
@ -84,11 +118,22 @@ o = s:option(DummyValue,"ssr_url","SSR URL")
o.rawhtml = true o.rawhtml = true
o.template = "shadowsocksr/ssrurl" o.template = "shadowsocksr/ssrurl"
o.value =sid o.value =sid
o:depends("type", "ssr")
o = s:option(Value, "alias", translate("Alias(optional)")) o = s:option(Value, "alias", translate("Alias(optional)"))
-- o = s:option(Flag, "auth_enable", translate("Onetime Authentication")) if nixio.fs.access("/usr/bin/v2ray") then
-- o.rmempty = false 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 = s:option(Value, "server", translate("Server Address"))
o.datatype = "host" o.datatype = "host"
@ -110,21 +155,159 @@ 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, "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")) 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(Value, "protocol_param", translate("Protocol param(optional)")) o = s:option(Value, "protocol_param", translate("Protocol param(optional)"))
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")) -- AlterId
-- o.rmempty = false 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 = s:option(Flag, "switch_enable", translate("Enable Auto Switch"))
o.rmempty = false o.rmempty = false

View File

@ -42,20 +42,10 @@ o:value("router", translate("IP Route Mode"))
o.default = gfw o.default = gfw
o = s:option(ListValue, "pdnsd_enable", translate("Resolve Dns Mode")) 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("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.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 = 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.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)")) 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.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("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:value("1.1.1.1:53", translate("Cloudflare DNS (1.1.1.1)"))
o:depends("pdnsd_enable", "1")
return m return m

View File

@ -0,0 +1,108 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com>
-- 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

View File

@ -0,0 +1,122 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com>
-- 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

View File

@ -66,6 +66,11 @@ function s.create(...)
end end
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")) o = s:option(DummyValue, "alias", translate("Alias"))
function o.cfgvalue(...) function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None") return Value.cfgvalue(...) or translate("None")

View File

@ -114,16 +114,17 @@ else
s.value = translate("Not Running") s.value = translate("Not Running")
end 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 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 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/ssr-kcptun") then if nixio.fs.access("/usr/bin/ssr-kcptun") then
s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) s=m:field(DummyValue,"kcp_version",translate("KcpTun Version"))
s.rawhtml = true s.rawhtml = true
s.value =kcptun_version s.value =kcptun_version
@ -135,7 +136,6 @@ 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
s=m:field(DummyValue,"google",translate("Google Connectivity")) s=m:field(DummyValue,"google",translate("Google Connectivity"))

View File

@ -455,3 +455,15 @@ msgstr "服务器节点故障自动切换设置"
msgid "Delete all severs" msgid "Delete all severs"
msgstr "删除所有服务器" 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 "输入不正确的参数组合可能会导致服务无法启动"

View File

@ -87,6 +87,21 @@ gen_config_file() {
else else
fastopen="false"; fastopen="false";
fi 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 cat <<-EOF >$config_file
{ {
@ -104,6 +119,7 @@ gen_config_file() {
"fast_open": $fastopen "fast_open": $fastopen
} }
EOF EOF
fi
} }
get_arg_out() { get_arg_out() {
@ -232,26 +248,6 @@ EOF
/usr/sbin/pdnsd -c /var/etc/pdnsd.conf -d /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() { start_redir() {
case "$(uci_get_by_name $GLOBAL_SERVER auth_enable)" in case "$(uci_get_by_name $GLOBAL_SERVER auth_enable)" in
@ -278,16 +274,32 @@ start_redir() {
fi fi
gen_config_file $GLOBAL_SERVER 0 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 redir_tcp=1
local last_config_file=$CONFIG_FILE local last_config_file=$CONFIG_FILE
local pid_file="/var/run/ssr-retcp.pid" local pid_file="/var/run/ssr-retcp.pid"
$sscmd \
if [ "$ARG_UDP" = "-U" ]; then
/usr/bin/ssr-redir \
-c $CONFIG_FILE $ARG_OTA \ -c $CONFIG_FILE $ARG_OTA \
-f /var/run/ssr-retcp.pid -f /var/run/ssr-retcp.pid
if [ "$ARG_UDP" = "-U" ]; then
case "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable)" in case "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable)" in
1|on|true|yes|enabled) ARG_OTA="-A";; 1|on|true|yes|enabled) ARG_OTA="-A";;
*) ARG_OTA="";; *) ARG_OTA="";;
@ -296,17 +308,12 @@ start_redir() {
last_config_file=$CONFIG_UDP_FILE last_config_file=$CONFIG_UDP_FILE
pid_file="/var/run/ssr-reudp.pid" pid_file="/var/run/ssr-reudp.pid"
redir_udp=1 redir_udp=1
fi $ucmd \
/usr/bin/ssr-redir \
-c $last_config_file $ARG_OTA $ARG_UDP \ -c $last_config_file $ARG_OTA $ARG_UDP \
-f $pid_file -f $pid_file
fi
#deal with dns #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 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 dnsstr="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)"
@ -316,7 +323,6 @@ start_redir() {
start_pdnsd $dnsserver $dnsport start_pdnsd $dnsserver $dnsport
pdnsd_enable_flag=1 pdnsd_enable_flag=1
fi fi
fi
if [ "$(uci_get_by_type global enable_switch)" = "1" ] ;then if [ "$(uci_get_by_type global enable_switch)" = "1" ] ;then
if [ "$(uci_get_by_name $GLOBAL_SERVER switch_enable)" = "1" ] ;then if [ "$(uci_get_by_name $GLOBAL_SERVER switch_enable)" = "1" ] ;then
@ -432,13 +438,7 @@ start() {
if rules ;then if rules ;then
start_redir start_redir
if ! [ "$run_mode" = "gfw" ] ;then if ! [ "$run_mode" = "oversea" ] ;then
case "$(uci_get_by_type global tunnel_enable)" in
1|on|true|yes|enabled)
start_tunnel
;;
esac
else
mkdir -p /tmp/dnsmasq.d mkdir -p /tmp/dnsmasq.d
cat > /tmp/dnsmasq.d/dnsmasq-ssr.conf <<EOF cat > /tmp/dnsmasq.d/dnsmasq-ssr.conf <<EOF
conf-dir=/etc/dnsmasq.ssr conf-dir=/etc/dnsmasq.ssr
@ -469,8 +469,8 @@ stop() {
if [ -z "$switch_server" ] ;then if [ -z "$switch_server" ] ;then
kill -9 $(ps | grep ssr-switch | grep -v grep | awk '{print $1}') >/dev/null 2>&1 kill -9 $(ps | grep ssr-switch | grep -v grep | awk '{print $1}') >/dev/null 2>&1
fi fi
killall -q -9 ss-redir
killall -q -9 ssr-redir killall -q -9 ssr-redir
killall -q -9 ssr-tunnel
killall -q -9 ssr-server killall -q -9 ssr-server
killall -q -9 ssr-kcptun killall -q -9 ssr-kcptun
killall -q -9 ssr-local killall -q -9 ssr-local

View File

@ -13,6 +13,7 @@ Server_Update() {
${uci_set}alias="[$ssr_group] $ssr_remarks" ${uci_set}alias="[$ssr_group] $ssr_remarks"
${uci_set}auth_enable="0" ${uci_set}auth_enable="0"
${uci_set}switch_enable="1" ${uci_set}switch_enable="1"
${uci_set}type="ssr"
${uci_set}server="$ssr_host" ${uci_set}server="$ssr_host"
${uci_set}server_port="$ssr_port" ${uci_set}server_port="$ssr_port"
${uci_set}local_port="1234" ${uci_set}local_port="1234"

View File

@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=shadowsocksr-libev PKG_NAME:=shadowsocksr-libev
PKG_VERSION:=2.5.6 PKG_VERSION:=2.5.6
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
@ -46,8 +46,6 @@ endef
define Package/shadowsocksr-libev-alt/install define Package/shadowsocksr-libev-alt/install
$(INSTALL_DIR) $(1)/usr/bin $(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-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 $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/ss-check $(1)/usr/bin/ssr-check
endef endef