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"]')
|
2018-03-19 15:19:24 +00:00
|
|
|
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")
|
2018-03-06 07:20:59 +00:00
|
|
|
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")
|
2018-03-06 07:20:59 +00:00
|
|
|
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
|
2018-05-26 20:04:54 +00:00
|
|
|
_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
|
2018-10-05 15:13:38 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2018-03-19 15:19:24 +00:00
|
|
|
set_ss_route() {
|
2018-06-27 18:41:57 +00:00
|
|
|
local server_ip upstreams nginxip
|
2018-07-24 12:26:04 +00:00
|
|
|
local metric=$2
|
2018-03-19 15:19:24 +00:00
|
|
|
config_get server_ip $1 server
|
2018-06-27 18:41:57 +00:00
|
|
|
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
|
2018-07-24 12:26:04 +00:00
|
|
|
_log "up: $up - metric: $metric"
|
2018-06-27 18:41:57 +00:00
|
|
|
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
|
2018-06-27 18:41:57 +00:00
|
|
|
_log "Set server $nginxip route via $OMR_TRACKER_DEVICE"
|
2018-07-23 15:37:37 +00:00
|
|
|
ip route replace $nginxip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
|
2018-06-27 18:41:57 +00:00
|
|
|
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-07-23 15:37:37 +00:00
|
|
|
ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
|
2018-06-27 18:41:57 +00:00
|
|
|
fi
|
2018-03-19 15:19:24 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
del_ss_route() {
|
2018-06-27 18:41:57 +00:00
|
|
|
local server_ip upstreams nginxip
|
2018-07-24 12:26:04 +00:00
|
|
|
local metric=$2
|
2018-03-19 15:19:24 +00:00
|
|
|
config_get server_ip $1 server
|
2018-06-27 18:41:57 +00:00
|
|
|
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
|
2018-06-27 18:41:57 +00:00
|
|
|
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
|
2018-06-27 18:41:57 +00:00
|
|
|
fi
|
2018-03-19 15:19:24 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
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}')
|
2018-03-06 07:20:59 +00:00
|
|
|
#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" ] || {
|
|
|
|
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
|
|
|
|
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
|
|
|
|
local metric=$(ip rule show | grep -m 1 "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}')
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2018-03-06 07:20:59 +00:00
|
|
|
if [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then
|
2018-01-23 14:35:00 +00:00
|
|
|
config_load network
|
2018-03-19 15:19:24 +00:00
|
|
|
config_foreach set_route interface $OMR_TRACKER_INTERFACE
|
|
|
|
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-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)" = "" ] && [ "$(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
|
|
|
|
/etc/init.d/omr-bypass reload >/dev/null 2>&1
|
|
|
|
fi
|
2018-05-29 16:03:50 +00:00
|
|
|
fi
|
|
|
|
fi
|
2018-03-19 15:19:24 +00:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2018-06-06 15:55:33 +00:00
|
|
|
if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then
|
2018-03-19 15:19:24 +00:00
|
|
|
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"
|
2018-03-19 15:19:24 +00:00
|
|
|
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
|
2018-09-21 21:07:47 +00:00
|
|
|
_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
|
|
|
|
/etc/init.d/omr-bypass reload >/dev/null 2>&1
|
|
|
|
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")
|
|
|
|
elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" = "1500" ]; then
|
2018-09-19 13:28:50 +00:00
|
|
|
[ -n "$serverip" ] && {
|
|
|
|
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
|
|
|
|
|
|
|
|
multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off")
|
2018-02-15 08:49:47 +00:00
|
|
|
if [ "$multipath_config" = "master" ]; then
|
2018-03-06 07:20:59 +00:00
|
|
|
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"
|
2018-03-19 15:19:24 +00:00
|
|
|
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
|
2018-03-19 15:19:24 +00:00
|
|
|
fi
|
2018-10-05 15:13:38 +00:00
|
|
|
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337
|
2018-02-15 08:49:47 +00:00
|
|
|
fi
|
2018-08-28 21:00:06 +00:00
|
|
|
if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
|
2018-10-05 13:26:43 +00:00
|
|
|
local metric=$(ip rule show | grep -m 1 "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}')
|
2018-08-07 14:49:09 +00:00
|
|
|
[ -n "$metric" ] && {
|
|
|
|
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
|
|
|
|
}
|
|
|
|
fi
|
2018-02-15 08:49:47 +00:00
|
|
|
multipath_config="on"
|
2018-07-23 15:37:37 +00:00
|
|
|
else
|
2018-08-28 21:00:06 +00:00
|
|
|
if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
|
2018-10-05 13:26:43 +00:00
|
|
|
local metric=$(ip rule show | grep -m 1 "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}')
|
2018-07-27 21:11:37 +00:00
|
|
|
[ -n "$metric" ] && {
|
2018-08-07 14:49:09 +00:00
|
|
|
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
|
2018-07-27 21:11:37 +00:00
|
|
|
config_load shadowsocks-libev
|
|
|
|
config_foreach set_ss_route server $metric
|
|
|
|
}
|
|
|
|
fi
|
2018-02-15 08:49:47 +00:00
|
|
|
fi
|
2018-06-27 18:41:57 +00:00
|
|
|
|
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
|
2018-08-23 12:52:09 +00:00
|
|
|
[ "$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..."
|
2018-08-23 12:52:09 +00:00
|
|
|
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
|
|
|
|
if [ -n "$ip6addr" ] && [ "$(uci -q set dhcp.lan.ra_default)" != 1 ]; then
|
|
|
|
_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
|
|
|
|
}
|
2018-08-23 12:52:09 +00:00
|
|
|
local serverip=$(uci -q get shadowsocks-libev.sss0.server)
|
2018-09-19 13:28:50 +00:00
|
|
|
[ -n "$serverip" ] && {
|
|
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
|
|
|
|
}
|
2018-08-23 12:52:09 +00:00
|
|
|
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"
|
2018-08-23 12:52:09 +00:00
|
|
|
[ -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")
|
2018-10-16 10:40:38 +00:00
|
|
|
elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ]; then
|
2018-09-19 13:28:50 +00:00
|
|
|
[ -n "$serverip" ] && {
|
|
|
|
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-08-24 11:34:37 +00:00
|
|
|
}
|
|
|
|
elif [ -n "$asn" ]; then
|
2018-08-23 12:52:09 +00:00
|
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
|
2018-08-24 11:34:37 +00:00
|
|
|
fi
|
2018-08-23 12:52:09 +00:00
|
|
|
}
|
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"
|
|
|
|
fi
|
|
|
|
uci -q commit openmptcprouter
|
2018-07-17 20:41:43 +00:00
|
|
|
fi
|