2020-05-20 08:03:51 +00:00
|
|
|
#!/bin/sh
|
|
|
|
# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
|
|
|
|
|
|
|
|
name=$0
|
|
|
|
basename="$(basename $0)"
|
|
|
|
|
2024-02-22 17:34:35 +00:00
|
|
|
. /usr/lib/unbound/iptools.sh
|
|
|
|
|
2024-04-03 12:06:33 +00:00
|
|
|
export OMR_TRACKER_STATUS
|
|
|
|
export OMR_TRACKER_STATUS_MSG
|
|
|
|
|
2020-05-20 08:03:51 +00:00
|
|
|
_log() {
|
|
|
|
logger -p daemon.info -t "${basename}" "$@"
|
|
|
|
}
|
|
|
|
|
2024-03-28 17:38:19 +00:00
|
|
|
_post_tracking() {
|
|
|
|
[ ! -d /usr/share/omr/server-post-tracking.d/ ] && return
|
|
|
|
for tracker_bin in /usr/share/omr/server-post-tracking.d/*; do
|
|
|
|
[ -x "$tracker_bin" ] && (
|
|
|
|
_log() {
|
|
|
|
logger -t "post-tracking-${tracker_bin##*/}" "$*"
|
|
|
|
}
|
|
|
|
. "$tracker_bin" 2>&1
|
|
|
|
)
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2020-05-20 08:03:51 +00:00
|
|
|
_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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_check_server() {
|
|
|
|
local host=$1
|
|
|
|
local port=$2
|
|
|
|
local k=0
|
2024-02-22 17:34:35 +00:00
|
|
|
local valid_ip6=$(valid_subnet6 $host)
|
2020-05-20 08:03:51 +00:00
|
|
|
while [ "$server_ping" = false ] && [ "$k" -le "$retry" ]; do
|
2024-02-22 17:34:35 +00:00
|
|
|
if [ "$valid_ip6" != "ok" ]; then
|
|
|
|
ret=$(curl \
|
|
|
|
--max-time "$OMR_TRACKER_TIMEOUT" \
|
|
|
|
-s \
|
|
|
|
-k \
|
|
|
|
"https://${host}:${port}/"
|
|
|
|
)
|
|
|
|
else
|
|
|
|
ret=$(curl \
|
|
|
|
--max-time "$OMR_TRACKER_TIMEOUT" \
|
|
|
|
-s \
|
|
|
|
-k \
|
|
|
|
"https://[${host}]:${port}/"
|
|
|
|
)
|
|
|
|
fi
|
2020-05-20 08:03:51 +00:00
|
|
|
[ -n "$ret" ] && server_ping=true
|
|
|
|
k=$((k+1))
|
|
|
|
sleep "${intervaltries}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2024-01-10 16:35:17 +00:00
|
|
|
_check_server_intf() {
|
|
|
|
local host=$1
|
|
|
|
local port=$2
|
2024-02-22 17:34:35 +00:00
|
|
|
local valid_ip6=$(valid_subnet6 $host)
|
2024-03-15 14:15:56 +00:00
|
|
|
for intf in $(multipath 2>/dev/null | awk '/default/ {print $1}'); do
|
2024-01-19 10:48:08 +00:00
|
|
|
local k=0
|
2024-01-10 16:35:17 +00:00
|
|
|
while [ "$server_ping" = false ] && [ "$k" -le "$retry" ]; do
|
2024-02-22 17:34:35 +00:00
|
|
|
if [ "$valid_ip6" != "ok" ]; then
|
|
|
|
ret=$(curl \
|
|
|
|
--max-time "$OMR_TRACKER_TIMEOUT" \
|
|
|
|
-s \
|
|
|
|
-k \
|
|
|
|
--interface $intf \
|
|
|
|
"https://${host}:${port}/"
|
|
|
|
)
|
|
|
|
else
|
|
|
|
ret=$(curl \
|
|
|
|
--max-time "$OMR_TRACKER_TIMEOUT" \
|
|
|
|
-s \
|
|
|
|
-k \
|
|
|
|
"https://[${host}%${intf}]:${port}/"
|
|
|
|
)
|
|
|
|
fi
|
2024-01-10 16:35:17 +00:00
|
|
|
[ -n "$ret" ] && {
|
|
|
|
server_ping=true
|
|
|
|
}
|
|
|
|
k=$((k+1))
|
|
|
|
sleep "${intervaltries}"
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2024-04-26 17:19:28 +00:00
|
|
|
_get_server_name() {
|
|
|
|
local serverid=$1
|
|
|
|
local serverip=$2
|
|
|
|
config_get serveripc $serverid server
|
|
|
|
if [ "$serveripc" = "$serverip" ]; then
|
|
|
|
servername=$serverid
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2023-12-30 07:51:42 +00:00
|
|
|
_disable_current() {
|
|
|
|
local serv=$1
|
2024-04-26 17:19:28 +00:00
|
|
|
uci -q set openmptcprouter.${server}.current=0
|
2023-12-30 07:51:42 +00:00
|
|
|
}
|
|
|
|
|
2021-02-09 13:35:48 +00:00
|
|
|
_disable_redir() {
|
|
|
|
local redir=$1
|
2024-04-26 17:19:28 +00:00
|
|
|
local serverdisable=$2
|
|
|
|
local shadowsocks="$3"
|
|
|
|
config_get serverss $redir server
|
|
|
|
if [ "$serverss" = "$serverdisable" ]; then
|
|
|
|
uci -q set ${shadowsocks}.${redir}.disabled=1
|
2021-02-09 13:35:48 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
_enable_redir() {
|
|
|
|
local redir=$1
|
2024-04-26 17:19:28 +00:00
|
|
|
local shadowsocks="$2"
|
|
|
|
config_get serverss $redir server
|
|
|
|
if [ "$serverss" = "sss${count}" ]; then
|
|
|
|
uci -q set ${shadowsocks}.${redir}.disabled=0
|
2021-02-09 13:35:48 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2020-05-20 08:03:51 +00:00
|
|
|
_check_master() {
|
|
|
|
local name=$1
|
2021-01-25 08:32:23 +00:00
|
|
|
local count=0
|
2021-02-09 13:35:48 +00:00
|
|
|
local countips=0
|
2021-03-23 08:52:58 +00:00
|
|
|
local changes="0"
|
2020-05-20 08:03:51 +00:00
|
|
|
config_get master $1 master
|
|
|
|
config_get ip $1 ip
|
|
|
|
config_get port $1 port "65500"
|
2020-11-05 09:21:14 +00:00
|
|
|
config_get disabled $1 disabled
|
2024-02-22 17:34:35 +00:00
|
|
|
serverip=""
|
2020-11-05 09:21:14 +00:00
|
|
|
[ "$master" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && {
|
2024-02-22 17:34:35 +00:00
|
|
|
check_ip() {
|
2023-12-10 17:47:17 +00:00
|
|
|
local ipd=$1
|
2024-05-13 18:23:32 +00:00
|
|
|
server_ping=false
|
2024-04-26 17:19:28 +00:00
|
|
|
#[ -n "$serverip" ] && [ "$server_ping" = true ] && return
|
2023-12-10 17:47:17 +00:00
|
|
|
ipresolve="$(resolveip -4 $ipd | head -n 1)"
|
2023-11-10 09:13:08 +00:00
|
|
|
if [ -n "$ipresolve" ]; then
|
2024-02-22 17:34:35 +00:00
|
|
|
serverip="$ipresolve"
|
2023-11-10 09:13:08 +00:00
|
|
|
else
|
2023-12-10 17:47:17 +00:00
|
|
|
ip6resolve="$(resolveip -6 $ipd | head -n 1)"
|
2024-02-22 17:34:35 +00:00
|
|
|
[ -n "$ip6resolve" ] && serverip="$ip6resolve"
|
2023-11-10 09:13:08 +00:00
|
|
|
fi
|
2024-02-22 17:34:35 +00:00
|
|
|
[ -z "$serverip" ] && return
|
|
|
|
#_ping_server $serverip
|
|
|
|
#_check_server $serverip $port
|
|
|
|
_check_server_intf $serverip $port
|
2024-04-26 17:19:28 +00:00
|
|
|
[ "$server_ping" = true ] && {
|
2024-05-06 10:54:54 +00:00
|
|
|
oneserverup="1"
|
2024-04-26 17:19:28 +00:00
|
|
|
}
|
2024-02-22 17:34:35 +00:00
|
|
|
countips=$((countips+1))
|
2024-04-26 17:19:28 +00:00
|
|
|
set_ip
|
2024-02-22 17:34:35 +00:00
|
|
|
}
|
|
|
|
set_ip() {
|
|
|
|
ip="$serverip"
|
2021-02-09 13:35:48 +00:00
|
|
|
if [ "$server_ping" = true ]; then
|
2024-06-06 13:13:04 +00:00
|
|
|
if ([ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]); then
|
2021-02-09 13:35:48 +00:00
|
|
|
logger -t "OMR-Tracker-Server" "Master server ${name} up ($ip), set it back"
|
2021-03-23 08:52:58 +00:00
|
|
|
changes="1"
|
2021-02-09 13:35:48 +00:00
|
|
|
#logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n') - $ip"
|
2021-01-25 08:32:23 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
2024-06-04 07:37:16 +00:00
|
|
|
set shadowsocks-libev.sss${count}.server="$ip"
|
|
|
|
set shadowsocks-rust.sss${count}.server="$ip"
|
2021-01-25 08:32:23 +00:00
|
|
|
EOF
|
2024-05-06 16:20:50 +00:00
|
|
|
if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks-rust" ]; then
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set shadowsocks-rust.sss${count}.disabled=0
|
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks" ]; then
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set shadowsocks-libev.sss${count}.disabled=0
|
|
|
|
EOF
|
|
|
|
fi
|
2024-05-28 11:14:45 +00:00
|
|
|
if [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]; then
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
2024-06-04 07:37:16 +00:00
|
|
|
add_list openvpn.omr.remote="$ip"
|
2024-05-28 11:14:45 +00:00
|
|
|
EOF
|
|
|
|
fi
|
2021-02-09 13:35:48 +00:00
|
|
|
if [ "$count" -eq "0" ]; then
|
2023-12-30 07:51:42 +00:00
|
|
|
config_load openmptcprouter
|
|
|
|
config_foreach _disable_current server
|
2021-02-09 13:35:48 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
2024-06-04 07:37:16 +00:00
|
|
|
set xray.omrout.s_vmess_address="$ip"
|
|
|
|
set xray.omrout.s_vless_address="$ip"
|
|
|
|
set xray.omrout.s_vless_reality_address="$ip"
|
|
|
|
set xray.omrout.s_trojan_address="$ip"
|
|
|
|
set xray.omrout.s_socks_address="$ip"
|
|
|
|
set xray.omrout.s_shadowsocks_address="$ip"
|
|
|
|
set v2ray.omrout.s_vmess_address="$ip"
|
|
|
|
set v2ray.omrout.s_vless_address="$ip"
|
|
|
|
set v2ray.omrout.s_trojan_address="$ip"
|
|
|
|
set v2ray.omrout.s_socks_address="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit v2ray
|
2023-11-04 07:23:14 +00:00
|
|
|
commit xray
|
2024-06-04 07:37:16 +00:00
|
|
|
set glorytun.vpn.host="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit glorytun
|
2024-06-04 07:37:16 +00:00
|
|
|
glorytun-udp.vpn.host="$ip"
|
2022-06-02 17:10:56 +00:00
|
|
|
commit glorytun
|
2024-06-04 07:37:16 +00:00
|
|
|
set dsvpn.vpn.host="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit dsvpn
|
2024-06-04 07:37:16 +00:00
|
|
|
set mlvpn.general.host="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit mlvpn
|
|
|
|
del openvpn.omr.remote
|
2024-06-04 07:37:16 +00:00
|
|
|
add_list openvpn.omr.remote="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit openvpn
|
2023-08-24 12:36:42 +00:00
|
|
|
set openmptcprouter.${name}.current='1'
|
2022-08-14 06:53:24 +00:00
|
|
|
commit openmptcprouter
|
2021-02-09 13:35:48 +00:00
|
|
|
EOF
|
|
|
|
/etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null
|
2024-03-12 19:09:24 +00:00
|
|
|
#/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
/etc/init.d/v2ray restart >/dev/null 2>/dev/null
|
2023-11-04 07:23:14 +00:00
|
|
|
/etc/init.d/xray restart >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
/etc/init.d/glorytun restart >/dev/null 2>/dev/null
|
|
|
|
/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null
|
|
|
|
/etc/init.d/mlvpn restart >/dev/null 2>/dev/null
|
2024-05-29 17:55:24 +00:00
|
|
|
#/etc/init.d/openvpn restart omr >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
/etc/init.d/dsvpn restart >/dev/null 2>/dev/null
|
2022-08-14 06:53:24 +00:00
|
|
|
/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
fi
|
2021-01-25 08:32:23 +00:00
|
|
|
fi
|
2021-02-09 13:35:48 +00:00
|
|
|
config_load shadowsocks-libev
|
2024-04-26 17:19:28 +00:00
|
|
|
config_foreach _enable_redir ss_redir "shadowsocks-libev"
|
2023-12-01 08:46:00 +00:00
|
|
|
config_load shadowsocks-rust
|
2024-04-26 17:19:28 +00:00
|
|
|
config_foreach _enable_redir ss_redir "shadowsocks-rust"
|
2024-05-06 16:20:50 +00:00
|
|
|
|
2023-08-24 12:36:42 +00:00
|
|
|
OMR_TRACKER_STATUS_MSG="Answer to ping and to API check"
|
|
|
|
mail_alert="$(uci -q get omr-tracker.server.mail_alert)"
|
|
|
|
#[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
|
|
|
|
[ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && {
|
|
|
|
OMR_SYSNAME="$(uci -q get system.@system[0].hostname)"
|
|
|
|
if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then
|
|
|
|
mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)"
|
|
|
|
mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)"
|
|
|
|
mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to)
|
|
|
|
else
|
|
|
|
echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is UP\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to)
|
|
|
|
fi
|
|
|
|
}
|
2024-04-03 12:06:33 +00:00
|
|
|
OMR_TRACKER_STATUS="OK"
|
2024-01-18 13:36:29 +00:00
|
|
|
script_alert_up="$(uci -q get omr-tracker.proxy.script_alert_up)"
|
|
|
|
[ -n "$script_alert_up" ] && eval $script_alert_up
|
2021-02-09 13:35:48 +00:00
|
|
|
count=$((count+1))
|
|
|
|
else
|
2024-05-07 09:23:03 +00:00
|
|
|
[ -n "$ip" ] && [ -z "$(logread | tail -n 10 | grep "Master server ${name} down" | grep "$ip")" ] && logger -t "OMR-Tracker-Server" "Master server ${name} down ($ip)"
|
2023-08-24 12:36:42 +00:00
|
|
|
OMR_TRACKER_STATUS_MSG="No answer to ping and API check"
|
2024-04-26 17:19:28 +00:00
|
|
|
servername=""
|
2021-02-09 13:35:48 +00:00
|
|
|
config_load shadowsocks-libev
|
2024-06-04 07:37:16 +00:00
|
|
|
config_foreach _get_server_name server "$ip"
|
2024-04-26 17:19:28 +00:00
|
|
|
[ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-libev"
|
|
|
|
servername=""
|
2023-12-01 08:46:00 +00:00
|
|
|
config_load shadowsocks-rust
|
2024-06-04 07:37:16 +00:00
|
|
|
config_foreach _get_server_name server "$ip"
|
2024-04-26 17:19:28 +00:00
|
|
|
[ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-rust"
|
|
|
|
|
2024-05-28 11:14:45 +00:00
|
|
|
if [ -n "$(uci -q get openvpn.omr.remote | grep $ip)" ]; then
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
2024-06-04 07:37:16 +00:00
|
|
|
del_list openvpn.omr.remote="$ip"
|
2024-05-28 11:14:45 +00:00
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2024-04-26 17:19:28 +00:00
|
|
|
OMR_TRACKER_STATUS_MSG="No answer to ping and to API check"
|
2023-08-24 12:36:42 +00:00
|
|
|
mail_alert="$(uci -q get omr-tracker.server.mail_alert)"
|
|
|
|
#[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
|
|
|
|
[ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && {
|
|
|
|
OMR_SYSNAME="$(uci -q get system.@system[0].hostname)"
|
|
|
|
if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then
|
|
|
|
mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)"
|
|
|
|
mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)"
|
|
|
|
mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to)
|
|
|
|
else
|
|
|
|
echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is down\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to)
|
|
|
|
fi
|
|
|
|
}
|
2024-04-03 12:06:33 +00:00
|
|
|
OMR_TRACKER_STATUS="ERROR"
|
2023-08-24 12:36:42 +00:00
|
|
|
script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)"
|
|
|
|
[ -n "$script_alert_down" ] && eval $script_alert_down
|
2021-02-09 13:35:48 +00:00
|
|
|
fi
|
2020-05-20 08:03:51 +00:00
|
|
|
}
|
2022-06-02 13:52:43 +00:00
|
|
|
config_load openmptcprouter
|
2024-02-22 17:34:35 +00:00
|
|
|
config_list_foreach $1 ip check_ip
|
2024-04-26 17:19:28 +00:00
|
|
|
#set_ip
|
2021-03-23 08:52:58 +00:00
|
|
|
#if [ "$server_ping" = true ] && [ "$countips" = "1" ]; then
|
|
|
|
# uci -q batch <<-EOF >/dev/null
|
|
|
|
# set shadowsocks-libev.sss${count}.server=$ip
|
|
|
|
# EOF
|
|
|
|
# config_foreach _enable_redir ss_redir
|
|
|
|
#fi
|
2024-05-06 10:54:54 +00:00
|
|
|
if [ "$oneserverup" = "0" ]; then
|
2024-04-26 17:19:28 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set openmptcprouter.${name}.current='0'
|
|
|
|
commit openmptcprouter
|
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
[ -n "$(uci changes shadowsocks-libev)" ] && changes="1"
|
|
|
|
[ -n "$(uci changes shadowsocks-rust)" ] && changes="1"
|
2024-05-28 11:14:45 +00:00
|
|
|
[ -n "$(uci changes openvpn)" ] && changes="1"
|
2021-03-23 08:52:58 +00:00
|
|
|
uci -q commit shadowsocks-libev
|
2023-12-01 08:46:00 +00:00
|
|
|
uci -q commit shadowsocks-rust
|
2024-05-28 11:14:45 +00:00
|
|
|
uci -q commit openvpn
|
2023-12-01 08:46:00 +00:00
|
|
|
[ "$changes" = "1" ] && {
|
|
|
|
/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null
|
|
|
|
/etc/init.d/shadowsocks-rust restart >/dev/null 2>/dev/null
|
2024-05-28 11:14:45 +00:00
|
|
|
/etc/init.d/openvpn restart omr >/dev/null 2>/dev/null
|
2024-06-24 13:43:13 +00:00
|
|
|
/etc/init.d/dnsmasq restart >/dev/null 2>/dev/null
|
2023-12-01 08:46:00 +00:00
|
|
|
}
|
2020-05-20 08:03:51 +00:00
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_check_backup() {
|
|
|
|
local name=$1
|
2021-01-25 08:32:23 +00:00
|
|
|
local count=0
|
2021-02-09 13:35:48 +00:00
|
|
|
local countips=0
|
2021-03-23 08:52:58 +00:00
|
|
|
local changes="0"
|
2020-05-20 08:03:51 +00:00
|
|
|
config_get backup $1 backup
|
|
|
|
config_get ip $1 ip
|
|
|
|
config_get port $1 port
|
2020-11-05 09:21:14 +00:00
|
|
|
config_get disabled $1 disabled
|
2024-02-22 17:34:35 +00:00
|
|
|
serverip=""
|
2020-11-05 09:21:14 +00:00
|
|
|
[ "$backup" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && {
|
2024-02-22 17:34:35 +00:00
|
|
|
check_ip() {
|
|
|
|
local ipd=$1
|
2024-05-13 18:23:32 +00:00
|
|
|
server_ping=false
|
|
|
|
#[ -n "$serverip" ] && [ "$server_ping" = true ] && return
|
2024-02-22 17:34:35 +00:00
|
|
|
ipresolve="$(resolveip -4 $ipd | head -n 1)"
|
2023-11-10 09:13:08 +00:00
|
|
|
if [ -n "$ipresolve" ]; then
|
2024-02-22 17:34:35 +00:00
|
|
|
serverip="$ipresolve"
|
2023-11-10 09:13:08 +00:00
|
|
|
else
|
2024-02-22 17:34:35 +00:00
|
|
|
ip6resolve="$(resolveip -6 $ipd | head -n 1)"
|
|
|
|
[ -n "$ip6resolve" ] && serverip="$ip6resolve"
|
2023-11-10 09:13:08 +00:00
|
|
|
fi
|
2024-02-22 17:34:35 +00:00
|
|
|
[ -z "$serverip" ] && return
|
|
|
|
#_ping_server $serverip
|
|
|
|
#_check_server $serverip $port
|
|
|
|
_check_server_intf $serverip $port
|
2024-05-06 10:54:54 +00:00
|
|
|
[ "$server_ping" = true ] && {
|
|
|
|
oneserverup="1"
|
|
|
|
}
|
2024-02-22 17:34:35 +00:00
|
|
|
countips=$((countips+1))
|
|
|
|
}
|
|
|
|
set_ip() {
|
|
|
|
ip="$serverip"
|
2021-02-09 13:35:48 +00:00
|
|
|
#[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" = "$ip" ] && break
|
|
|
|
if [ "$server_ping" = true ]; then
|
2024-06-06 13:13:04 +00:00
|
|
|
if ([ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]); then
|
2021-02-09 13:35:48 +00:00
|
|
|
logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)"
|
2021-03-23 08:52:58 +00:00
|
|
|
changes="1"
|
2021-01-25 08:32:23 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
2024-06-04 07:37:16 +00:00
|
|
|
set shadowsocks-libev.sss${count}.server="$ip"
|
|
|
|
set shadowsocks-rust.sss${count}.server="$ip"
|
2021-01-25 08:32:23 +00:00
|
|
|
EOF
|
2024-05-06 16:20:50 +00:00
|
|
|
if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks-rust" ]; then
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set shadowsocks-rust.sss${count}.disabled=0
|
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks" ]; then
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set shadowsocks-libev.sss${count}.disabled=0
|
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
|
2021-02-09 13:35:48 +00:00
|
|
|
if [ "$count" -eq "0" ]; then
|
2023-12-30 07:51:42 +00:00
|
|
|
config_load openmptcprouter
|
|
|
|
config_foreach _disable_current server
|
2021-02-09 13:35:48 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
2024-06-04 07:37:16 +00:00
|
|
|
set xray.omrout.s_vmess_address="$ip"
|
|
|
|
set xray.omrout.s_vless_address="$ip"
|
|
|
|
set xray.omrout.s_vless_reality_address="$ip"
|
|
|
|
set xray.omrout.s_trojan_address="$ip"
|
|
|
|
set xray.omrout.s_socks_address="$ip"
|
|
|
|
set xray.omrout.s_shadowsocks_address="$ip"
|
|
|
|
set v2ray.omrout.s_vmess_address="$ip"
|
|
|
|
set v2ray.omrout.s_vless_address="$ip"
|
|
|
|
set v2ray.omrout.s_trojan_address="$ip"
|
|
|
|
set v2ray.omrout.s_socks_address="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit v2ray
|
2023-11-04 07:23:14 +00:00
|
|
|
commit xray
|
2024-06-04 07:37:16 +00:00
|
|
|
set glorytun.vpn.host="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit glorytun
|
2024-06-04 07:37:16 +00:00
|
|
|
glorytun-udp.vpn.host="$ip"
|
2022-06-02 17:10:56 +00:00
|
|
|
commit glorytun
|
2024-06-04 07:37:16 +00:00
|
|
|
set dsvpn.vpn.host="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit dsvpn
|
2024-06-04 07:37:16 +00:00
|
|
|
set mlvpn.general.host="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit mlvpn
|
|
|
|
del openvpn.omr.remote
|
2024-06-04 07:37:16 +00:00
|
|
|
add_list openvpn.omr.remote="$ip"
|
2021-02-09 13:35:48 +00:00
|
|
|
commit openvpn
|
2023-08-24 12:36:42 +00:00
|
|
|
set openmptcprouter.${name}.current='1'
|
2022-08-14 06:53:24 +00:00
|
|
|
commit openmptcprouter
|
2021-02-09 13:35:48 +00:00
|
|
|
EOF
|
|
|
|
/etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null
|
2024-03-12 19:09:24 +00:00
|
|
|
#/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
/etc/init.d/v2ray restart >/dev/null 2>/dev/null
|
2023-12-01 08:46:00 +00:00
|
|
|
/etc/init.d/xray restart >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
/etc/init.d/glorytun restart >/dev/null 2>/dev/null
|
|
|
|
/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null
|
|
|
|
/etc/init.d/mlvpn restart >/dev/null 2>/dev/null
|
2024-05-29 17:55:24 +00:00
|
|
|
#/etc/init.d/openvpn restart omr >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
/etc/init.d/dsvpn restart >/dev/null 2>/dev/null
|
2022-08-14 06:53:24 +00:00
|
|
|
/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null
|
2021-02-09 13:35:48 +00:00
|
|
|
fi
|
|
|
|
sleep $waittest
|
2021-01-25 08:32:23 +00:00
|
|
|
fi
|
2024-04-26 17:19:28 +00:00
|
|
|
|
2021-02-09 13:35:48 +00:00
|
|
|
config_load shadowsocks-libev
|
2024-04-26 17:19:28 +00:00
|
|
|
config_foreach _enable_redir ss_redir "shadowsocks-libev"
|
2023-12-01 08:46:00 +00:00
|
|
|
config_load shadowsocks-rust
|
2024-04-26 17:19:28 +00:00
|
|
|
config_foreach _enable_redir ss_redir "shadowsocks-rust"
|
|
|
|
|
2023-08-24 12:36:42 +00:00
|
|
|
OMR_TRACKER_STATUS_MSG="Answer to ping and to API check"
|
|
|
|
mail_alert="$(uci -q get omr-tracker.server.mail_alert)"
|
|
|
|
#[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
|
|
|
|
[ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && {
|
|
|
|
OMR_SYSNAME="$(uci -q get system.@system[0].hostname)"
|
|
|
|
if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then
|
|
|
|
mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)"
|
|
|
|
mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)"
|
|
|
|
mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to)
|
|
|
|
else
|
|
|
|
echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is UP\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to)
|
|
|
|
fi
|
|
|
|
}
|
2024-01-18 13:36:29 +00:00
|
|
|
script_alert_up="$(uci -q get omr-tracker.proxy.script_alert_up)"
|
|
|
|
[ -n "$script_alert_up" ] && eval $script_alert_up
|
2021-02-09 13:35:48 +00:00
|
|
|
count=$((count+1))
|
|
|
|
else
|
2024-05-07 09:23:03 +00:00
|
|
|
[ -n "$ip" ] && [ -z "$(logread | tail -n 10 | grep "Backup server ${name} down" | grep "$ip")" ] && logger -t "OMR-Tracker-Server" "Backup server ${name} down ($ip)"
|
2022-08-14 06:53:24 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
2023-08-24 12:36:42 +00:00
|
|
|
set openmptcprouter.${name}.current='0'
|
2022-08-14 06:53:24 +00:00
|
|
|
commit openmptcprouter
|
|
|
|
EOF
|
2021-02-09 13:35:48 +00:00
|
|
|
config_load shadowsocks-libev
|
2024-06-04 07:37:16 +00:00
|
|
|
config_foreach _get_server_name server "$ip"
|
2024-04-26 17:19:28 +00:00
|
|
|
[ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-libev"
|
|
|
|
servername=""
|
2023-12-01 08:46:00 +00:00
|
|
|
config_load shadowsocks-rust
|
2024-06-04 07:37:16 +00:00
|
|
|
config_foreach _get_server_name server "$ip"
|
2024-04-26 17:19:28 +00:00
|
|
|
[ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-rust"
|
|
|
|
|
2023-08-24 12:36:42 +00:00
|
|
|
OMR_TRACKER_STATUS_MSG="No answer to ping and to API check"
|
|
|
|
mail_alert="$(uci -q get omr-tracker.server.mail_alert)"
|
|
|
|
#[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
|
|
|
|
[ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && {
|
|
|
|
OMR_SYSNAME="$(uci -q get system.@system[0].hostname)"
|
|
|
|
if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then
|
|
|
|
mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)"
|
|
|
|
mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)"
|
|
|
|
mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
|
|
|
|
echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to)
|
|
|
|
else
|
|
|
|
echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is down\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to)
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)"
|
|
|
|
[ -n "$script_alert_down" ] && eval $script_alert_down
|
2021-02-09 13:35:48 +00:00
|
|
|
fi
|
|
|
|
countips=$((countips+1))
|
2020-11-05 09:21:14 +00:00
|
|
|
}
|
2022-06-02 13:52:43 +00:00
|
|
|
config_load openmptcprouter
|
2024-02-22 17:34:35 +00:00
|
|
|
config_list_foreach $1 ip check_ip
|
|
|
|
set_ip
|
2021-03-23 08:52:58 +00:00
|
|
|
#if [ "$server_ping" = true ] && [ "$countips" = "1" ]; then
|
|
|
|
# uci -q batch <<-EOF >/dev/null
|
|
|
|
# set shadowsocks-libev.sss${count}.server=$ip
|
|
|
|
# EOF
|
|
|
|
# config_foreach _enable_redir ss_redir
|
|
|
|
#fi
|
2024-05-06 10:54:54 +00:00
|
|
|
if [ "$oneserverup" = "0" ]; then
|
2024-04-26 17:19:28 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set openmptcprouter.${name}.current='0'
|
|
|
|
commit openmptcprouter
|
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
|
|
|
|
[ -n "$(uci changes shadowsocks-libev)" ] && changes="1"
|
|
|
|
[ -n "$(uci changes shadowsocks-rust)" ] && changes="1"
|
2024-05-29 17:55:24 +00:00
|
|
|
[ -n "$(uci changes openvpn)" ] && changes="1"
|
2021-02-09 13:35:48 +00:00
|
|
|
uci -q commit shadowsocks-libev
|
2023-12-01 08:46:00 +00:00
|
|
|
uci -q commit shadowsocks-rust
|
2024-05-29 17:55:24 +00:00
|
|
|
uci -q commit openvpn
|
2023-12-01 08:46:00 +00:00
|
|
|
[ "$changes" = "1" ] && {
|
|
|
|
/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null
|
|
|
|
/etc/init.d/shadowsocks-rust restart >/dev/null 2>/dev/null
|
2024-05-29 17:55:24 +00:00
|
|
|
/etc/init.d/openvpn restart omr >/dev/null 2>/dev/null
|
2024-06-24 13:43:13 +00:00
|
|
|
/etc/init.d/dnsmasq restart >/dev/null 2>/dev/null
|
2023-12-01 08:46:00 +00:00
|
|
|
}
|
2021-02-09 13:35:48 +00:00
|
|
|
[ "$server_ping" = true ] && break
|
2020-05-20 08:03:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
. /lib/functions.sh
|
|
|
|
|
|
|
|
timeout=${OMR_TRACKER_TIMEOUT:-5}
|
|
|
|
interval=${OMR_TRACKER_INTERVAL:-10}
|
|
|
|
intervaltries=${OMR_TRACKER_INTERVAL_TRIES:-2}
|
|
|
|
retry=${OMR_TRACKER_TRIES:-4}
|
2020-11-05 09:21:14 +00:00
|
|
|
waittest=${OMR_TRACKER_WAIT_TEST:-0}
|
2020-05-20 08:03:51 +00:00
|
|
|
while true; do
|
|
|
|
server_ping=false
|
2024-05-13 18:23:32 +00:00
|
|
|
oneserverup="0"
|
2020-05-20 08:03:51 +00:00
|
|
|
config_load openmptcprouter
|
|
|
|
config_foreach _check_master server
|
2024-05-13 18:23:32 +00:00
|
|
|
[ "$oneserverup" = "0" ] && {
|
2022-06-02 13:52:43 +00:00
|
|
|
config_load openmptcprouter
|
2020-05-20 08:03:51 +00:00
|
|
|
config_foreach _check_backup server
|
|
|
|
}
|
|
|
|
sleep "${interval}"
|
|
|
|
done
|