From 5e435e319424b28116341d9a41dcad7871d0a085 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 13 Oct 2018 21:40:15 +0200 Subject: [PATCH] Fix check of ShadowSocks rules --- .../usr/share/omr/post-tracking.d/post-tracking | 4 ++-- omr-tracker/files/bin/omr-tracker-ss | 17 +++++++++++------ shadowsocks-libev/files/shadowsocks-libev.init | 12 +++++++----- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index ef29861e9..4c4ca3860 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -163,7 +163,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ]; then _log "Tunnel down use ShadowSocks for UDP" uci -q set shadowsocks-libev.ss_rules.redir_udp='hi2' - if /etc/init.d/shadowsocks-libev rules_status ; then + if /etc/init.d/shadowsocks-libev rules_exist ; then /etc/init.d/shadowsocks-libev rules_down /etc/init.d/shadowsocks-libev rules_up /etc/init.d/omr-bypass reload >/dev/null 2>&1 @@ -181,7 +181,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi2" ]; then _log "Tunnel up disable use of ShadowSocks for UDP" uci -q delete shadowsocks-libev.ss_rules.redir_udp - if /etc/init.d/shadowsocks-libev rules_status ; then + if /etc/init.d/shadowsocks-libev rules_exist ; then /etc/init.d/shadowsocks-libev rules_down /etc/init.d/shadowsocks-libev rules_up /etc/init.d/omr-bypass reload >/dev/null 2>&1 diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 33b69dd6c..4385caf3e 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -37,19 +37,24 @@ while true; do [ "${last}" -ge "${retry}" ] && { log "Shadowsocks is up (can contact ${host})" uci -q set openmptcprouter.vps.shadowsocks="up" - get_ip - /etc/init.d/shadowsocks-libev rules_up 2> /dev/null - [ "$(uci -q get openmptcprouter.vps.ipv4)" = "" ] || ([ "$(sysctl -n net.ipv6.conf.all.disable_ipv6 | tr -d '\n')" = "0" ] && [ "$(uci -q get openmptcprouter.vps.ipv6)" = "" ]) && get_ip - /etc/init.d/omr-bypass reload 2> /dev/null } + if ! /etc/init.d/shadowsocks-libev rules_exist ; then + /etc/init.d/shadowsocks-libev rules_up 2> /dev/null + /etc/init.d/omr-bypass reload 2> /dev/null + get_ip + fi + [ "$(uci -q get openmptcprouter.vps.ipv4)" = "" ] || ([ "$(sysctl -n net.ipv6.conf.all.disable_ipv6 | tr -d '\n')" = "0" ] && [ "$(uci -q get openmptcprouter.vps.ipv6)" = "" ]) && get_ip last=0 else last=$((last + 1 )) [ "${last}" -eq "${retry}" ] && { log "Shadowsocks is down (can't contact ${host})" uci -q set openmptcprouter.vps.shadowsocks="down" - /etc/init.d/shadowsocks-libev rules_down 2> /dev/null - /etc/init.d/omr-bypass reload 2> /dev/null + if /etc/init.d/shadowsocks-libev rules_exist ; then + /etc/init.d/shadowsocks-libev rules_down 2> /dev/null + /etc/init.d/omr-bypass reload 2> /dev/null + get_ip + fi } fi sleep "${interval}" diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 5539b0091..99e7755d5 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -326,13 +326,14 @@ reload_service() { start } -rules_status() { - [ -n "$(iptables -t nat -L | grep ss_rules_forward)" ] && return 1 - return 0 +rules_exist() { + [ -n "$(iptables -t nat -L | grep ss_rules_forward)" ] && return 0 + return 1 } rules_up() { - rules_status || return 0 + rules_exist && return 0 + logger -t "Shadowsocks" "Rules UP" config_load shadowsocks-libev for cfgtype in ss_redir; do config_foreach ss_rules_restart "$cfgtype" "$cfgtype" @@ -342,7 +343,8 @@ rules_up() { } rules_down() { - rules_status && return 0 + rules_exist || return 0 + logger -t "Shadowsocks" "Rules DOWN" local bin="$ss_bindir/ss-rules" [ -x "$bin" ] && "$bin" -f local bin6="$ss_bindir/ss-rules6"