mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-15 03:51: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["service_addr"] = uci:get("shadowsocks", "proxy", "server") or "0.0.0.0"
|
||||||
mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr")
|
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
|
-- wanaddr
|
||||||
mArray.openmptcprouter["wan_addr"] = sys.exec("wget -4 -qO- -T 1 http://ip.openmptcprouter.com")
|
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)
|
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)
|
if (mArray.openmptcprouter.tun_service == false)
|
||||||
{
|
{
|
||||||
statusMessage += 'TUN service is not running<br/>';
|
statusMessage += 'GloryTUN is not running<br/>';
|
||||||
}
|
}
|
||||||
if (mArray.openmptcprouter.wan_addr == "")
|
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 !== "")
|
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'
|
list hosts '80.67.169.40'
|
||||||
option timeout '1'
|
option timeout '1'
|
||||||
option tries '4'
|
option tries '4'
|
||||||
option interval '2'
|
option interval '4'
|
||||||
option type 'ping'
|
option type 'ping'
|
||||||
option options ''
|
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' \
|
'timeout:uinteger' \
|
||||||
'tries:uinteger' \
|
'tries:uinteger' \
|
||||||
'interval:uinteger' \
|
'interval:uinteger' \
|
||||||
'type:string' \
|
'type:string:ping' \
|
||||||
'enabled:bool:1' \
|
'enabled:bool:1' \
|
||||||
'options:string'
|
'options:string'
|
||||||
|
|
||||||
|
@ -36,10 +36,7 @@ _launch_tracker() {
|
||||||
loopback|lan*|if0*|tun*) return;;
|
loopback|lan*|if0*|tun*) return;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
local interface_type
|
local hosts timeout tries interval options type enabled
|
||||||
config_get interface_type "$1" type
|
|
||||||
|
|
||||||
local hosts timeout tries interval options type
|
|
||||||
_validate_section "defaults" "defaults"
|
_validate_section "defaults" "defaults"
|
||||||
_validate_section "interface" "$1"
|
_validate_section "interface" "$1"
|
||||||
|
|
||||||
|
@ -50,7 +47,6 @@ _launch_tracker() {
|
||||||
|
|
||||||
[ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && return
|
[ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && return
|
||||||
[ $enabled = 0 ] && return
|
[ $enabled = 0 ] && return
|
||||||
[ -z "$type" ] && type="ping"
|
|
||||||
|
|
||||||
procd_open_instance
|
procd_open_instance
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
|
@ -69,9 +65,70 @@ _launch_tracker() {
|
||||||
procd_close_instance
|
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() {
|
start_service() {
|
||||||
|
config_load shadowsocks-libev
|
||||||
|
_initialize_shadowsocks_tracker
|
||||||
|
|
||||||
config_load network
|
config_load network
|
||||||
config_foreach _launch_tracker interface
|
config_foreach _launch_tracker interface
|
||||||
|
|
||||||
|
config_load shadowsocks-libev
|
||||||
|
config_foreach _launch_shadowsocks_tracker ss_local
|
||||||
}
|
}
|
||||||
|
|
||||||
service_triggers() {
|
service_triggers() {
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
#
|
#
|
||||||
# Copyright (C) 2017 Yousong Zhou <yszhou4tech@gmail.com>
|
# 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.
|
# This is free software, licensed under the GNU General Public License v3.
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
#
|
#
|
||||||
|
|
||||||
USE_PROCD=1
|
USE_PROCD=1
|
||||||
|
EXTRA_COMMANDS="rules_up rules_down"
|
||||||
START=99
|
START=99
|
||||||
|
|
||||||
ss_confdir=/var/etc/shadowsocks-libev
|
ss_confdir=/var/etc/shadowsocks-libev
|
||||||
|
@ -169,9 +171,17 @@ ss_xxx() {
|
||||||
fi
|
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() {
|
ss_rules_cb() {
|
||||||
local cfgserver server
|
local cfgserver server
|
||||||
|
|
||||||
if [ "$cfgtype" = ss_redir ]; then
|
if [ "$cfgtype" = ss_redir ]; then
|
||||||
config_get cfgserver "$cfg" server
|
config_get cfgserver "$cfg" server
|
||||||
config_get server "$cfgserver" server
|
config_get server "$cfgserver" server
|
||||||
|
@ -194,7 +204,6 @@ ss_rules() {
|
||||||
local local_port_tcp local_port_udp
|
local local_port_tcp local_port_udp
|
||||||
local args
|
local args
|
||||||
local ss_redir_servers4 dst_ips_bypass4 dst_ips_forward4 src_ips_bypass4 src_ips_forward4 src_ips_checkdst4
|
local ss_redir_servers4 dst_ips_bypass4 dst_ips_forward4 src_ips_bypass4 src_ips_forward4 src_ips_checkdst4
|
||||||
|
|
||||||
[ -x "$bin" ] || return 1
|
[ -x "$bin" ] || return 1
|
||||||
config_get cfgtype "$cfg" TYPE
|
config_get cfgtype "$cfg" TYPE
|
||||||
[ "$cfgtype" = ss_rules ] || return 1
|
[ "$cfgtype" = ss_rules ] || return 1
|
||||||
|
@ -307,6 +316,30 @@ stop_service() {
|
||||||
rm -rf "$ss_confdir"
|
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() {
|
service_triggers() {
|
||||||
procd_add_reload_interface_trigger wan*
|
procd_add_reload_interface_trigger wan*
|
||||||
procd_add_reload_trigger shadowsocks-libev
|
procd_add_reload_trigger shadowsocks-libev
|
||||||
|
|
Loading…
Reference in a new issue