From 117cb3bf974910623ad08a81ec82e5c8f1bc598f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 6 Jan 2021 17:06:56 +0100 Subject: [PATCH 01/36] Fix omr-bypass with VLAN interfaces --- .../root/etc/init.d/omr-bypass | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 3708a0fce..8c1bf2aeb 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -90,7 +90,8 @@ _bypass_mac() { config_get intf $1 interface config_get enabled $1 enabled [ "$enabled" = "0" ] && return - local intfid="$(uci -q get omr-bypass.$intf.id)" + intfuci=$(echo $intf | sed 's/\./_/') + local intfid="$(uci -q get omr-bypass.$intfuci.id)" [ -z "$intf" ] && intf="all" [ -z "$mac" ] && return @@ -131,7 +132,8 @@ _bypass_lan_ip() { config_get intf $1 interface config_get enabled $1 enabled [ "$enabled" = "0" ] && return - local intfid="$(uci -q get omr-bypass.$intf.id)" + intfuci=$(echo $intf | sed 's/\./_/') + local intfid="$(uci -q get omr-bypass.$intfuci.id)" [ -z "$intf" ] && intf="all" [ -z "$ip" ] && return @@ -188,7 +190,8 @@ _bypass_dest_port() { config_get intf $1 interface config_get enabled $1 enabled [ "$enabled" = "0" ] && return - local intfid="$(uci -q get omr-bypass.$intf.id)" + intfuci=$(echo $intf | sed 's/\./_/') + local intfid="$(uci -q get omr-bypass.$intfuci.id)" [ -z "$intf" ] && intf="all" [ -z "$dport" ] && return @@ -243,7 +246,8 @@ _bypass_src_port() { config_get intf $1 interface config_get enabled $1 enabled [ "$enabled" = "0" ] && return - local intfid="$(uci -q get omr-bypass.$intf.id)" + intfuci=$(echo $intf | sed 's/\./_/') + local intfid="$(uci -q get omr-bypass.$intfuci.id)" [ -z "$intf" ] && intf="all" [ -z "$sport" ] && return @@ -296,7 +300,8 @@ _bypass_proto() { config_get intf $1 interface config_get enabled $1 enabled [ "$enabled" = "0" ] && return - local intfid="$(uci -q get omr-bypass.$intf.id)" + intfuci=$(echo $intf | sed 's/\./_/') + local intfid="$(uci -q get omr-bypass.$intfuci.id)" [ -z "$intf" ] && intf="all" [ -z "$proto" ] && return @@ -493,8 +498,9 @@ _intf_rule() { config_foreach _intf_rule_ss_rules ss_rules _intf_rule_v2ray_rules - uci -q set omr-bypass.$intf=interface - uci -q set omr-bypass.$intf.id=$count + intfuci=$(echo $intf | sed 's/\./_/') + uci -q set omr-bypass.$intfuci=interface + uci -q set omr-bypass.$intfuci.id=$count } _bypass_ip_set() { From dc70866c2906a54d7d741a7e3f4a7952584a844e Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 6 Jan 2021 17:07:26 +0100 Subject: [PATCH 02/36] Restart vnstart when interface added --- luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index f30be2a41..23d5fc5f7 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -179,6 +179,7 @@ function wizard_add() luci.sys.call("uci -q commit firewall") luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") gostatus = false end From 49db48e3dc8e25ab7c0ab209e0d2d08e3c7f37e8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 6 Jan 2021 17:08:12 +0100 Subject: [PATCH 03/36] Fix iperf on VPS when using web interface --- luci-app-iperf/luasrc/controller/iperf.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-iperf/luasrc/controller/iperf.lua b/luci-app-iperf/luasrc/controller/iperf.lua index e6cb2ec3a..cbc3f1e12 100644 --- a/luci-app-iperf/luasrc/controller/iperf.lua +++ b/luci-app-iperf/luasrc/controller/iperf.lua @@ -40,7 +40,7 @@ function run_test(server,proto,mode,updown,omit,parallel,transmit,bitrate) end local port = t[ math.random( #t ) ] if password ~= "" then - iperf = io.popen("omr-iperf -P %s -%s -O %s -t %s -J -Z %s" % {parallel,ipv,omit,transmit,options}) + iperf = io.popen("omr-iperf %s -P %s -%s -O %s -t %s -J -Z %s" % {server,parallel,ipv,omit,transmit,options}) else iperf = io.popen("iperf3 -c %s -P %s -%s -p %s -O %s -t %s -J -Z %s" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit,options}) end From 0504af4db6810f57dffaa39a868336c6a8bbf00b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 7 Jan 2021 17:33:17 +0100 Subject: [PATCH 04/36] Fix omr-rename --- luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename index 02d204117..9d741c683 100644 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -34,7 +34,7 @@ _set_intf_name() { } ip link set ${INTERFACE} name ${ifname} 2>&1 >/dev/null ip link set ${ifname} up 2>&1 >/dev/null - [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} 2>&1 >/dev/null + [ "$existif" = "1" ] && ip link set ${ifname}tmp ${INTERFACE} 2>&1 >/dev/null fi fi elif [ -f /dev/${DEVICE_NAME} ] && [ -n "$MODALIAS" ] && [ "$modalias" = "$MODALIAS" ]; then @@ -54,7 +54,7 @@ _set_intf_name() { } ip link set ${INTERFACE} name ${ifname} 2>&1 >/dev/null ip link set ${ifname} up 2>&1 >/dev/null - [ "$existif" = "1" ] && ip link set ${ifname}tmp ${$INTERFACE} 2>&1 >/dev/null + [ "$existif" = "1" ] && ip link set ${ifname}tmp ${INTERFACE} 2>&1 >/dev/null } } From 29f0b61c7b8d465a864533eaa53ca246f5603371 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 7 Jan 2021 17:33:51 +0100 Subject: [PATCH 05/36] Change DNS over HTTPS config only when needed --- openmptcprouter/files/etc/uci-defaults/1940-omr-dns | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index 73508e900..93471310a 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -40,7 +40,7 @@ if [ "$(uci -q get dhcp.lan.dhcp_options)" = "" ]; then EOF fi -if [ "$(uci -q get https-dns-proxy.@https-dns-proxy[0].listen_port)" = "5053" ]; then +if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ] && [ "$(uci -q get https-dns-proxy.@https-dns-proxy[0].listen_port)" = "5053" ]; then # uci -q batch <<-EOF >/dev/null # delete https-dns-proxy.@https-dns-proxy[-1] # delete https-dns-proxy.@https-dns-proxy[-1] From acf29d0bb75c4ebdce8264832b5cad4647a88075 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 7 Jan 2021 20:00:01 +0100 Subject: [PATCH 06/36] Fix omr-rename disable --- .../root/etc/hotplug.d/net/99-omr-rename | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename index 9d741c683..f2c19dc55 100644 --- a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename +++ b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename @@ -23,7 +23,7 @@ _set_intf_name() { chk_modalias=$MODALIAS [ -z "$chk_modalias" ] && chk_modalias="$(cat /sys/class/net/${INTERFACE}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" if [ -n "$chk_modalias" ]; then - logger -t "OMR-Rename" "dir: $i - modalias: $modalias - chk_modalias: $chk_modalias - ifname: $ifname - INTERFACE: $INTERFACE" + logger -t "OMR-Rename" "modalias: $modalias - chk_modalias: $chk_modalias - ifname: $ifname - INTERFACE: $INTERFACE" if [ "$modalias" = "$chk_modalias" ] && [ "$INTERFACE" != "$ifname" ]; then logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" existif=0 @@ -45,6 +45,7 @@ _set_intf_name() { fi } [ -z "$modalias" ] && [ -n "$device" ] && [ -n "$ifname" ] && [ "/sys${DEVPATH}" = "$device" ] && [ "$INTERFACE" != "$ifname" ] && { + logger -t "OMR-Rename" "device: $device - devpath: $DEVPATH - ifname: $ifname - INTERFACE: $INTERFACE" logger -t "OMR-Rename" "Rename ${INTERFACE} to ${ifname}" ip link set ${INTERFACE} down 2>&1 >/dev/null existif=0 @@ -58,7 +59,7 @@ _set_intf_name() { } } -if [ "$(uci -q get openmptcprouter.settings.disableintfrename)" != "0" ]; then +if [ "$(uci -q get openmptcprouter.settings.disableintfrename)" != "1" ]; then config_load network config_foreach _set_intf_name interface config_foreach _set_intf_name interface From bc7fb24b223ed792249d06ceebec7f70e5a6f9c0 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 8 Jan 2021 10:46:06 +0100 Subject: [PATCH 07/36] Get interface info on stop --- .../root/etc/init.d/openmptcprouter | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index 2348fa8b0..adde64a8f 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -56,8 +56,13 @@ omr_intf_set() { elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then uci -q set network.$1.modalias="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')" uci -q set network.$1.product="$(cat /sys/bus/usb-serial/devices/${devicename}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" + else + uci -q delete network.$1.modalias + uci -q delete network.$1.product fi +} +omr_set_settings() { [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return uci -q set openmptcprouter.$1=interface @@ -76,7 +81,7 @@ start_service() { config_load openmptcprouter config_foreach omr_intf_check interface config_load network - config_foreach omr_intf_set interface + config_foreach omr_set_settings interface uci -q commit network uci -q commit openmptcprouter @@ -112,7 +117,13 @@ start_service() { EOF /etc/init.d/rpcd restart 2>&1 >/dev/null fi +} +stop_service() { + config_load network + config_foreach omr_intf_set interface + uci -q commit network + uci -q commit openmptcprouter } reload_service() { From 4535f2ad44430092d077e54aa6bf5e76fbe1d8bb Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 8 Jan 2021 10:46:21 +0100 Subject: [PATCH 08/36] Disable interface rename by default --- .../root/etc/uci-defaults/openmptcprouter | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 24cbccb20..b267d6f21 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -114,6 +114,13 @@ if [ "$(uci -q get openmptcprouter.settings.menu)" = "" ]; then EOF fi +if [ "$(uci -q get openmptcprouter.settings.disableintfrename)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set openmptcprouter.settings.disableintfrename='1' + commit openmptcprouter + EOF +fi + sed -i 's/net.ipv4.tcp_retries2=3$/net.ipv4.tcp_retries2=15/' /etc/sysctl.d/zzz_openmptcprouter.conf exit 0 From 57debb668140f62a4982afe469b9d0d3f33c2b00 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 9 Jan 2021 08:42:19 +0100 Subject: [PATCH 09/36] Rename omr-update script to be executed after all others --- .../files/etc/uci-defaults/{000-omr-update => zzzzz-omr-update} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename openmptcprouter/files/etc/uci-defaults/{000-omr-update => zzzzz-omr-update} (100%) diff --git a/openmptcprouter/files/etc/uci-defaults/000-omr-update b/openmptcprouter/files/etc/uci-defaults/zzzzz-omr-update similarity index 100% rename from openmptcprouter/files/etc/uci-defaults/000-omr-update rename to openmptcprouter/files/etc/uci-defaults/zzzzz-omr-update From 0be1a3b11979c29c17e2e5bd90e136558a52fea6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 16 Jan 2021 08:11:03 +0100 Subject: [PATCH 10/36] Changes for WAN IPv6 support in status page --- .../luasrc/view/openmptcprouter/wanstatus.htm | 70 +++++- luci-app-openmptcprouter/root/bin/omr-ip-intf | 12 +- .../root/bin/omr-ip6-intf | 37 +++ .../root/bin/omr-tracebox-mptcp | 15 +- .../root/usr/libexec/rpcd/openmptcprouter | 216 ++++++++++++++++-- 5 files changed, 309 insertions(+), 41 deletions(-) create mode 100755 luci-app-openmptcprouter/root/bin/omr-ip6-intf diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index b35f3344f..16caf5a59 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -231,14 +231,25 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm if ((mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr != "") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr); + } else if ((mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr6 != "") + { + var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_6addr); } else if (mArray.openmptcprouter.wan_addr != "" && mArray.openmptcprouter.service_addr == "127.0.0.1") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr); + } else if (mArray.openmptcprouter.wan_addr6 != "" && mArray.openmptcprouter.service_addr == "127.0.0.1") + { + var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6); } else if (mArray.openmptcprouter.wan_addr != "") { var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr); statusMessageClass = "warning"; statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; + } else if (mArray.openmptcprouter.wan_addr6 != "") + { + var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr6); + statusMessageClass = "warning"; + statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png"; } else if (mArray.openmptcprouter.ss_addr != "" && mArray.openmptcprouter.vps_status != "DOWN") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.ss_addr); @@ -248,11 +259,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm var title = '<%:No output%>'; statusMessage += '<%:No output%>' + '
'; } - if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) + if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:No server IP address, No WAN IP address%>' + '
'; } - if (mArray.openmptcprouter.service_addr !== "" && mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.vps_status == "DOWN") + if (mArray.openmptcprouter.service_addr !== "" && (mArray.openmptcprouter.wan_addr !== "" || mArray.openmptcprouter.wan_addr6 !== "") && mArray.openmptcprouter.vps_status == "DOWN") { statusMessage += '<%:Can\'t access and use server part%>' + '
'; } @@ -274,7 +285,10 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm } else if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:Can\'t get public IP address from V2Ray%>' + '
'; - } else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.external_check == true) + } else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 !== "" && mArray.openmptcprouter.external_check == true) + { + statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '
'; + } else if (mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '
'; } @@ -392,18 +406,21 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusMessage = ""; } // Populate info - var wanip = mArray.wans[i].wanip; + var wanip = mArray.wans[i].wanip; + var wanip6 = mArray.wans[i].wanip6; if (anonymize == "true" && testPrivateIP(wanip) == false) { wanip=replaceLastNChars(wanip,"x",6); } - var ipaddr = mArray.wans[i].ipaddr; + var ipaddr = mArray.wans[i].ipaddr; + var ip6addr = mArray.wans[i].ip6addr; if (anonymize == "true" && testPrivateIP(ipaddr) == false) { ipaddr=replaceLastNChars(ipaddr,"x",6); } - var whois = mArray.wans[i].whois; - var signal = mArray.wans[i].signal; + var whois = mArray.wans[i].whois; + var whois6 = mArray.wans[i].whois6; + var signal = mArray.wans[i].signal; var multipath = mArray.wans[i].multipath; if(multipath == 'master') { @@ -420,7 +437,13 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm { gateway=replaceLastNChars(gateway,"x",6); } + var gateway6 = mArray.wans[i].gateway6; + if (anonymize == "true" && testPrivateIP(gateway6) == false) + { + gateway6=replaceLastNChars(gateway6,"x",10); + } var gw_ping = mArray.wans[i].gw_ping; + var gw_ping6 = mArray.wans[i].gw_ping6; var server_ping = mArray.wans[i].server_ping; var ipv6_discover = mArray.wans[i].ipv6_discover; var multipath_available = mArray.wans[i].multipath_available; @@ -438,6 +461,9 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm if (mArray.wans[i].gateway !== "") { var title = mArray.wans[i].label + " (" + gateway + ")"; + } else if (mArray.wans[i].gateway6 !== "") + { + var title = mArray.wans[i].label + " (" + gateway6 + ")"; } else { var title = mArray.wans[i].label; } @@ -446,14 +472,26 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm { content += String.format('%s %s
','<%:ip address:%>', ipaddr); } + if(ip6addr !== '') + { + content += String.format('%s %s
','<%:ipv6 address:%>', ip6addr); + } if(wanip !== '') { content += String.format('%s %s
','<%:wan address:%>', wanip); } + if(wanip6 !== '') + { + content += String.format('%s %s
','<%:wan ipv6 address:%>', wanip6); + } if(whois !== '') { content += String.format('%s %s
','<%:whois:%>', whois); } + if(whois6 !== '') + { + content += String.format('%s %s
','<%:whois:%>', whois6); + } if(latency !== '') { content += String.format('%s %s ms
','<%:latency:%>', latency); @@ -492,14 +530,17 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm { title += String.format(' %s',networktype); } - if(ipaddr == '') + if(ipaddr == '' && ip6addr == '') { statusMessage += '<%:No IP defined%>' + '
'; } - if(gateway == '') + if(gateway == '' && gateway6 == '') { statusMessage += '<%:No gateway defined%>' + '
'; } else if(gw_ping == 'DOWN') + { + statusMessage += '<%:Gateway DOWN%>' + '
'; + } else if(gw_ping6 == 'DOWN') { statusMessage += '<%:Gateway DOWN%>' + '
'; } else if(multipath_available == 'ERROR') @@ -515,6 +556,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusMessage += '<%:Wan IP and gateway are identical%>' + '
'; statusMessageClass = "error"; } + if (stat == 'Offline' && ip6addr != '' && ipaddr == mArray.wans[i].gateway6) + { + statusMessage += '<%:Wan IP and gateway are identical%>' + '
'; + statusMessageClass = "error"; + } if(multipath == 'master') { if (master > 1) @@ -557,6 +603,12 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm temp += ''; } + if (mArray.wans.length == 0) + { + temp += '
  • '; + temp += '<%:No WAN with multipath enabled:%>'; + temp += '
  • '; + } for( var i = 0; i < mArray.tunnels.length; i++ ) { // Get link color diff --git a/luci-app-openmptcprouter/root/bin/omr-ip-intf b/luci-app-openmptcprouter/root/bin/omr-ip-intf index 4c87b4256..16434c5a4 100755 --- a/luci-app-openmptcprouter/root/bin/omr-ip-intf +++ b/luci-app-openmptcprouter/root/bin/omr-ip-intf @@ -28,8 +28,10 @@ get_ip_from_website() { } [ -z "$intf" ] && return -ip="" -config_load openmptcprouter -config_foreach get_ip_from_server server -[ -z "$ip" ] && get_ip_from_website -echo $ip \ No newline at end of file +if [ -n "$(ip -4 a show dev $intf)" ]; then + ip="" + config_load openmptcprouter + config_foreach get_ip_from_server server + [ -z "$ip" ] && get_ip_from_website + echo $ip +fi \ No newline at end of file diff --git a/luci-app-openmptcprouter/root/bin/omr-ip6-intf b/luci-app-openmptcprouter/root/bin/omr-ip6-intf new file mode 100755 index 000000000..c096503ea --- /dev/null +++ b/luci-app-openmptcprouter/root/bin/omr-ip6-intf @@ -0,0 +1,37 @@ +#!/bin/sh +. /lib/functions.sh + +intf=$1 + +get_ip_from_server() { + serverip=$(uci -q get openmptcprouter.$1.ip) + serverport=$(uci -q get openmptcprouter.$1.port) + getip="$(curl -s -k -6 -m 2 --interface $intf https://$serverip:$serverport/clienthost)" + [ -n "$getip" ] && getip=$(echo $getip | jsonfilter -e '@.client_host') + if [ -n "$(echo "$getip" | grep :)" ]; then + ip=$getip + break + fi +} + +get_ip_from_website() { + check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)" + [ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com" + checkip=$(echo $check_ipv6_website | sed -e 's/https:\/\///' -e 's/http:\/\///' | xargs dig +short AAAA | tr -d "\n") + ipset add ss_rules6_dst_bypass_all $checkip > /dev/null 2>&1 + getip="$(curl -s -6 -m 2 --interface $intf $check_ipv6_website)" + ipset del ss_rules6_dst_bypass_all $checkip > /dev/null 2>&1 + if [ -n "$(echo "$getip" | grep :)" ]; then + ip=$getip + break + fi +} + +[ -z "$intf" ] && return +if [ -n "$(ip -6 a show dev $intf)" ]; then + ip="" + config_load openmptcprouter + config_foreach get_ip_from_server server + [ -z "$ip" ] && get_ip_from_website + echo $ip +fi \ No newline at end of file diff --git a/luci-app-openmptcprouter/root/bin/omr-tracebox-mptcp b/luci-app-openmptcprouter/root/bin/omr-tracebox-mptcp index 0c28829e1..932364d19 100755 --- a/luci-app-openmptcprouter/root/bin/omr-tracebox-mptcp +++ b/luci-app-openmptcprouter/root/bin/omr-tracebox-mptcp @@ -1,7 +1,16 @@ #!/bin/sh INTERFACE=$2 -if [ -z "$INTERFACE" ]; then - tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $1 +SERVER=$1 +if [ -n "$(resolveip -4 $SERVER)" ]; then + if [ -z "$INTERFACE" ]; then + tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $SERVER + else + tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $SERVER + fi else - tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $1 + if [ -z "$INTERFACE" ]; then + tracebox -6 -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $SERVER + else + tracebox -6 -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $SERVER + fi fi \ No newline at end of file diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 633b47394..bb9700d29 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -545,7 +545,14 @@ function update_vps() local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") end +function get_rootfs() + local rootfs = {} + rootfs['format'] = ut.trim(sys.exec("mount | awk 'NR==1{print $5}'")) + return rootfs +end + function get_ip(interface) + local ut = require "luci.util" local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) local ip = "" if dump and dump['ipv4-address'] then @@ -563,6 +570,42 @@ function get_ip(interface) end end end + if ip == "" then + local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) + if dump and dump['l3_device'] then + local ifname = dump['l3_device'] + ip = ut.trim(sys.exec("ip -4 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname)) + end + end + return ip +end + +function get_ip6(interface) + local ut = require "luci.util" + local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) + local ip = "" + if dump and dump['ipv6-address'] then + local _, ipv6address + for _, ipv6address in ipairs(dump['ipv6-address']) do + ip = dump['ipv6-address'][_].address + end + end + if ip == "" then + local dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {}) + if dump and dump['ipv6-address'] then + local _, ipv6address + for _, ipv6address in ipairs(dump['ipv6-address']) do + ip = dump['ipv6-address'][_].address + end + end + end + if ip == "" then + local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) + if dump and dump['l3_device'] then + local ifname = dump['l3_device'] + ip = ut.trim(sys.exec("ip -6 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname)) + end + end return ip end @@ -625,6 +668,56 @@ function get_gateway(interface) return gateway end +function get_gateway6(interface) + local gateway = "" + local dump = nil + + dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) + + if dump and dump.route then + local _, route + for _, route in ipairs(dump.route) do + if dump.route[_].target == "::" then + gateway = dump.route[_].nexthop + end + end + end + if gateway == "" then + if dump and dump.inactive and dump.inactive.route then + local _, route + for _, route in ipairs(dump.inactive.route) do + if dump.inactive.route[_].target == "::" then + gateway = dump.inactive.route[_].nexthop + end + end + end + end + + if gateway == "" then + dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {}) + + if dump and dump.route then + local _, route + for _, route in ipairs(dump.route) do + if dump.route[_].target == "::" then + gateway = dump.route[_].nexthop + end + end + end + if gateway == "" then + if dump and dump.inactive and dump.inactive.route then + local _, route + for _, route in ipairs(dump.inactive.route) do + if dump.inactive.route[_].target == "::" then + gateway = dump.inactive.route[_].nexthop + end + end + end + end + end + return gateway +end + -- This function come from OverTheBox by OVH with many changes -- Copyright 2015 OVH -- Simon Lelievre (simon.lelievre@corp.ovh.com) @@ -689,16 +782,25 @@ function interfaces_status() if mArray.openmptcprouter["dns"] == true then -- wanaddr --mArray.openmptcprouter["wan_addr"] = uci:get("openmptcprouter","omr","public_detected_ipv4") or "" + if mArray.openmptcprouter["service_addr"] ~= "" then + mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1")) + mArray.openmptcprouter["service_addr_ip6"] = ut.trim(sys.exec("resolveip -6 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1")) + end if uci:get("openmptcprouter","settings","external_check") ~= "0" and mArray.openmptcprouter["dns"] == true then - mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website)) - if mArray.openmptcprouter["wan_addr"] == "" then - mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) + if mArray.openmptcprouter["service_addr_ip"] ~= "" then + mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website)) + if mArray.openmptcprouter["wan_addr"] == "" then + mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig -4 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) + end end - if mArray.openmptcprouter["ipv6"] == "enabled" then + if mArray.openmptcprouter["ipv6"] == "enabled" or mArray.openmptcprouter["service_addr_ip6"] ~= "" then mArray.openmptcprouter["wan_addr6"] = uci:get("openmptcprouter","omr","public_detected_ipv6") or "" if mArray.openmptcprouter["wan_addr6"] == "" then mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("curl -6 -s -m " .. timeout .. " " .. check_ipv6_website)) + if mArray.openmptcprouter["wan_addr"] == "" then + mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig -6 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) + end end end mArray.openmptcprouter["external_check"] = true @@ -720,9 +822,6 @@ function interfaces_status() end end end - if mArray.openmptcprouter["service_addr"] ~= "" then - mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1")) - end end if mArray.openmptcprouter["service_addr"] ~= "" and mArray.openmptcprouter["service_addr"] ~= "127.0.0.1" then @@ -751,7 +850,13 @@ function interfaces_status() local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500" local token = uci:get("openmptcprouter",s[".name"],"token") or "" if token ~= "" then - local vpsinfo_json = sys.exec('curl -4 --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status') + local vpsinfo_json = "" + if mArray.openmptcprouter["service_addr_ip"] ~= "" then + vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status') + end + if mArray.openmptcprouter["service_addr_ip6"] ~= "" then + vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://[' .. serverip .. ']:' .. adminport .. '/status') + end if vpsinfo_json ~= "" and vpsinfo_json ~= nil then local status, vpsinfo = pcall(function() return json.decode(vpsinfo_json) @@ -821,7 +926,11 @@ function interfaces_status() mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available" end if mArray.openmptcprouter["vps_admin"] == false then - local vpstest = sys.exec('curl -4 --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/') + if mArray.openmptcprouter["service_addr_ip"] ~= "" then + local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/') + elseif mArray.openmptcprouter["service_addr_ip6"] ~= "" then + local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://[' .. serverip .. ']:' .. adminport .. '/') + end if vpstest == "" then mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer" end @@ -859,7 +968,7 @@ function interfaces_status() else mArray.openmptcprouter["tun_state"] = "DOWN" end - if mArray.openmptcprouter["ipv6"] == "enabled" then + if mArray.openmptcprouter["ipv6"] == "enabled" or mArray.openmptcprouter["service_addr_ip6"] ~= "" then local tunnel_ipv6_gw = uci:get("network","omr6in4","gateway") local tunnel_ping6_test = ut.trim(sys.exec("ping6 -w 1 -c 1 " .. tunnel_ipv6_gw .. "%6in4-omr6in4 | grep '100% packet loss'")) if tunnel_ping6_test == "" then @@ -996,7 +1105,9 @@ function interfaces_status() local interface = section[".name"] local net = ntm:get_network(interface) local ipaddr = net:ipaddr() or "" + local ip6addr = net:ip6addr() or "" local gateway = section["gateway"] or "" + local gateway6 = section["ip6gw"] or "" local multipath = section["multipath"] local enabled = section["auto"] @@ -1034,7 +1145,13 @@ function interfaces_status() if ipaddr == "" and ifname ~= nil and ifname ~= "" then ipaddr = ut.trim(sys.exec("ip -4 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'")) end - if ipaddr == "" then + if ip6addr == "" and ifname ~= nil and ifname ~= "" then + ip6addr = ut.trim(sys.exec("ip -6 -br addr ls dev " .. ifname .. " | awk -F'[ /]+' '{print $3}' | tr -d '\n'")) + end + if ip6addr == "" and ifname ~= nil and ifname ~= "" then + ip6addr = ut.trim(sys.exec("ip -6 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'")) + end + if ipaddr == "" and ip6addr == "" then connectivity = "ERROR" end @@ -1071,8 +1188,10 @@ function interfaces_status() -- Detect WAN gateway status local gw_ping = "UP" - if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then + local gw_ping6 = "UP" + if ifname ~= nil and not (ifname:match("^tun.*") or interface:match("^ovpn.*")) then gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'")) + gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'")) end if gateway == "" then @@ -1086,18 +1205,40 @@ function interfaces_status() end end end + if gateway6 == "" then + gateway6 = get_gateway6(interface) + end + if gateway6 == "" and ifname ~= nil and ifname ~= "" then + if fs.access("/sys/class/net/" .. ifname) then + gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) + if gateway6 == "" then + gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep default | awk '{print $3}' | tr -d '\n'")) + end + end + end local signal = "" local operator = "" local phonenumber = "" local donglestate = "" local networktype = "" - if gateway ~= "" then + if gateway ~= "" or gateway6 ~= "" then if uci:get("openmptcprouter", "settings", "disablegwping") ~= "1" and connectivity ~= "ERROR" then - local gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'")) - if gw_ping_test ~= "" then - gw_ping = "DOWN" - if connectivity == "OK" then - connectivity = "WARNING" + if gateway ~= "" then + local gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'")) + if gw_ping_test ~= "" then + gw_ping = "DOWN" + if connectivity == "OK" then + connectivity = "WARNING" + end + end + end + if gateway6 ~= "" then + local gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway6 .. " | grep '100% packet loss'")) + if gw_ping6_test ~= "" then + gw_ping6 = "DOWN" + if connectivity == "OK" then + connectivity = "WARNING" + end end end end @@ -1111,7 +1252,7 @@ function interfaces_status() networktype = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $5}'")) end end - elseif gateway == "" then + elseif gateway == "" and gateway6 == "" then gw_ping = "DOWN" connectivity = "ERROR" end @@ -1147,7 +1288,7 @@ function interfaces_status() local latency = "" local server_ping = "" --if connectivity ~= "ERROR" and ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" then - if ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" and connectivity ~= "ERROR" then + if ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and (ipaddr ~= "" or ip6addr ~= "") and connectivity ~= "ERROR" then local serverip = mArray.openmptcprouter["service_addr"] if serverip == "127.0.0.1" then serverip = mArray.openmptcprouter["wan_addr"] @@ -1170,7 +1311,7 @@ function interfaces_status() local multipath_available = "" local multipath_available_state = "" - if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and gateway ~= "" and gw_ping == "UP" then + if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and (gw_ping == "UP" or gw_ping6 == "UP") then -- Test if multipath can work on the connection local multipath_available_state = uci:get("openmptcprouter",interface,"mptcp_status") or "" if multipath_available_state == "" then @@ -1207,7 +1348,9 @@ function interfaces_status() -- end local mtu = "" local whois = "" + local whois6 = "" local publicIP = "" + local publicIP6 = "" if connectivity ~= "ERROR" then if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then @@ -1215,24 +1358,39 @@ function interfaces_status() if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5)))) end + publicIP6 = uci:get("openmptcprouter",interface:sub(5),"publicip6") or "" + if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then + publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. get_device(interface:sub(5)))) + end else publicIP = uci:get("openmptcprouter",interface,"publicip") or "" if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname)) end + publicIP6 = uci:get("openmptcprouter",interface,"publicip6") or "" + if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then + publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. ifname)) + end end if publicIP ~= "" then whois = uci:get("openmptcprouter",interface,"asn") or "" if whois == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then - --whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'")) - whois = ut.trim(sys.exec("wget -4 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP .. "' | jsonfilter -q -e '@.as_description'")) + whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'")) + --whois = ut.trim(sys.exec("wget -4 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP .. "' | jsonfilter -q -e '@.as_description'")) + end + end + if publicIP6 ~= "" then + whois6 = uci:get("openmptcprouter",interface,"asn") or "" + if whois6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then + whois6 = ut.trim(sys.exec("whois " .. publicIP6 .. " | grep -i 'netname' | awk '{print $2}'")) + --whois6 = ut.trim(sys.exec("wget -6 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP6 .. "' | jsonfilter -q -e '@.as_description'")) end end if ifname ~= "" and ifname ~= nil then if fs.access("/sys/class/net/" .. ifname) then mtu = ut.trim(sys.exec("cat /sys/class/net/" .. ifname .. "/mtu | tr -d '\n'")) if mtu == "" and interface ~= nil then - mtu = uci:get("openmptcprouter",interface,"mtu") or "" + mtu = uci:get("openmptcprouter",interface,"mtu") or "" end end end @@ -1249,17 +1407,22 @@ function interfaces_status() --link = net:adminlink() or "", ifname = ifname, ipaddr = ipaddr, + ip6addr = ip6addr, gateway = gateway, + gateway6 = gateway6, multipath = section["multipath"], status = connectivity, wanip = publicIP, + wanip6 = publicIP6, latency = latency, mtu = mtu, whois = whois or "unknown", + whois6 = whois6 or "unknown", qos = section["trafficcontrol"], download = section["download"], upload = section["upload"], gw_ping = gw_ping, + gw_ping6 = gw_ping6, server_ping = server_ping, ipv6_discover = ipv6_discover, multipath_available = multipath_available, @@ -1350,6 +1513,11 @@ function _ipv6_discover(interface) end local methods = { + getrootfs = { + call = function() + return get_rootfs() + end + }, status = { call = function() return interfaces_status() From b25b156436196e81c98c2721418e7ebff8ca2af8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 16 Jan 2021 08:12:03 +0100 Subject: [PATCH 11/36] Make omr-tracebox and omr-test-speed compatible with WAN IPv6 --- openmptcprouter/files/bin/omr-test-speedv6 | 29 ++++++++++++++++++---- openmptcprouter/files/bin/omr-tracebox | 3 +++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/openmptcprouter/files/bin/omr-test-speedv6 b/openmptcprouter/files/bin/omr-test-speedv6 index ae7634d7c..27fd43e68 100755 --- a/openmptcprouter/files/bin/omr-test-speedv6 +++ b/openmptcprouter/files/bin/omr-test-speedv6 @@ -1,15 +1,34 @@ #!/bin/sh # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : - INTERFACE="$1" -HOST="proof.ovh.net" +echo "Select best test server..." +HOSTLST="http://speedtest.frankfurt.linode.com/garbage.php?ckSize=10000 http://speedtest.tokyo2.linode.com/garbage.php?ckSize=10000 http://speedtest.singapore.linode.com/garbage.php?ckSize=10000 http://speedtest.newark.linode.com/garbage.php?ckSize=10000 http://speedtest.atlanta.linode.com/garbage.php?ckSize=10000 http://speedtest.dallas.linode.com/garbage.php?ckSize=10000 http://speedtest.fremont.linode.com/garbage.php?ckSize=10000 http://speedtest.tele2.net/1000GB.zip http://www.ovh.net/files/10Gb.dat https://speed.hetzner.de/10GB.bin http://ipv4.bouygues.testdebit.info/10G.iso http://par.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin http://ams.download.datapacket.com/10000mb.bin http://fra.download.datapacket.com/10000mb.bin http://lon.download.datapacket.com/10000mb.bin http://mad.download.datapacket.com/10000mb.bin http://prg.download.datapacket.com/10000mb.bin http://sto.download.datapacket.com/10000mb.bin http://vie.download.datapacket.com/10000mb.bin http://war.download.datapacket.com/10000mb.bin http://atl.download.datapacket.com/10000mb.bin http://chi.download.datapacket.com/10000mb.bin http://lax.download.datapacket.com/10000mb.bin http://mia.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin" +bestping="999" +for pinghost in $HOSTLST; do + domain=$(echo $pinghost | awk -F/ '{print $3}') + if [ -z "$INTERFACE" ]; then + ping=$(ping -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1) + else + ping=$(ping -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1) + fi + echo "host: $domain - ping: $ping" + if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then + bestping=$ping + HOST=$pinghost + fi +done + +[ -z "$HOST" ] && HOST="http://proof.ovh.net/files/10Gio.dat" + +echo "Best server is $HOST, running test:" trap : HUP INT TERM if [ -z "$INTERFACE" ]; then - curl -6 http://$HOST/files/10Gio.dat >/dev/null || echo + curl -6 $HOST >/dev/null || echo else - hostip=$(dig +short AAAA $HOST | tr -d "\n") + domain=$(echo $HOST | awk -F/ '{print $3}') + hostip=$(dig +nocmd +noall +answer AAAA $domain | grep -v CNAME | awk '{print $5}' | tr -d "\n") ipset add ss_rules6_dst_bypass_all $hostip - curl -6 --interface $INTERFACE http://$HOST/files/10Gio.dat >/dev/null || echo + curl -6 --interface $INTERFACE $HOST >/dev/null || echo ipset del ss_rules6_dst_bypass_all $hostip fi diff --git a/openmptcprouter/files/bin/omr-tracebox b/openmptcprouter/files/bin/omr-tracebox index 2342d3b8c..2352b53ea 100755 --- a/openmptcprouter/files/bin/omr-tracebox +++ b/openmptcprouter/files/bin/omr-tracebox @@ -2,9 +2,12 @@ INTERFACE="$1" multipathip=$(dig +short A multipath-tcp.org | tr -d "\n") ipset add ss_rules_dst_bypass_all $multipathip > /dev/null 2>&1 +multipathip6=$(dig +short AAAA multipath-tcp.org | tr -d "\n") +ipset add ss_rules6_dst_bypass_all $multipathip6 > /dev/null 2>&1 if [ -z "$INTERFACE" ]; then tracebox -v -n -p IP/TCP/MSS/MPCAPABLE/WSCALE multipath-tcp.org else tracebox -v -i $INTERFACE -n -p IP/TCP/MSS/MPCAPABLE/WSCALE multipath-tcp.org fi ipset del ss_rules_dst_bypass_all $multipathip > /dev/null 2>&1 +ipset del ss_rules6_dst_bypass_all $multipathip6 > /dev/null 2>&1 From 36351e8548c3cf4878ecab2a97c4ded3d3f0b041 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 16 Jan 2021 08:14:09 +0100 Subject: [PATCH 12/36] Make omr-tracker compatible with WAN IPv6 --- .../share/omr/post-tracking.d/post-tracking | 383 +++++++++++++++++- omr-tracker/files/bin/omr-tracker | 115 ++++++ omr-tracker/files/etc/init.d/omr-tracker | 9 +- .../files/etc/init.d/openmptcprouter-vps | 48 ++- .../files/etc/uci-defaults/1980-omr-firewall | 13 + 5 files changed, 546 insertions(+), 22 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 0acb30236..ca23f14cd 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1,5 +1,5 @@ - SETROUTE=false + set_route() { local multipath_config_route interface_gw interface_if INTERFACE=$1 @@ -33,6 +33,39 @@ set_route() { fi } +set_route6() { + local multipath_config_route interface_gw interface_if + INTERFACE=$1 + PREVINTERFACE=$2 + SETDEFAULT=$3 + [ -z "$SETDEFAULT" ] && SETDEFAULT="yes" + multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) + [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") + if [ "$multipath_config_route" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + interface_gw="$(uci -q get network.$INTERFACE.gateway)" + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" + [ "$SETDEFAULT" = "yes" ] && ip -6 route replace default scope global nexthop via $interface_gw dev $interface_if + ip -6 route replace default via $interface_gw dev $interface_if table 991337 && SETROUTE=true + fi + fi +} + set_server_default_route() { local server=$1 local serverip multipath_config_route @@ -52,6 +85,25 @@ set_server_default_route() { fi } +set_server_default_route6() { + local server=$1 + local serverip multipath_config_route + config_get serverip $server ip + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) + [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY6" + if [ "$(ip -6 r show $serverip | grep nexthop)" != "" ]; then + ip -6 r delete $serverip >/dev/null 2>&1 + fi + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 + fi +} + delete_server_default_route() { local server=$1 local serverip @@ -65,6 +117,19 @@ delete_server_default_route() { fi } +delete_server_default_route6() { + local server=$1 + local serverip + config_get serverip $server ip + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + if [ "$serverip" != "" ] && [ "$(ip -6 route show $serverip metric 1)" != "" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" + ip -6 route del $serverip metric 1 >/dev/null 2>&1 + fi +} + set_routes_intf() { local multipath_config_route local INTERFACE=$1 @@ -89,7 +154,7 @@ set_routes_intf() { interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") fi #if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ "$(ip route show $serverip | grep $interface_if)" = "" ]; then - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ]; then + if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then if [ "$multipath_config_route" = "master" ]; then weight=10 else @@ -114,6 +179,55 @@ set_routes_intf() { fi } +set_routes_intf6() { + local multipath_config_route + local INTERFACE=$1 + multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) + [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo 'off')" + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + #multipath_current_config=$(multipath $interface_if | grep 'deactivated') + interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") + if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then + interface_gw="$(uci -q get network.$INTERFACE.gateway)" + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") + fi + #if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ "$(ip -6 route show $serverip | grep $interface_if)" = "" ]; then + if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then + if [ "$multipath_config_route" = "master" ]; then + weight=10 + else + weight=1 + fi + if [ "$multipath_config_route" = "backup" ]; then + nbintfb=$((nbintfb+1)) + if [ -z "$routesintfbackup6" ]; then + routesintfbackup6="nexthop via $interface_gw dev $interface_if weight $weight" + else + routesintfbackup6="$routesintfbackup6 nexthop via $interface_gw dev $interface_if weight $weight" + fi + else + nbintf=$((nbintf+1)) + if [ -z "$routesintf6" ]; then + routesintf6="nexthop via $interface_gw dev $interface_if weight $weight" + else + routesintf6="$routesintf6 nexthop via $interface_gw dev $interface_if weight $weight" + fi + fi + fi + fi +} + set_route_balancing() { local multipath_config_route interface_gw interface_if INTERFACE=$1 @@ -157,6 +271,49 @@ set_route_balancing() { fi } +set_route_balancing6() { + local multipath_config_route interface_gw interface_if + INTERFACE=$1 + multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) + [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo 'off')" + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) + interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") + if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + interface_gw="$(uci -q get network.$INTERFACE.gateway)" + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") + fi + if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then + if [ "$(uci -q get network.$INTERFACE.weight)" != "" ]; then + weight=$(uci -q get network.$INTERFACE.weight) + elif [ "$(uci -q get openmtpcprouter.$INTERFACE.weight)" != "" ]; then + weight=$(uci -q get openmtpcprouter.$INTERFACE.weight) + elif [ "$multipath_config_route" = "master" ]; then + weight=2 + else + weight=1 + fi + if [ "$multipath_config_route" = "backup" ]; then + nbintfb=$((nbintfb+1)) + routesbalancingbackup6="$routesbalancingbackup6 nexthop via $interface_gw dev $interface_if weight $weight" + else + nbintf=$((nbintf+1)) + routesbalancing6="$routesbalancing6 nexthop via $interface_gw dev $interface_if weight $weight" + fi + fi + fi +} + set_server_all_routes() { local server=$1 local serverip multipath_config_route @@ -195,6 +352,44 @@ set_server_all_routes() { fi } +set_server_all_routes6() { + local server=$1 + local serverip multipath_config_route + config_get serverip $server ip + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then + routesintf="" + routesintfbackup="" + nbintf=0 + nbintfb=0 + config_load network + config_foreach set_routes_intf interface + uintf="$(echo $routesintf | awk '{print $5}')" + uintfb="$(echo $routesintfbackup | awk '{print $5}')" + if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then + while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do + ip -6 r del $serverip + done + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" + ip -6 route replace $serverip scope global $routesintf + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" + fi + if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" + ip -6 route replace $serverip scope global metric 999 $routesintfbackup + fi + fi +} + set_server_route() { @@ -225,6 +420,34 @@ set_server_route() { fi } +set_server_route6() { + local server=$1 + local serverip multipath_config_route + config_get serverip $server ip + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + local metric=$2 + [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) + [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + #multipath_current_config=$(multipath $interface_if | grep "deactivated") + interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") + #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric + fi + if [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric + fi +} + del_server_route() { local server=$1 local serverip @@ -242,6 +465,23 @@ del_server_route() { fi } +del_server_route6() { + local server=$1 + local serverip + config_get serverip $server ip + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" + local metric + metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 + ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then + ip -6 route del default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + else + ip -6 route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + fi +} + disable_pihole() { local server=$1 if [ -n "$(uci -q get dhcp.@dnsmasq[0].server | grep '#53' | grep '10.2')" ]; then @@ -288,6 +528,7 @@ if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then fi default_gw=$(ip route show default | grep -v "metric" | awk '/default/ {print $3}') +default_gw6=$(ip -6 route show default | grep -v "metric" | awk '/default/ {print $3}') #current_interface_gw=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway") interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') @@ -320,6 +561,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set down > /dev/null 2>&1 fi + if [ -n "$OMR_TRACKER_DEVICE_IP6" ]; then + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set down > /dev/null 2>&1 + fi if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; then VPN_BASE_INTF="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.baseintf)" VPN_BASE_INTF_IP=$(ubus call network.interface.$VPN_BASE_INTF status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") @@ -331,18 +575,22 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then fi config_load openmptcprouter config_foreach del_server_route server + config_foreach del_server_route6 server #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then config_foreach set_server_all_routes server + config_foreach set_server_all_routes6 server fi fi - if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then config_load network config_foreach set_route interface $OMR_TRACKER_INTERFACE + config_foreach set_route6 interface $OMR_TRACKER_INTERFACE elif [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath)" = "master" ]; then config_load network config_foreach set_route interface $OMR_TRACKER_INTERFACE "no" + config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no" fi 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)" @@ -370,6 +618,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then config_load network config_foreach set_route interface $OMR_TRACKER_INTERFACE + config_foreach set_route6 interface $OMR_TRACKER_INTERFACE fi if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(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" ] && [ "$(uci -q get shadowsocks-libev.sss0.obfs)" != "1" ]; then _log "Tunnel down use ShadowSocks for UDP" @@ -400,6 +649,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then #if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]; then if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then config_foreach set_server_default_route server + config_foreach set_server_default_route6 server fi fi dns_flush @@ -525,6 +775,20 @@ if [ "$multipath_config" = "master" ]; then config_foreach set_server_default_route server fi fi + if ([ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$default_gw6" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then + omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") + if [ -n "$omrvpn_intf" ] && [ "$(ip route show default | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" + ip -6 route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE + fi + config_load openmptcprouter + #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then + # config_foreach set_server_all_routes server + if [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then + config_foreach set_server_default_route server + config_foreach set_server_default_route6 server + fi + fi #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(ip route show default | grep weight)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(ip route show default | grep weight)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") @@ -534,10 +798,17 @@ if [ "$multipath_config" = "master" ]; then nbintf=0 config_load network config_foreach set_route_balancing interface + config_foreach set_route_balancing6 interface [ -n "$routesbalancing" ] && { ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 0 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 0 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { _log "Set ip route replace default scope global $routesbalancing" - ip route replace default scope global $routesbalancing + ip route replace default scope global metric 0 $routesbalancing + } + } + [ -n "$routesbalancing6" ] && { + ([ "$nbintf" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" + ip -6 route replace default scope global metric 1 $routesbalancing6 } } [ -n "$routesbalancingbackup" ] && { @@ -546,11 +817,20 @@ if [ "$multipath_config" = "master" ]; then ip route replace default scope global metric 999 $routesbalancingbackup } } + [ -n "$routesbalancingbackup6" ] && { + ([ "$nbintf" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" + ip -6 route replace default scope global metric 999 $routesbalancingbackup6 + } + } fi fi if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE " ]; then ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 fi + if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE " ]; then + ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 + fi if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((10 + RANDOM % 31)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(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 fi @@ -566,6 +846,15 @@ if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then config_foreach set_server_route server fi fi +if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then + config_load openmptcprouter + #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then + if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then + config_foreach set_server_all_routes6 server + elif [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then + config_foreach set_server_route6 server + fi +fi if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then download="$(uci -q get network.$OMR_TRACKER_INTERFACE.downloadspeed)" @@ -577,18 +866,33 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then fi gtudpst="up" [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && gtudpst="backup" - if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ]; then + if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ] && [ "$OMR_TRACKER_DEVICE_IP" != "" ]; then if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate pref 1 auto tx $((upload*1000/8)) rx $((download*1000/8)) > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate pref 1 fixed tx $((upload*1000/8)) rx $((download*1000/8)) > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 fi else if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up pref 1 rate auto tx 12500000 rx 12500000 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up pref 1 rate fixed tx 12500000 rx 12500000 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + fi + fi + fi + if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6)" = "" ] && [ "$OMR_TRACKER_DEVICE_IP6" != "" ]; then + if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then + if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + else + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + fi + else + if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + else + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 fi fi fi @@ -612,6 +916,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE..." if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then local ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)" + local 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" @@ -641,10 +946,10 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( # fi #fi if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then - local asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')" - [ -z "$asn" ] && { - asn="$(whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" - } + #local asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')" + #[ -z "$asn" ] && { + local asn="$(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 @@ -694,6 +999,58 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( 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 + local 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 + local 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 + local serverip=$(uci -q get shadowsocks-libev.sss0.server) + [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && { + omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)" + [ -n "$omrtracebox" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" + } + [ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip6="$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" + } + if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then + mtu=$(uci -q get network.$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 + } + else + [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { + 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 + } + } || { + local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) + [ -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 + 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 -c 1 $(uci -q get shadowsocks-libev.sss0.server) 2>&1 >/dev/null; then uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 2e7b3d96a..637c27019 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -5,6 +5,7 @@ [ -n "$1" ] || exit . /lib/functions.sh +. /usr/lib/unbound/iptools.sh # retrieve args OMR_TRACKER_INTERFACE="$1" @@ -13,16 +14,20 @@ shift # export vars export OMR_TRACKER_INTERFACE export OMR_TRACKER_HOST +export OMR_TRACKER_HOST6 export OMR_TRACKER_TIMEOUT export OMR_TRACKER_STATUS export OMR_TRACKER_STATUS_MSG export OMR_TRACKER_PREV_STATUS export OMR_TRACKER_DEVICE export OMR_TRACKER_DEVICE_IP +export OMR_TRACKER_DEVICE_IP6 export OMR_TRACKER_DEVICE_GATEWAY +export OMR_TRACKER_DEVICE_GATEWAY6 dscp=56 # set DSCP CS7 (56) in outgoing packets initial_hosts="$OMR_TRACKER_HOSTS" +initial_hosts6="$OMR_TRACKER_HOSTS6" initial_timeout="$OMR_TRACKER_TIMEOUT" wait_test=${OMR_TRACKER_WAIT_TEST:-0} @@ -59,10 +64,15 @@ _update_rto() { _restart() { OMR_TRACKER_HOST="${OMR_TRACKER_HOSTS%% *}" + OMR_TRACKER_HOST6="${OMR_TRACKER_HOSTS6%% *}" [ "$OMR_TRACKER_HOST" = "$OMR_TRACKER_HOSTS" ] || { OMR_TRACKER_HOSTS="${OMR_TRACKER_HOSTS#* } $OMR_TRACKER_HOST" _init_rto } + [ "$OMR_TRACKER_HOST6" = "$OMR_TRACKER_HOSTS6" ] || { + OMR_TRACKER_HOSTS6="${OMR_TRACKER_HOSTS6#* } $OMR_TRACKER_HOST6" + _init_rto + } } _post_tracking() { @@ -170,12 +180,14 @@ OMR_TRACKER_PREV_STATUS="" while true; do # setup tracker variables OMR_TRACKER_DEVICE_IP= + OMR_TRACKER_DEVICE_IP6= OMR_TRACKER_STATUS="ERROR" OMR_TRACKER_STATUS_MSG="" OMR_TRACKER_LATENCY= #OMR_TRACKER_TIMEOUT=$((rto / 1000 + (rto % 1000 ? 1 : 0))) OMR_TRACKER_LIST_HOSTS="" OMR_TRACKER_DEVICE_GATEWAY= + OMR_TRACKER_DEVICE_GATEWAY6= serverip_ping=false if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then @@ -185,6 +197,10 @@ while true; do if [ -z "$OMR_TRACKER_DEVICE_IP" ]; then OMR_TRACKER_DEVICE_IP=$(ip -4 addr show dev "$OMR_TRACKER_DEVICE" | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) fi + #OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') + #if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then + OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | grep -v 'inet6 f' | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) + #fi #OMR_TRACKER_DEVICE_IP=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") #if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then # OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep -v default | awk '/proto static/ {print $1}' | tr -d "\n") @@ -219,6 +235,15 @@ while true; do if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep kernel | awk '/proto kernel/ {print $1}' | tr -d "\n") fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(uci -q get "network.$OMR_TRACKER_INTERFACE.ip6gw") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}\"].nexthop" | tr -d "\n") + fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then + OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") + fi # execute specific tracker if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then @@ -304,6 +329,89 @@ while true; do sleep "$OMR_TRACKER_INTERVAL_TRIES" done fi + if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then + # setup loop variable + tries="$OMR_TRACKER_TRIES" + # loop until tries attempts have been reached + while [ "$tries" -gt 0 ]; do + #if [ -n "$OMR_TRACKER_DEVICE_ROUTE" ]; then + # _ping "$OMR_TRACKER_DEVICE_ROUTE" "$OMR_TRACKER_DEVICE" "no" + # status=$? + #else + _ping "$OMR_TRACKER_DEVICE_GATEWAY6" "$OMR_TRACKER_DEVICE" "no" + status=$? + #fi + if $(exit $status) && [ "$OMR_TRACKER_TYPE" = "none" ]; then + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + elif [ "$OMR_TRACKER_TYPE" != "none" ]; then + if ! $(exit $status); then + OMR_TRACKER_STATUS_MSG="gateway6 down" + fi + serverip_ping=false + if [ "$OMR_TRACKER_TYPE" = "ping" ]; then + config_load openmptcprouter + config_foreach _ping_server server $OMR_TRACKER_DEVICE + fi + if [ "$serverip_ping" = false ] && [ -n "$OMR_TRACKER_HOST6" ]; then + OMR_TRACKER_HOST6=$(resolveip -6 -t 5 $OMR_TRACKER_HOST6 | head -n 1 | tr -d "\n") + if [ -n "$OMR_TRACKER_HOST6" ]; then + if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]; then + # Check if route is not used + while ! ip -6 route add $OMR_TRACKER_HOST6 via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP6 > /dev/null 2>&1 + do + logger -t "omr-tracker" "Can't create route to $OMR_TRACKER_HOST6 via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP6. waiting..." + sleep 2 + ip -6 route del "$OMR_TRACKER_HOST6" via "$OMR_TRACKER_DEVICE_GATEWAY6" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP6" > /dev/null 2>&1 + _restart + done + fi + if [ "$OMR_TRACKER_TYPE" = "ping" ]; then + _ping "$OMR_TRACKER_HOST6" "$OMR_TRACKER_DEVICE" "yes" + statusb=$? + elif [ "$OMR_TRACKER_TYPE" = "httping" ]; then + _httping "$OMR_TRACKER_HOST6" "$OMR_TRACKER_DEVICE_IP" "yes" + statusb=$? + elif [ "$OMR_TRACKER_TYPE" = "dns" ]; then + _dns "$OMR_TRACKER_HOST6" "$OMR_TRACKER_DEVICE_IP" "yes" + statusb=$? + fi + ip route del "$OMR_TRACKER_HOST6" via "$OMR_TRACKER_DEVICE_GATEWAY6" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP6" > /dev/null 2>&1 + if $(exit $statusb); then + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + else + if [ "$OMR_TRACKER_LIST_HOSTS6" = "" ]; then + OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_HOST6" + else + OMR_TRACKER_LIST_HOSTS6="$OMR_TRACKER_LIST_HOSTS6,$OMR_TRACKER_HOST6" + fi + fi + else + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + fi + else + OMR_TRACKER_STATUS_MSG="" + OMR_TRACKER_STATUS="OK" + break + fi + elif ! $(exit $status); then + OMR_TRACKER_STATUS_MSG="gateway down" + fi + tries=$((tries - 1)) + #_restart + OMR_TRACKER_HOST6="${OMR_TRACKER_HOSTS6%% *}" + [ "$OMR_TRACKER_HOST6" = "$OMR_TRACKER_HOSTS6" ] || { + OMR_TRACKER_HOSTS6="${OMR_TRACKER_HOSTS6#* } $OMR_TRACKER_HOST6" + } + #OMR_TRACKER_TIMEOUT=$((OMR_TRACKER_TIMEOUT * 2)) + sleep "$OMR_TRACKER_INTERVAL_TRIES" + done + fi else OMR_TRACKER_STATUS_MSG="link down" fi @@ -316,6 +424,13 @@ while true; do OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG and $OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS)" fi fi + if [ "$OMR_TRACKER_LIST_HOSTS6" != "" ]; then + if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then + OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS6)" + else + OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG and $OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS6)" + fi + fi #[ "$OMR_TRACKER_HOSTS" = "$initial_hosts" ] || [ "$OMR_TRACKER_STATUS" = "OK" ] && _post_tracking #[ "$OMR_TRACKER_STATUS" = "ERROR" ] && _restart diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 3612c57ee..d5965fe1f 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -11,12 +11,15 @@ USE_PROCD=1 } +. /usr/lib/unbound/iptools.sh + _validate_section() { - local tmp_hosts=$hosts tmp_timeout=$timeout tmp_tries=$tries + local tmp_hosts=$hosts tmp_hosts6=$hosts6 tmp_timeout=$timeout tmp_tries=$tries local tmp_interval=$interval tmp_interval_tries=$interval_tries tmp_options=$options tmp_type=$type tmp_enabled=$enabled tmp_wait_test=$wait_test uci_validate_section omr-tracker "$1" "$2" \ 'hosts:list(host)' \ + 'hosts6:list(host6)' \ 'timeout:uinteger' \ 'tries:uinteger' \ 'interval:uinteger' \ @@ -27,6 +30,7 @@ _validate_section() { 'options:string' [ -z "$hosts" ] && hosts=$tmp_hosts + [ -z "$hosts6" ] && hosts6=$tmp_hosts6 [ -z "$timeout" ] && timeout=$tmp_timeout [ -z "$tries" ] && tries=$tmp_tries [ -z "$interval" ] && interval=$tmp_interval @@ -42,7 +46,7 @@ _launch_tracker() { loopback|lan*|if0*) return;; esac - local hosts timeout tries interval interval_tries options type enabled wait_test + local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test _validate_section "defaults" "defaults" _validate_section "interface" "$1" @@ -65,6 +69,7 @@ _launch_tracker() { # shellcheck disable=SC2086 procd_set_param command /bin/omr-tracker "$1" $options procd_append_param env "OMR_TRACKER_HOSTS=$hosts" + procd_append_param env "OMR_TRACKER_HOSTS6=$hosts6" procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout" procd_append_param env "OMR_TRACKER_TRIES=$tries" procd_append_param env "OMR_TRACKER_INTERVAL=$interval" diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 0ec6b55de..3c5ca2aaf 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -8,6 +8,8 @@ USE_PROCD=1 EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall get_openvpn_key" +. /usr/lib/unbound/iptools.sh + _parse_result() { result=$("echo $1 | jsonfilter -q -e '@.result'") echo $result @@ -22,7 +24,13 @@ _login() { serverport="$(uci -q get openmptcprouter.${servername}.port)" if [ -z "$token" ]; then #auth=`curl --max-time 10 -s -k -H "Content-Type: application/json" -X POST -d '{"username":"'$username'","password":"'$password'"}' https://$server:$serverport/login` - auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://$server:$serverport/token` + resolve="$(resolveip $server)" + valid_ip6=$(valid_subnet6 $server) + if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then + auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://$server:$serverport/token` + else + auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://[$server]:$serverport/token` + fi [ -z "$auth" ] && return token="$(echo "$auth" | jsonfilter -q -e '@.access_token')" uci -q set openmptcprouter.${servername}.token="$token" @@ -41,7 +49,13 @@ _get_json() { route=$1 [ -z "$token" ] && _login [ -n "$token" ] && { - result=`curl --max-time 10 -s -k -H "accept: application/json" -H "Authorization: Bearer $token" https://$server:$serverport/$route` + resolve="$(resolveip $server)" + valid_ip6=$(valid_subnet6 $server) + if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then + result=`curl --max-time 10 -s -k -H "accept: application/json" -H "Authorization: Bearer $token" https://$server:$serverport/$route` + else + result=`curl --max-time 10 -s -k -H "accept: application/json" -H "Authorization: Bearer $token" https://[$server]:$serverport/$route` + fi echo $result } || { echo '' @@ -54,7 +68,13 @@ _set_json() { settings="$2" [ -z "$token" ] && _login [ -n "$token" ] && { - result=`curl --max-time 10 -s -k -H "Authorization: Bearer $token" -H "Content-Type: application/json" -X POST -d "$settings" https://$server:$serverport/$route` + resolve="$(resolveip $server)" + valid_ip6=$(valid_subnet6 $server) + if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then + result=`curl --max-time 10 -s -k -H "Authorization: Bearer $token" -H "Content-Type: application/json" -X POST -d "$settings" https://$server:$serverport/$route` + else + result=`curl --max-time 10 -s -k -H "Authorization: Bearer $token" -H "Content-Type: application/json" -X POST -d "$settings" https://[$server]:$serverport/$route` + fi echo $result } || { echo '' @@ -449,6 +469,7 @@ _get_gre_tunnel() { set network.omrip${i}gre.defaultroute='0' set network.omrip${i}gre.multipath='off' set network.omrip${i}gre.peerdns='0' + set network.omrip${i}gre.ttl='255' set network.omrip${i}gre.ip4table='vpn' set network.omrip${i}gre.peeraddr="$publicaddr" set network.omrip${i}gre.ipaddr="$vpnip_local" @@ -1453,7 +1474,7 @@ _backup_send() { EOF return } - sysupgrade -b /tmp/backup.tar.gz + sysupgrade -k -b /tmp/backup.tar.gz backup_data="$(cat /tmp/backup.tar.gz | base64 | tr -d '\n')" backup_sha256sum="$(sha256sum /tmp/backup.tar.gz | awk '{print $1}')" [ -n "$backup_data" ] && { @@ -1574,10 +1595,20 @@ _config_service() { fi port="$(uci -q get openmptcprouter.${servername}.port)" server="$(uci -q get openmptcprouter.${servername}.ip)" - if [ "$(curl -k -m 3 https://${server}:${port}/)" = "" ]; then - reason="$reason, no server API answer" + resolve="$(resolveip $server)" + valid_ip6=$(valid_subnet6 $server) + if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then + if [ "$(curl -k -m 3 https://${server}:${port}/)" = "" ]; then + reason="$reason, no server API answer" + else + reason="$reason, server API answer" + fi else - reason="$reason, server API answer" + if [ "$(curl -k -m 3 https://[${server}]:${port}/)" = "" ]; then + reason="$reason, no server API answer" + else + reason="$reason, server API answer" + fi fi if [ "$(uci -q get openmptcprouter.${servername}.username)" != "openmptcprouter" ]; then reason="$reason, custom username" @@ -1706,6 +1737,9 @@ start_service() { uci -q batch <<-EOF >/dev/null commit openmptcprouter EOF + if [ "$(ps w | grep sysupgrade)" = "" ]; then + /etc/init.d/sysupgrade restart + fi } service_triggers() { diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index e6f918796..204cb92f3 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -151,6 +151,19 @@ if [ "$(uci -q get firewall.blockquicproxy)" = "" ]; then EOF fi +if [ "$(uci -q get firewall.allowicmpipv6)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set firewall.allowicmpipv6=rule + set firewall.allowicmpipv6.proto='icmp' + set firewall.allowicmpipv6.target='ACCEPT' + set firewall.allowicmpipv6.src='wan' + set firewall.allowicmpipv6.name='Allow IPv6 ICMP' + set firewall.allowicmpipv6.family='ipv6' + set firewall.allowicmpipv6.icmp_type='neighbour-advertisement neighbour-solicitation router-advertisement router-solicitation' + commit firewall + EOF +fi + # Fix firewall config from some old config allintf=$(uci -q get firewall.@zone[1].network) uci -q del firewall.@zone[1].network From 027c4e7c497843af437b2bcfd51bc65604d7038a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 16 Jan 2021 08:14:51 +0100 Subject: [PATCH 13/36] Fix https://github.com/Ysurac/openmptcprouter/issues/1524 --- .../luasrc/model/cbi/https-dns-proxy.lua | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua b/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua index d914bf09a..d4fee9e00 100644 --- a/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua +++ b/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua @@ -36,14 +36,16 @@ function create_helper_text() end function get_provider_name(value) - for filename in fs.dir(providers_dir) do - local p_func = loadfile(providers_dir .. filename) - setfenv(p_func, { _ = i18n.translate }) - local p = p_func() - value = value:gsub('[%p%c%s]', '') - p.url_match = p.resolver_url:gsub('[%p%c%s]', '') - if value:match(p.url_match) then - return p.label + if value ~= nil then + for filename in fs.dir(providers_dir) do + local p_func = loadfile(providers_dir .. filename) + setfenv(p_func, { _ = i18n.translate }) + local p = p_func() + value = value:gsub('[%p%c%s]', '') + p.url_match = p.resolver_url:gsub('[%p%c%s]', '') + if value:match(p.url_match) then + return p.label + end end end return translate("Unknown Provider") From 14db6f80fbddb0b399816a497f3a19dcc8428146 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 16 Jan 2021 08:15:14 +0100 Subject: [PATCH 14/36] Less log for omr-tracker-gre --- omr-tracker/files/bin/omr-tracker-gre | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker-gre b/omr-tracker/files/bin/omr-tracker-gre index b169d21d8..89041bbc4 100755 --- a/omr-tracker/files/bin/omr-tracker-gre +++ b/omr-tracker/files/bin/omr-tracker-gre @@ -14,7 +14,7 @@ _ping_server() { -w "$OMR_TRACKER_TIMEOUT" \ -c 1 \ -q \ - "${host}" + "${host}" 2>/dev/null ) && echo "$ret" | grep -sq " 0% packet loss" && { server_ping=true } From 34cf70ae30447b6c3ddbf3c5c9e7fa07e32931a2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 16 Jan 2021 08:15:54 +0100 Subject: [PATCH 15/36] Add system upgrade via interface --- luci-app-sysupgrade/Makefile | 11 + .../luasrc/view/sysupgrade.htm | 123 ++++++ .../po/templates/attendedsysupgrade.pot | 11 + .../root/etc/init.d/sysupgrade | 20 + .../root/etc/uci-defaults/40_luci-sysupgrade | 20 + .../luci/menu.d/luci-app-sysupgrade.json | 13 + .../root/usr/share/rpcd/acl.d/sysupgrade.json | 34 ++ .../www/luci-static/resources/sysupgrade.js | 386 ++++++++++++++++++ openmptcprouter-full/Makefile | 2 +- 9 files changed, 619 insertions(+), 1 deletion(-) create mode 100644 luci-app-sysupgrade/Makefile create mode 100644 luci-app-sysupgrade/luasrc/view/sysupgrade.htm create mode 100644 luci-app-sysupgrade/po/templates/attendedsysupgrade.pot create mode 100755 luci-app-sysupgrade/root/etc/init.d/sysupgrade create mode 100755 luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade create mode 100644 luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json create mode 100644 luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json create mode 100644 luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js diff --git a/luci-app-sysupgrade/Makefile b/luci-app-sysupgrade/Makefile new file mode 100644 index 000000000..3b5ccc6dc --- /dev/null +++ b/luci-app-sysupgrade/Makefile @@ -0,0 +1,11 @@ +# See /LICENSE for more information. +# This is free software, licensed under the GNU General Public License v2. + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for sysupgrades +LUCI_DEPENDS:=+luci-base +uhttpd-mod-ubus +rpcd +rpcd-mod-rpcsys +cgi-io + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-sysupgrade/luasrc/view/sysupgrade.htm b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm new file mode 100644 index 000000000..ac91611ad --- /dev/null +++ b/luci-app-sysupgrade/luasrc/view/sysupgrade.htm @@ -0,0 +1,123 @@ +<% +-- all lua code provided by https://github.com/jow-/ +-- thank you very much! + + function apply_acls(filename, session) + local json = require "luci.jsonc" + local util = require "luci.util" + local fs = require "nixio.fs" + + local grants = { } + + local acl = json.parse(fs.readfile(filename)) + if type(acl) ~= "table" then + return + end + + local group, perms + for group, perms in pairs(acl) do + local perm, scopes + for perm, scopes in pairs(perms) do + if type(scopes) == "table" then + local scope, objects + for scope, objects in pairs(scopes) do + if type(objects) == "table" then + if not grants[scope] then + grants[scope] = { } + end + + if next(objects) == 1 then + local _, object + for _, object in ipairs(objects) do + if not grants[scope][object] then + grants[scope][object] = { } + end + table.insert(grants[scope][object], perm) + end + else + local object, funcs + for object, funcs in pairs(objects) do + if type(funcs) == "table" then + local _, func + for _, func in ipairs(funcs) do + if not grants[scope][object] then + grants[scope][object] = { } + end + table.insert(grants[scope][object], func) + end + end + end + end + end + end + end + end + end + + local _, scope, object, func + for scope, _ in pairs(grants) do + local objects = { } + for object, _ in pairs(_) do + for _, func in ipairs(_) do + table.insert(objects, { object, func }) + end + end + + util.ubus("session", "grant", { + ubus_rpc_session = session, + scope = scope, objects = objects + }) + end + end + + apply_acls("/usr/share/rpcd/acl.d/sysupgrade.json", luci.dispatcher.context.authsession) +%> +<%+header%> +

    <%:Sysupgrade%>

    +
    + Easily search and install new releases and package upgrades. Sysupgrade firmware are created on demand based on locally installed packages. +
    + + +

    + +

    +
    +
    +
    + + + +
    +
    + +
    +
    +
    +
    +
    + + +<%+footer%> diff --git a/luci-app-sysupgrade/po/templates/attendedsysupgrade.pot b/luci-app-sysupgrade/po/templates/attendedsysupgrade.pot new file mode 100644 index 000000000..c14f0951e --- /dev/null +++ b/luci-app-sysupgrade/po/templates/attendedsysupgrade.pot @@ -0,0 +1,11 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm:76 +#: applications/luci-app-attendedsysupgrade/root/usr/share/luci/menu.d/luci-app-attendedsysupgrade.json:3 +msgid "Attended Sysupgrade" +msgstr "" + +#: applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json:3 +msgid "attended sysupgrade via rpcd and luci" +msgstr "" diff --git a/luci-app-sysupgrade/root/etc/init.d/sysupgrade b/luci-app-sysupgrade/root/etc/init.d/sysupgrade new file mode 100755 index 000000000..86eccd349 --- /dev/null +++ b/luci-app-sysupgrade/root/etc/init.d/sysupgrade @@ -0,0 +1,20 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2020 Ycarus (Yannick Chabanois) +# Released under GPL 3. See LICENSE for the full terms. + +{ + START=90 + STOP=10 + USE_PROCD=1 +} + +start_service() +{ + if [ -f /etc/backup/installed_packages.txt ]; then + if [ "$(opkg -V0 update)" = "" ]; then + grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg -V0 install + rm /etc/backup/installed_packages.txt + fi + fi +} + diff --git a/luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade b/luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade new file mode 100755 index 000000000..a5ef66fe8 --- /dev/null +++ b/luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade @@ -0,0 +1,20 @@ +#!/bin/sh + +/etc/init.d/uhttpd restart +/etc/init.d/rpcd reload + +[ -e /etc/config/sysupgrade ] && return 0 + +touch /etc/config/sysupgrade + +uci -q batch < + ubus_call("uci", "get", option, option["option"]) +} + +ubus_counter = 0; +ubus_closed = 0; + +function ubus_call(command, argument, params, variable) { + var request_data = {}; + request_data.jsonrpc = "2.0"; + request_data.id = ubus_counter; + request_data.method = "call"; + request_data.params = [data.ubus_rpc_session, command, argument, params] + var request_json = JSON.stringify(request_data) + ubus_counter++; + var request = new XMLHttpRequest(); + request.open("POST", ubus_url, true); + request.setRequestHeader("Content-type", "application/json"); + request.onload = function(event) { + if (request.status === 200) { + var response = JSON.parse(request.responseText) + if (!("error" in response) && "result" in response) { + if (response.result.length === 2) { + if (command === "uci") { + data[variable] = response.result[1].value + } else { + data[variable] = response.result[1][variable] + } + } + } else { + set_status("danger", "Ubus call failed:
    Request: " + request_json + "
    Response: " + JSON.stringify(response)) + } + ubus_closed++; + } + } + request.send(request_json); +} + +function set_status(type, message, loading, show_log) { + $("#status_box").className = "alert-message " + type; + var loading_image = ''; + if (loading) { + loading_image = 'Loading '; + } + if (data.buildlog_url && show_log) { + message += '

    Build log

    ' + } + $("#status_box").innerHTML = loading_image + message; + show("#status_box") +} + +function upgrade_check() { + var current_version = data.release.version.toLowerCase(); + var current_branch = current_version.split('.').slice(0, 2).join('.') + var candidates = [] + hide("#status_box"); + hide("#server_div"); + set_status("info", "Searching for upgrades", true); + fetch(data.url + "/api/versions") + .then(response => response.json()) + .then(response => { + var branches = response["branches"] + for (i in branches) { + // handle snapshots in a special way - as always + if (current_version == "snapshot" && branches[i]["latest"] == "snapshot") { + candidates.unshift(branches[i]) + break + } + + if (current_version == branches[i]["latest"]) { + break + } + if (current_branch != branches[i]["name"]) { + branches[i]["warn_branch_jump"] = true + } + candidates.unshift(branches[i]) + if (current_branch == branches[i]["name"]) { + // don't offer branches older than the current + break + } + } + + if (candidates.length > 0) { + var info_output = "

    New release " + candidates[0].latest + " available

    " + info_output += "Installed version: " + data.release.version + + // tell server the currently installed version + request_dict.current_version = request_dict.version; + // tell server what version to install + request_dict.version = candidates[0].latest; + // tell server to diff the requested packages with the default packages + // this allows to not automatically re-install default packages which + // where dropped in later releases + request_dict.diff_packages = true; + + set_status("success", info_output) + + if (data.advanced_mode == 1) { + show("#edit_button"); + } + var upgrade_button = $("#upgrade_button") + upgrade_button.value = "Request firmware"; + upgrade_button.style.display = "block"; + upgrade_button.disabled = false; + upgrade_button.onclick = upgrade_request; + + } else { + set_status("success", "No upgrades available") + + } + }); + +} + +function upgrade_request() { + // Request firmware using the following parameters + // distro, version, target, board_name, packages + $("#upgrade_button").disabled = true; + hide("#edit_packages"); + hide("#edit_button"); + hide("#keep_container"); + + // add board info to let server determine profile + request_dict.target = data.release.target + request_dict.profile = data.board_name + request_dict.rootfs = data.format + + if (data.edit_packages == true) { + request_dict.packages = $("#edit_packages").value.split("\n") + } else { + request_dict.packages = Object.keys(data.packages); + } + server_request() +} + +function upgrade_request_callback(response) { + var sysupgrade_file = ""; + console.log(response) + for (i in response.images) { + if (response.images[i].type == "sysupgrade") { + sysupgrade_file = response.images[i].name; + } + } + if (sysupgrade_file != "") { + data.sysupgrade_url = data.url + '/release/' + response.bin_dir + '/' + sysupgrade_file + var info_output = '

    Firmware created

    Created file: ' + sysupgrade_file + '

    ' + set_status("success", info_output, false, true); + + show("#keep_container"); + var upgrade_button = $("#upgrade_button") + upgrade_button.disabled = false; + upgrade_button.style.display = "block"; + upgrade_button.value = "Flash firmware"; + upgrade_button.onclick = download_image; + } else { + set_status("danger", "Firmware build successfull but device not sysupgrade compatible!") + } +} + +function flash_image() { + // Flash image via rpc-sys upgrade_start + set_status("warning", "Flashing firmware. Don't unpower device", true) + ubus_call("rpc-sys", "upgrade_start", { + "keep": $("#keep").checked + }, 'message'); + ping_max = 3600; // in seconds + setTimeout(ping_ubus, 10000) +} + +function ping_ubus() { + // Tries to connect to ubus. If the connection fails the device is likely still rebooting. + // If more time than ping_max passes update may failed + if (ping_max > 0) { + ping_max--; + var request = new XMLHttpRequest(); + request.open("GET", ubus_url, true); + request.addEventListener('error', function(event) { + set_status("warning", "Rebooting device - please wait!", true); + setTimeout(ping_ubus, 5000) + }); + request.addEventListener('load', function(event) { + set_status("success", "Success! Please reload web interface"); + $("#upgrade_button").value = "Reload page"; + show("#upgrade_button"); + $("#upgrade_button").disabled = false; + $("#upgrade_button").onclick = function() { + location.reload(); + } + }); + request.send(); + } else { + set_status("danger", "Web interface could not reconnect to your device. Please reload web interface or check device manually") + } +} + +function upload_image(blob) { + // Uploads received blob data to the server using cgi-io + set_status("info", "Uploading firmware to device", true); + var request = new XMLHttpRequest(); + var form_data = new FormData(); + + form_data.append("sessionid", data.ubus_rpc_session) + form_data.append("filename", "/tmp/firmware.bin") + form_data.append("filemode", 755) // insecure? + form_data.append("filedata", blob) + + request.addEventListener('load', function(event) { + request_json = JSON.parse(request.responseText) + flash_image(); + }); + + request.addEventListener('error', function(event) { + set_status("danger", "Upload of firmware failed, please retry by reloading web interface") + }); + + request.open('POST', origin + '/cgi-bin/cgi-upload'); + request.send(form_data); +} + + +function download_image() { + // Download image from server once the url was received by upgrade_request + hide("#keep_container"); + hide("#upgrade_button"); + var download_request = new XMLHttpRequest(); + download_request.open("GET", data.sysupgrade_url); + download_request.responseType = "arraybuffer"; + + download_request.onload = function() { + if (this.status === 200) { + var blob = new Blob([download_request.response], { + type: "application/octet-stream" + }); + upload_image(blob) + } + }; + set_status("info", "Downloading firmware to web browser memory", true); + download_request.send(); +} + +function server_request() { + fetch(data.url + "/api/build", { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(request_dict) + }) + .then(response => { + switch (response.status) { + case 200: + response.json() + .then(response => { + upgrade_request_callback(response) + }); + break; + case 202: + set_status("info", "Processing request", true); + setTimeout(function() { + server_request() + }, 5000) + break; + case 400: // bad request + case 422: // bad package + case 500: // build failed + console.log('error (' + response.status + ')'); + response.json() + .then(response => { + if (response.buildlog) { + data.buildlog_url = data.url + '/' + response.bin_dir + '/buildlog.txt'; + } + set_status("danger", response.message); + }); + break; + } + }); +} + +request_dict = {} +document.onload = setup() diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index defb4d7b4..74968b5c8 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -80,7 +80,7 @@ MY_DEPENDS := \ !TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \ luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||aarch64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \ - hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding + hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding luci-app-sysupgrade # luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status # luci-proto-bonding luci-app-statistics luci-proto-gre # softethervpn5-client softethervpn5-server luci-app-nginx-ha From 995c2018c5770dc7d0cf27a67c4d59a3eb0e9975 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 18 Jan 2021 17:22:27 +0100 Subject: [PATCH 16/36] Fix IPv6 wan support --- .../luasrc/view/openmptcprouter/wanstatus.htm | 11 +++----- .../luasrc/view/openmptcprouter/wizard.htm | 27 +++++++++++++++++++ .../root/usr/libexec/rpcd/openmptcprouter | 10 +++---- .../share/omr/post-tracking.d/post-tracking | 21 ++++++++------- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 16caf5a59..cff1dbac6 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -231,9 +231,9 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm if ((mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr != "") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr); - } else if ((mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr6 != "") + } else if ((mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr_ip6) && mArray.openmptcprouter.wan_addr6 != "") { - var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_6addr); + var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6); } else if (mArray.openmptcprouter.wan_addr != "" && mArray.openmptcprouter.service_addr == "127.0.0.1") { var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr); @@ -285,10 +285,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm } else if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:Can\'t get public IP address from V2Ray%>' + '
    '; - } else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 !== "" && mArray.openmptcprouter.external_check == true) - { - statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '
    '; - } else if (mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.external_check == true) + } else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '
    '; } @@ -480,7 +477,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm { content += String.format('%s %s
    ','<%:wan address:%>', wanip); } - if(wanip6 !== '') + if(wanip6 !== '' && gateway6 != '') { content += String.format('%s %s
    ','<%:wan ipv6 address:%>', wanip6); } diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index da0649831..e213c660c 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -576,6 +576,33 @@ + <% + ipv6list = uci:get_list("network",ifname,"ip6addr") + for key, value in pairs(ipv6list) do + %> +
    + +
    + +
    +
    + <%:Set an IP in the same network as the modem%> +
    +
    +
    + <% + end + %> +
    + +
    + " data-type="ip6addr"> +
    +
    + <%:Set here IP of the modem%> +
    +
    +
    diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index bb9700d29..f8d83797c 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -788,18 +788,18 @@ function interfaces_status() end if uci:get("openmptcprouter","settings","external_check") ~= "0" and mArray.openmptcprouter["dns"] == true then - if mArray.openmptcprouter["service_addr_ip"] ~= "" then + if mArray.openmptcprouter["service_addr_ip"] ~= "" and mArray.openmptcprouter["service_addr_ip"] ~= nil then mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website)) if mArray.openmptcprouter["wan_addr"] == "" then mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig -4 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) end end - if mArray.openmptcprouter["ipv6"] == "enabled" or mArray.openmptcprouter["service_addr_ip6"] ~= "" then + if mArray.openmptcprouter["ipv6"] == "enabled" or ( mArray.openmptcprouter["service_addr_ip6"] ~= "" and mArray.openmptcprouter["service_addr_ip6"] ~= nil) then mArray.openmptcprouter["wan_addr6"] = uci:get("openmptcprouter","omr","public_detected_ipv6") or "" if mArray.openmptcprouter["wan_addr6"] == "" then mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("curl -6 -s -m " .. timeout .. " " .. check_ipv6_website)) - if mArray.openmptcprouter["wan_addr"] == "" then - mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig -6 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) + if mArray.openmptcprouter["wan_addr6"] == "" then + mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("dig -6 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) end end end @@ -839,7 +839,7 @@ function interfaces_status() ucic:foreach("openmptcprouter", "server", function(s) local serverip = uci:get("openmptcprouter",s[".name"],"ip") or "" local master = uci:get("openmptcprouter",s[".name"],"master") or "1" - if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip) then + if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip or mArray.openmptcprouter["wan_addr6"] == serverip) then mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or "" mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or "" mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or "" diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index ca23f14cd..77446d653 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -58,7 +58,7 @@ set_route6() { if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n") fi - if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then + if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep ':')" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" [ "$SETDEFAULT" = "yes" ] && ip -6 route replace default scope global nexthop via $interface_gw dev $interface_if ip -6 route replace default via $interface_gw dev $interface_if table 991337 && SETROUTE=true @@ -697,7 +697,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om 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 + elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]; then if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) #local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 8.8.8.8) @@ -866,7 +866,7 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then fi gtudpst="up" [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && gtudpst="backup" - if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ] && [ "$OMR_TRACKER_DEVICE_IP" != "" ]; then + if [ "$OMR_TRACKER_DEVICE_IP" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ]; then if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 @@ -881,7 +881,7 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then fi fi fi - if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6)" = "" ] && [ "$OMR_TRACKER_DEVICE_IP6" != "" ]; then + if [ "$OMR_TRACKER_DEVICE_IP6" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6)" = "" ]; then if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 @@ -899,7 +899,10 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then # if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp set | grep 'kxtimeout 7d')" = "" ]; then # glorytun-udp set dev tun0 kxtimeout 7d > /dev/null 2>&1 # fi - [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set pref 125 > /dev/null 2>&1 + [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && { + [ -n "$OMR_TRACKER_DEVICE_IP" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set pref 125 > /dev/null 2>&1 + [ -n "$OMR_TRACKER_DEVICE_IP6" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set pref 125 > /dev/null 2>&1 + } fi [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && { [ "$multipath_status" = "$multipath_config" ] || { @@ -966,7 +969,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( local serverip=$(uci -q get shadowsocks-libev.sss0.server) [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && { omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)" - [ -n "$omrtracebox" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" + [ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" } [ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr" [ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" @@ -980,7 +983,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } - else + elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) [ -n "$mtu" ] && { @@ -1018,7 +1021,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( local serverip=$(uci -q get shadowsocks-libev.sss0.server) [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && { omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)" - [ -n "$omrtracebox" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" + [ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" } [ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip6="$ip6addr" [ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" @@ -1032,7 +1035,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } - else + elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) [ -n "$mtu" ] && { From 00f8830d44dbf73d20eaebf8be97ae973539e267 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 19 Jan 2021 14:06:45 +0100 Subject: [PATCH 17/36] Fix forward and bypass in case of multiples IPs --- .../files/shadowsocks-libev.init | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 41e48aa4a..c0590eb35 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -225,6 +225,26 @@ ss_rules() { src_ips_bypass6="$(echo "$src_ips_bypass" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" src_ips_forward6="$(echo "$src_ips_forward" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" src_ips_checkdst6="$(echo "$src_ips_checkdst" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" + [ -z "$dst_ips_bypass4" ] && [ -z "$dst_ips_bypass6" ] && { + dst_ips_bypass4="$dst_ips_bypass" + dst_ips_bypass6="$dst_ips_bypass" + } + [ -z "$dst_ips_forward4" ] && [ -z "$dst_ips_forward6" ] && { + dst_ips_forward4="$dst_ips_forward" + dst_ips_forward6="$dst_ips_forward" + } + [ -z "$src_ips_bypass4" ] && [ -z "$src_ips_bypass6" ] && { + src_ips_bypass4="$src_ips_bypass" + src_ips_bypass6="$src_ips_bypass" + } + [ -z "$src_ips_forward4" ] && [ -z "$src_ips_forward6" ] && { + src_ips_forward4="$src_ips_forward" + src_ips_forward6="$src_ips_forward" + } + [ -z "$src_ips_checkdst4" ] && [ -z "$src_ips_checkdst6" ] && { + src_ips_checkdst4="$src_ips_checkdst" + src_ips_checkdst6="$src_ips_checkdst" + } [ "$dst_forward_recentrst" = 0 ] || args="$args --dst-forward-recentrst" ss_rules_call From d29d25b95a25cd5232d0372f94451d279b03e037 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 20 Jan 2021 16:39:16 +0100 Subject: [PATCH 18/36] Update wizard for WAN IPv6 support --- .../root/etc/init.d/omr-bypass | 12 +++---- .../luasrc/controller/openmptcprouter.lua | 9 +++++ .../luasrc/view/openmptcprouter/wizard.htm | 33 +++++++++++++++++-- .../root/usr/libexec/rpcd/openmptcprouter | 2 ++ 4 files changed, 47 insertions(+), 9 deletions(-) diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index 8c1bf2aeb..592d875ac 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -374,7 +374,7 @@ _bypass_proto() { _intf_rule_ss_rules() { rule_name=$1 [ "$rule_name" = "ss_rules" ] && rule_name="def" - if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep ssr | grep omr_dst_bypass_$intf)" = "" ]; then + if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables-save | grep ssr | grep omr_dst_bypass_$intf)" = "" ]; then iptables-restore -w --wait=60 --noflush <<-EOF *nat -I ssr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count @@ -394,7 +394,7 @@ _intf_rule_ss_rules() { COMMIT EOF fi - if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6 | grep omr6_dst_bypass_$intf)" = "" ]; then + if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables-save | grep ssr6 | grep omr6_dst_bypass_$intf)" = "" ]; then ip6tables-restore -w --wait=60 --noflush <<-EOF *nat -I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count @@ -413,7 +413,7 @@ _intf_rule_v2ray_rules() { #rule_name=$1 #[ "$rule_name" = "ss_rules" ] && rule_name="def" rule_name="def" - if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep v2r | grep omr_dst_bypass_$intf)" = "" ]; then + if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables-save | grep v2r | grep omr_dst_bypass_$intf)" = "" ]; then iptables-restore -w --wait=60 --noflush <<-EOF *nat -I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count @@ -426,14 +426,14 @@ _intf_rule_v2ray_rules() { EOF fi if [ "$disableipv6" = "0" ]; then - if [ "$(ip6tables --wait=40 -t mangle -L -n | grep omr6_dst_bypass_$intf)" = "" ]; then + if [ "$(ip6tables-save | grep omr-bypass6 | grep omr6_dst_bypass_$intf)" = "" ]; then ip6tables-restore -w --wait=60 --noflush <<-EOF *mangle -I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count COMMIT EOF fi - if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6 | grep omr6_dst_bypass_$intf)" = "" ]; then + if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables-save | grep v2r6 | grep omr6_dst_bypass_$intf)" = "" ]; then ip6tables-restore -w --wait=60 --noflush <<-EOF *nat -I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count @@ -487,7 +487,7 @@ _intf_rule() { ip -6 rule add prio 1 fwmark 0x6539$count lookup 6$count > /dev/null 2>&1 fi } - if [ "$(iptables --wait=40 -t mangle -L -n | grep omr_dst_bypass_$intf)" = "" ]; then + if [ "$(iptables-save | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then iptables-restore -w --wait=60 --noflush <<-EOF *mangle -I omr-bypass 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 23d5fc5f7..f60c1c82d 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -223,8 +223,10 @@ function wizard_add() local device_qmi = luci.http.formvalue("cbid.network.%s.device.qmi" % intf) or "" local device_modemmanager = luci.http.formvalue("cbid.network.%s.device.modemmanager" % intf) or "" local ipaddr = luci.http.formvalue("cbid.network.%s.ipaddr" % intf) or "" + local ip6addr = luci.http.formvalue("cbid.network.%s.ip6addr" % intf) or "" local netmask = luci.http.formvalue("cbid.network.%s.netmask" % intf) or "" local gateway = luci.http.formvalue("cbid.network.%s.gateway" % intf) or "" + local ip6gw = luci.http.formvalue("cbid.network.%s.ip6gw" % intf) or "" local apn = luci.http.formvalue("cbid.network.%s.apn" % intf) or "" local pincode = luci.http.formvalue("cbid.network.%s.pincode" % intf) or "" local delay = luci.http.formvalue("cbid.network.%s.delay" % intf) or "" @@ -281,6 +283,13 @@ function wizard_add() ucic:set("network",intf,"netmask","") ucic:set("network",intf,"gateway","") end + if ip6addr ~= "" then + ucic:set("network",intf,"ip6addr",ip6addr) + ucic:set("network",intf,"ip6gw",ip6gw) + else + ucic:set("network",intf,"ip6addr","") + ucic:set("network",intf,"ip6gw","") + end ucic:delete("openmptcprouter",intf,"lc") ucic:save("openmptcprouter") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index e213c660c..f7e5e3c7b 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -147,7 +147,7 @@
    - checked<% end %> /> + checked<% end %> />
    <%:You should disable IPv6 here if server doesn't provide IPv6.%> @@ -580,7 +580,7 @@ ipv6list = uci:get_list("network",ifname,"ip6addr") for key, value in pairs(ipv6list) do %> -
    +
    @@ -592,8 +592,9 @@
    <% end + if ipv6list ~= nil and ipv6list ~= "" then %> -
    +
    " data-type="ip6addr"> @@ -603,6 +604,32 @@
    + <% + else + %> +
    + +
    + +
    +
    + <%:Set an IP in the same network as the modem%> +
    +
    +
    +
    + +
    + " data-type="ip6addr"> +
    +
    + <%:Set here IP of the modem%> +
    +
    +
    + <% + end + %>
    diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index f8d83797c..1a11148c7 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -984,6 +984,8 @@ function interfaces_status() end elseif uci:get("openmptcprouter","settings","vpn") == "none" then mArray.openmptcprouter["tun_service"] = true + mArray.openmptcprouter["tun_state"] = "NONE" + mArray.openmptcprouter["tun6_state"] = "NONE" end mArray.openmptcprouter["multi_vpn"] = false From 6fbc5eed463c736c764f3b9e4ca02b6a95bed3a2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 20 Jan 2021 16:39:38 +0100 Subject: [PATCH 19/36] Doesn't add disabled ss-redir in firewall --- shadowsocks-libev/files/shadowsocks-libev.init | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index c0590eb35..7c3056747 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -146,7 +146,8 @@ ss_rules_cb() { ss_redir_ports() { port=$(uci -q get shadowsocks-libev.$1.local_port) server=$(uci -q get shadowsocks-libev.$1.server) - if [ "$server" = "$2" ] || [ "$2" = "" ]; then + disabled=$(uci -q get shadowsocks-libev.$1.disabled) + if [ "$disabled" != "1" ] && ([ "$server" = "$2" ] || [ "$2" = "" ]); then if [ "$port" -lt "$min_ss_redir_ports" ]; then min_ss_redir_ports=$port fi From b350af4207a0e2ed7107126cc13a886da8389353 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 20 Jan 2021 16:39:58 +0100 Subject: [PATCH 20/36] Fix mail to alert --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 77446d653..71dd7f0ac 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -598,9 +598,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then 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 -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/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 -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/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: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nConnection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) @@ -740,9 +740,9 @@ if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR 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 -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/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 -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/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: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up\n\nDetected that connection $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up again." | sendmail $(uci -q get mail.default.to) From bd954b3f78d52155428db2f448ce6376493ec3f1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 11:27:28 +0100 Subject: [PATCH 21/36] Fix WAN IPv6 support if WAN IPv4 is also available --- .../share/omr/post-tracking.d/post-tracking | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 71dd7f0ac..9c3a19fb0 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -210,14 +210,14 @@ set_routes_intf6() { weight=1 fi if [ "$multipath_config_route" = "backup" ]; then - nbintfb=$((nbintfb+1)) + nbintfb6=$((nbintfb6+1)) if [ -z "$routesintfbackup6" ]; then routesintfbackup6="nexthop via $interface_gw dev $interface_if weight $weight" else routesintfbackup6="$routesintfbackup6 nexthop via $interface_gw dev $interface_if weight $weight" fi else - nbintf=$((nbintf+1)) + nbintf6=$((nbintf6+1)) if [ -z "$routesintf6" ]; then routesintf6="nexthop via $interface_gw dev $interface_if weight $weight" else @@ -304,10 +304,10 @@ set_route_balancing6() { weight=1 fi if [ "$multipath_config_route" = "backup" ]; then - nbintfb=$((nbintfb+1)) + nbintfb6=$((nbintfb6+1)) routesbalancingbackup6="$routesbalancingbackup6 nexthop via $interface_gw dev $interface_if weight $weight" else - nbintf=$((nbintf+1)) + nbintf6=$((nbintf6+1)) routesbalancing6="$routesbalancing6 nexthop via $interface_gw dev $interface_if weight $weight" fi fi @@ -369,13 +369,13 @@ set_server_all_routes6() { if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then routesintf="" routesintfbackup="" - nbintf=0 - nbintfb=0 + nbintf6=0 + nbintfb6=0 config_load network config_foreach set_routes_intf interface uintf="$(echo $routesintf | awk '{print $5}')" uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then + if [ -n "$routesintf" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip -6 r del $serverip done @@ -383,8 +383,8 @@ set_server_all_routes6() { ip -6 route replace $serverip scope global $routesintf [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" fi - if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" + if [ -n "$routesintfbackup" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb6" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" ip -6 route replace $serverip scope global metric 999 $routesintfbackup fi fi @@ -796,6 +796,7 @@ if [ "$multipath_config" = "master" ]; then routesbalancing="" routesbalancingbackup="" nbintf=0 + nbintf6=0 config_load network config_foreach set_route_balancing interface config_foreach set_route_balancing6 interface @@ -806,7 +807,7 @@ if [ "$multipath_config" = "master" ]; then } } [ -n "$routesbalancing6" ] && { - ([ "$nbintf" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" ip -6 route replace default scope global metric 1 $routesbalancing6 } @@ -818,7 +819,7 @@ if [ "$multipath_config" = "master" ]; then } } [ -n "$routesbalancingbackup6" ] && { - ([ "$nbintf" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" ip -6 route replace default scope global metric 999 $routesbalancingbackup6 } From a5ecab5e76a6a237209db87bd0655b9b7423a496 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 11:28:29 +0100 Subject: [PATCH 22/36] Remove message when device doesn't exist with multipath command --- mptcp/files/usr/bin/multipath | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mptcp/files/usr/bin/multipath b/mptcp/files/usr/bin/multipath index 567ab99ee..f25706218 100755 --- a/mptcp/files/usr/bin/multipath +++ b/mptcp/files/usr/bin/multipath @@ -65,8 +65,8 @@ TYPE="$2" #FLAG_PATH=`find /sys/devices/ -path "*/net/$DEVICE/flags"` [ -d "/sys/class/net/$DEVICE/" ] || { - echo "Device '$DEVICE' can't found!" - echo "Use the hardware name like in ifconfig" + #echo "Device '$DEVICE' can't found!" + #echo "Use the hardware name like in ifconfig" exit 1 } From 842ab954d01c9fdad59471936f864d29c69abaad Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 11:28:53 +0100 Subject: [PATCH 23/36] Add glorytun-udp IPv6 wan support --- glorytun-udp/init | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/glorytun-udp/init b/glorytun-udp/init index 5e50d59df..e9f7caf7c 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -56,11 +56,15 @@ start_instance() { _log "starting ${PROG_NAME} ${1} instance $*" + if [ "$mode" = "to" ]; then + bind="bind from addr :: port 5000 to addr $host port $port" + else + bind="bind from addr $host port $port to addr :: port 5000" + fi procd_open_instance procd_set_param command ${PROG} \ - ${host:+bind ${mode} addr "$host"} \ - ${port:+port "$port"} \ + ${bind} \ ${dev:+dev "$dev"} \ keyfile /tmp/${PROG_NAME}-${1}.key \ persist From 1bd9c2d824dc8f3e556686a0bacea4262a08e9de Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 11:29:18 +0100 Subject: [PATCH 24/36] Fix OpenMPTCProuter status page CSS for IPv6 --- .../resources/openmptcprouter/css/wanstatus.css | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css index 2e90291e6..35ad4be96 100644 --- a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css +++ b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css @@ -71,7 +71,7 @@ ul { -moz-transition: all 0.5s; } .tree ul ul { - padding-left: 85px; + padding-left: 5px; position: relative; } .tree > ul > li:first-child { @@ -152,7 +152,7 @@ right connector from last child*/ top: 50%; left: 0; border-top: 2px solid black; - width: 85px; + width: 7px; height: 100%; } .tree li a { @@ -222,7 +222,7 @@ right connector from last child*/ width: 2px; /*height: 50%;*/ height: 55px; - left: 200px; + left: 240px; /* z-index: -10;*/ } /*Time for some hover effects*/ @@ -243,9 +243,9 @@ Thanks :)*/ .network-node { position: relative; background-color: #f3f3f3; - padding: 12px; - width: 400px; - max-width: 400px; + padding: 8px; + width: 480px; + max-width: 480px; box-sizing: border-box; min-height: 170px; } @@ -282,7 +282,7 @@ Thanks :)*/ .network-node .info { position: relative; float: right; - width: 250px; + width: 330px; text-align: left; font-size: 12px; color: #757575; @@ -319,7 +319,7 @@ Thanks :)*/ width:5px; border-right:2px dotted black; height:70px; - padding-right: 195px; + padding-right: 240px; } #omr { min-height: 190px; From ac0cd9dcd2fe9b421c6a64f9dc01101d5d7ba979 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 18:59:32 +0100 Subject: [PATCH 25/36] Add DHCPv6 support in wizard --- .../luasrc/view/openmptcprouter/wizard.htm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index f7e5e3c7b..569ce9b50 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -511,6 +511,7 @@ @@ -592,7 +593,7 @@
    <% end - if ipv6list ~= nil and ipv6list ~= "" then + if table.getn(ipv6list) ~= 0 then %>
    @@ -607,7 +608,7 @@ <% else %> -
    +
    @@ -617,7 +618,7 @@
    -
    +
    " data-type="ip6addr"> From 5bdb3ada85234717700031eec21ba3b596aa4fad Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 18:59:55 +0100 Subject: [PATCH 26/36] Add multi IPs server support --- .../share/omr/post-tracking.d/post-tracking | 498 ++++++++++-------- 1 file changed, 270 insertions(+), 228 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 9c3a19fb0..fb01fbdeb 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -68,66 +68,76 @@ set_route6() { set_server_default_route() { local server=$1 - local serverip multipath_config_route - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY" - if [ "$(ip r show $serverip | grep nexthop)" != "" ]; then - ip r delete $serverip >/dev/null 2>&1 + server_route() { + local serverip multipath_config_route + serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) + [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY" + if [ "$(ip r show $serverip | grep nexthop)" != "" ]; then + ip r delete $serverip >/dev/null 2>&1 + fi + ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1 fi - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1 - fi + } + config_list_foreach $server ip server_route } set_server_default_route6() { local server=$1 - local serverip multipath_config_route - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY6" - if [ "$(ip -6 r show $serverip | grep nexthop)" != "" ]; then - ip -6 r delete $serverip >/dev/null 2>&1 + server_route() { + local serverip multipath_config_route + serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) + [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY6" + if [ "$(ip -6 r show $serverip | grep nexthop)" != "" ]; then + ip -6 r delete $serverip >/dev/null 2>&1 + fi + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 fi - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 - fi + } + config_list_foreach $server ip server_route } delete_server_default_route() { local server=$1 - local serverip - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - if [ "$serverip" != "" ] && [ "$(ip route show $serverip metric 1)" != "" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" - ip route del $serverip metric 1 >/dev/null 2>&1 - fi + delete_route() { + local serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + if [ "$serverip" != "" ] && [ "$(ip route show $serverip metric 1)" != "" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" + ip route del $serverip metric 1 >/dev/null 2>&1 + fi + } + config_list_foreach $server ip delete_route } delete_server_default_route6() { local server=$1 - local serverip - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - if [ "$serverip" != "" ] && [ "$(ip -6 route show $serverip metric 1)" != "" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" - ip -6 route del $serverip metric 1 >/dev/null 2>&1 - fi + delete_route() { + local serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + if [ "$serverip" != "" ] && [ "$(ip -6 route show $serverip metric 1)" != "" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route" + ip -6 route del $serverip metric 1 >/dev/null 2>&1 + fi + } + config_list_foreach $server ip delete_route } set_routes_intf() { @@ -316,105 +326,114 @@ set_route_balancing6() { set_server_all_routes() { local server=$1 - local serverip multipath_config_route - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then - routesintf="" - routesintfbackup="" - nbintf=0 - nbintfb=0 - config_load network - config_foreach set_routes_intf interface - uintf="$(echo $routesintf | awk '{print $5}')" - uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then - while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do - ip r del $serverip - done - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" - ip route replace $serverip scope global $routesintf - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" + server_route() { + local serverip multipath_config_route + serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then + routesintf="" + routesintfbackup="" + nbintf=0 + nbintfb=0 + config_load network + config_foreach set_routes_intf interface + uintf="$(echo $routesintf | awk '{print $5}')" + uintfb="$(echo $routesintfbackup | awk '{print $5}')" + if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then + while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do + ip r del $serverip + done + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" + ip route replace $serverip scope global $routesintf + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" + fi + if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" + ip route replace $serverip scope global metric 999 $routesintfbackup + fi fi - if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" - ip route replace $serverip scope global metric 999 $routesintfbackup - fi - fi + } + config_list_foreach $server ip server_route } set_server_all_routes6() { local server=$1 - local serverip multipath_config_route - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then - routesintf="" - routesintfbackup="" - nbintf6=0 - nbintfb6=0 - config_load network - config_foreach set_routes_intf interface - uintf="$(echo $routesintf | awk '{print $5}')" - uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then - while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do - ip -6 r del $serverip - done - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" - ip -6 route replace $serverip scope global $routesintf - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" + server_route() { + local serverip multipath_config_route + serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then + routesintf="" + routesintfbackup="" + nbintf6=0 + nbintfb6=0 + config_load network + config_foreach set_routes_intf interface + uintf="$(echo $routesintf | awk '{print $5}')" + uintfb="$(echo $routesintfbackup | awk '{print $5}')" + if [ -n "$routesintf" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then + while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do + ip -6 r del $serverip + done + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" + ip -6 route replace $serverip scope global $routesintf + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" + fi + if [ -n "$routesintfbackup" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb6" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" + ip -6 route replace $serverip scope global metric 999 $routesintfbackup + fi fi - if [ -n "$routesintfbackup" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb6" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" - ip -6 route replace $serverip scope global metric 999 $routesintfbackup - fi - fi + } + config_list_foreach $server ip server_route } set_server_route() { local server=$1 - local serverip multipath_config_route - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - local metric=$2 - [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - #multipath_current_config=$(multipath $interface_if | grep "deactivated") - interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") - #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric - fi + server_route() { + local serverip multipath_config_route + serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + local metric=$2 + [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) + [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + #multipath_current_config=$(multipath $interface_if | grep "deactivated") + interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") + #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" + ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric + fi + } + config_list_foreach $server ip server_route if [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric fi @@ -422,27 +441,30 @@ set_server_route() { set_server_route6() { local server=$1 - local serverip multipath_config_route - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - config_get disabled $server disabled - [ "$disabled" = "1" ] && return - local metric=$2 - [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) - [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) - [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - #multipath_current_config=$(multipath $interface_if | grep "deactivated") - interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") - #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then - if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric - fi + server_route() { + local serverip multipath_config_route + serverip=$1 + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + config_get disabled $server disabled + [ "$disabled" = "1" ] && return + local metric=$2 + [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) + [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") + [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) + [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + #multipath_current_config=$(multipath $interface_if | grep "deactivated") + interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") + #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric + fi + } + config_list_foreach $server ip server_route if [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric fi @@ -450,14 +472,16 @@ set_server_route6() { del_server_route() { local server=$1 - local serverip - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" - local metric - metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + remove_route() { + local serverip="$1" + [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" + [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" + local metric + metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 + ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + } + config_list_foreach $server ip remove_route if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 else @@ -467,14 +491,16 @@ del_server_route() { del_server_route6() { local server=$1 - local serverip - config_get serverip $server ip - [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" - local metric - metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + remove_route() { + local serverip="$1" + [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" + [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" + local metric + metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + ip -6 route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 + ip -6 route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + } + config_list_foreach $server ip remove_route if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then ip -6 route del default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 else @@ -801,25 +827,25 @@ if [ "$multipath_config" = "master" ]; then config_foreach set_route_balancing interface config_foreach set_route_balancing6 interface [ -n "$routesbalancing" ] && { - ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 0 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 0 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 0 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 0 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { _log "Set ip route replace default scope global $routesbalancing" ip route replace default scope global metric 0 $routesbalancing } } [ -n "$routesbalancing6" ] && { - ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" ip -6 route replace default scope global metric 1 $routesbalancing6 } } [ -n "$routesbalancingbackup" ] && { - ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { _log "Set backup ip route replace default scope global $routesbalancingbackup" ip route replace default scope global metric 999 $routesbalancingbackup } } [ -n "$routesbalancingbackup6" ] && { - ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ]) && { + ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" ip -6 route replace default scope global metric 999 $routesbalancingbackup6 } @@ -967,39 +993,47 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( uci -q set openmptcprouter.latest_versions.lc=$(date +"%s") } fi - local serverip=$(uci -q get shadowsocks-libev.sss0.server) - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep 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" - } [ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr" [ -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" } - if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then - if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then - mtu=$(uci -q get network.$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 + local omrtracebox + traceboxmtutest() { + omr_tracebox_mtu() { + local serverip=$1 + [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep 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" } - elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { - 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 - } - } || { - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) - [ -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 + if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then + mtu=$(uci -q get network.$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 + [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { + 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 + } + } || { + local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) + [ -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 + } + config_list_foreach $1 ip omr_tracebox_mptcp + } + 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") } @@ -1019,39 +1053,47 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( uci -q set openmptcprouter.latest_versions.lc=$(date +"%s") } fi - local serverip=$(uci -q get shadowsocks-libev.sss0.server) - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep 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" - } [ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip6="$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" } - if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then - if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then - mtu=$(uci -q get network.$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 + local omrtracebox + traceboxmtutest() { + omr_tracebox_mtu() { + local serverip=$1 + [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep 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" } - elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { - 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 - } - } || { - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) - [ -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 + if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then + mtu=$(uci -q get network.$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 + [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { + 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 + } + } || { + local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) + [ -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 + } + config_list_foreach $1 ip omr_tracebox_mptcp + } + 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") } From 75972e556ef8c04a6d165fe436e83f2ad5af3079 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 19:00:28 +0100 Subject: [PATCH 27/36] Add multi IPs server support in VPS contact script --- .../files/etc/init.d/openmptcprouter-vps | 81 ++++++++++--------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 3c5ca2aaf..be3920ee1 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -17,29 +17,32 @@ _parse_result() { _login() { local username password auth - server="$(uci -q get openmptcprouter.${servername}.ip)" - [ -z "$server" ] && server="$(uci -q get shadowsocks-libev.sss0.server)" + #server="$(uci -q get openmptcprouter.${servername}.ip)" + #[ -z "$server" ] && server="$(uci -q get shadowsocks-libev.sss0.server)" username="$(uci -q get openmptcprouter.${servername}.username)" password="$(uci -q get openmptcprouter.${servername}.password)" serverport="$(uci -q get openmptcprouter.${servername}.port)" if [ -z "$token" ]; then - #auth=`curl --max-time 10 -s -k -H "Content-Type: application/json" -X POST -d '{"username":"'$username'","password":"'$password'"}' https://$server:$serverport/login` - resolve="$(resolveip $server)" - valid_ip6=$(valid_subnet6 $server) - if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then - auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://$server:$serverport/token` - else - auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://[$server]:$serverport/token` - fi - [ -z "$auth" ] && return - token="$(echo "$auth" | jsonfilter -q -e '@.access_token')" - uci -q set openmptcprouter.${servername}.token="$token" + login_on_server() { + server=$1 + #auth=`curl --max-time 10 -s -k -H "Content-Type: application/json" -X POST -d '{"username":"'$username'","password":"'$password'"}' https://$server:$serverport/login` + resolve="$(resolveip $server)" + valid_ip6=$(valid_subnet6 $server) + if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then + auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://$server:$serverport/token` + else + auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://[$server]:$serverport/token` + fi + [ -z "$auth" ] && return + token="$(echo "$auth" | jsonfilter -q -e '@.access_token')" + uci -q set openmptcprouter.${servername}.token="$token" + } + config_list_foreach ${servername} ip login_on_server fi } _ping_server() { - server="$(uci -q get openmptcprouter.${servername}.ip)" - [ -z "$server" ] && server="$(uci -q get shadowsocks-libev.sss0.server)" + server="$1" ret=$(ping -c 3 -w 3 -Q 184 $server 2>&1) && echo "$ret" | grep -sq "bytes from" && return false } @@ -1586,30 +1589,36 @@ _config_service() { _login [ -z "$token" ] && { reason="" - _ping_server - status=$? - if $(exit $status); then - reason="can ping server ${servername}" - else - reason="can't ping server ${servername}" - fi + test_ping() { + _ping_server $1 + status=$? + if $(exit $status); then + reason="can ping server ${servername} on $1" + else + reason="can't ping server ${servername} on $1" + fi + } + config_list_foreach "${servername}" ip test_ping port="$(uci -q get openmptcprouter.${servername}.port)" - server="$(uci -q get openmptcprouter.${servername}.ip)" - resolve="$(resolveip $server)" - valid_ip6=$(valid_subnet6 $server) - if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then - if [ "$(curl -k -m 3 https://${server}:${port}/)" = "" ]; then - reason="$reason, no server API answer" + api_test() { + server="$1" + resolve="$(resolveip $server)" + valid_ip6=$(valid_subnet6 $server) + if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then + if [ "$(curl -k -m 3 https://${server}:${port}/)" = "" ]; then + reason="$reason, no server API answer on $1" + else + reason="$reason, server API answer on $1" + fi else - reason="$reason, server API answer" + if [ "$(curl -k -m 3 https://[${server}]:${port}/)" = "" ]; then + reason="$reason, no server API answer on $1" + else + reason="$reason, server API answer on $1" + fi fi - else - if [ "$(curl -k -m 3 https://[${server}]:${port}/)" = "" ]; then - reason="$reason, no server API answer" - else - reason="$reason, server API answer" - fi - fi + } + config_list_foreach "${servername}" ip api_test if [ "$(uci -q get openmptcprouter.${servername}.username)" != "openmptcprouter" ]; then reason="$reason, custom username" fi From 24efb0ca347f67472382c42e52c484a976a0ac05 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 19:00:49 +0100 Subject: [PATCH 28/36] Update mptcpd --- mptcpd/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mptcpd/Makefile b/mptcpd/Makefile index 34242071d..a23a4a41b 100644 --- a/mptcpd/Makefile +++ b/mptcpd/Makefile @@ -8,10 +8,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mptcpd -PKG_VERSION:=0.4 +PKG_VERSION:=0.5.1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/intel/mptcpd/releases/download/v$(PKG_VERSION) -PKG_HASH:=459c45ba86ea574f1ad7a062a9914474ca650229b97375017bd46d0732f985ba +PKG_HASH:=0ee4418880f20a1a2eff5c54c26185a75092cb44cbabe0fa3f25a2c5886459e7 PKG_RELEASE:=1 PKG_MAINTAINER:=Ycarus (Yannick Chabanois) From 32e9f41e253d606b47efc92b97571bb3916346b2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 19:01:30 +0100 Subject: [PATCH 29/36] Add DHCPv6 wan firewall rules --- .../files/etc/uci-defaults/1980-omr-firewall | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 204cb92f3..db2fcf39e 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -164,6 +164,28 @@ if [ "$(uci -q get firewall.allowicmpipv6)" = "" ]; then EOF fi +if [ "$(uci -q get firewall.allowdhcpv6546)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set firewall.allowdhcpv6546=rule + set firewall.allowdhcpv6546.target='ACCEPT' + set firewall.allowdhcpv6546.src='wan' + set firewall.allowdhcpv6546.proto='udp' + set firewall.allowdhcpv6546.dest_port='547' + set firewall.allowdhcpv6546.name='Allow DHCPv6 (546-to-547)' + set firewall.allowdhcpv6546.family='ipv6' + set firewall.allowdhcpv6546.src_port='546' + set firewall.allowdhcpv6547=rule + set firewall.allowdhcpv6547.target='ACCEPT' + set firewall.allowdhcpv6547.src='wan' + set firewall.allowdhcpv6547.proto='udp' + set firewall.allowdhcpv6547.dest_port='546' + set firewall.allowdhcpv6547.name='Allow DHCPv6 (547-to-546)' + set firewall.allowdhcpv6547.family='ipv6' + set firewall.allowdhcpv6547.src_port='547' + commit firewall + EOF +fi + # Fix firewall config from some old config allintf=$(uci -q get firewall.@zone[1].network) uci -q del firewall.@zone[1].network From 2bd20232544821276c269e33fc5a2d9599678038 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 21 Jan 2021 21:18:05 +0100 Subject: [PATCH 30/36] Fix wizard with new multiples IP by server feature --- .../luasrc/controller/openmptcprouter.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index f60c1c82d..7260b66a9 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -425,7 +425,8 @@ function wizard_add() local disablednb = 0 local servers = luci.http.formvaluetable("server") for server, _ in pairs(servers) do - local server_ip = luci.http.formvalue("%s.server_ip" % server) or "" + local server_ip = {} + server_ip[1] = luci.http.formvalue("%s.server_ip" % server) or "" local master = luci.http.formvalue("master") or "" -- OpenMPTCProuter VPS @@ -453,7 +454,7 @@ function wizard_add() ucic:set("openmptcprouter",server,"username",openmptcprouter_vps_username) ucic:set("openmptcprouter",server,"password",openmptcprouter_vps_key) ucic:set("openmptcprouter",server,"disabled",openmptcprouter_vps_disabled) - ucic:set("openmptcprouter",server,"ip",server_ip) + ucic:set_list("openmptcprouter",server,"ip",server_ip) ucic:set("openmptcprouter",server,"port","65500") ucic:save("openmptcprouter") end From f8f62ee77e9fe0e6f22b09305844deb10fd924bb Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 22 Jan 2021 10:40:57 +0100 Subject: [PATCH 31/36] Fix for multi IP on server --- .../luasrc/controller/openmptcprouter.lua | 2 +- .../luasrc/view/openmptcprouter/wizard.htm | 2 +- .../root/usr/libexec/rpcd/openmptcprouter | 177 +++++++++--------- .../share/omr/post-tracking.d/post-tracking | 4 +- 4 files changed, 94 insertions(+), 91 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 7260b66a9..29ec07420 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -447,7 +447,7 @@ function wizard_add() if openmptcprouter_vps_disabled == "1" then disablednb = disablednb + 1 end - if server_ip ~= "" then + if server_ip[1] ~= "" then serversnb = serversnb + 1 end ucic:set("openmptcprouter",server,"server") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 569ce9b50..89da6bc85 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -57,7 +57,7 @@
    - " data-optional="false"> + " data-optional="false">
    <%:Server IP will be set for proxy and VPN%>
    diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 1a11148c7..9f88a0cc4 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -547,7 +547,7 @@ end function get_rootfs() local rootfs = {} - rootfs['format'] = ut.trim(sys.exec("mount | awk 'NR==1{print $5}'")) + rootfs['format'] = luci.util.trim(sys.exec("mount | awk 'NR==1{print $5}'")) return rootfs end @@ -837,102 +837,105 @@ function interfaces_status() mArray.openmptcprouter["vps_hostname"] = "Server" -- Get VPS info ucic:foreach("openmptcprouter", "server", function(s) - local serverip = uci:get("openmptcprouter",s[".name"],"ip") or "" + local serverips = uci:get("openmptcprouter",s[".name"],"ip") or { "" } local master = uci:get("openmptcprouter",s[".name"],"master") or "1" - if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip or mArray.openmptcprouter["wan_addr6"] == serverip) then - mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or "" - mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or "" - mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or "" - timeout = uci:get("openmptcprouter","settings","status_vps_timeout") or "2" - if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then - mArray.openmptcprouter["vps_admin_error"] = true - end - local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500" - local token = uci:get("openmptcprouter",s[".name"],"token") or "" - if token ~= "" then - local vpsinfo_json = "" - if mArray.openmptcprouter["service_addr_ip"] ~= "" then - vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status') + for key, value in pairs(serverips) do + serverip = value + if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip or mArray.openmptcprouter["wan_addr6"] == serverip) and mArray.openmptcprouter["vps_admin"] == false then + mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or "" + mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or "" + mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or "" + timeout = uci:get("openmptcprouter","settings","status_vps_timeout") or "2" + if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then + mArray.openmptcprouter["vps_admin_error"] = true end - if mArray.openmptcprouter["service_addr_ip6"] ~= "" then - vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://[' .. serverip .. ']:' .. adminport .. '/status') - end - if vpsinfo_json ~= "" and vpsinfo_json ~= nil then - local status, vpsinfo = pcall(function() - return json.decode(vpsinfo_json) - end) - if status and vpsinfo.vps ~= nil then - mArray.openmptcprouter["vps_loadavg"] = vpsinfo.vps.loadavg or "" - mArray.openmptcprouter["vps_uptime"] = vpsinfo.vps.uptime or "" - mArray.openmptcprouter["vps_mptcp"] = vpsinfo.vps.mptcp.enabled or "" - mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or "" - mArray.openmptcprouter["vps_time"] = vpsinfo.vps.time or "" - if vpsinfo.vps.kernel ~= nil then - mArray.openmptcprouter["vps_kernel"] = vpsinfo.vps.kernel or "" - end - if vpsinfo.vps.omr_version ~= nil then - mArray.openmptcprouter["vps_omr_version"] = vpsinfo.vps.omr_version or "" - end - if vpsinfo.vps.time ~= "" then - if math.abs(os.time() - vpsinfo.vps.time) > 10 then - mArray.openmptcprouter["vps_time_accurate"] = false - else - mArray.openmptcprouter["vps_time_accurate"] = true + local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500" + local token = uci:get("openmptcprouter",s[".name"],"token") or "" + if token ~= "" then + local vpsinfo_json = "" + if mArray.openmptcprouter["service_addr_ip"] ~= "" then + vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status') + end + if mArray.openmptcprouter["service_addr_ip6"] ~= "" then + vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://[' .. serverip .. ']:' .. adminport .. '/status') + end + if vpsinfo_json ~= "" and vpsinfo_json ~= nil then + local status, vpsinfo = pcall(function() + return json.decode(vpsinfo_json) + end) + if status and vpsinfo.vps ~= nil then + mArray.openmptcprouter["vps_loadavg"] = vpsinfo.vps.loadavg or "" + mArray.openmptcprouter["vps_uptime"] = vpsinfo.vps.uptime or "" + mArray.openmptcprouter["vps_mptcp"] = vpsinfo.vps.mptcp.enabled or "" + mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or "" + mArray.openmptcprouter["vps_time"] = vpsinfo.vps.time or "" + if vpsinfo.vps.kernel ~= nil then + mArray.openmptcprouter["vps_kernel"] = vpsinfo.vps.kernel or "" end + if vpsinfo.vps.omr_version ~= nil then + mArray.openmptcprouter["vps_omr_version"] = vpsinfo.vps.omr_version or "" + end + if vpsinfo.vps.time ~= "" then + if math.abs(os.time() - vpsinfo.vps.time) > 10 then + mArray.openmptcprouter["vps_time_accurate"] = false + else + mArray.openmptcprouter["vps_time_accurate"] = true + end + end + mArray.openmptcprouter["vps_admin"] = true + mArray.openmptcprouter["vps_status"] = "UP" + mArray.openmptcprouter["vps_admin_error_msg"] = "" + else + uci:set("openmptcprouter",s[".name"],"admin_error","1") + mArray.openmptcprouter["vps_admin_error"] = true + uci:delete("openmptcprouter",s[".name"],"token") + uci:save("openmptcprouter",s[".name"]) + uci:commit("openmptcprouter",s[".name"]) + mArray.openmptcprouter["vps_admin"] = false + mArray.openmptcprouter["vps_admin_error_msg"] = "Answer error" end - mArray.openmptcprouter["vps_admin"] = true - mArray.openmptcprouter["vps_status"] = "UP" - mArray.openmptcprouter["vps_admin_error_msg"] = "" + if status and vpsinfo.vpn ~= nil then + mArray.openmptcprouter["vpn_traffic_rx"] = vpsinfo.vpn.rx or "0" + mArray.openmptcprouter["vpn_traffic_tx"] = vpsinfo.vpn.tx or "0" + mArray.openmptcprouter["vpn_traffic"] = mArray.openmptcprouter["vpn_traffic_tx"] + mArray.openmptcprouter["vpn_traffic_rx"] + else + mArray.openmptcprouter["vpn_traffic_rx"] = "0" + mArray.openmptcprouter["vpn_traffic_tx"] = "0" + mArray.openmptcprouter["vpn_traffic"] = "0" + end + if status and vpsinfo.shadowsocks ~= nil then + mArray.openmptcprouter["ss_traffic"] = vpsinfo.shadowsocks.traffic or "0" + else + mArray.openmptcprouter["ss_traffic"] = "0" + end + if status and vpsinfo.v2ray ~= nil then + mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0" + mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0" + mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"] + else + mArray.openmptcprouter["v2ray_traffic_rx"] = "0" + mArray.openmptcprouter["v2ray_traffic_tx"] = "0" + mArray.openmptcprouter["v2ray_traffic"] = "0" + end + mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"] + mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"] else - uci:set("openmptcprouter",s[".name"],"admin_error","1") - mArray.openmptcprouter["vps_admin_error"] = true - uci:delete("openmptcprouter",s[".name"],"token") - uci:save("openmptcprouter",s[".name"]) - uci:commit("openmptcprouter",s[".name"]) mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "Answer error" + mArray.openmptcprouter["vps_admin_error_msg"] = "No result" end - if status and vpsinfo.vpn ~= nil then - mArray.openmptcprouter["vpn_traffic_rx"] = vpsinfo.vpn.rx or "0" - mArray.openmptcprouter["vpn_traffic_tx"] = vpsinfo.vpn.tx or "0" - mArray.openmptcprouter["vpn_traffic"] = mArray.openmptcprouter["vpn_traffic_tx"] + mArray.openmptcprouter["vpn_traffic_rx"] - else - mArray.openmptcprouter["vpn_traffic_rx"] = "0" - mArray.openmptcprouter["vpn_traffic_tx"] = "0" - mArray.openmptcprouter["vpn_traffic"] = "0" - end - if status and vpsinfo.shadowsocks ~= nil then - mArray.openmptcprouter["ss_traffic"] = vpsinfo.shadowsocks.traffic or "0" - else - mArray.openmptcprouter["ss_traffic"] = "0" - end - if status and vpsinfo.v2ray ~= nil then - mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0" - mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0" - mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"] - else - mArray.openmptcprouter["v2ray_traffic_rx"] = "0" - mArray.openmptcprouter["v2ray_traffic_tx"] = "0" - mArray.openmptcprouter["v2ray_traffic"] = "0" - end - mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"] - mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"] else mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "No result" + mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available" end - else - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available" - end - if mArray.openmptcprouter["vps_admin"] == false then - if mArray.openmptcprouter["service_addr_ip"] ~= "" then - local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/') - elseif mArray.openmptcprouter["service_addr_ip6"] ~= "" then - local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://[' .. serverip .. ']:' .. adminport .. '/') - end - if vpstest == "" then - mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer" + if mArray.openmptcprouter["vps_admin"] == false then + if mArray.openmptcprouter["service_addr_ip"] ~= "" then + local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/') + elseif mArray.openmptcprouter["service_addr_ip6"] ~= "" then + local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://[' .. serverip .. ']:' .. adminport .. '/') + end + if vpstest == "" then + mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer" + end end end end diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index fb01fbdeb..a8ce3ed18 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1030,7 +1030,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( fi fi } - config_list_foreach $1 ip omr_tracebox_mptcp + config_list_foreach $1 ip omr_tracebox_mtu } config_load openmptcprouter config_foreach traceboxmtutest server @@ -1090,7 +1090,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($( fi fi } - config_list_foreach $1 ip omr_tracebox_mptcp + config_list_foreach $1 ip omr_tracebox_mtu } config_load openmptcprouter config_foreach traceboxmtutest server From 16ab9a7722f31b8752e59a4c4da1374a31dd8fd5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 22 Jan 2021 20:59:25 +0100 Subject: [PATCH 32/36] Fix v2ray proxy setting --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index be3920ee1..49d0b5f29 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1092,7 +1092,7 @@ _set_config_from_vps() { set shadowsocks-libev.sss0.disabled=0 commit shadowsocks-libev set v2ray.main.enabled=0 - commit shadowsocks-libev + commit v2ray set openmptcprouter.settings.shadowsocks_disable=0 commit openmptcprouter EOF @@ -1101,7 +1101,7 @@ _set_config_from_vps() { set shadowsocks-libev.sss0.disabled=1 commit shadowsocks-libev set v2ray.main.enabled=1 - commit shadowsocks-libev + commit v2ray set openmptcprouter.settings.shadowsocks_disable=1 commit openmptcprouter EOF @@ -1110,7 +1110,7 @@ _set_config_from_vps() { set shadowsocks-libev.sss0.disabled=1 commit shadowsocks-libev set v2ray.main.enabled=0 - commit shadowsocks-libev + commit v2ray set openmptcprouter.settings.shadowsocks_disable=1 commit openmptcprouter EOF From 087561e002aefdbc95833eca866b704c93ddec5d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 25 Jan 2021 09:32:23 +0100 Subject: [PATCH 33/36] Update omr-tracker for multi IPs server --- omr-tracker/files/bin/omr-tracker-server | 139 +++++++++++++---------- omr-tracker/files/bin/omr-tracker-ss | 15 +-- omr-tracker/files/etc/init.d/omr-tracker | 57 +++++----- 3 files changed, 113 insertions(+), 98 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index e7c759b16..5bd212fdb 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -39,84 +39,103 @@ _check_server() { _check_master() { local name=$1 + local count=0 config_get master $1 master config_get ip $1 ip config_get port $1 port "65500" config_get disabled $1 disabled [ "$master" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { - #_ping_server $ip - _check_server $ip $port - [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && { - logger -t "OMR-Tracker-Server" "Master server up, set it back" - logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n') - $ip" - uci -q batch <<-EOF >/dev/null - set shadowsocks-libev.sss0.server=$ip - commit shadowsocks-libev - set v2ray.omrout.s_vmess_address=$ip - set v2ray.omrout.s_vless_address=$ip - commit v2ray - set glorytun.vpn.host=$ip - commit glorytun - set dsvpn.vpn.host=$ip - commit dsvpn - set mlvpn.general.host=$ip - commit mlvpn - del openvpn.omr.remote - add_list openvpn.omr.remote=$ip - commit openvpn - EOF - /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null - /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null - /etc/init.d/v2ray restart >/dev/null 2>/dev/null - /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 - /etc/init.d/openvpn restart >/dev/null 2>/dev/null - /etc/init.d/dsvpn restart >/dev/null 2>/dev/null + set_ip() { + local ip=$1 + #_ping_server $ip + _check_server $ip $port + [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ] && { + logger -t "OMR-Tracker-Server" "Master server up, set it back" + logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n') - $ip" + uci -q batch <<-EOF >/dev/null + set shadowsocks-libev.sss${count}.server=$ip + commit shadowsocks-libev + EOF + if [ "$count" -eq "0" ]; then + uci -q batch <<-EOF >/dev/null + set v2ray.omrout.s_vmess_address=$ip + set v2ray.omrout.s_vless_address=$ip + commit v2ray + set glorytun.vpn.host=$ip + commit glorytun + set dsvpn.vpn.host=$ip + commit dsvpn + set mlvpn.general.host=$ip + commit mlvpn + del openvpn.omr.remote + add_list openvpn.omr.remote=$ip + commit openvpn + EOF + /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null + /etc/init.d/v2ray restart >/dev/null 2>/dev/null + /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 + /etc/init.d/openvpn restart >/dev/null 2>/dev/null + /etc/init.d/dsvpn restart >/dev/null 2>/dev/null + fi + /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null + } + count=$((count+1)) } + config_list_foreach $1 ip set_ip break } } _check_backup() { local name=$1 + local count=0 config_get backup $1 backup config_get ip $1 ip config_get port $1 port config_get disabled $1 disabled [ "$backup" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { - #_ping_server $ip - _check_server $ip $port - [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" = "$ip" ] && break - [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && { - logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)" - uci -q batch <<-EOF >/dev/null - set shadowsocks-libev.sss0.server=$ip - commit shadowsocks-libev - set v2ray.omrout.s_vmess_address=$ip - set v2ray.omrout.s_vless_address=$ip - commit v2ray - set glorytun.vpn.host=$ip - commit glorytun - set dsvpn.vpn.host=$ip - commit dsvpn - set mlvpn.general.host=$ip - commit mlvpn - del openvpn.omr.remote - add_list openvpn.omr.remote=$ip - commit openvpn - EOF - /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null - /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null - /etc/init.d/v2ray restart >/dev/null 2>/dev/null - /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 - /etc/init.d/openvpn restart >/dev/null 2>/dev/null - /etc/init.d/dsvpn restart >/dev/null 2>/dev/null - sleep $waittest - break + set_ip() { + #_ping_server $ip + _check_server $ip $port + [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" = "$ip" ] && break + [ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ] && { + logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)" + uci -q batch <<-EOF >/dev/null + set shadowsocks-libev.sss${count}.server=$ip + commit shadowsocks-libev + EOF + if [ "$count" -eq "0" ]; then + uci -q batch <<-EOF >/dev/null + set v2ray.omrout.s_vmess_address=$ip + set v2ray.omrout.s_vless_address=$ip + commit v2ray + set glorytun.vpn.host=$ip + commit glorytun + set dsvpn.vpn.host=$ip + commit dsvpn + set mlvpn.general.host=$ip + commit mlvpn + del openvpn.omr.remote + add_list openvpn.omr.remote=$ip + commit openvpn + EOF + /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null + /etc/init.d/v2ray restart >/dev/null 2>/dev/null + /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 + /etc/init.d/openvpn restart >/dev/null 2>/dev/null + /etc/init.d/dsvpn restart >/dev/null 2>/dev/null + fi + /etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null + sleep $waittest + break + } + count=$((count+1)) } + config_list_foreach $1 ip set_ip } } diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 525c4a979..e5a2e5ca8 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -49,6 +49,7 @@ retry=${OMR_TRACKER_TRIES:-4} proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} wait_test=${OMR_TRACKER_WAIT_TEST:-0} +server=${OMR_TRACKER_SERVER:-sss0} nodns=0 @@ -65,9 +66,9 @@ while true; do } if [ "$(curl -s -I -w %{http_code} --socks5 ${proxy} --max-time ${timeout} $host -o /dev/null)" != "000" ]; then nocontact="" - [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "" ] && { + [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.ss_$[name})" = "" ] && { _log "Shadowsocks is up (can contact via http ${host})" - uci -q set openmptcprouter.omr.shadowsocks="up" + uci -q set openmptcprouter.omr.ss_${name}="up" uci -q commit openmptcprouter.omr } if [ -z "$(iptables -t nat -L -n | grep ss_rules)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then @@ -83,15 +84,15 @@ while true; do [ "${last}" -ge "${retry}" ] && { if [ -n "$(iptables -t nat -L -n | grep ssr)" ]; then _log "Shadowsocks is down (can't contact via http ${nocontact})" - uci -q set openmptcprouter.omr.shadowsocks="down" + uci -q set openmptcprouter.omr.ss_${name}="down" uci -q commit openmptcprouter.omr - /etc/init.d/shadowsocks-libev rules_down 2> /dev/null + [ "$(uci show openmptcprouter.omr | grep ss | grep up)" = "" ] && /etc/init.d/shadowsocks-libev rules_down 2> /dev/null _get_ip server_ping=false - server="$(uci -q get shadowsocks-libev.sss0.server)" - _ping_server $server + serverip="$(uci -q get shadowsocks-libev.${server}.server)" + _ping_server $serverip if [ "$server_ping" = false ]; then - _log "Server ($server) seems down, no answer to ping" + _log "Server $server ($serverip) seems down, no answer to ping" fi sleep $wait_test fi diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index d5965fe1f..fa4e4d265 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -132,48 +132,42 @@ _launch_gre_tracker() { _initialize_shadowsocks_tracker() { local redir_tcp server tracker_server - config_get redir_tcp ss_rules redir_tcp - config_get tracker_server "tracker" server - if [ "$redir_tcp" != "all" ]; then - config_get server $redir_tcp server - elif [ "$tracker_server" != "" ]; then - server=$tracker_server - else - server="sss0" - fi + server=$1 + #redir_tcp=$(uci -q get shadowsocks-libev.ss_rules.redir_tcp) + #config_get tracker_server ss_rules server config_get ss_disabled $server disabled 0 - [ -z "$tracker_server" ] && { + [ -z "$(uci -q get shadowsocks-libev.tracker_${server})" ] && [ "$ss_disabled" != "1" ] && { logger -t "omr-tracker" "Create ShadowSock tracker ss_local..." uci -q batch <<-EOF >/dev/null - set shadowsocks-libev.tracker=ss_local - set shadowsocks-libev.tracker.server=$server - set shadowsocks-libev.tracker.local_address="127.0.0.1" - set shadowsocks-libev.tracker.local_port=1111 - set shadowsocks-libev.tracker.mode=tcp_and_udp - set shadowsocks-libev.tracker.timeout=600 - set shadowsocks-libev.tracker.fast_open=1 - set shadowsocks-libev.tracker.syslog=0 - set shadowsocks-libev.tracker.reuse_port=1 - set shadowsocks-libev.tracker.mptcp=1 - set shadowsocks-libev.tracker.verbose=0 - commit shadowsocks-libev - EOF - /etc/init.d/shadowsocks-libev restart - } - [ -n "$tracker_server" ] && [ "$server" = "$tracker_server" ] || { - logger -t "omr-tracker" "Set ShadowSock tracker to current server ($tracker_server -> $server)..." - uci -q batch <<-EOF >/dev/null - set shadowsocks-libev.tracker.server=$server + set shadowsocks-libev.tracker_${server}=ss_local + set shadowsocks-libev.tracker_${server}.server=$server + set shadowsocks-libev.tracker_${server}.local_address="127.0.0.1" + set shadowsocks-libev.tracker_${server}.local_port=1111 + set shadowsocks-libev.tracker_${server}.mode=tcp_and_udp + set shadowsocks-libev.tracker_${server}.timeout=600 + set shadowsocks-libev.tracker_${server}.fast_open=1 + set shadowsocks-libev.tracker_${server}.syslog=0 + set shadowsocks-libev.tracker_${server}.reuse_port=1 + set shadowsocks-libev.tracker_${server}.mptcp=1 + set shadowsocks-libev.tracker_${server}.verbose=0 commit shadowsocks-libev EOF /etc/init.d/shadowsocks-libev restart } +# [ -n "$tracker_server" ] && [ "$server" = "$tracker_server" ] || { +# logger -t "omr-tracker" "Set ShadowSock tracker to current server ($tracker_server -> $server)..." +# uci -q batch <<-EOF >/dev/null +# set shadowsocks-libev.tracker.server=$server +# commit shadowsocks-libev +# EOF +# /etc/init.d/shadowsocks-libev restart +# } } _launch_shadowsocks_tracker() { local hosts timeout tries interval local_port enabled server wait_test - [ "$1" = "tracker" ] || return + [ "$(echo $1 | grep tracker)" != "" ] || return _validate_section "proxy" "proxy" @@ -194,6 +188,7 @@ _launch_shadowsocks_tracker() { procd_append_param env "OMR_TRACKER_INTERVAL=$interval" procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port" procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" + procd_append_param env "OMR_TRACKER_SERVER=$server" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 procd_set_param stderr 1 @@ -235,7 +230,7 @@ start_service() { local ss_disabled logger -t "omr-tracker" "Launching..." config_load shadowsocks-libev - _initialize_shadowsocks_tracker + config_foreach _initialize_shadowsocks_tracker server config_load network config_foreach _launch_tracker interface From c4cfdcda06ac422ef2d5898b16dc14a030633dd5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 25 Jan 2021 09:33:02 +0100 Subject: [PATCH 34/36] Set some settings at startup --- .../root/etc/init.d/openmptcprouter | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index adde64a8f..44188939f 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -18,31 +18,12 @@ omr_intf_check() { omr_intf_set() { local device local ifname - local multipath - config_get multipath "$1" multipath config_get ifname "$1" ifname config_get device "$1" device - config_get proto "$1" proto config_get type "$1" type - config_get addlatency "$1" addlatency - [ -z "$addlatency" ] && addlatency=0 - devicename=$(echo "$device" | cut -d'/' -f3) [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') - if [ -n "$ifname" ]; then - if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then - tc qdisc del dev ${ifname} root netem - fi - if [ "$addlatency" != "0" ]; then - if [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then - tc qdisc add dev ${ifname} root netem delay ${addlatency}ms - elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then - tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms - fi - fi - fi - if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then devicepath=$(readlink -f /sys/class/net/${ifname}) if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" = "" ]; then @@ -63,6 +44,15 @@ omr_intf_set() { } omr_set_settings() { + local device + local ifname + local multipath + config_get multipath "$1" multipath + config_get ifname "$1" ifname + config_get device "$1" device + config_get proto "$1" proto + config_get type "$1" type + config_get addlatency "$1" addlatency [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return uci -q set openmptcprouter.$1=interface @@ -73,6 +63,25 @@ omr_set_settings() { else uci -q set network.$1.ipv6=1 fi + + [ -z "$addlatency" ] && addlatency=0 + devicename=$(echo "$device" | cut -d'/' -f3) + + [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') + + if [ -n "$ifname" ]; then + if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then + tc qdisc del dev ${ifname} root netem + fi + if [ "$addlatency" != "0" ]; then + if [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then + tc qdisc add dev ${ifname} root netem delay ${addlatency}ms + elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then + tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms + fi + fi + fi + } start_service() { From 13eb40242c41ecd985480289f8c1f39339d4be61 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 25 Jan 2021 10:08:54 +0100 Subject: [PATCH 35/36] Fix shadowsocks tracker --- omr-tracker/files/bin/omr-tracker-ss | 6 +++--- omr-tracker/files/etc/init.d/omr-tracker | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index e5a2e5ca8..9a7234c93 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -66,9 +66,9 @@ while true; do } if [ "$(curl -s -I -w %{http_code} --socks5 ${proxy} --max-time ${timeout} $host -o /dev/null)" != "000" ]; then nocontact="" - [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.ss_$[name})" = "" ] && { + [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.ss_${server})" = "" ] && { _log "Shadowsocks is up (can contact via http ${host})" - uci -q set openmptcprouter.omr.ss_${name}="up" + uci -q set openmptcprouter.omr.ss_${server}="up" uci -q commit openmptcprouter.omr } if [ -z "$(iptables -t nat -L -n | grep ss_rules)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then @@ -84,7 +84,7 @@ while true; do [ "${last}" -ge "${retry}" ] && { if [ -n "$(iptables -t nat -L -n | grep ssr)" ]; then _log "Shadowsocks is down (can't contact via http ${nocontact})" - uci -q set openmptcprouter.omr.ss_${name}="down" + uci -q set openmptcprouter.omr.ss_${server}="down" uci -q commit openmptcprouter.omr [ "$(uci show openmptcprouter.omr | grep ss | grep up)" = "" ] && /etc/init.d/shadowsocks-libev rules_down 2> /dev/null _get_ip diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index fa4e4d265..77765c19c 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -133,6 +133,9 @@ _launch_gre_tracker() { _initialize_shadowsocks_tracker() { local redir_tcp server tracker_server server=$1 + + [ -n "$(echo $server | grep sss)" ] || return + #redir_tcp=$(uci -q get shadowsocks-libev.ss_rules.redir_tcp) #config_get tracker_server ss_rules server config_get ss_disabled $server disabled 0 From 43fad987993c69612e0b0b80c912504b211c5226 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 25 Jan 2021 10:09:51 +0100 Subject: [PATCH 36/36] Fix API contact --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 49d0b5f29..19a7d68bb 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -22,6 +22,7 @@ _login() { username="$(uci -q get openmptcprouter.${servername}.username)" password="$(uci -q get openmptcprouter.${servername}.password)" serverport="$(uci -q get openmptcprouter.${servername}.port)" + #[ -z "$server" ] && server="$(uci -q get openmptcprouter.${servername}.ip)" if [ -z "$token" ]; then login_on_server() { server=$1 @@ -37,6 +38,7 @@ _login() { token="$(echo "$auth" | jsonfilter -q -e '@.access_token')" uci -q set openmptcprouter.${servername}.token="$token" } + config_load openmptcprouter config_list_foreach ${servername} ip login_on_server fi }