mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-14 19:41:51 +00:00
Track is shadowsocks is up or not
This commit is contained in:
parent
0e22cbd6b2
commit
0387798d74
6 changed files with 146 additions and 12 deletions
|
@ -185,6 +185,8 @@ function interfaces_status()
|
|||
mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks", "proxy", "server") or "0.0.0.0"
|
||||
mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr")
|
||||
|
||||
-- shadowsocksaddr
|
||||
mArray.openmptcprouter["ss_addr"] = sys.exec("curl -s -4 --socks5 127.0.0.1:1111 -m 2 http://ip.openmptcprouter.com")
|
||||
-- wanaddr
|
||||
mArray.openmptcprouter["wan_addr"] = sys.exec("wget -4 -qO- -T 1 http://ip.openmptcprouter.com")
|
||||
|
||||
|
|
|
@ -103,15 +103,18 @@
|
|||
|
||||
if (mArray.openmptcprouter.socks_service == false)
|
||||
{
|
||||
statusMessage += 'Socks service is not running<br/>';
|
||||
statusMessage += 'ShadowSocks is not running<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.tun_service == false)
|
||||
{
|
||||
statusMessage += 'TUN service is not running<br/>';
|
||||
statusMessage += 'GloryTUN is not running<br/>';
|
||||
}
|
||||
if (mArray.openmptcprouter.wan_addr == "")
|
||||
{
|
||||
statusMessage += 'No VPS IP address';
|
||||
statusMessage += 'No VPS IP address, No WAN IP address';
|
||||
} else if (mArray.openmptcprouter.ss_addr == "")
|
||||
{
|
||||
statusMessage += 'ShadowSocks not working';
|
||||
}
|
||||
|
||||
if(statusMessage !== "")
|
||||
|
|
31
omr-tracker/files/bin/omr-tracker-ss
Executable file
31
omr-tracker/files/bin/omr-tracker-ss
Executable file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/sh
|
||||
# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
|
||||
|
||||
name=$0
|
||||
basename="$(basename $0)"
|
||||
|
||||
log() {
|
||||
logger -p daemon.info -t "${basename}" "$@"
|
||||
}
|
||||
|
||||
timeout=$OMR_TRACKER_TIMEOUT
|
||||
interval=$OMR_TRACKER_INTERVAL
|
||||
retry=$OMR_TRACKER_TRIES
|
||||
proxy=$OMR_TRACKER_PROXY
|
||||
|
||||
last=0
|
||||
|
||||
while true; do
|
||||
host=${OMR_TRACKER_HOSTS%% *}
|
||||
if curl -s --socks5 "${proxy}" --max-time "${timeout}" --retry "${retry}" "$host" &>/dev/null ; then
|
||||
[ ${last} = 0 ] && log "Shadowsocks is up"
|
||||
/etc/init.d/shadowsocks-libev rules_up 2> /dev/null
|
||||
last=1
|
||||
else
|
||||
[ ${last} = 1 ] && log "Shadowsocks is down"
|
||||
/etc/init.d/shadowsocks-libev rules_down 2> /dev/null
|
||||
last=0
|
||||
fi
|
||||
|
||||
sleep "${interval}"
|
||||
done
|
|
@ -10,6 +10,14 @@ config defaults 'defaults'
|
|||
list hosts '80.67.169.40'
|
||||
option timeout '1'
|
||||
option tries '4'
|
||||
option interval '2'
|
||||
option interval '4'
|
||||
option type 'ping'
|
||||
option options ''
|
||||
|
||||
config defaults 'shadowsocks'
|
||||
option enabled '1'
|
||||
list hosts 'google.com'
|
||||
list hosts 'bing.com'
|
||||
option timeout '1'
|
||||
option tries '2'
|
||||
option interval '10'
|
|
@ -18,7 +18,7 @@ _validate_section() {
|
|||
'timeout:uinteger' \
|
||||
'tries:uinteger' \
|
||||
'interval:uinteger' \
|
||||
'type:string' \
|
||||
'type:string:ping' \
|
||||
'enabled:bool:1' \
|
||||
'options:string'
|
||||
|
||||
|
@ -36,10 +36,7 @@ _launch_tracker() {
|
|||
loopback|lan*|if0*|tun*) return;;
|
||||
esac
|
||||
|
||||
local interface_type
|
||||
config_get interface_type "$1" type
|
||||
|
||||
local hosts timeout tries interval options type
|
||||
local hosts timeout tries interval options type enabled
|
||||
_validate_section "defaults" "defaults"
|
||||
_validate_section "interface" "$1"
|
||||
|
||||
|
@ -50,7 +47,6 @@ _launch_tracker() {
|
|||
|
||||
[ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && return
|
||||
[ $enabled = 0 ] && return
|
||||
[ -z "$type" ] && type="ping"
|
||||
|
||||
procd_open_instance
|
||||
# shellcheck disable=SC2086
|
||||
|
@ -69,9 +65,70 @@ _launch_tracker() {
|
|||
procd_close_instance
|
||||
}
|
||||
|
||||
_initialize_shadowsocks_tracker() {
|
||||
local redir_tcp server tracker_server
|
||||
config_get redir_tcp ss_rules redir_tcp
|
||||
config_get server $redir_tcp server
|
||||
config_get tracker_server "tracker" server
|
||||
[ "$server" = "$tracker_server" ] || {
|
||||
[ -z "$tracker_server" ] && {
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
set shadowsocks-libev.tracker=ss_local
|
||||
set shadowsocks-libev.tracker.server=$server
|
||||
set shadowsocks-libev.tracker.local_address="127.0.0.1"
|
||||
set shadowsocks-libev.tracker.local_port=1111
|
||||
set shadowsocks-libev.tracker.mode=tcp_and_udp
|
||||
set shadowsocks-libev.tracker.timeout=60
|
||||
set shadowsocks-libev.tracker.fast_open=1
|
||||
set shadowsocks-libev.tracker.reuse_port=1
|
||||
set shadowsocks-libev.tracker.mptcp=1
|
||||
set shadowsocks-libev.tracker.verbose=0
|
||||
commit shadowsocks-libev
|
||||
EOF
|
||||
} || {
|
||||
uci -q set shadowsocks-libev.tracker.server=$server
|
||||
}
|
||||
/etc/init.d/shadowsocks-libev restart
|
||||
}
|
||||
}
|
||||
|
||||
_launch_shadowsocks_tracker() {
|
||||
local hosts timeout tries interval local_port enabled
|
||||
|
||||
[ "$1" = "tracker" ] || return
|
||||
|
||||
_validate_section "defaults" "shadowsocks"
|
||||
|
||||
config_get local_port "$1" local_port
|
||||
local disabled
|
||||
config_get disabled "$1" disabled 0
|
||||
|
||||
[ $enabled = 0 ] && return
|
||||
[ $disabled = 1 ] && return
|
||||
|
||||
procd_open_instance
|
||||
# shellcheck disable=SC2086
|
||||
procd_set_param command /bin/omr-tracker-ss "$1"
|
||||
procd_append_param env "OMR_TRACKER_HOSTS=$hosts"
|
||||
procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout"
|
||||
procd_append_param env "OMR_TRACKER_TRIES=$tries"
|
||||
procd_append_param env "OMR_TRACKER_INTERVAL=$interval"
|
||||
procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port"
|
||||
procd_set_param limits nofile="51200 51200"
|
||||
procd_set_param respawn 0 10 0
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load shadowsocks-libev
|
||||
_initialize_shadowsocks_tracker
|
||||
|
||||
config_load network
|
||||
config_foreach _launch_tracker interface
|
||||
|
||||
config_load shadowsocks-libev
|
||||
config_foreach _launch_shadowsocks_tracker ss_local
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
#
|
||||
# Copyright (C) 2017 Yousong Zhou <yszhou4tech@gmail.com>
|
||||
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
USE_PROCD=1
|
||||
EXTRA_COMMANDS="rules_up rules_down"
|
||||
START=99
|
||||
|
||||
ss_confdir=/var/etc/shadowsocks-libev
|
||||
|
@ -169,9 +171,17 @@ ss_xxx() {
|
|||
fi
|
||||
}
|
||||
|
||||
ss_rules_restart() {
|
||||
local cfg="$1"
|
||||
local cfgtype="$2"
|
||||
|
||||
eval "$("validate_${cfgtype}_section" "$cfg" ss_validate_mklocal)"
|
||||
"validate_${cfgtype}_section" "$cfg" || return 1
|
||||
ss_rules_cb
|
||||
}
|
||||
|
||||
ss_rules_cb() {
|
||||
local cfgserver server
|
||||
|
||||
if [ "$cfgtype" = ss_redir ]; then
|
||||
config_get cfgserver "$cfg" server
|
||||
config_get server "$cfgserver" server
|
||||
|
@ -194,7 +204,6 @@ ss_rules() {
|
|||
local local_port_tcp local_port_udp
|
||||
local args
|
||||
local ss_redir_servers4 dst_ips_bypass4 dst_ips_forward4 src_ips_bypass4 src_ips_forward4 src_ips_checkdst4
|
||||
|
||||
[ -x "$bin" ] || return 1
|
||||
config_get cfgtype "$cfg" TYPE
|
||||
[ "$cfgtype" = ss_rules ] || return 1
|
||||
|
@ -307,6 +316,30 @@ stop_service() {
|
|||
rm -rf "$ss_confdir"
|
||||
}
|
||||
|
||||
_rules_status() {
|
||||
[ -n "$(iptables -t nat -L | grep ss_rules_forward)" ] && return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
rules_up() {
|
||||
_rules_status || return 0
|
||||
config_load shadowsocks-libev
|
||||
for cfgtype in ss_redir; do
|
||||
config_foreach ss_rules_restart "$cfgtype" "$cfgtype"
|
||||
done
|
||||
ss_rules
|
||||
ss_rules6
|
||||
}
|
||||
|
||||
rules_down() {
|
||||
_rules_status && return 0
|
||||
local bin="$ss_bindir/ss-rules"
|
||||
[ -x "$bin" ] && "$bin" -f
|
||||
local bin6="$ss_bindir/ss-rules6"
|
||||
[ -x "$bin6" ] && "$bin6" -f
|
||||
}
|
||||
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_interface_trigger wan*
|
||||
procd_add_reload_trigger shadowsocks-libev
|
||||
|
|
Loading…
Reference in a new issue