diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 73e8f7046..4e963633d 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -241,38 +241,44 @@ while true; do config_foreach _ping_server server $OMR_TRACKER_DEVICE fi if [ "$serverip_ping" = false ] && [ -n "$OMR_TRACKER_HOST" ]; then - OMR_TRACKER_HOST=$(resolveip -4 $OMR_TRACKER_HOST | tr -d "\n") - if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]; then - # Check if route is not used - while ! ip route add $OMR_TRACKER_HOST via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP > /dev/null 2>&1 - do - logger -t "omr-tracker" "Can't create route to $OMR_TRACKER_HOST via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP. waiting..." - sleep 2 - ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2>&1 - _restart - done - fi - if [ "$OMR_TRACKER_TYPE" = "ping" ]; then - _ping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE" "yes" - statusb=$? - elif [ "$OMR_TRACKER_TYPE" = "httping" ]; then - _httping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" - statusb=$? - elif [ "$OMR_TRACKER_TYPE" = "dns" ]; then - _dns "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" - statusb=$? - fi - ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2>&1 - if $(exit $statusb); then + OMR_TRACKER_HOST=$(resolveip -4 -t 5 $OMR_TRACKER_HOST | head -n 1 | tr -d "\n") + if [ -n "$OMR_TRACKER_HOST" ]; then + if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]; then + # Check if route is not used + while ! ip route add $OMR_TRACKER_HOST via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP > /dev/null 2>&1 + do + logger -t "omr-tracker" "Can't create route to $OMR_TRACKER_HOST via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP. waiting..." + sleep 2 + ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2>&1 + _restart + done + fi + if [ "$OMR_TRACKER_TYPE" = "ping" ]; then + _ping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE" "yes" + statusb=$? + elif [ "$OMR_TRACKER_TYPE" = "httping" ]; then + _httping "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" + statusb=$? + elif [ "$OMR_TRACKER_TYPE" = "dns" ]; then + _dns "$OMR_TRACKER_HOST" "$OMR_TRACKER_DEVICE_IP" "yes" + statusb=$? + fi + ip route del "$OMR_TRACKER_HOST" via "$OMR_TRACKER_DEVICE_GATEWAY" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP" > /dev/null 2>&1 + if $(exit $statusb); then + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + else + if [ "$OMR_TRACKER_LIST_HOSTS" = "" ]; then + OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_HOST" + else + OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_LIST_HOSTS,$OMR_TRACKER_HOST" + fi + fi + else OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_STATUS="OK" break - else - if [ "$OMR_TRACKER_LIST_HOSTS" = "" ]; then - OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_HOST" - else - OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_LIST_HOSTS,$OMR_TRACKER_HOST" - fi fi else OMR_TRACKER_STATUS_MSG="" diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 1b54bcb2e..f5011ca46 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -76,7 +76,7 @@ while true; do last=$((last + 1 )) [ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host" [ "${last}" -ge "${retry}" ] && { - if [ -n "$(iptables -t nat -L -n | grep ss_rules)" ]; then + if [ -n "$(iptables -t nat -L -n | grep ssr)" ]; then _log "Shadowsocks is down (can't contact via http ${nocontact})" uci -q set openmptcprouter.omr.shadowsocks="down" uci -q commit openmptcprouter.omr diff --git a/omr-tracker/files/bin/omr-tracker-v2ray b/omr-tracker/files/bin/omr-tracker-v2ray new file mode 100755 index 000000000..d8c275b24 --- /dev/null +++ b/omr-tracker/files/bin/omr-tracker-v2ray @@ -0,0 +1,95 @@ +#!/bin/sh +# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : + +name=$0 +basename="$(basename $0)" + +_log() { + logger -p daemon.info -t "${basename}" "$@" +} + +_ping_server() { + local host=$1 + ret=$(ping \ + -w "$OMR_TRACKER_TIMEOUT" \ + -c 1 \ + -q \ + "${host}" + ) && echo "$ret" | grep -sq " 0% packet loss" && { + server_ping=true + } +} + +_get_ip() { + uci -q set openmptcprouter.omr=router + if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then + check_ipv4_website="$(uci -q get openmptcprouter.settings.check_ipv4_website)" + [ -z "$check_ipv4_website" ] && check_ipv4_website="http://ip.openmptcprouter.com" + check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)" + [ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com" + uci -q set openmptcprouter.omr.detected_public_ipv4="$(curl -s -4 -m 3 $check_ipv4_website)" + if [ "$(uci -q get openmptcprouter.omr.shadowsocks)" != "down" ]; then + uci -q set openmptcprouter.omr.detected_ss_ipv4="$(curl -s -4 --socks5 "${proxy}" --max-time 3 $check_ipv4_website)" + fi + if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ]; then + uci -q set openmptcprouter.omr.detected_public_ipv6="$(curl -s -6 -m 3 $check_ipv6_website)" + # uci -q set openmptcprouter.omr.detected_ss_ipv6=$(curl -s -6 --socks5 ":::1111" --max-time 3 http://ip.openmptcprouter.com) + fi + fi + uci -q commit openmptcprouter +} + +timeout=${OMR_TRACKER_TIMEOUT:-5} +interval=${OMR_TRACKER_INTERVAL:-10} +retry=${OMR_TRACKER_TRIES:-4} +proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} +hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} + +nodns=0 + +last=0 +nocontact="" +uci -q set openmptcprouter.omr=router +uci -q delete openmptcprouter.omr.v2ray +_get_ip + +while true; do + host="${hosts%% *}" + [ "$host" = "$hosts" ] || { + hosts="${hosts#* } $host" + } + if [ "$(curl -s -I -w %{http_code} --socks5 ${proxy} --max-time ${timeout} $host -o /dev/null)" != "000" ]; then + nocontact="" + [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.v2ray)" = "" ] && { + _log "V2Ray is up (can contact via http ${host})" + uci -q set openmptcprouter.omr.v2ray="up" + uci -q commit openmptcprouter.omr + } + if [ -z "$(iptables -t nat -L -n | grep v2r)" ]; then + _log "Reload V2Ray rules" + /etc/init.d/v2ray rules_up 2> /dev/null + _get_ip + fi + [ "$(uci -q get openmptcprouter.omr.detected_public_ipv4)" = "" ] || ([ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.detected_public_ipv6)" = "" ]) && _get_ip + last=0 + else + last=$((last + 1 )) + [ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host" + [ "${last}" -ge "${retry}" ] && { + if [ -n "$(iptables -t nat -L -n | grep v2r)" ]; then + _log "V2Ray is down (can't contact via http ${nocontact})" + uci -q set openmptcprouter.omr.v2ray="down" + uci -q commit openmptcprouter.omr + /etc/init.d/v2ray rules_down 2> /dev/null + _get_ip + server_ping=false + server="$(uci -q get v2ray.omrout.s_vless_address)" + _ping_server $server + if [ "$server_ping" = false ]; then + _log "Server ($server) seems down, no answer to ping" + fi + fi + } + fi + sleep "${interval}" +done diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 837d8b6bc..b676ce57c 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -18,7 +18,7 @@ config defaults 'defaults' option type 'ping' option options '' -config shadowsocks 'shadowsocks' +config proxy 'proxy' option enabled '1' list hosts '1.1.1.1' list hosts '1.0.0.1' diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index ef296eea7..5226092af 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -143,7 +143,7 @@ _launch_shadowsocks_tracker() { [ "$1" = "tracker" ] || return - _validate_section "shadowsocks" "shadowsocks" + _validate_section "proxy" "proxy" config_get local_port "$1" local_port local disabled @@ -167,6 +167,26 @@ _launch_shadowsocks_tracker() { procd_close_instance } +_launch_v2ray_tracker() { + local hosts timeout tries interval local_port enabled server + + _validate_section "proxy" "proxy" + [ "$enabled" = "0" ] || [ -z "$hosts" ] && 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:1111" + procd_set_param limits nofile="51200 51200" + procd_set_param respawn 0 10 0 + procd_set_param stderr 1 + procd_close_instance +} + _multi_server() { config_get backup $1 backup [ "$backup" = "1" ] && multiserver=true @@ -187,6 +207,11 @@ start_service() { #elif [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ]; then # /etc/init.d/shadowsocks-libev rules_down fi + config_load v2ray + config_get v2rayenabled main enabled + if [ "$v2rayenabled" = "1" ]; then + _launch_v2ray_tracker + fi multiserver=false config_load openmptcprouter diff --git a/omr-tracker/files/etc/uci-defaults/omr-tracker b/omr-tracker/files/etc/uci-defaults/omr-tracker index 3ef1818dd..27bebbd16 100755 --- a/omr-tracker/files/etc/uci-defaults/omr-tracker +++ b/omr-tracker/files/etc/uci-defaults/omr-tracker @@ -23,16 +23,24 @@ if [ "$(uci -q get omr-tracker.defaults.interval_tries)" = "" ]; then commit omr-tracker EOF fi -if [ "$(uci -q get omr-tracker.shadowsocks.hosts | grep '23.96.52.53')" != "" ]; then + +if [ "$(uci -q get omr-tracker.shadowsocks)" != "" ]; then uci -q batch <<-EOF >/dev/null - del_list omr-tracker.shadowsocks.hosts='23.96.52.53' - del_list omr-tracker.shadowsocks.hosts='104.40.211.35' - del_list omr-tracker.shadowsocks.hosts='80.67.169.12' - add_list omr-tracker.shadowsocks.hosts='104.16.1.1' - add_list omr-tracker.shadowsocks.hosts='103.224.182.242' - add_list omr-tracker.shadowsocks.hosts='198.27.92.1' - add_list omr-tracker.shadowsocks.hosts='88.191.250.176' - add_list omr-tracker.shadowsocks.hosts='151.101.129.164' + rename omr-tracker.shadowsocks=proxy + uci set omr-tracker.proxy=proxy + EOF +fi + +if [ "$(uci -q get omr-tracker.proxy.hosts | grep '23.96.52.53')" != "" ]; then + uci -q batch <<-EOF >/dev/null + del_list omr-tracker.proxy.hosts='23.96.52.53' + del_list omr-tracker.proxy.hosts='104.40.211.35' + del_list omr-tracker.proxy.hosts='80.67.169.12' + add_list omr-tracker.proxy.hosts='104.16.1.1' + add_list omr-tracker.proxy.hosts='103.224.182.242' + add_list omr-tracker.proxy.hosts='198.27.92.1' + add_list omr-tracker.proxy.hosts='88.191.250.176' + add_list omr-tracker.proxy.hosts='151.101.129.164' EOF fi exit 0 \ No newline at end of file