diff --git a/package/lienol/luci-app-passwall/Makefile b/package/lienol/luci-app-passwall/Makefile
index 7af1e14459..7c0dd21e42 100644
--- a/package/lienol/luci-app-passwall/Makefile
+++ b/package/lienol/luci-app-passwall/Makefile
@@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=3.6
-PKG_RELEASE:=11
-PKG_DATE:=20200304
+PKG_RELEASE:=13
+PKG_DATE:=20200305
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
diff --git a/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua b/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua
index b6421638ae..9c72f647b1 100644
--- a/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua
+++ b/package/lienol/luci-app-passwall/luasrc/controller/passwall.lua
@@ -2,6 +2,7 @@
module("luci.controller.passwall", package.seeall)
local appname = "passwall"
local http = require "luci.http"
+local passwall = require "luci.model.cbi.passwall.api.passwall"
local kcptun = require "luci.model.cbi.passwall.api.kcptun"
local brook = require "luci.model.cbi.passwall.api.brook"
local v2ray = require "luci.model.cbi.passwall.api.v2ray"
@@ -59,6 +60,10 @@ function index()
true
entry({"admin", "vpn", "passwall", "update_rules"}, call("update_rules")).leaf =
true
+ entry({"admin", "vpn", "passwall", "luci_check"}, call("luci_check")).leaf =
+ true
+ entry({"admin", "vpn", "passwall", "luci_update"}, call("luci_update")).leaf =
+ true
entry({"admin", "vpn", "passwall", "kcptun_check"}, call("kcptun_check")).leaf =
true
entry({"admin", "vpn", "passwall", "kcptun_update"}, call("kcptun_update")).leaf =
@@ -127,8 +132,8 @@ function status()
appname, i)) == 0
e["tcp_node%s_status" % i] = luci.sys.call(
string.format(
- "ps -w | grep -v grep | grep '%s/bin/' | grep -i -E 'TCP_%s|brook_tcp_%s|ipt2socks_tcp_%s' >/dev/null",
- appname, i, i, i)) == 0
+ "ps -w | grep -v grep | grep -v kcptun | grep '%s/bin/' | grep -i -E 'TCP_%s' >/dev/null",
+ appname, i)) == 0
end
local udp_node_num = luci.sys.exec(
@@ -137,8 +142,8 @@ function status()
for i = 1, udp_node_num, 1 do
e["udp_node%s_status" % i] = luci.sys.call(
string.format(
- "ps -w | grep -v grep | grep '%s/bin/' | grep -i -E 'UDP_%s|brook_udp_%s|ipt2socks_udp_%s' >/dev/null",
- appname, i, i, i)) == 0
+ "ps -w | grep -v grep | grep '%s/bin/' | grep -i -E 'UDP_%s' >/dev/null",
+ appname, i)) == 0
end
local socks5_node_num = luci.sys.exec(
@@ -151,7 +156,7 @@ function status()
appname, i)) == 0
e["socks5_node%s_status" % i] = luci.sys.call(
string.format(
- "ps -w | grep -v grep | grep '%s/bin/' | grep -i -E 'SOCKS5_%s|brook_socks_%s' >/dev/null",
+ "ps -w | grep -v grep | grep -v kcptun | grep '%s/bin/' | grep -i -E 'SOCKS_%s|SOCKS5_%s' >/dev/null",
appname, i, i)) == 0
end
luci.http.prepare_content("application/json")
@@ -268,6 +273,16 @@ function update_rules()
"' > /dev/null 2>&1 &")
end
+function luci_check()
+ local json = passwall.to_check("")
+ http_write_json(json)
+end
+
+function luci_update()
+ local json = passwall.update_luci(http.formvalue("url"), http.formvalue("save"))
+ http_write_json(json)
+end
+
function kcptun_check()
local json = kcptun.to_check("")
http_write_json(json)
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/passwall.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/passwall.lua
new file mode 100644
index 0000000000..641b36c7d8
--- /dev/null
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/passwall.lua
@@ -0,0 +1,108 @@
+module("luci.model.cbi.passwall.api.passwall", package.seeall)
+local fs = require "nixio.fs"
+local sys = require "luci.sys"
+local util = require "luci.util"
+local i18n = require "luci.i18n"
+local api = require "luci.model.cbi.passwall.api.api"
+
+local luci_api =
+ "https://api.github.com/repos/lienol/openwrt-package/releases/latest"
+
+function get_luci_version()
+ local ipkg = require "luci.model.ipkg"
+ local package_name = "luci-app-passwall"
+ local package_info = ipkg.info(package_name) or {}
+ if next(package_info) ~= nil then
+ return package_info[package_name]["Version"]
+ end
+ return ""
+end
+
+function to_check()
+ local json = api.get_api_json(luci_api)
+
+ if json.tag_name == nil then
+ return {
+ code = 1,
+ error = i18n.translate("Get remote version info failed.")
+ }
+ end
+
+ local remote_version = json.tag_name:match("[^v]+")
+
+ local needs_update = api.compare_versions(get_luci_version(client_file),
+ "<", remote_version)
+ local html_url, download_url
+
+ if needs_update then
+ html_url = json.html_url
+ for _, v in ipairs(json.assets) do
+ local n = v.name
+ if n then
+ if n:match("luci%-app%-passwall") then
+ download_url = v.browser_download_url
+ end
+ end
+ end
+ end
+
+ if needs_update and not download_url then
+ return {
+ code = 1,
+ now_version = get_luci_version(),
+ version = remote_version,
+ html_url = html_url,
+ error = i18n.translate(
+ "New version found, but failed to get new version download url.")
+ }
+ end
+
+ return {
+ code = 0,
+ update = needs_update,
+ now_version = get_luci_version(),
+ version = remote_version,
+ url = {html = html_url, download = download_url}
+ }
+end
+
+function update_luci(url, save)
+ if not url or url == "" then
+ return {code = 1, error = i18n.translate("Download url is required.")}
+ end
+
+ sys.call("/bin/rm -f /tmp/luci_passwall.*.ipk")
+
+ local tmp_file =
+ util.trim(util.exec("mktemp -u -t luci_passwall.XXXXXX")) .. ".ipk"
+
+ local result = api.exec(api.wget,
+ {"-O", tmp_file, url, api._unpack(api.wget_args)},
+ nil, api.command_timeout) == 0
+
+ if not result then
+ api.exec("/bin/rm", {"-f", tmp_file})
+ return {
+ code = 1,
+ error = i18n.translatef("File download failed or timed out: %s", url)
+ }
+ end
+
+ local opkg_args = {"--force-downgrade", "--force-reinstall"}
+
+ if save ~= "true" then opkg_args[#opkg_args + 1] = "--force-maintainer" end
+
+ result =
+ api.exec("/bin/opkg", {"install", tmp_file, api._unpack(opkg_args)}) ==
+ 0
+
+ if not result then
+ api.exec("/bin/rm", {"-f", tmp_file})
+ return {code = 1, error = i18n.translate("Package update failed.")}
+ end
+
+ api.exec("/bin/rm", {"-f", tmp_file})
+ api.exec("/bin/rm", {"-rf", "/tmp/luci-indexcache", "/tmp/luci-modulecache"})
+
+ return {code = 0}
+end
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/global.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/global.lua
index 262c7333fe..d5d0cedf90 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/global.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/global.lua
@@ -107,23 +107,20 @@ for i = 1, socks5_node_num, 1 do
for _, key in pairs(key_table) do o:value(key, n[key]) end
end
-if api.uci_get_type("global_other", "wangejibadns", "0") == "1" then
- o =
- s:option(Value, "up_china_dns", translate("China DNS Server") .. "(UDP)")
- -- o.description = translate("If you want to work with other DNS acceleration services, use the default.
Only use two at most, english comma separation, If you do not fill in the # and the following port, you are using port 53.")
- o.default = "default"
- o:value("default", translate("default"))
- o:value("dnsbyisp", translate("dnsbyisp"))
- o:value("223.5.5.5", "223.5.5.5 (" .. translate("Ali") .. "DNS)")
- o:value("223.6.6.6", "223.6.6.6 (" .. translate("Ali") .. "DNS)")
- o:value("114.114.114.114", "114.114.114.114 (114DNS)")
- o:value("114.114.115.115", "114.114.115.115 (114DNS)")
- o:value("119.29.29.29", "119.29.29.29 (DNSPOD DNS)")
- o:value("182.254.116.116", "182.254.116.116 (DNSPOD DNS)")
- o:value("1.2.4.8", "1.2.4.8 (CNNIC DNS)")
- o:value("210.2.4.8", "210.2.4.8 (CNNIC DNS)")
- o:value("180.76.76.76", "180.76.76.76 (" .. translate("Baidu") .. "DNS)")
-end
+o = s:option(Value, "up_china_dns", translate("China DNS Server") .. "(UDP)")
+-- o.description = translate("If you want to work with other DNS acceleration services, use the default.
Only use two at most, english comma separation, If you do not fill in the # and the following port, you are using port 53.")
+o.default = "default"
+o:value("default", translate("default"))
+o:value("dnsbyisp", translate("dnsbyisp"))
+o:value("223.5.5.5", "223.5.5.5 (" .. translate("Ali") .. "DNS)")
+o:value("223.6.6.6", "223.6.6.6 (" .. translate("Ali") .. "DNS)")
+o:value("114.114.114.114", "114.114.114.114 (114DNS)")
+o:value("114.114.115.115", "114.114.115.115 (114DNS)")
+o:value("119.29.29.29", "119.29.29.29 (DNSPOD DNS)")
+o:value("182.254.116.116", "182.254.116.116 (DNSPOD DNS)")
+o:value("1.2.4.8", "1.2.4.8 (CNNIC DNS)")
+o:value("210.2.4.8", "210.2.4.8 (CNNIC DNS)")
+o:value("180.76.76.76", "180.76.76.76 (" .. translate("Baidu") .. "DNS)")
---- DNS Forward Mode
o = s:option(ListValue, "dns_mode", translate("DNS Mode"))
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/rule.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/rule.lua
index a72cefb89b..c0cfe54aa9 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/rule.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/rule.lua
@@ -106,6 +106,7 @@ s = m:section(TypedSection, "global_app", translate("App Update"),
translate("Please confirm that your firmware supports FPU.") ..
"")
s.anonymous = true
+s:append(Template("passwall/rule/passwall_version"))
s:append(Template("passwall/rule/v2ray_version"))
s:append(Template("passwall/rule/kcptun_version"))
s:append(Template("passwall/rule/brook_version"))
diff --git a/package/lienol/luci-app-passwall/luasrc/view/passwall/rule/passwall_version.htm b/package/lienol/luci-app-passwall/luasrc/view/passwall/rule/passwall_version.htm
new file mode 100644
index 0000000000..0e2209130f
--- /dev/null
+++ b/package/lienol/luci-app-passwall/luasrc/view/passwall/rule/passwall_version.htm
@@ -0,0 +1,156 @@
+<%
+local api = require "luci.model.cbi.passwall.api.api"
+local dsp = require "luci.dispatcher"
+
+function get_luci_version()
+ local ipkg = require "luci.model.ipkg"
+ local package_name = "luci-app-passwall"
+ local package_info = ipkg.info(package_name) or {}
+ if next(package_info) ~= nil then
+ return package_info[package_name]["Version"]
+ end
+ return ""
+end
+
+local passwall_version = get_luci_version()
+-%>
+
+
+
+
+
+
+
+ 【 <%=passwall_version%>】
+
+
+
+
+
\ No newline at end of file
diff --git a/package/lienol/luci-app-passwall/root/etc/config/passwall b/package/lienol/luci-app-passwall/root/etc/config/passwall
index 86566e7f25..1e3cff01eb 100644
--- a/package/lienol/luci-app-passwall/root/etc/config/passwall
+++ b/package/lienol/luci-app-passwall/root/etc/config/passwall
@@ -43,6 +43,12 @@ config global_other
config global_rules
option auto_update '0'
+ option chnlist_update '1'
+ option chnroute_update '1'
+ option gfwlist_update '1'
+ option gfwlist_version '2020-02-27'
+ option chnroute_version '2020-02-27'
+ option chnlist_version '2020-02-27'
config global_app
option v2ray_file '/usr/bin/v2ray/'
@@ -54,5 +60,5 @@ config global_subscribe
option auto_update_subscribe '0'
config auto_switch
- option testing_time '3'
+ option testing_time '1'
option enable '0'
diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh b/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh
index 9f55d1a83c..ff01c90b7f 100755
--- a/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh
+++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh
@@ -8,6 +8,7 @@ CONFIG=passwall
TMP_PATH=/var/etc/$CONFIG
TMP_BIN_PATH=$TMP_PATH/bin
TMP_ID_PATH=$TMP_PATH/id
+TMP_PORT_PATH=$TMP_PATH/port
LOCK_FILE=/var/lock/$CONFIG.lock
LOG_FILE=/var/log/$CONFIG.log
APP_PATH=/usr/share/$CONFIG
@@ -151,6 +152,16 @@ for i in $(seq 1 $SOCKS5_NODE_NUM); do
eval SOCKS5_NODE$i=$(config_t_get global socks5_node$i nil)
done
+TCP_REDIR_PORT1=$(config_t_get global_forwarding tcp_redir_port 1041)
+TCP_REDIR_PORT2=$(expr $TCP_REDIR_PORT1 + 1)
+TCP_REDIR_PORT3=$(expr $TCP_REDIR_PORT2 + 1)
+UDP_REDIR_PORT1=$(config_t_get global_forwarding udp_redir_port 1051)
+UDP_REDIR_PORT2=$(expr $UDP_REDIR_PORT1 + 1)
+UDP_REDIR_PORT3=$(expr $UDP_REDIR_PORT2 + 1)
+SOCKS5_PROXY_PORT1=$(config_t_get global_forwarding socks5_proxy_port 1081)
+SOCKS5_PROXY_PORT2=$(expr $SOCKS5_PROXY_PORT1 + 1)
+SOCKS5_PROXY_PORT3=$(expr $SOCKS5_PROXY_PORT2 + 1)
+
[ "$UDP_NODE1" == "tcp" ] && UDP_NODE1=$TCP_NODE1
[ "$SOCKS5_NODE1" == "tcp" ] && SOCKS5_NODE1=$TCP_NODE1
@@ -184,8 +195,6 @@ load_config() {
LOCALHOST_PROXY_MODE=$(config_t_get global localhost_proxy_mode default)
[ "$LOCALHOST_PROXY_MODE" == "default" ] && LOCALHOST_PROXY_MODE=$PROXY_MODE
UP_CHINA_DNS=$(config_t_get global up_china_dns dnsbyisp)
- wangejibadns=$(config_t_get global_other wangejibadns 0)
- [ "$wangejibadns" == "0" ] && UP_CHINA_DNS="default"
[ "$UP_CHINA_DNS" == "default" ] && IS_DEFAULT_CHINA_DNS=1
[ ! -f "$RESOLVFILE" -o ! -s "$RESOLVFILE" ] && RESOLVFILE=/tmp/resolv.conf.auto
if [ "$UP_CHINA_DNS" == "dnsbyisp" -o "$UP_CHINA_DNS" == "default" ]; then
@@ -206,17 +215,8 @@ load_config() {
UP_CHINA_DNS="223.5.5.5"
fi
fi
- TCP_REDIR_PORT1=$(config_t_get global_forwarding tcp_redir_port 1041)
- TCP_REDIR_PORT2=$(expr $TCP_REDIR_PORT1 + 1)
- TCP_REDIR_PORT3=$(expr $TCP_REDIR_PORT2 + 1)
- UDP_REDIR_PORT1=$(config_t_get global_forwarding udp_redir_port 1051)
- UDP_REDIR_PORT2=$(expr $UDP_REDIR_PORT1 + 1)
- UDP_REDIR_PORT3=$(expr $UDP_REDIR_PORT2 + 1)
- SOCKS5_PROXY_PORT1=$(config_t_get global_forwarding socks5_proxy_port 1081)
- SOCKS5_PROXY_PORT2=$(expr $SOCKS5_PROXY_PORT1 + 1)
- SOCKS5_PROXY_PORT3=$(expr $SOCKS5_PROXY_PORT2 + 1)
PROXY_IPV6=$(config_t_get global_forwarding proxy_ipv6 0)
- mkdir -p /var/etc $TMP_PATH $TMP_BIN_PATH $TMP_ID_PATH
+ mkdir -p /var/etc $TMP_PATH $TMP_BIN_PATH $TMP_ID_PATH $TMP_PORT_PATH
return 0
}
@@ -270,7 +270,7 @@ gen_start_config() {
port=$(config_n_get $node port)
[ -n "$server_host" -a -n "$port" ] && {
# 判断节点服务器地址是否URL并去掉~
- server_host=$(echo $server_host | sed 's/^\(http:\/\/\|https:\/\/\)//g' | awk -F '/' '{print $1}')
+ server_host=$(echo $server_host | sed 's/^\(https:\/\/\|http:\/\/\)//g' | awk -F '/' '{print $1}')
# 判断节点服务器地址是否包含汉字~
local tmp=$(echo -n $server_host | awk '{print gensub(/[!-~]/,"","g",$0)}')
[ -n "$tmp" ] && {
@@ -286,10 +286,10 @@ gen_start_config() {
echolog "Socks5节点不能使用Socks5代理节点!"
elif [ "$type" == "v2ray" -o "$type" == "v2ray_balancing" -o "$type" == "v2ray_shunt" ]; then
lua $API_GEN_V2RAY $node nil nil $local_port >$config_file
- ln_start_bin $(config_t_get global_app v2ray_file $(find_bin v2ray))/v2ray v2ray "-config=$config_file"
+ ln_start_bin $(config_t_get global_app v2ray_file $(find_bin v2ray))/v2ray v2ray_socks_$5 "-config=$config_file"
elif [ "$type" == "trojan" ]; then
lua $API_GEN_TROJAN $node client "0.0.0.0" $local_port >$config_file
- ln_start_bin $(find_bin trojan) trojan "-c $config_file"
+ ln_start_bin $(find_bin trojan) trojan_socks_$5 "-c $config_file"
elif [ "$type" == "brook" ]; then
local protocol=$(config_n_get $node brook_protocol client)
local brook_tls=$(config_n_get $node brook_tls 0)
@@ -299,7 +299,7 @@ gen_start_config() {
ln_start_bin $(config_t_get global_app brook_file $(find_bin brook)) brook_socks_$5 "$protocol -l 0.0.0.0:$local_port -i 0.0.0.0 -s $server_host:$port -p $(config_n_get $node password)"
elif [ "$type" == "ssr" ]; then
gen_ss_ssr_config_file ssr $local_port 0 $node $config_file
- ln_start_bin $(find_bin ssr-local) ssr-local "-c $config_file -b 0.0.0.0 -u"
+ ln_start_bin $(find_bin ssr-local) ssr-local_socks_$5 "-c $config_file -b 0.0.0.0 -u"
elif [ "$type" == "ss" ]; then
gen_ss_ssr_config_file ss $local_port 0 $node $config_file
local plugin_params=""
@@ -310,7 +310,7 @@ gen_start_config() {
plugin_params="--plugin $plugin --plugin-opts $opts"
}
fi
- ln_start_bin $(find_bin ss-local) ss-local "-c $config_file -b 0.0.0.0 -u $plugin_params"
+ ln_start_bin $(find_bin ss-local) ss-local_socks_$5 "-c $config_file -b 0.0.0.0 -u $plugin_params"
fi
fi
@@ -324,19 +324,15 @@ gen_start_config() {
local server_password=$(config_n_get $node password)
eval port=\$UDP_REDIR_PORT$5
ln_start_bin $(find_bin ipt2socks) ipt2socks_udp_$5 "-U -l $port -b 0.0.0.0 -s $node_address -p $node_port -R"
-
- # local redsocks_config_file=$TMP_PATH/UDP_$i.conf
- # gen_redsocks_config $redsocks_config_file udp $port $node_address $node_port $server_username $server_password
- # ln_start_bin $(find_bin redsocks2) redsocks2 "-c $redsocks_config_file"
elif [ "$type" == "v2ray" -o "$type" == "v2ray_balancing" -o "$type" == "v2ray_shunt" ]; then
lua $API_GEN_V2RAY $node udp $local_port nil >$config_file
- ln_start_bin $(config_t_get global_app v2ray_file $(find_bin v2ray))/v2ray v2ray "-config=$config_file"
+ ln_start_bin $(config_t_get global_app v2ray_file $(find_bin v2ray))/v2ray v2ray_udp_$5 "-config=$config_file"
elif [ "$type" == "trojan" ]; then
SOCKS5_PROXY_PORT4=$(expr $SOCKS5_PROXY_PORT3 + 1)
local_port=$(get_not_exists_port_after $SOCKS5_PROXY_PORT4 tcp)
socks5_port=$local_port
lua $API_GEN_TROJAN $node client "127.0.0.1" $socks5_port >$config_file
- ln_start_bin $(find_bin trojan) trojan "-c $config_file"
+ ln_start_bin $(find_bin trojan) trojan_udp_$5 "-c $config_file"
local node_address=$(config_n_get $node address)
local node_port=$(config_n_get $node port)
@@ -344,10 +340,6 @@ gen_start_config() {
local server_password=$(config_n_get $node password)
eval port=\$UDP_REDIR_PORT$5
ln_start_bin $(find_bin ipt2socks) ipt2socks_udp_$5 "-U -l $port -b 0.0.0.0 -s 127.0.0.1 -p $socks5_port -R"
-
- # local redsocks_config_file=$TMP_PATH/redsocks_UDP_$i.conf
- # gen_redsocks_config $redsocks_config_file udp $port "127.0.0.1" $socks5_port
- # ln_start_bin $(find_bin redsocks2) redsocks2 "-c $redsocks_config_file"
elif [ "$type" == "brook" ]; then
local protocol=$(config_n_get $node brook_protocol client)
if [ "$protocol" == "wsclient" ]; then
@@ -357,7 +349,7 @@ gen_start_config() {
fi
elif [ "$type" == "ssr" ]; then
gen_ss_ssr_config_file ssr $local_port 0 $node $config_file
- ln_start_bin $(find_bin ssr-redir) ssr-redir "-c $config_file -U"
+ ln_start_bin $(find_bin ssr-redir) ssr-redir_udp_$5 "-c $config_file -U"
elif [ "$type" == "ss" ]; then
gen_ss_ssr_config_file ss $local_port 0 $node $config_file
local plugin_params=""
@@ -368,7 +360,7 @@ gen_start_config() {
plugin_params="--plugin $plugin --plugin-opts $opts"
}
fi
- ln_start_bin $(find_bin ss-redir) ss-redir "-c $config_file -U $plugin_params"
+ ln_start_bin $(find_bin ss-redir) ss-redir_udp_$5 "-c $config_file -U $plugin_params"
fi
fi
@@ -382,17 +374,13 @@ gen_start_config() {
local server_password=$(config_n_get $node password)
eval port=\$TCP_REDIR_PORT$5
ln_start_bin $(find_bin ipt2socks) ipt2socks_tcp_$5 "-T -l $port -b 0.0.0.0 -s $node_address -p $node_port -R"
-
- # local redsocks_config_file=$TMP_PATH/TCP_$i.conf
- # gen_redsocks_config $redsocks_config_file tcp $port $node_address $socks5_port $server_username $server_password
- # ln_start_bin $(find_bin redsocks2) redsocks2 "-c $redsocks_config_file"
elif [ "$type" == "v2ray" -o "$type" == "v2ray_balancing" -o "$type" == "v2ray_shunt" ]; then
lua $API_GEN_V2RAY $node tcp $local_port nil >$config_file
- ln_start_bin $(config_t_get global_app v2ray_file $(find_bin v2ray))/v2ray v2ray "-config=$config_file"
+ ln_start_bin $(config_t_get global_app v2ray_file $(find_bin v2ray))/v2ray v2ray_tcp_$5 "-config=$config_file"
elif [ "$type" == "trojan" ]; then
lua $API_GEN_TROJAN $node nat "0.0.0.0" $local_port >$config_file
for k in $(seq 1 $process); do
- ln_start_bin $(find_bin trojan) trojan "-c $config_file"
+ ln_start_bin $(find_bin trojan) trojan_tcp_$5 "-c $config_file"
done
else
local kcptun_use=$(config_n_get $node use_kcp 0)
@@ -414,7 +402,7 @@ gen_start_config() {
if [ "$type" == "ssr" ]; then
gen_ss_ssr_config_file ssr $local_port $kcptun_use $node $config_file
for k in $(seq 1 $process); do
- ln_start_bin $(find_bin ssr-redir) ssr-redir "-c $config_file"
+ ln_start_bin $(find_bin ssr-redir) ssr-redir_tcp_$5 "-c $config_file"
done
elif [ "$type" == "ss" ]; then
gen_ss_ssr_config_file ss $local_port $kcptun_use $node $config_file
@@ -427,7 +415,7 @@ gen_start_config() {
}
fi
for k in $(seq 1 $process); do
- ln_start_bin $(find_bin ss-redir) ss-redir "-c $config_file $plugin_params"
+ ln_start_bin $(find_bin ss-redir) ss-redir_tcp_$5 "-c $config_file $plugin_params"
done
elif [ "$type" == "brook" ]; then
local server_ip=$server_host
@@ -453,6 +441,23 @@ gen_start_config() {
return 0
}
+node_switch() {
+ local i=$4
+ local node=$5
+ [ -n "$1" -a -n "$2" -a "$2" != "nil" -a -n "$3" -a -n "$4" -a -n "$5" ] && {
+ ps -w | grep -E "$TMP_PATH" | grep -i "${1}_${i}" | grep -v "grep" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
+ local config_file=$TMP_PATH/${1}_${i}.json
+ eval current_port=\$${1}_${2}_PORT$i
+ local port=$(cat $TMP_PORT_PATH/${1}_${i})
+ gen_start_config $node $port $1 $config_file $i
+ echo $node > $TMP_ID_PATH/${1}_${i}
+ local node_net=$(echo $1 | tr 'A-Z' 'a-z')
+ uci set $CONFIG.@global[0].${node_net}_node${i}=$node
+ uci commit $CONFIG
+ /etc/init.d/dnsmasq restart >/dev/null 2>&1 &
+ }
+}
+
start_redir() {
eval num=\$${1}_NODE_NUM
for i in $(seq 1 $num); do
@@ -466,6 +471,7 @@ start_redir() {
gen_start_config $node $port $1 $config_file $i
#eval ip=\$${1}_NODE${i}_IP
echo $node > $TMP_ID_PATH/${1}_${i}
+ echo $port > $TMP_PORT_PATH/${1}_${i}
}
done
}
@@ -667,71 +673,6 @@ add_dnsmasq() {
echolog "dnsmasq:生成配置文件。"
}
-gen_redsocks_config() {
- protocol=$2
- local_port=$3
- proxy_server=$4
- proxy_port=$5
- proxy_username=$6
- [ -n "$proxy_username" ] && proxy_username="login = $proxy_username;"
- proxy_password=$7
- [ -n "$proxy_password" ] && proxy_password="password = $proxy_password;"
- [ -n "$1" ] && {
- cat >$1 <<-EOF
- base {
- log_debug = off;
- log_info = off;
- log = "file:/dev/null";
- daemon = on;
- redirector = iptables;
- }
-
- EOF
- if [ "$protocol" == "tcp" ]; then
- cat >>$1 <<-EOF
- redsocks {
- local_ip = 0.0.0.0;
- local_port = $local_port;
- type = socks5;
- autoproxy = 0;
- ip = $proxy_server;
- port = $proxy_port;
- $proxy_username
- $proxy_password
- }
-
- autoproxy {
- no_quick_check_seconds = 300;
- quick_connect_timeout = 2;
- }
-
- ipcache {
- cache_size = 4;
- stale_time = 7200;
- autosave_interval = 3600;
- port_check = 0;
- }
-
- EOF
- elif [ "$protocol" == "udp" ]; then
- cat >>$1 <<-EOF
- redudp {
- local_ip = 0.0.0.0;
- local_port = $local_port;
- type = socks5;
- ip = $proxy_server;
- port = $proxy_port;
- $proxy_username
- $proxy_password
- udp_timeout = 60;
- udp_timeout_stream = 360;
- }
-
- EOF
- fi
- }
-}
-
gen_pdnsd_config() {
pdnsd_dir=$TMP_PATH/pdnsd
mkdir -p $pdnsd_dir
@@ -1008,6 +949,9 @@ stop() {
}
case $1 in
+node_switch)
+ node_switch $2 $3 $4 $5 $6
+ ;;
stop)
[ -n "$2" -a "$2" == "force" ] && force_stop
stop
diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/config.default b/package/lienol/luci-app-passwall/root/usr/share/passwall/config.default
index 83dd6a229b..e10e8ce332 100644
--- a/package/lienol/luci-app-passwall/root/usr/share/passwall/config.default
+++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/config.default
@@ -43,12 +43,12 @@ config global_other
config global_rules
option auto_update '0'
- option gfwlist_update '1'
- option chnroute_update '1'
option chnlist_update '1'
- option gfwlist_version '2019-12-10'
- option chnroute_version '2019-12-05'
- option chnlist_version '2020-01-06'
+ option chnroute_update '1'
+ option gfwlist_update '1'
+ option gfwlist_version '2020-02-27'
+ option chnroute_version '2020-02-27'
+ option chnlist_version '2020-02-27'
config global_app
option v2ray_file '/usr/bin/v2ray/'
@@ -60,5 +60,5 @@ config global_subscribe
option auto_update_subscribe '0'
config auto_switch
- option testing_time '3'
+ option testing_time '1'
option enable '0'
diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh b/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh
index fb8f433cf5..80f3f40249 100755
--- a/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh
+++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh
@@ -48,7 +48,7 @@ ENABLED=$(config_t_get global enabled 0)
exit 0
fi
fi
- icount=$(ps -w | grep -v grep | grep $RUN_BIN_PATH | grep -i -E "TCP_${i}|brook_tcp_${i}|ipt2socks_tcp_${i}" | wc -l)
+ icount=$(ps -w | grep -v grep | grep -v kcptun | grep $RUN_BIN_PATH | grep -i -E "TCP_${i}" | wc -l)
if [ $icount = 0 ]; then
/etc/init.d/passwall restart
exit 0
@@ -62,7 +62,7 @@ ENABLED=$(config_t_get global enabled 0)
eval tmp_node=\$UDP_NODE$i
if [ "$tmp_node" != "nil" ]; then
[ "$tmp_node" == "default" ] && tmp_node=$TCP_NODE1
- icount=$(ps -w | grep -v grep | grep $RUN_BIN_PATH | grep -i -E "UDP_${i}|brook_udp_${i}|ipt2socks_udp_${i}" | wc -l)
+ icount=$(ps -w | grep -v grep | grep $RUN_BIN_PATH | grep -i -E "UDP_${i}" | wc -l)
if [ $icount = 0 ]; then
/etc/init.d/passwall restart
exit 0
@@ -74,7 +74,7 @@ ENABLED=$(config_t_get global enabled 0)
for i in $(seq 1 $SOCKS5_NODE_NUM); do
eval tmp_node=\$SOCKS5_NODE$i
if [ "$tmp_node" != "nil" ]; then
- icount=$(ps -w | grep -v grep | grep $RUN_BIN_PATH | grep -i -E "SOCKS5_${i}|brook_socks_${i}" | wc -l)
+ icount=$(ps -w | grep -v grep | grep -v kcptun | grep $RUN_BIN_PATH | grep -i -E "SOCKS_${i}|SOCKS5_${i}" | wc -l)
if [ $icount = 0 ]; then
/etc/init.d/passwall restart
exit 0
diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/test.sh b/package/lienol/luci-app-passwall/root/usr/share/passwall/test.sh
index 7fcaa14312..70dd963c8b 100755
--- a/package/lienol/luci-app-passwall/root/usr/share/passwall/test.sh
+++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/test.sh
@@ -46,8 +46,8 @@ test_proxy() {
test_auto_switch() {
local type=$1
- local index=$2
- local b_tcp_nodes=$3
+ local index=$4
+ local b_tcp_nodes=$5
local now_node
if [ -f "/var/etc/$CONFIG/id/${type}_${index}" ]; then
now_node=$(cat /var/etc/$CONFIG/id/${type}_${index})
@@ -61,7 +61,7 @@ test_auto_switch() {
return 1
elif [ "$status" == 1 ]; then
echolog "自动切换检测:${type}_${index}节点异常,开始切换节点!"
- new_node=
+ local new_node
in_backup_nodes=$(echo $b_tcp_nodes | grep $now_node)
# 判断当前节点是否存在于备用节点列表里
if [ -z "$in_backup_nodes" ]; then
@@ -77,14 +77,11 @@ test_auto_switch() {
new_node=$next_node
fi
fi
- rm -f $LOCK_FILE
- uci set $CONFIG.@global[0].tcp_node${index}=$new_node
- uci commit $CONFIG
- /etc/init.d/$CONFIG restart > /dev/null &
+ /usr/share/passwall/app.sh node_switch $type $2 $3 $index $new_node
echolog "自动切换检测:${type}_${index}节点切换完毕!"
return 0
elif [ "$status" == 0 ]; then
- echolog "自动切换检测:${type}_${index}节点正常。"
+ #echolog "自动切换检测:${type}_${index}节点正常。"
return 0
fi
}
@@ -106,7 +103,7 @@ start() {
eval TCP_NODE$i=\"$(config_t_get auto_switch tcp_node$i nil)\"
eval tmp=\$TCP_NODE$i
[ -n "$tmp" ] && {
- test_auto_switch TCP $i $tmp
+ test_auto_switch TCP REDIR tcp $i "$tmp"
}
done