luci-app-passwall: sync with upstream source

This commit is contained in:
CN_SZTL 2020-12-05 22:46:01 +08:00
parent 525af8988d
commit 0a9ce83a9c
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
6 changed files with 89 additions and 66 deletions

View File

@ -134,8 +134,10 @@ define Package/$(PKG_NAME)/conffiles
/etc/config/passwall_server
/usr/share/passwall/rules/proxy_host
/usr/share/passwall/rules/proxy_ip
/usr/share/passwall/rules/direct_host
/usr/share/passwall/rules/direct_ip
/usr/share/passwall/rules/proxy_host2
/usr/share/passwall/rules/proxy_ip2
/usr/share/passwall/rules/proxy_host3
/usr/share/passwall/rules/proxy_ip3
endef
define Package/$(PKG_NAME)/install

View File

@ -2,7 +2,10 @@ local fs = require "nixio.fs"
local appname = "passwall"
m = Map(appname)
m.apply_on_parse=true
function m.on_apply(self)
luci.sys.call("/etc/init.d/passwall reload > /dev/null 2>&1 &")
end
-- [[ Rule List Settings ]]--
s = m:section(TypedSection, "global_rules")
s.anonymous = true

View File

@ -9,6 +9,7 @@ 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
RULES_PATH=/usr/share/${CONFIG}/rules
@ -48,6 +49,38 @@ config_t_get() {
echo "${ret:=${3}}"
}
set_lock(){
exec 1000>"$LOCK_FILE"
flock -x 1000
}
trap 'rm -f "$LOCK_FILE"; exit $?' INT TERM EXIT
unlock() {
failcount=1
while [ "$failcount" -le 10 ]; do
if [ -f "$LOCK_FILE" ]; then
let "failcount++"
sleep 1s
[ "$failcount" -ge 10 ] && unset_lock
else
break
fi
done
}
unset_lock(){
flock -u 1000
rm -rf "$LOCK_FILE"
}
_exit()
{
local rc=$1
unset_lock
exit ${rc}
}
get_enabled_anonymous_secs() {
uci -q show "${CONFIG}" | grep "${1}\[.*\.enabled='1'" | cut -d '.' -sf2
}
@ -1201,6 +1234,8 @@ boot() {
}
start() {
#加锁防止并发开启服务
set_lock
load_config
start_socks
start_haproxy
@ -1215,9 +1250,12 @@ start() {
}
start_crontab
echolog "运行完成!\n"
unset_lock
}
stop() {
unlock
set_lock
clean_log
source $APP_PATH/iptables.sh stop
kill_all v2ray-plugin obfs-local
@ -1231,6 +1269,7 @@ stop() {
/etc/init.d/dnsmasq restart >/dev/null 2>&1
echolog "重启 dnsmasq 服务[$?]"
echolog "清空并关闭相关程序和缓存完成。"
unset_lock
}
arg1=$1

View File

@ -635,24 +635,32 @@ add_firewall_rule() {
}
del_firewall_rule() {
$ipt_n -D PREROUTING -p tcp -j PSW 2>/dev/null
$ipt_n -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
ib_nat_exist=`$ipt_n -L PREROUTING | grep -c PSW`
if [ ! -z "$ib_nat_exist" ];then
until [ "$ib_nat_exist" = 0 ]
do
$ipt_n -D PREROUTING -p tcp -j PSW 2>/dev/null
$ipt_n -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
$ipt_m -D PREROUTING -j PSW 2>/dev/null
$ipt_m -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
$ipt_m -D OUTPUT -p udp -j PSW_OUTPUT 2>/dev/null
$ip6t_n -D PREROUTING -j PSW 2>/dev/null
$ip6t_n -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
$ip6t_m -D PREROUTING -j PSW 2>/dev/null
$ip6t_m -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
ib_nat_exist=`expr $ib_nat_exist - 1`
done
fi
$ipt_n -F PSW 2>/dev/null && $ipt_n -X PSW 2>/dev/null
$ipt_n -F PSW_OUTPUT 2>/dev/null && $ipt_n -X PSW_OUTPUT 2>/dev/null
$ipt_m -D PREROUTING -j PSW 2>/dev/null
$ipt_m -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
$ipt_m -D OUTPUT -p udp -j PSW_OUTPUT 2>/dev/null
$ipt_m -F PSW 2>/dev/null && $ipt_m -X PSW 2>/dev/null
$ipt_m -F PSW_OUTPUT 2>/dev/null && $ipt_m -X PSW_OUTPUT 2>/dev/null
$ip6t_n -D PREROUTING -j PSW 2>/dev/null
$ip6t_n -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
$ip6t_n -F PSW 2>/dev/null && $ip6t_n -X PSW 2>/dev/null
$ip6t_n -F PSW_OUTPUT 2>/dev/null && $ip6t_n -X PSW_OUTPUT 2>/dev/null
$ip6t_m -D PREROUTING -j PSW 2>/dev/null
$ip6t_m -D OUTPUT -p tcp -j PSW_OUTPUT 2>/dev/null
$ip6t_m -F PSW 2>/dev/null && $ip6t_m -X PSW 2>/dev/null
$ip6t_m -F PSW_OUTPUT 2>/dev/null && $ip6t_m -X PSW_OUTPUT 2>/dev/null
@ -670,7 +678,7 @@ del_firewall_rule() {
#ipset -F $IPSET_BLACKLIST2 >/dev/null 2>&1 && ipset -X $IPSET_BLACKLIST2 >/dev/null 2>&1 &
#ipset -F $IPSET_BLACKLIST3 >/dev/null 2>&1 && ipset -X $IPSET_BLACKLIST3 >/dev/null 2>&1 &
ipset -F $IPSET_WHITELIST >/dev/null 2>&1 && ipset -X $IPSET_WHITELIST >/dev/null 2>&1 &
#echolog "删除相关防火墙规则完成。"
echolog "删除相关防火墙规则完成。"
}
flush_ipset() {
@ -693,26 +701,8 @@ flush_include() {
gen_include() {
flush_include
extract_rules() {
local _ipt="iptables"
[ "$1" == "6" ] && _ipt="ip6tables"
echo "*$2"
${_ipt}-save -t $2 | grep PSW | \
sed -e "s/^-A \(OUTPUT\|PREROUTING\)/-I \1 1/"
echo 'COMMIT'
}
cat <<-EOF >>$FWI
iptables-save -c | grep -v "PSW" | iptables-restore -c
iptables-restore -n <<-EOT
$(extract_rules 4 nat)
$(extract_rules 4 mangle)
EOT
ip6tables-save -c | grep -v "PSW" | ip6tables-restore -c
ip6tables-restore -n <<-EOT
$(extract_rules 6 nat)
$(extract_rules 6 mangle)
EOT
/etc/init.d/passwall reload
EOF
return 0
}

View File

@ -606,7 +606,6 @@ local function curl(url)
end
local function truncate_nodes()
local is_stop = 0
local function clear(type)
local node_num = ucic2:get(application, "@global_other[0]", type .. "_node_num") or 1
for i = 1, node_num, 1 do
@ -614,7 +613,6 @@ local function truncate_nodes()
if node then
local is_sub_node = ucic2:get(application, node, "is_sub") or 0
if is_sub_node == "1" then
is_stop = 1
ucic2:set(application, '@global[0]', type .. "_node" .. i, "nil")
end
end
@ -628,7 +626,6 @@ local function truncate_nodes()
if node then
local is_sub_node = ucic2:get(application, node, "is_sub") or 0
if is_sub_node == "1" then
is_stop = 1
ucic2:set(application, t[".name"], "node", "nil")
end
end
@ -641,9 +638,6 @@ local function truncate_nodes()
end)
ucic2:commit(application)
if is_stop == 1 then
luci.sys.call("/etc/init.d/" .. application .. " restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
end
log('在线订阅节点已全部删除')
end
@ -808,7 +802,7 @@ local function update_node(manual)
]]--
ucic2:commit(application)
luci.sys.call("/etc/init.d/" .. application .. " restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
--luci.sys.call("/etc/init.d/" .. application .. " restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
end
end

View File

@ -136,32 +136,27 @@ test_auto_switch() {
}
start() {
(
flock -xn 200
[ "$?" != "0" ] && exit 0
ENABLED=$(config_t_get global enabled 0)
[ "$ENABLED" != 1 ] && return 1
ENABLED=$(config_t_get auto_switch enable 0)
[ "$ENABLED" != 1 ] && return 1
ENABLED=$(config_t_get global enabled 0)
[ "$ENABLED" != 1 ] && _return 1
ENABLED=$(config_t_get auto_switch enable 0)
[ "$ENABLED" != 1 ] && _return 1
delay=$(config_t_get auto_switch testing_time 1)
sleep ${delay}m
while [ "$ENABLED" -eq 1 ]
do
# TCP_NODE_NUM=$(config_t_get global_other tcp_node_num 1)
# 暂时只能检测TCP1
TCP_NODE_NUM=1
for i in $(seq 1 $TCP_NODE_NUM); do
eval TCP_NODE$i=\"$(config_t_get auto_switch tcp_node$i nil)\"
eval tmp=\$TCP_NODE$i
[ -n "$tmp" -a "$tmp" != "nil" ] && {
test_auto_switch TCP tcp $i "$tmp"
}
done
delay=$(config_t_get auto_switch testing_time 1)
sleep ${delay}m
while [ "$ENABLED" -eq 1 ]
do
# TCP_NODE_NUM=$(config_t_get global_other tcp_node_num 1)
# 暂时只能检测TCP1
TCP_NODE_NUM=1
for i in $(seq 1 $TCP_NODE_NUM); do
eval TCP_NODE$i=\"$(config_t_get auto_switch tcp_node$i nil)\"
eval tmp=\$TCP_NODE$i
[ -n "$tmp" -a "$tmp" != "nil" ] && {
test_auto_switch TCP tcp $i "$tmp"
}
done
delay=$(config_t_get auto_switch testing_time 1)
sleep ${delay}m
done
) 200>"/var/lock/passwall_auto_switch.lock"
done
}
case $1 in