1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +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

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