diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile index 697d594..ce23c14 100644 --- a/luci-app-ssr-plus/Makefile +++ b/luci-app-ssr-plus/Makefile @@ -29,6 +29,7 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Simple_Obfs \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_V2ray_Plugin \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Xray_Plugin \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan @@ -62,6 +63,7 @@ LUCI_DEPENDS:= \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server:shadowsocks-rust-ssserver \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Simple_Obfs:simple-obfs \ +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_V2ray_Plugin:v2ray-plugin \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Xray_Plugin:xray-plugin \ +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 \ @@ -73,7 +75,7 @@ select PACKAGE_luci-lib-ipkg if PACKAGE_$(PKG_NAME) choice prompt "Shadowsocks Client Selection" - default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client if aarch64 || x86_64 + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client if aarch64||arm||i386||mips||mipsel||x86_64 default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Client @@ -90,8 +92,8 @@ endchoice choice prompt "Shadowsocks Server Selection" - default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server if aarch64 - default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server if i386||x86_64||arm + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server if aarch64||arm||i386||mips||mipsel||x86_64 + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Server config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Server @@ -139,7 +141,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_DNSPROXY config PACKAGE_$(PKG_NAME)_INCLUDE_MosDNS bool "Include MosDNS" - default y if aarch64||arm||i386||x86_64 + default n config PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria bool "Include Hysteria" @@ -187,6 +189,10 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_V2ray_Plugin bool "Include Shadowsocks V2ray Plugin" default n +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Xray_Plugin + bool "Include Shadowsocks Xray Plugin" + default n + config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client bool "Include ShadowsocksR Libev Client" default y diff --git a/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua b/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua index 4ba5d06..636566c 100644 --- a/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua +++ b/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua @@ -7,7 +7,7 @@ function index() call("act_reset") end local page - page = entry({"admin", "services", "shadowsocksr"}, alias("admin", "services", "shadowsocksr", "client"), _("ShadowSocksR Plus+"), 10) + page = entry({"admin", "services", "shadowsocksr"}, alias("admin", "services", "shadowsocksr", "client"), _("ShadowSocksR Plus+"), 1) page.dependent = true page.acl_depends = { "luci-app-ssr-plus" } entry({"admin", "services", "shadowsocksr", "client"}, cbi("shadowsocksr/client"), _("SSR Client"), 10).leaf = true diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua index 0bf9474..c6194fa 100644 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua @@ -27,7 +27,7 @@ local function is_finded(e) return luci.sys.exec(string.format('type -t -p "%s" 2>/dev/null', e)) ~= "" end -m = Map("shadowsocksr", translate("ShadowSocksR Plus+ Settings"), translate("

Support SS/SSR/V2RAY/XRAY/TROJAN/NAIVEPROXY/SOCKS5/TUN etc.

")) +m = Map("shadowsocksr", translate("ShadowSocksR Plus+ Settings")) m:section(SimpleSection).template = "shadowsocksr/status" local server_table = {} diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm index 4a16adc..5f6a673 100644 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm @@ -13,9 +13,9 @@ if (s) { if (rv.ret=="0") - s.innerHTML =""+"<%:Connect OK%>"+""; + s.innerHTML =""+"<%:Connect OK%>"+""; else - s.innerHTML =""+"<%:Connect Error%>"+""; + s.innerHTML =""+"<%:Connect Error%>"+""; } btn.disabled = false; btn.value = '<%:Check Connect%>'; diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm index ea4113d..da89fd5 100644 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm @@ -15,13 +15,13 @@ switch (rv.ret) { case 0: - s.innerHTML =""+"<%:Refresh OK!%> "+"<%:Total Records:%>"+rv.retcount+""; + s.innerHTML =""+"<%:Refresh OK!%> "+"<%:Total Records:%>"+rv.retcount+""; break; case 1: - s.innerHTML =""+"<%:No new data!%> "+""; + s.innerHTML =""+"<%:No new data!%> "+""; break; default: - s.innerHTML =""+"<%:Refresh Error!%> "+""; + s.innerHTML =""+"<%:Refresh Error!%> "+""; break; } } diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm index ff0c486..1882ac5 100644 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm @@ -7,7 +7,7 @@ return false; } if (reset != "reset") { - s.innerHTML = "<%:The content entered is incorrect!%>"; + s.innerHTML = "<%:The content entered is incorrect!%>"; return false; } btn.disabled = true; @@ -15,7 +15,7 @@ murl=dataname; XHR.get('<%=luci.dispatcher.build_url("admin", "services", "shadowsocksr","reset")%>', { set:murl }, function(x,rv) { btn.value = '<%:Reset complete%>'; - s.innerHTML = "<%:Reset complete%>"; + s.innerHTML = "<%:Reset complete%>"; }); return false; } diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm index 2ba1be9..ed7148f 100644 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm @@ -18,7 +18,7 @@ const wsPath = wsPaths[index]; const tls = tlss[index]; if (!dom) res(); - port.innerHTML = 'connect'; + port.innerHTML = 'connect'; XHR.get('<%=luci.dispatcher.build_url("admin/services/shadowsocksr/ping")%>', { index, domain: dom.getAttribute("hint"), @@ -34,11 +34,11 @@ if (result.ping < 200) col = '#ff7700'; if (result.ping < 100) col = '#249400'; } - dom.innerHTML = `${(result.ping ? result.ping : "--") + " ms"}`; + dom.innerHTML = `${(result.ping ? result.ping : "--") + " ms"}`; if (result.socket) { - port.innerHTML = 'ok'; + port.innerHTML = 'ok'; } else { - port.innerHTML = 'fail'; + port.innerHTML = 'fail'; } res(); }); diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm index cf4ca1f..04f2896 100644 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm @@ -75,9 +75,9 @@ function export_ssr_url(btn, urlname, sid) { textarea.select(); try { document.execCommand("copy"); // Security exception may be thrown by some browsers. - s.innerHTML = "<%:Copy SSR to clipboard successfully.%>"; + s.innerHTML = "<%:Copy SSR to clipboard successfully.%>"; } catch (ex) { - s.innerHTML = "<%:Unable to copy SSR to clipboard.%>"; + s.innerHTML = "<%:Unable to copy SSR to clipboard.%>"; } finally { document.body.removeChild(textarea); } @@ -89,7 +89,7 @@ function import_ssr_url(btn, urlname, sid) { if (!s) return false; var ssrurl = prompt("<%:Paste sharing link here%>", ""); if (ssrurl == null || ssrurl == "") { - s.innerHTML = "<%:User cancelled.%>"; + s.innerHTML = "<%:User cancelled.%>"; return false; } s.innerHTML = ""; @@ -274,7 +274,7 @@ function import_ssr_url(btn, urlname, sid) { document.getElementsByName('cbid.shadowsocksr.' + sid + '.protocol_param')[0].value = dictvalue(pdict, 'protoparam'); var rem = pdict['remarks']; if (typeof (rem) != 'undefined' && rem != '' && rem.length > 0) document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = b64decutf8safe(rem); - s.innerHTML = "<%:Import configuration information successfully.%>"; + s.innerHTML = "<%:Import configuration information successfully.%>"; return false; case "trojan": try { @@ -367,7 +367,7 @@ function import_ssr_url(btn, urlname, sid) { break; } - s.innerHTML = "<%:Import configuration information successfully.%>"; + s.innerHTML = "<%:Import configuration information successfully.%>"; return false; case "vmess": var sstr = b64DecodeUnicode(ssu[1]); @@ -450,7 +450,7 @@ function import_ssr_url(btn, urlname, sid) { document.getElementsByName('cbid.shadowsocksr.' + sid + '.xmux')[0].checked = true; document.getElementsByName('cbid.shadowsocksr.' + sid + '.xmux')[0].dispatchEvent(event); } - s.innerHTML = "<%:Import configuration information successfully.%>"; + s.innerHTML = "<%:Import configuration information successfully.%>"; return false; case "vless": try { @@ -568,10 +568,10 @@ function import_ssr_url(btn, urlname, sid) { } break; } - s.innerHTML = "<%:Import configuration information successfully.%>"; + s.innerHTML = "<%:Import configuration information successfully.%>"; return false; default: - s.innerHTML = "<%:Invalid format.%>"; + s.innerHTML = "<%:Invalid format.%>"; return false; } } diff --git a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr index 22b6c7c..f086636 100755 --- a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr +++ b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -1287,8 +1287,18 @@ start_server() { echolog "Server:Socks5 Server$server_count Started!" ;; esac - 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 + ssr_server_port=$(uci show shadowsocksr | grep 'server_config.*server_port' | awk -F"'" '{print $2}' | tr "\n" " ") + if [ -n "$ssr_server_port" ]; then + uci -q delete firewall.shadowsocksr_server + uci set firewall.shadowsocksr_server=rule + uci set firewall.shadowsocksr_server.name="shadowsocksr_server" + uci set firewall.shadowsocksr_server.target="ACCEPT" + uci set firewall.shadowsocksr_server.src="wan" + uci set firewall.shadowsocksr_server.dest_port="$ssr_server_port" + uci set firewall.shadowsocksr_server.enabled="1" + uci commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 + fi return 0 } gen_serv_include() { @@ -1445,12 +1455,6 @@ stop() { unlock set_lock /usr/bin/ssr-rules -f - local srulecount=$(iptables -L | grep SSR-SERVER-RULE | wc -l) - if [ $srulecount -gt 0 ]; then - iptables -F SSR-SERVER-RULE - iptables -t filter -D INPUT -j SSR-SERVER-RULE - iptables -X SSR-SERVER-RULE 2>/dev/null - fi if [ -z "$switch_server" ]; then $PS -w | grep -v "grep" | grep ssr-switch | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & rm -f /var/lock/ssr-switch.lock @@ -1461,7 +1465,7 @@ stop() { ( \ # Graceful kill first, so programs have the chance to stop its subprocesses $PS -w | grep -v "grep" | grep "$TMP_PATH" | awk '{print $1}' | xargs kill >/dev/null 2>&1 ; \ - sleep 3s; \ + sleep 1s; \ # Force kill hanged programs $PS -w | grep -v "grep" | grep "$TMP_PATH" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 ; \ ) @@ -1484,6 +1488,9 @@ stop() { /etc/init.d/dnsmasq restart >/dev/null 2>&1 fi + uci -q delete firewall.shadowsocksr_server + uci commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 del_cron unset_lock } diff --git a/luci-app-ssr-plus/root/etc/ssrplus/white.list b/luci-app-ssr-plus/root/etc/ssrplus/white.list index 9055fcb..8c3ca2b 100644 --- a/luci-app-ssr-plus/root/etc/ssrplus/white.list +++ b/luci-app-ssr-plus/root/etc/ssrplus/white.list @@ -1,7 +1,37 @@ -bilibili.com -bilibili.cn -bilivideo.com -bilivideo.cn +aaplimg.com +account.synology.com +apple-cloudkit.com +apple.co +apple.com +apple.com.cn +appstore.com biliapi.com biliapi.net -apple.com \ No newline at end of file +bilibili.cn +bilibili.com +bilivideo.cn +bilivideo.com +bing.com +cdn-apple.com +checkip.dyndns.org +checkip.synology.com +checkipv6.synology.com +checkport.synology.com +crashlytics.com +ddns.synology.com +gitmirror.com +icloud-content.com +icloud.com +icloud.com.cn +images-cn.ssl-images-amazon.com +mirrorlist.centos.org +mzstatic.com +office365.com +officecdn-microsoft-com.akamaized.net +teamviewer.com +whatismyip.akamai.com +windows.com +windowsupdate.com +worldbank.org +worldscientific.com +www-cdn.icloud.com.akadns.net