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-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-12-21 14:38:45 +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
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set network.default_route=route
|
|
|
|
set network.default_route.interface=$INTERFACE
|
|
|
|
set network.default_route.target='0.0.0.0'
|
|
|
|
set network.default_route.netmask='0.0.0.0'
|
|
|
|
set network.default_route.gateway=$interface_gw
|
|
|
|
commit network.default_route
|
|
|
|
set network.default_fw_route=route
|
|
|
|
set network.default_fw_route.interface=$INTERFACE
|
|
|
|
set network.default_fw_route.target='0.0.0.0'
|
|
|
|
set network.default_fw_route.netmask='0.0.0.0'
|
|
|
|
set network.default_fw_route.gateway=$interface_gw
|
|
|
|
set network.default_fw_route.table=991337
|
|
|
|
commit network.default_fw_route
|
|
|
|
EOF
|
|
|
|
#SETROUTE=true
|
2018-02-22 11:03:37 +00:00
|
|
|
fi
|
2018-01-23 14:35:00 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2018-12-21 14:38:45 +00:00
|
|
|
set_server_default_route() {
|
|
|
|
local server=$1
|
|
|
|
local serverip
|
|
|
|
config_get serverip $server ip
|
|
|
|
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then
|
|
|
|
_log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY"
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set network.server_${server}_default_route=route
|
|
|
|
set network.server_${server}_default_route.interface=$OMR_TRACKER_INTERFACE
|
|
|
|
set network.server_${server}_default_route.target=$serverip
|
|
|
|
set network.server_${server}_default_route.netmask='255.255.255.255'
|
|
|
|
set network.server_${server}_default_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY
|
|
|
|
set network.server_${server}_default_route.metric=1
|
|
|
|
commit network.server_${server}_default_route
|
|
|
|
EOF
|
2018-03-19 15:19:24 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2018-12-21 14:38:45 +00:00
|
|
|
set_server_route() {
|
|
|
|
local server=$1
|
|
|
|
local serverip
|
|
|
|
config_get serverip $server ip
|
2018-07-24 12:26:04 +00:00
|
|
|
local metric=$2
|
2018-12-21 14:38:45 +00:00
|
|
|
[ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)
|
|
|
|
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then
|
|
|
|
_log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric"
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set network.server_${server}_${OMR_TRACKER_INTERFACE}_route=route
|
|
|
|
set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.interface=$OMR_TRACKER_INTERFACE
|
|
|
|
set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.target=$serverip
|
|
|
|
set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.netmask='255.255.255.255'
|
|
|
|
set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY
|
|
|
|
set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.metric=$metric
|
|
|
|
commit network.server_${server}_${OMR_TRACKER_INTERFACE}_route
|
|
|
|
EOF
|
|
|
|
fi
|
|
|
|
if [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ]; then
|
|
|
|
#ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set network.${OMR_TRACKER_INTERFACE}_route_default_metric=route
|
|
|
|
set network.${OMR_TRACKER_INTERFACE}_route_default_metric.interface=$OMR_TRACKER_INTERFACE
|
|
|
|
set network.${OMR_TRACKER_INTERFACE}_route_default_metric.target='0.0.0.0'
|
|
|
|
set network.${OMR_TRACKER_INTERFACE}_route_default_metric.netmask='0.0.0.0'
|
|
|
|
set network.${OMR_TRACKER_INTERFACE}_route_default_metric.gateway=$OMR_TRACKER_DEVICE_GATEWAY
|
|
|
|
set network.${OMR_TRACKER_INTERFACE}_route_default_metric.metric=$metric
|
|
|
|
set network.${OMR_TRACKER_INTERFACE}_route_default_metric.source=$OMR_TRACKER_DEVICE_IP
|
|
|
|
commit network.${OMR_TRACKER_INTERFACE}_route_default_metric
|
|
|
|
EOF
|
2018-03-19 15:19:24 +00:00
|
|
|
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}')
|
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" ] || {
|
2018-11-05 18:14:23 +00:00
|
|
|
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
|
2018-12-21 14:38:45 +00:00
|
|
|
#if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
|
|
|
|
# local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | grep -m 1 "$OMR_TRACKER_DEVICE" | grep -om1 'lookup [[:digit:]]' | awk '{print $2}')
|
|
|
|
# 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
|
|
|
|
# fi
|
|
|
|
# config_foreach del_ss_route server off
|
|
|
|
#fi
|
2018-10-09 14:23:22 +00:00
|
|
|
}
|
|
|
|
|
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-11-20 13:25:38 +00:00
|
|
|
[ "$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
|
2018-12-21 14:38:45 +00:00
|
|
|
/etc/init.d/network reload
|
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-12-21 14:38:45 +00:00
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set network.default_route=route
|
|
|
|
set network.default_route.interface=$OMR_TRACKER_INTERFACE
|
|
|
|
set network.default_route.target='0.0.0.0'
|
|
|
|
set network.default_route.netmask='0.0.0.0'
|
|
|
|
set network.default_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY
|
|
|
|
commit network.default_route
|
|
|
|
EOF
|
|
|
|
#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
|
|
|
|
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-12-21 14:38:45 +00:00
|
|
|
/etc/init.d/network reload
|
2018-01-23 14:35:00 +00:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2018-11-05 18:14:23 +00:00
|
|
|
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
|
2018-11-05 18:14:23 +00:00
|
|
|
fi
|
|
|
|
|
2018-01-23 14:35:00 +00:00
|
|
|
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-12-21 14:38:45 +00:00
|
|
|
#ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set network.default_route=route
|
|
|
|
set network.default_route.interface=$OMR_TRACKER_INTERFACE
|
|
|
|
set network.default_route.target='0.0.0.0'
|
|
|
|
set network.default_route.netmask='0.0.0.0'
|
|
|
|
set network.default_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY
|
|
|
|
commit network.default_route
|
|
|
|
EOF
|
2018-03-19 15:19:24 +00:00
|
|
|
else
|
2018-12-21 14:38:45 +00:00
|
|
|
#config_load shadowsocks-libev
|
|
|
|
#config_foreach set_ss_route server 1
|
|
|
|
config_load openmptcprouter
|
|
|
|
config_foreach set_server_default_route server
|
2018-03-19 15:19:24 +00:00
|
|
|
fi
|
2018-12-21 14:38:45 +00:00
|
|
|
#ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337
|
|
|
|
uci -q batch <<-EOF >/dev/null
|
|
|
|
set network.default_fw_route=route
|
|
|
|
set network.default_fw_route.interface=$OMR_TRACKER_INTERFACE
|
|
|
|
set network.default_fw_route.target='0.0.0.0'
|
|
|
|
set network.default_fw_route.netmask='0.0.0.0'
|
|
|
|
set network.default_fw_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY
|
|
|
|
set network.default_fw_route.table=991337
|
|
|
|
commit network.default_fw_route
|
|
|
|
EOF
|
2018-02-15 08:49:47 +00:00
|
|
|
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
|
2018-12-21 14:38:45 +00:00
|
|
|
#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
|
|
|
|
#}
|
|
|
|
config_load openmptcprouter
|
|
|
|
config_foreach set_server_route server
|
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
|
|
|
|
}
|
2018-12-21 14:38:45 +00:00
|
|
|
/etc/init.d/network reload
|
2018-08-23 12:52:09 +00:00
|
|
|
|
|
|
|
# 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
|
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
|
|
|
|
}
|
2018-10-31 11:38:56 +00:00
|
|
|
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
|
2018-08-23 12:52:09 +00:00
|
|
|
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)"
|
|
|
|
}
|
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-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
|
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"
|
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
|
2018-07-17 20:41:43 +00:00
|
|
|
fi
|
2018-10-31 11:38:56 +00:00
|
|
|
|
|
|
|
[ -n "$OMR_TRACKER_LATENCY" ] && {
|
|
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
|
2018-12-13 12:54:06 +00:00
|
|
|
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)"
|
2018-12-04 15:55:11 +00:00
|
|
|
masterlatency="$(uci -q get openmptcprouter.$masterintf.latency | tr -d '\n')"
|
2018-12-13 12:54:06 +00:00
|
|
|
if [ -n "$masterintf" ] && [ "$masterlatency" != "" ] && [ "$OMR_TRACKER_LATENCY" -lt "$((masterlatency/2))" ]; then
|
2018-10-31 11:38:56 +00:00
|
|
|
uci -q set network.$masterintf.multipath='on'
|
|
|
|
uci -q set network.$OMR_TRACKER_INTERFACE.multipath='master'
|
2018-12-13 12:54:06 +00:00
|
|
|
uci -q add_list openmptcprouter.settings.master_lcintf="$OMR_TRACKER_INTERFACE"
|
2018-12-04 15:55:11 +00:00
|
|
|
_log "Change master interface from $masterintf ($masterlatency ms) to $OMR_TRACKER_INTERFACE ($OMR_TRACKER_LATENCY ms)"
|
2018-10-31 11:38:56 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
2018-11-27 14:18:43 +00:00
|
|
|
|
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
|
2018-11-27 14:18:43 +00:00
|
|
|
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
|
|
|
|
sleep 5
|
|
|
|
fi
|