1
0
Fork 0
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:
Ycarus 2018-05-09 11:15:43 +02:00
parent 0e22cbd6b2
commit 0387798d74
6 changed files with 146 additions and 12 deletions

View file

@ -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")

View file

@ -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 !== "")

View 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

View file

@ -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'

View file

@ -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() {

View file

@ -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