mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-13 19:11:51 +00:00
279 lines
15 KiB
Bash
Executable file
279 lines
15 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2018-2023 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
#
|
|
# This script save settings for status page usage
|
|
|
|
[ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ -z "$OMR_TRACKER_INTERFACE" ] && exit 0
|
|
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
|
|
[ "$interface_up" != "true" ] && exit 0
|
|
|
|
# Save wan settings for status page
|
|
if [ -n "$OMR_TRACKER_INTERFACE" ] && { [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 10)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" = "down" ]; }; then
|
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE..."
|
|
ipaddr=""
|
|
ip6addr=""
|
|
if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then
|
|
[ -n "$OMR_TRACKER_DEVICE_IP" ] && ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)"
|
|
[ -n "$OMR_TRACKER_DEVICE_IP6" ] && ip6addr="$(omr-ip6-intf $OMR_TRACKER_DEVICE)"
|
|
else
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state="up"
|
|
fi
|
|
[ -n "$ipaddr" ] && {
|
|
# Check if we can get a IPv6 address, if yes enable RA else disable
|
|
#check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)"
|
|
#[ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com/"
|
|
#ip6addr="$(curl -s -6 -m 2 $check_ipv6_website)"
|
|
#[ -z "$ip6addr" ] && {
|
|
# ip6addr="$(curl -s -6 -m 2 http://ifconfig.me/)"
|
|
#}
|
|
#if [ "$(uci -q get openmptcprouter.settings.ipv6_disable)" = "0" ]; then
|
|
# if [ -n "$ip6addr" ] && [ "$(uci -q get 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 delete dhcp.lan.ra
|
|
# uci -q delete dhcp.lan.dhcpv6
|
|
# /etc/init.d/odhcpd start > /dev/null 2>&1
|
|
# /etc/init.d/odhcpd enable > /dev/null 2>&1
|
|
# fi
|
|
#fi
|
|
if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then
|
|
#asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')"
|
|
#[ -z "$asn" ] && {
|
|
asn="$(timeout 2 whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')"
|
|
#}
|
|
fi
|
|
[ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && {
|
|
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
|
|
latestversions="$(curl -4 -s -m 3 https://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')-$(ubus call system board | jsonfilter -e '@.kernel' | cut -d'.' -f1,2)
|
|
uci -q set openmptcprouter.latest_versions.vps=$(echo $latestversions | jsonfilter -q -e '@.vps')
|
|
uci -q set openmptcprouter.latest_versions.lc=$(date +"%s")
|
|
}
|
|
fi
|
|
[ -n "$ipaddr" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)" != "$ipaddr" ] && {
|
|
previousip="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)"
|
|
if [ -n "$previousip" ]; then
|
|
_log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $ipaddr (previous: $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip))"
|
|
else
|
|
_log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $ipaddr (First public IP detected)"
|
|
fi
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr"
|
|
/etc/init.d/mptcp enabled && {
|
|
_log "Reload MPTCP for $OMR_TRACKER_DEVICE"
|
|
/etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" >/dev/null 2>&1
|
|
}
|
|
}
|
|
[ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
|
|
[ -n "$asn" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.asn)" != "$asn" ] && {
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn"
|
|
}
|
|
|
|
# Routing loop detection
|
|
lanip="$(uci -q get network.lan.ipaddr)"
|
|
masterip
|
|
get_master_ip() {
|
|
if [ -n "$1" ] && [ "$(uci -q get openmptcprouter.$1.multipath)" = "master" ]; then
|
|
masterip="$(uci -q get openmptcprouter.$1.publicip)"
|
|
fi
|
|
}
|
|
config_load openmptcprouter
|
|
config_foreach get_master_ip interface
|
|
if [ -n "$lanip" ] && [ -n "$masterip" ] && [ -n "$ipaddr" ] && [ "$ipaddr" = "$masterip" ] && [ "$(uci -q get openmptcprouter.settings.disableloopdetection)" != "1" ]; then
|
|
loop=0
|
|
routingloop() {
|
|
vpsip=""
|
|
[ -n "$1" ] && vpsip="$(uci -q get openmptcprouter.$1.ip)"
|
|
if [ -n "$vpsip" ] && [ "$(omr-routing-loop $vpsip $lanip $OMR_TRACKER_DEVICE)" = "detected" ]; then
|
|
loop=1
|
|
fi
|
|
}
|
|
config_load openmptcprouter
|
|
config_foreach routingloop server
|
|
if [ "$loop" = "1" ]; then
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.loop='1'
|
|
else
|
|
uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.loop
|
|
fi
|
|
else
|
|
uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.loop
|
|
fi
|
|
|
|
omrtracebox=""
|
|
traceboxmtutest() {
|
|
omr_tracebox_mtu() {
|
|
serverip=$1
|
|
[ "$serverip" != "${1#*[0-9].[0-9]}" ] && serverip=""
|
|
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep -f tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
|
|
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
|
|
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
|
|
}
|
|
#if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then
|
|
if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then
|
|
if [ -n "$(uci -q get network.$(find_network_device ${OMR_TRACKER_INTERFACE}).mtu)" ]; then
|
|
network_device=$(find_network_device ${OMR_TRACKER_INTERFACE})
|
|
mtu=""
|
|
[ -n "$network_device" ] && mtu=$(uci -q get network.${network_device}.mtu)
|
|
[ -n "$mtu" ] && {
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
|
|
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
|
|
}
|
|
elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then
|
|
if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then
|
|
mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
|
|
[ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && {
|
|
mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
|
|
[ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && {
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
|
|
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
|
|
}
|
|
}
|
|
else
|
|
mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1)
|
|
[ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && {
|
|
mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
|
|
[ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && {
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
|
|
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
|
|
}
|
|
}
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
config_list_foreach $1 ip omr_tracebox_mtu
|
|
}
|
|
config_load openmptcprouter
|
|
config_foreach traceboxmtutest server
|
|
[ "$(uci -q get openmptcprouter.settings.tracebox)" = "0" ] && [ -n "$OMR_TRACKER_DEVICE" ] && {
|
|
mptcpsupport="$(omr-mptcp-intf $OMR_TRACKER_DEVICE)"
|
|
[ -n "$mptcpsupport" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$mptcpsupport"
|
|
}
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up'
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
|
|
}
|
|
[ -n "$ip6addr" ] && {
|
|
if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then
|
|
asn="$(whois $ip6addr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')"
|
|
fi
|
|
[ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && {
|
|
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
|
|
latestversions="$(curl -6 -s -m 3 https://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
|
|
[ -n "$ip6addr" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)" != "$ip6addr" ] && {
|
|
_log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $ip6addr"
|
|
/etc/init.d/mptcp enabled && {
|
|
_log "Reload MPTCP for $OMR_TRACKER_DEVICE"
|
|
/etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" >/dev/null 2>&1
|
|
}
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ip6addr"
|
|
}
|
|
[ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
|
|
[ -n "$asn" ] && {
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn"
|
|
}
|
|
omrtracebox=""
|
|
traceboxmtutest() {
|
|
omr_tracebox_mtu() {
|
|
local serverip=$1
|
|
[ "$serverip" != "${1#*:[0-9a-fA-F]}" ] && serverip=""
|
|
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep -f tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
|
|
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
|
|
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
|
|
}
|
|
#if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then
|
|
if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then
|
|
network_device=$(find_network_device ${OMR_TRACKER_INTERFACE})
|
|
if [ -n "$network_device" ] && [ -n "$(uci -q get network.${network_device}.mtu)" ]; then
|
|
mtu=$(uci -q get network.$(find_network_device ${OMR_TRACKER_INTERFACE}).mtu)
|
|
[ -n "$mtu" ] && {
|
|
uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu
|
|
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
|
|
}
|
|
elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then
|
|
if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then
|
|
mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 $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
|
|
}
|
|
else
|
|
mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 2606:4700:4700::1111)
|
|
[ -n "$mtu" ] && {
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
|
|
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
|
|
}
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
config_list_foreach $1 ip omr_tracebox_mtu
|
|
}
|
|
config_load openmptcprouter
|
|
config_foreach traceboxmtutest server
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up'
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
|
|
}
|
|
if [ "$(uci -q get shadowsocks-libev.sss0.server)" != "" ] && [ "$(uci -q get openmptcprouter.settings.external_check)" = "0" ]; then
|
|
if ping -B -I $OMR_TRACKER_DEVICE -c 1 $(uci -q get shadowsocks-libev.sss0.server) >/dev/null 2>&1; then
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
|
|
fi
|
|
fi
|
|
proto="$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)"
|
|
#if [ "$proto" = "qmi" ]; then
|
|
# intfdata="$(omr-qmi $OMR_TRACKER_DEVICE all | tr -d '\n')"
|
|
# uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.operator=$(echo $intfdata | awk -F";" '{print $2}')
|
|
# uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.number=$(echo $intfdata | awk -F";" '{print $3}')
|
|
# uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state=$(echo $intfdata | awk -F";" '{print $4}')
|
|
#elif [ "$proto" = "modemmanager" ]; then
|
|
# intfdata="$(omr-modemmanager $OMR_TRACKER_DEVICE all)"
|
|
# uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.operator=$(echo $intfdata | awk -F";" '{print $2}')
|
|
# uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.number=$(echo $intfdata | awk -F";" '{print $3}')
|
|
# uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state=$(echo $intfdata | awk -F";" '{print $4}')
|
|
#else
|
|
if [ "$proto" != "qmi" ] && [ "$proto" != "modemmanager" ]; then
|
|
if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$(curl --interface $OMR_TRACKER_DEVICE_IP -s -m 2 -X GET http://$OMR_TRACKER_DEVICE_GATEWAY/api/webserver/SesTokInfo)" ]; then
|
|
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.manufacturer='huawei'
|
|
else
|
|
uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.manufacturer
|
|
fi
|
|
fi
|
|
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 ))
|
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE... Failed"
|
|
uci -q commit openmptcprouter
|
|
else
|
|
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE... Done"
|
|
[ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter
|
|
if [ "$(pgrep -f openmptcprouter-vps)" = "" ] && { [ "$(uci -q get openmptcprouter.settings.apilc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.settings.apilc))) -gt 3600 ]; }; then
|
|
_log "Check API configuration..."
|
|
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 &
|
|
uci -q set openmptcprouter.settings.apilc=$(date +"%s")
|
|
_log "Check API configuration... Done"
|
|
fi
|
|
fi
|
|
dns_flush
|
|
fi
|
|
|