1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-02-13 19:11:51 +00:00
openmptcprouter-feeds/mptcp/files/usr/share/omr/post-tracking.d/post-tracking

403 lines
20 KiB
Text
Raw Normal View History

2018-01-23 14:35:00 +00:00
# vim: set ft=sh noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
SETROUTE=false
set_route() {
local multipath_config interface_gw interface_if
INTERFACE=$1
2018-02-20 12:48:12 +00:00
PREVINTERFACE=$2
2018-05-29 16:03:50 +00:00
multipath_config=$(uci -q get network.$INTERFACE.multipath || echo "off")
interface_if=$(uci -q get network.$INTERFACE.ifname)
2018-09-17 08:59:04 +00:00
[ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
2018-07-23 20:31:43 +00:00
[ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
multipath_current_config=$(multipath $interface_if | grep deactivated)
2018-02-21 14:05:53 +00:00
if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$multipath_current_config" = "" ]; then
2018-02-15 08:33:27 +00:00
#if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ]; then
2018-02-21 14:05:53 +00:00
#if [ "$multipath_config" != "off" ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$SETROUTE" != true ]; then
2018-05-29 16:03:50 +00:00
interface_gw="$(uci -q get network.$INTERFACE.gateway)"
if [ -z "$interface_gw" ]; then
2018-09-17 08:59:04 +00:00
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n")
fi
2018-05-29 16:03:50 +00:00
if [ -z "$interface_gw" ]; then
2018-09-17 08:59:04 +00:00
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n")
fi
2018-07-23 15:37:37 +00:00
if [ -z "$interface_gw" ]; then
2018-09-17 08:59:04 +00:00
interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n")
2018-07-23 15:37:37 +00:00
fi
2018-02-22 11:03:37 +00:00
if [ "$interface_gw" != "" ]; then
_log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if"
2018-02-22 11:03:37 +00:00
ip route replace default scope global nexthop via $interface_gw dev $interface_if && SETROUTE=true
ip route replace default via $interface_gw dev $interface_if table 991337
2018-02-22 11:03:37 +00:00
fi
2018-01-23 14:35:00 +00:00
fi
}
set_ss_route() {
local server_ip upstreams nginxip
2018-07-24 12:26:04 +00:00
local metric=$2
config_get server_ip $1 server
if [ "$server_ip" = "127.0.0.1" ]; then
upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /')
for up in $upstreams; do
nginxip=$(echo $up | cut -d: -f1)
2018-07-24 12:26:04 +00:00
if [ "$nginxip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then
_log "Set server $nginxip route via $OMR_TRACKER_DEVICE"
2018-12-11 14:01:03 +00:00
ip route replace $nginxip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1
fi
done
else
2018-07-27 21:11:37 +00:00
if [ "$metric" != "off" ] && [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then
2018-07-24 12:26:04 +00:00
_log "Set server $server_ip route via $OMR_TRACKER_DEVICE metric $metric"
2018-12-11 14:01:03 +00:00
ip route del $server_ip metric $metric > /dev/null 2>&1
ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1
fi
fi
}
del_ss_route() {
local server_ip upstreams nginxip
2018-07-24 12:26:04 +00:00
local metric=$2
config_get server_ip $1 server
if [ "$server_ip" = "127.0.0.1" ]; then
upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /')
for up in $upstreams; do
_log "down : $up"
nginxip=$(echo $up | cut -d: -f1)
2018-07-27 21:11:37 +00:00
if [ "$metric" = "all" ]; then
if [ "$nginxip" != "" ] && [ "$(ip route show | grep $nginxip)" != "" ]; then
_log "Remove all server $nginxip route"
2018-10-09 14:23:22 +00:00
ip route delete $nginxip > /dev/null 2>&1
2018-07-27 21:11:37 +00:00
fi
else
if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip)" != "" ]; then
_log "Remove server $nginxip route via $OMR_TRACKER_DEVICE"
2018-10-09 14:23:22 +00:00
ip route delete $nginxip dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1
2018-07-27 21:11:37 +00:00
fi
fi
done
else
2018-07-27 21:11:37 +00:00
if [ "$metric" = "all" ]; then
if [ "$server_ip" != "" ] && [ "$(ip route show | grep $server_ip)" != "" ]; then
_log "Remove all server $server_ip route"
2018-10-09 14:23:22 +00:00
ip route delete $server_ip > /dev/null 2>&1
2018-07-27 21:11:37 +00:00
fi
elif [ "$metric" = "off" ]; then
if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then
_log "Remove all server $server_ip route via $OMR_TRACKER_DEVICE"
2018-10-09 14:23:22 +00:00
ip route delete $server_ip dev $OMR_TRACKER_DEVICE > /dev/null 2>&1
2018-07-27 21:11:37 +00:00
fi
else
if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip)" != "" ]; then
_log "Remove server $server_ip route via $OMR_TRACKER_DEVICE"
2018-10-09 14:23:22 +00:00
ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1
2018-08-22 09:31:52 +00:00
elif [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $server_ip)" != "" ]; then
_log "Remove server $server_ip route via $OMR_TRACKER_DEVICE (master)"
2018-10-09 14:23:22 +00:00
ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric 1 > /dev/null 2>&1
2018-07-27 21:11:37 +00:00
fi
fi
fi
}
2018-12-17 16:00:48 +00:00
dns_flush() {
unbound-control flush-negative >/dev/null 2>&1
unbound-control flush-bogus >/dev/null 2>&1
}
2018-09-05 21:06:57 +00:00
if [ -n "$RANDOM" ]; then
sleep `expr $RANDOM % 10`
else
sleep `awk 'BEGIN{srand();print int(rand()*9)}'`
fi
2018-01-23 14:35:00 +00:00
# Get the current multipath status
multipath_status="off"
2018-03-22 14:51:32 +00:00
if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then
case "$(multipath "$OMR_TRACKER_DEVICE")" in
*default*) multipath_status="on" ;;
*backup*) multipath_status="backup" ;;
*handover*) multipath_status="handover" ;;
esac
fi
2018-01-23 14:35:00 +00:00
default_gw=$(ip route show default | grep -v metric | awk '/default/ {print $3}')
#current_interface_gw=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway")
2018-01-23 14:35:00 +00:00
# An interface in error will never be used in MPTCP
if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then
2018-08-21 15:44:49 +00:00
if [ "$OMR_TRACKER_PREV_STATUS" = "$OMR_TRACKER_STATUS" ]; then
exit 0
fi
2018-10-09 14:23:22 +00:00
[ "$multipath_status" = "off" ] || {
mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)"
[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
2018-10-09 14:23:22 +00:00
if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then
_log "$OMR_TRACKER_DEVICE switched off"
else
_log "$OMR_TRACKER_DEVICE switched off because $OMR_TRACKER_STATUS_MSG"
fi
2018-11-16 14:01:41 +00:00
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='down'
uci -q commit openmptcprouter
2018-10-09 14:23:22 +00:00
if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then
multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1
fi
if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then
glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 down > /dev/null 2>&1
fi
config_load shadowsocks-libev
if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
2018-11-28 12:23:21 +00:00
#local metric=$(ip rule show | grep -m 1 "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}')
local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | grep -m 1 "$OMR_TRACKER_DEVICE" | grep -om1 'lookup [[:digit:]]' | awk '{print $2}')
2018-10-09 14:23:22 +00:00
ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1
config_foreach del_ss_route server $metric
else
if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1
2018-07-27 21:11:37 +00:00
fi
2018-10-09 14:23:22 +00:00
config_foreach del_ss_route server off
fi
}
if [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
2018-01-23 14:35:00 +00:00
config_load network
config_foreach set_route interface $OMR_TRACKER_INTERFACE
fi
[ "$multipath_status" = "off" ] || {
if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then
[ "$mail_alert" = "1" ] && echo -e "Subject: OpenMPTCProuter: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nOpenMPTCProuter detected a connection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE)." | sendmail $(uci -q get mail.default.to)
else
[ "$mail_alert" = "1" ] && echo -e "Subject: OpenMPTCProuter: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nOpenMPTCProuter detected a connection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE). The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to)
fi
}
2018-06-06 15:55:33 +00:00
if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then
2018-08-14 14:24:29 +00:00
if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then
_log "$OMR_TRACKER_INTERFACE down"
else
_log "$OMR_TRACKER_INTERFACE down because $OMR_TRACKER_STATUS_MSG"
fi
2018-08-14 09:06:59 +00:00
config_load network
config_foreach set_route interface $OMR_TRACKER_INTERFACE
2018-08-09 14:57:46 +00:00
#config_load shadowsocks-libev
2018-08-02 12:54:09 +00:00
#config_foreach del_ss_route server all
2018-12-17 16:00:48 +00:00
if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "up" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ]; then
2018-07-27 21:28:38 +00:00
_log "Tunnel down use ShadowSocks for UDP"
2018-05-29 16:03:50 +00:00
uci -q set shadowsocks-libev.ss_rules.redir_udp='hi2'
2018-10-13 19:40:15 +00:00
if /etc/init.d/shadowsocks-libev rules_exist ; then
2018-10-09 14:23:22 +00:00
/etc/init.d/shadowsocks-libev rules_down
/etc/init.d/shadowsocks-libev rules_up
fi
2018-05-29 16:03:50 +00:00
fi
fi
2018-12-17 16:00:48 +00:00
dns_flush
exit 0
fi
2018-06-06 15:55:33 +00:00
if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then
if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
2018-05-14 19:03:51 +00:00
_log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE"
ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
2018-08-21 15:44:49 +00:00
fi
2018-09-19 13:28:50 +00:00
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"
2018-08-21 15:44:49 +00:00
uci -q delete shadowsocks-libev.ss_rules.redir_udp
2018-10-13 19:40:15 +00:00
if /etc/init.d/shadowsocks-libev rules_exist ; then
2018-10-09 14:23:22 +00:00
/etc/init.d/shadowsocks-libev rules_down
/etc/init.d/shadowsocks-libev rules_up
fi
2018-01-23 14:35:00 +00:00
fi
2018-09-05 21:06:57 +00:00
# Set VPN MTU
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; then
local serverip=$(uci -q get shadowsocks-libev.sss0.server)
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then
mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
2018-10-20 17:20:51 +00:00
elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ]; then
2018-12-13 15:48:19 +00:00
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && {
2018-09-19 13:28:50 +00:00
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
}
2018-09-05 21:06:57 +00:00
}
else
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
fi
uci -q commit openmptcprouter
fi
2018-01-23 14:35:00 +00:00
exit 0
fi
if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR_TRACKER_STATUS" ]; then
mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)"
[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
2018-11-06 14:29:31 +00:00
[ "$mail_alert" = "1" ] && echo -e "Subject: OpenMPTCProuter: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up\n\nOpenMPTCProuter detected that connection $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up again." | sendmail $(uci -q get mail.default.to)
2018-11-16 14:01:41 +00:00
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up'
uci -q commit openmptcprouter
2018-12-17 16:00:48 +00:00
dns_flush
fi
2018-01-23 14:35:00 +00:00
multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off")
if [ "$multipath_config" = "master" ]; then
if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
2018-06-08 12:52:58 +00:00
omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun")
if [ "$(ip route show default | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then
2018-08-03 13:00:10 +00:00
_log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE"
ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
else
config_load shadowsocks-libev
2018-07-27 21:11:37 +00:00
config_foreach set_ss_route server 1
fi
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337
fi
multipath_config="on"
2018-12-11 14:01:03 +00:00
fi
if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
#local metric=$(ip rule show | grep -m 1 "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}')
local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | grep -m 1 "$OMR_TRACKER_DEVICE" | grep -om1 'lookup [[:digit:]]' | awk '{print $2}')
[ -n "$metric" ] && {
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
config_load shadowsocks-libev
config_foreach set_ss_route server $metric
}
fi
2018-05-30 12:33:12 +00:00
[ "$multipath_config" = "on" ] && glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 up > /dev/null 2>&1
[ "$multipath_config" = "backup" ] && glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 backup > /dev/null 2>&1
[ "$multipath_status" = "$multipath_config" ] || {
if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then
_log "Multipath $OMR_TRACKER_DEVICE switched to $multipath_config"
multipath "$OMR_TRACKER_DEVICE" "$multipath_config"
fi
}
# Save wan settings for status page
2018-08-24 11:34:37 +00:00
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; then
2018-09-20 08:09:03 +00:00
_log "Get status and settings for $OMR_TRACKER_INTERFACE..."
local ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)"
[ -n "$ipaddr" ] && {
2018-10-05 13:26:43 +00:00
# Check if we can get a IPv6 address, if yes enable RA else disable
local ip6addr="$(curl -s -6 -m 3 http://ipv6.openmptcprouter.com/)"
[ -z "$ip6addr" ] && {
local ip6addr="$(curl -s -6 -m 3 http://ifconfig.co/)"
}
if [ "$(uci -q get openmptcprouter.settings.ipv6_disable)" = "0" ]; then
2018-12-10 19:46:29 +00:00
if [ -n "$ip6addr" ] && [ "$(uci -q get dhcp.lan.ra_default)" != 1 ]; then
2018-10-05 13:26:43 +00:00
_log "Enable IPv6 RA"
uci -q set dhcp.lan.ra=server
uci -q set dhcp.lan.ra_default=1
uci -q set dhcp.lan.dhcpv6=server
/etc/init.d/odhcpd start > /dev/null 2>&1
/etc/init.d/odhcpd enable > /dev/null 2>&1
elif [ -z "$ip6addr" ] && [ "$(uci -q set dhcp.lan.ra_default)" = 1 ]; then
_log "Disable IPv6 RA"
uci -q del dhcp.lan.ra
uci -q del dhcp.lan.dhcpv6
/etc/init.d/odhcpd start > /dev/null 2>&1
/etc/init.d/odhcpd enable > /dev/null 2>&1
fi
fi
2018-09-20 08:09:03 +00:00
local asn="$(wget -4 -qO- -T 5 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')"
[ -z "$asn" ] && {
2018-10-05 13:26:43 +00:00
asn="$(whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')"
2018-09-20 08:09:03 +00:00
}
2018-10-13 21:02:11 +00:00
[ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && {
2018-10-12 15:13:52 +00:00
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface
}
if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then
local latestversions="$(wget -4 -qO- -T 5 http://www.openmptcprouter.com/version/version.json)"
[ -n "$latestversions" ] && {
uci -q set openmptcprouter.latest_versions=latest_versions
uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr')
uci -q set openmptcprouter.latest_versions.vps=$(echo $latestversions | jsonfilter -q -e '@.vps')
uci -q set openmptcprouter.latest_versions.lc=$(date +"%s")
}
fi
local serverip=$(uci -q get shadowsocks-libev.sss0.server)
2018-12-13 15:48:19 +00:00
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && {
2018-09-19 13:28:50 +00:00
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
}
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr"
2018-08-24 11:34:37 +00:00
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
[ -n "$asn" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn"
}
2018-09-05 21:06:57 +00:00
if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then
mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ]; then
2018-12-13 15:48:19 +00:00
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && {
2018-09-19 13:28:50 +00:00
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
[ -n "$mtu" ] && [ -n "$asn" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
}
2018-12-14 12:20:17 +00:00
} || {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
2018-08-24 11:34:37 +00:00
}
elif [ -n "$asn" ]; then
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
2018-08-24 11:34:37 +00:00
fi
}
2018-10-12 15:13:52 +00:00
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; then
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(( $(date +"%s") - 3400 ))
_log "Get status and settings for $OMR_TRACKER_INTERFACE... Failed"
else
_log "Get status and settings for $OMR_TRACKER_INTERFACE... Done"
2018-11-29 13:41:22 +00:00
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
2018-10-12 15:13:52 +00:00
fi
2018-11-29 17:10:53 +00:00
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up'
2018-10-12 15:13:52 +00:00
uci -q commit openmptcprouter
2018-12-17 16:00:48 +00:00
dns_flush
fi
[ -n "$OMR_TRACKER_LATENCY" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
if [ "$multipath_config" = "on" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath)" != "master" ] && ([ "$(uci -q get openmptcprouter.settings.master)" = "dynamic" ] || ([ "$(uci -q get openmptcprouter.settings.master)" = "change" ] && [ "$(uci -q get openmptcprouter.settings.master_lcintf | grep $OMR_TRACKER_INTERFACE)" = "" ])); then
2018-12-10 19:46:29 +00:00
masterintf="$(uci -q show network | grep multipath=\'master\' | cut -d'.' -f2)"
masterlatency="$(uci -q get openmptcprouter.$masterintf.latency | tr -d '\n')"
if [ -n "$masterintf" ] && [ "$masterlatency" != "" ] && [ "$OMR_TRACKER_LATENCY" -lt "$((masterlatency/2))" ]; then
uci -q set network.$masterintf.multipath='on'
uci -q set network.$OMR_TRACKER_INTERFACE.multipath='master'
uci -q add_list openmptcprouter.settings.master_lcintf="$OMR_TRACKER_INTERFACE"
_log "Change master interface from $masterintf ($masterlatency ms) to $OMR_TRACKER_INTERFACE ($OMR_TRACKER_LATENCY ms)"
fi
fi
}
2018-12-15 20:33:58 +00:00
# If a service is down, force restart it
if [ "$(pgrep ss-redir)" = "" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "0" ]; then
_log "Can't find Shadowsocks, restart it..."
/etc/init.d/shadowsocks-libev restart
2018-12-17 16:00:48 +00:00
sleep 5
2018-12-15 20:33:58 +00:00
fi
if [ "$(pgrep glorytun)" = "" ] && [ "$(uci -q get glorytun.vpn.enabled)" = "1" ]; then
_log "Can't find Glorytun, restart it..."
/etc/init.d/glorytun restart
/etc/init.d/glorytun-udp restart
2018-12-17 16:00:48 +00:00
sleep 5
2018-12-15 20:33:58 +00:00
fi
if [ "$(pgrep openvpn)" = "" ] && [ "$(uci -q get openvpn.omr.enabled)" != "0" ]; then
_log "Can't find OpenVPN, restart it..."
/etc/init.d/openvpn restart
2018-12-17 16:00:48 +00:00
sleep 5
2018-12-15 20:33:58 +00:00
fi
if [ "$(pgrep mlvpn)" = "" ] && [ "$(uci -q get mlvpn.general.enable)" != "0" ]; then
_log "Can't find MLVPN, restart it..."
/etc/init.d/mlvpn restart
2018-12-17 16:00:48 +00:00
sleep 5
2018-12-15 20:33:58 +00:00
fi
2018-12-12 20:29:30 +00:00
if [ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]; then
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
sleep 5
fi