From 466e3762ce5d66c80700a1792f3b470bb5063a1d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 2 Aug 2023 19:36:00 +0200 Subject: [PATCH 01/43] Use latest glorytun fork changes --- glorytun/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glorytun/Makefile b/glorytun/Makefile index 95d7ed3aa..e197e17fa 100644 --- a/glorytun/Makefile +++ b/glorytun/Makefile @@ -11,7 +11,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=glorytun PKG_RELEASE:=6 PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=6d58536f4232fea8eaa10fb60aace8ba11f29ed6 +PKG_SOURCE_VERSION:=1af1e26ad7a325d891c27f5cf9832c1ce4b4d0e9 PKG_SOURCE:=glorytun-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/Ysurac/glorytun.git PKG_VERSION:=0.0.35-$(PKG_SOURCE_VERSION) From c6f95542661da02c6d86fda7d53eed6280d517ce Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 2 Aug 2023 19:36:35 +0200 Subject: [PATCH 02/43] Fix depends for om-bypass --- luci-app-omr-bypass/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-omr-bypass/Makefile b/luci-app-omr-bypass/Makefile index 2969ef549..7b83f4c8c 100644 --- a/luci-app-omr-bypass/Makefile +++ b/luci-app-omr-bypass/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Interface to bypass domains #LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +(LINUX_5_4||LINUX_5_15||TARGET_x86_64):iptables-mod-ndpi +iptables-mod-extra +(LINUX_5_4||LINUX_5_15||TARGET_x86_64):kmod-ipt-ndpi +iptables LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-extra +iptables +sqlite3-cli -ifneq ($(CONFIG_TARGET_ramips),) +ifneq ($(CONFIG_TARGET_ramips),y) #LUCI_DEPENDS+=+(LINUX_5_4||LINUX_5_15):iptables-mod-ndpi +(LINUX_5_4||LINUX_5_15):kmod-ipt-ndpi LUCI_DEPENDS+=+iptables-mod-ndpi +kmod-ipt-ndpi endif From 83719131be7ff86de19618793d6fa7bb84f766ff Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 2 Aug 2023 19:36:55 +0200 Subject: [PATCH 03/43] Increase OMRVPN MTU --- mptcp/files/etc/init.d/mptcp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index f870963e3..d83b12b1d 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -77,9 +77,9 @@ interface_max_metric() { fi elif [ "$1" = "omrvpn" ]; then uci -q batch <<-EOF >/dev/null - set network.${config}.metric=1200 + set network.${config}.metric=9000 commit network - set openmptcprouter.${config}.metric=1200 + set openmptcprouter.${config}.metric=9000 commit openmptcprouter EOF elif [ "$1" = "omr6in4" ]; then From e8f8d6c5b682ec4f1718492d955f9d8ae023f506 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Aug 2023 19:15:41 +0200 Subject: [PATCH 04/43] Fix and add entry in json for status page --- luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index cec97258f..8dade3146 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -744,6 +744,7 @@ function interfaces_status() mArray.openmptcprouter["latest_version_omr"] = uci:get("openmptcprouter", "latest_versions", "omr") or "" mArray.openmptcprouter["latest_version_vps"] = uci:get("openmptcprouter", "latest_versions", "vps") or "" + mArray.openmptcprouter["proxy"] = uci:get("openmptcprouter", "settings", "proxy") or "" mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks-libev", "sss0", "server") or "" if mArray.openmptcprouter["service_addr"] == "" or mArray.openmptcprouter["service_addr"] == "192.168.1.3" then @@ -761,7 +762,7 @@ function interfaces_status() mArray.openmptcprouter["local_addr"] = ipaddr --mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr") mArray.openmptcprouter["hostname"] = "OpenMPTCProuter" - mArray.openmptcprouter["kernel"] = sys.exec("uname -r") + mArray.openmptcprouter["kernel"] = sys.exec("uname -r | tr -d '\n'") ucic:foreach("system", "system", function(s) mArray.openmptcprouter["hostname"] = uci:get("system",s[".name"],"hostname") or "OpenMPTCProuter" end) From 2883f879fddc84c46662741a23fea04dcbf7cdb0 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 3 Aug 2023 19:16:25 +0200 Subject: [PATCH 05/43] Fix issue when v2ray already set on router with fresh VPS install --- openmptcprouter/files/etc/init.d/openmptcprouter-vps | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 8bb124ac0..2a953d748 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1360,8 +1360,8 @@ _set_config_from_vps() { fi # Shadowsocks settings - shadowsocks_disabled="$(uci -q get openmptcprouter.settings.shadowsocks_disable)" - [ -z "$shadowsocks_disabled" ] && shadowsocks_disabled=0 + #shadowsocks_disabled="$(uci -q get openmptcprouter.settings.shadowsocks_disable)" + #[ -z "$shadowsocks_disabled" ] && shadowsocks_disabled=0 ss_key="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.key')" ss_key="$(echo $ss_key | sed 's/-/+/g; s/_/\//g;')" if [ -n "$ss_key" ] && [ "$ss_key" != "$(uci -q get shadowsocks-libev.sss0.key)" ]; then @@ -1397,7 +1397,6 @@ _set_config_from_vps() { set shadowsocks-libev.sss0.key=$ss_key set shadowsocks-libev.sss0.server_port=$ss_port set shadowsocks-libev.sss0.method=$ss_method - set shadowsocks-libev.sss0.disabled=$shadowsocks_disabled set shadowsocks-libev.sss0.obfs=$ss_obfs set shadowsocks-libev.sss0.obfs_plugin=$ss_obfs_plugin set shadowsocks-libev.sss0.obfs_type=$ss_obfs_type From 89f028597d4e205d12e79983f58439e885c647c2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Aug 2023 22:19:59 +0200 Subject: [PATCH 06/43] Various changes for 6.1 kernel in MPTCP interface --- luci-app-mptcp/luasrc/controller/mptcp.lua | 6 ++++-- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 16 ++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua index 842adc6ef..89bc92c13 100644 --- a/luci-app-mptcp/luasrc/controller/mptcp.lua +++ b/luci-app-mptcp/luasrc/controller/mptcp.lua @@ -15,8 +15,10 @@ function index() entry({"admin", "network", "mptcp", "mptcp_check_trace"}, post("mptcp_check_trace")).leaf = true entry({"admin", "network", "mptcp", "mptcp_fullmesh"}, template("mptcp/mptcp_fullmesh"), _("MPTCP Fullmesh"), 5).leaf = true entry({"admin", "network", "mptcp", "mptcp_fullmesh_data"}, post("mptcp_fullmesh_data")).leaf = true - entry({"admin", "network", "mptcp", "mptcp_connections"}, template("mptcp/mptcp_connections"), _("Established connections"), 6).leaf = true - entry({"admin", "network", "mptcp", "mptcp_connections_data"}, post("mptcp_connections_data")).leaf = true + if nixio.uname().release:sub(1,4) ~= "5.15" and nixio.uname().release:sub(1,1) ~= "6" then + entry({"admin", "network", "mptcp", "mptcp_connections"}, template("mptcp/mptcp_connections"), _("Established connections"), 6).leaf = true + entry({"admin", "network", "mptcp", "mptcp_connections_data"}, post("mptcp_connections_data")).leaf = true + end entry({"admin", "network", "mptcp", "mptcp_monitor"}, template("mptcp/mptcp_monitor"), _("MPTCP monitoring"), 6).leaf = true entry({"admin", "network", "mptcp", "mptcp_monitor_data"}, post("mptcp_monitor_data")).leaf = true end diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index a36c3d391..d5fe52f9c 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -61,22 +61,22 @@ end -- if tonumber(uname.release:sub(1,4)) >= 5.15 then if uname.release:sub(1,4) == "5.15" or uname.release:sub(1,1) == "6" then - o = s:option(Value, "mptcp_subflows", translate("specifies the maximum number of additional subflows allowed for each MPTCP connection")) + o = s:option(Value, "mptcp_subflows", translate("Max subflows"),translate("specifies the maximum number of additional subflows allowed for each MPTCP connection")) o.datatype = "uinteger" o.rmempty = false o.default = 3 - - o = s:option(Value, "mptcp_add_addr_accepted", translate("specifies the maximum number of ADD_ADDR suboptions accepted for each MPTCP connection")) - o.datatype = "uinteger" - o.rmempty = false - o.default = 1 - o = s:option(Value, "mptcp_stale_loss_cnt", translate("The number of MPTCP-level retransmission intervals with no traffic and pending outstanding data on a given subflow required to declare it stale")) + o = s:option(Value, "mptcp_stale_loss_cnt", translate("Retranmission intervals"),translate("The number of MPTCP-level retransmission intervals with no traffic and pending outstanding data on a given subflow required to declare it stale")) o.datatype = "uinteger" o.rmempty = false o.default = 4 - o = s:option(Value, "mptcp_add_addr_timeout", translate("Set the timeout after which an ADD_ADDR control message will be resent to an MPTCP peer that has not acknowledged a previous ADD_ADDR message.")) + o = s:option(Value, "mptcp_add_addr_accepted", translate("Max add address"),translate("specifies the maximum number of ADD_ADDR (add address) suboptions accepted for each MPTCP connection")) + o.datatype = "uinteger" + o.rmempty = false + o.default = 1 + + o = s:option(Value, "mptcp_add_addr_timeout", translate("Control message timeout"),translate("Set the timeout after which an ADD_ADDR (add address) control message will be resent to an MPTCP peer that has not acknowledged a previous ADD_ADDR message.")) o.datatype = "uinteger" o.rmempty = false o.default = 120 From 2b59c7ae22fb7d0bfee56e369900825e49428034 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Aug 2023 22:22:51 +0200 Subject: [PATCH 07/43] Fix, add proxy in status json and add encryption in uci settings --- .../luasrc/controller/openmptcprouter.lua | 10 ++++++++-- .../luasrc/view/openmptcprouter/wizard.htm | 9 +++++++-- .../root/usr/libexec/rpcd/openmptcprouter | 4 +++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 5a0cb0566..592abcc89 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -552,7 +552,7 @@ function wizard_add() ucic:set("network","omrvpn","proto","bonding") end if downloadmax ~= 0 and uploadmax ~= 0 then - ucic:set("sqm","omrvpn","enabled","1") + --ucic:set("sqm","omrvpn","enabled","1") ucic:set("sqm","omrvpn","max_download",downloadmax) ucic:set("sqm","omrvpn","max_upload",uploadmax) ucic:set("sqm","omrvpn","download",math.ceil(downloadmax*50/100)) @@ -619,7 +619,7 @@ function wizard_add() ucic:set("openmptcprouter",server,"username",openmptcprouter_vps_username:gsub("%s+", "")) ucic:set("openmptcprouter",server,"password",openmptcprouter_vps_key:gsub("%s+", "")) ucic:set("openmptcprouter",server,"disabled",openmptcprouter_vps_disabled) - if ucic:get("openmptcprouter",server,"ip") ~= aserverips then + if ucic:get_list("openmptcprouter",server,"ip") ~= aserverips then ucic:set_list("openmptcprouter",server,"ip",aserverips) if ucic:get("openmptcprouter",server,"master") == "1" then ucic:set("openmptcprouter",server,"get_config","1") @@ -805,6 +805,7 @@ function wizard_add() local encryption = luci.http.formvalue("encryption") if encryption == "none" then + ucic:set("openmptcprouter","settings","encryption","none") ucic:set("shadowsocks-libev","sss0","method","none") ucic:set("shadowsocks-libev","sss1","method","none") ucic:set("openvpn","omr","cipher","none") @@ -812,6 +813,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_user_security","none") ucic:set("v2ray","omrout","s_vless_user_security","none") elseif encryption == "aes-256-gcm" then + ucic:set("openmptcprouter","settings","encryption","aes-256-gcm") ucic:set("shadowsocks-libev","sss0","method","aes-256-gcm") ucic:set("shadowsocks-libev","sss1","method","aes-256-gcm") ucic:set("glorytun","vpn","chacha20","0") @@ -821,6 +823,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") elseif encryption == "aes-256-cfb" then + ucic:set("openmptcprouter","settings","encryption","aes-256-cfb") ucic:set("shadowsocks-libev","sss0","method","aes-256-cfb") ucic:set("shadowsocks-libev","sss1","method","aes-256-cfb") ucic:set("glorytun","vpn","chacha20","0") @@ -830,6 +833,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") elseif encryption == "chacha20-ietf-poly1305" then + ucic:set("openmptcprouter","settings","encryption","chacha20") ucic:set("shadowsocks-libev","sss0","method","chacha20-ietf-poly1305") ucic:set("shadowsocks-libev","sss1","method","chacha20-ietf-poly1305") ucic:set("glorytun","vpn","chacha20","1") @@ -838,6 +842,8 @@ function wizard_add() ucic:set("mlvpn","general","cleartext_data","0") ucic:set("v2ray","omrout","s_vmess_user_security","chacha20-poly1305") ucic:set("v2ray","omrout","s_vless_user_security","chacha20-poly1305") + else + ucic:set("openmptcprouter","settings","encryption","other") end ucic:save("openvpn") ucic:save("glorytun") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 69d7b5a81..6b005fe5b 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -269,13 +269,18 @@

diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 8dade3146..fc7a71dec 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -1035,7 +1035,9 @@ function interfaces_status() mArray.openmptcprouter["multi_vpn"] = true end end - + if uci:get("openmptcprouter","settings","vpn") ~= "none" then + mArray.openmptcprouter["vpn"]= uci:get("openmptcprouter","settings","vpn") + end -- check Shadowsocks is running mArray.openmptcprouter["shadowsocks_service"] = false if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then From 8e2f33ac32df446f200c5e25a05fe454b64434c9 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Aug 2023 22:23:43 +0200 Subject: [PATCH 08/43] Some fix on encryption --- .../files/etc/init.d/openmptcprouter-vps | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 2a953d748..8955b5ff2 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -107,6 +107,7 @@ _set_json() { _set_glorytun_vps() { local enabled port key enabled="$(uci -q get glorytun.vpn.enable)" + [ "$enabled" != "1" ] && enabled="$(uci -q get glorytun-udp.vpn.enable)" [ "$enabled" != "1" ] && echo "Glorytun disabled" && return port="$(uci -q get glorytun.vpn.port)" key="$(uci -q get glorytun.vpn.key)" @@ -1909,17 +1910,16 @@ _config_service() { [ "$(uci -q get openmptcprouter.${servername}.master)" = "1" ] && { _get_vps_config } - [ -z "$vps_config" ] && vps_config=$(_get_json "config") - [ -z "$vps_config" ] && return - user_permission="$(echo "$vps_config" | jsonfilter -q -e '@.user.permission')" if [ "$(uci -q get openmptcprouter.settings.firstboot)" != "0" ]; then - [ -n "$vps_config" ] && [ -n "$(cat /proc/cpuinfo | grep aes)" ] && { + [ -n "$(cat /proc/cpuinfo | grep aes)" ] && { vps_aes="$(echo "$vps_config" | jsonfilter -q -e '@.vps.aes')" if [ "$vps_aes" != "false" ] && [ "$user_permission" != "ro" ]; then logger -t "OMR-VPS" "CPU support AES, set it by default" method="$(uci -q get shadowsocks-libev.sss0.method)" uci -q batch <<-EOF >/dev/null + set openmptcprouter.settings.encryption="aes-256-gcm" + commit openmptcprouter set glorytun.vpn.chacha20="0" commit glorytun set glorytun-udp.vpn.chacha="0" @@ -1934,6 +1934,11 @@ _config_service() { fi } fi + + [ -z "$vps_config" ] && vps_config=$(_get_json "config") + [ -z "$vps_config" ] && return + user_permission="$(echo "$vps_config" | jsonfilter -q -e '@.user.permission')" + if [ "$user_permission" != "ro" ]; then #config_load shadowsocks-libev #config_foreach _set_ss_server_vps server From b67619a38ba8d6dc807256938d0aa622fcdc5704 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 4 Aug 2023 22:24:01 +0200 Subject: [PATCH 09/43] Change diag website --- openmptcprouter/files/etc/uci-defaults/1950-omr-diag | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1950-omr-diag b/openmptcprouter/files/etc/uci-defaults/1950-omr-diag index cd944c24f..efefd08a7 100755 --- a/openmptcprouter/files/etc/uci-defaults/1950-omr-diag +++ b/openmptcprouter/files/etc/uci-defaults/1950-omr-diag @@ -2,9 +2,9 @@ uci -q batch <<-EOF >/dev/null set luci.diag=internal - set luci.diag.ping="openmptcprouter.com" - set luci.diag.dns="openmptcprouter.com" - set luci.diag.route="openmptcprouter.com" + set luci.diag.ping="www.openmptcprouter.com" + set luci.diag.dns="www.openmptcprouter.com" + set luci.diag.route="www.openmptcprouter.com" set luci.diag.iperf3="ping-ams1.online.net" set luci.diag.getip="ip.openmptcprouter.com" commit luci From 7adc290974b7089b39b23a32dbb4f218002d7a64 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Aug 2023 12:49:14 +0200 Subject: [PATCH 10/43] Various changes for 6.1 in MPTCP Luci interface --- luci-app-mptcp/luasrc/controller/mptcp.lua | 6 ++---- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua index 89bc92c13..842adc6ef 100644 --- a/luci-app-mptcp/luasrc/controller/mptcp.lua +++ b/luci-app-mptcp/luasrc/controller/mptcp.lua @@ -15,10 +15,8 @@ function index() entry({"admin", "network", "mptcp", "mptcp_check_trace"}, post("mptcp_check_trace")).leaf = true entry({"admin", "network", "mptcp", "mptcp_fullmesh"}, template("mptcp/mptcp_fullmesh"), _("MPTCP Fullmesh"), 5).leaf = true entry({"admin", "network", "mptcp", "mptcp_fullmesh_data"}, post("mptcp_fullmesh_data")).leaf = true - if nixio.uname().release:sub(1,4) ~= "5.15" and nixio.uname().release:sub(1,1) ~= "6" then - entry({"admin", "network", "mptcp", "mptcp_connections"}, template("mptcp/mptcp_connections"), _("Established connections"), 6).leaf = true - entry({"admin", "network", "mptcp", "mptcp_connections_data"}, post("mptcp_connections_data")).leaf = true - end + entry({"admin", "network", "mptcp", "mptcp_connections"}, template("mptcp/mptcp_connections"), _("Established connections"), 6).leaf = true + entry({"admin", "network", "mptcp", "mptcp_connections_data"}, post("mptcp_connections_data")).leaf = true entry({"admin", "network", "mptcp", "mptcp_monitor"}, template("mptcp/mptcp_monitor"), _("MPTCP monitoring"), 6).leaf = true entry({"admin", "network", "mptcp", "mptcp_monitor_data"}, post("mptcp_monitor_data")).leaf = true end diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index d5fe52f9c..e8f827bee 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -15,9 +15,13 @@ o:value("disable", translate("disable")) o = s:option(ListValue, "mptcp_checksum", translate("Multipath TCP checksum")) o:value(1, translate("enable")) o:value(0, translate("disable")) -o = s:option(ListValue, "mptcp_debug", translate("Multipath Debug")) -o:value(1, translate("enable")) -o:value(0, translate("disable")) + +if uname.release:sub(1,4) ~= "5.15" and uname.release:sub(1,1) ~= "6" then + o = s:option(ListValue, "mptcp_debug", translate("Multipath Debug")) + o:value(1, translate("enable")) + o:value(0, translate("disable")) +end + o = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager"), translate("Default is fullmesh")) o:value("default", translate("default")) o:value("fullmesh", "fullmesh") @@ -61,12 +65,17 @@ end -- if tonumber(uname.release:sub(1,4)) >= 5.15 then if uname.release:sub(1,4) == "5.15" or uname.release:sub(1,1) == "6" then + o = s:option(ListValue, "mptcp_pm_type", translate("Path Manager type")) + o:value(0, translate("In-kernel path manager")) + o:value(1, translate("Userspace path manager")) + o.default = 0 + o = s:option(Value, "mptcp_subflows", translate("Max subflows"),translate("specifies the maximum number of additional subflows allowed for each MPTCP connection")) o.datatype = "uinteger" o.rmempty = false o.default = 3 - o = s:option(Value, "mptcp_stale_loss_cnt", translate("Retranmission intervals"),translate("The number of MPTCP-level retransmission intervals with no traffic and pending outstanding data on a given subflow required to declare it stale")) + o = s:option(Value, "mptcp_stale_loss_cnt", translate("Retranmission intervals"),translate("The number of MPTCP-level retransmission intervals with no traffic and pending outstanding data on a given subflow required to declare it stale. A low stale_loss_cnt value allows for fast active-backup switch-over, an high value maximize links utilization on edge scenarios e.g. lossy link with high BER or peer pausing the data processing.")) o.datatype = "uinteger" o.rmempty = false o.default = 4 From 19b447669e8cdab1124adb1a38d1aa138e0f9717 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Aug 2023 12:49:45 +0200 Subject: [PATCH 11/43] Fix on MPTCP settings --- mptcp/files/etc/init.d/mptcp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index d83b12b1d..5c0c43d8e 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -50,6 +50,10 @@ global_multipath_settings() { elif [ -f /proc/sys/net/mptcp/enabled ]; then sysctl -qew net.mptcp.enabled="$multipath_status" ip mptcp limits set add_addr_accepted $mptcp_add_addr_accepted subflows $mptcp_subflows 2>&1 >/dev/null + #[ -z "$mptcp_debug" ] || sysctl -qew net.mptcp.mptcp_debug="$mptcp_debug" + [ -z "$mptcp_checksum" ] || sysctl -qew net.mptcp.mptcp_checksum="$mptcp_checksum" + [ -z "$mptcp_path_manager" ] || sysctl -qew net.mptcp.mptcp_path_manager="$mptcp_path_manager" + [ -z "$mptcp_scheduler" ] || sysctl -qew net.mptcp.mptcp_scheduler="$mptcp_scheduler" [ -z "$mptcp_add_addr_timeout" ] || sysctl -qew net.mptcp.add_addr_timeout="$mptcp_add_addr_timeout" [ -z "$mptcp_checksum" ] || sysctl -qew net.mptcp.checksum_enabled="$mptcp_checksum" [ -z "$mptcp_stale_loss_cnt" ] || sysctl -qew net.mptcp.stale_loss_cnt="$mptcp_stale_loss_cnt" From da603e93109584d86da7c27c62334c170f75d27c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Aug 2023 12:50:39 +0200 Subject: [PATCH 12/43] Add upload support to server speed test --- openmptcprouter/files/bin/omr-test-speed | 29 +++++++++---- .../files/bin/omr-test-speed-server | 42 ++++++++++++++----- 2 files changed, 53 insertions(+), 18 deletions(-) diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index ab8e1a929..2aaf3b72b 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -1,19 +1,25 @@ #!/bin/sh -# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : +# (c) Yannick Chabanois (ycarus@zugaina.org) for OpenMPTCProuter +# +# + FORCEVPS=false +FASTTEST=false if [ "$1" = "forcevps" ]; then - INTERFACE="$2" FORCEVPS=true -else - INTERFACE="$1" fi +if [ "$1" = "fasttest" ]; then + FASTTEST=true +fi +for i in $@; do :; done +INTERFACE="$i" [ -n "$INTERFACE" ] && [ ! -d "/sys/class/net/$INTERFACE" ] && { echo "You must use a real interface. You wan find them using 'ip a' for example" exit 0 } -echo "Select best test server..." +[ "$FASTTEST" ] || echo "Select best test server..." HOSTLST="http://scaleway.testdebit.info/10G.iso http://bordeaux.testdebit.info/10G.iso http://aix-marseille.testdebit.info/10G.iso http://lyon.testdebit.info/10G.iso http://lille.testdebit.info/10G.iso http://paris.testdebit.info/10G.iso http://appliwave.testdebit.info/10G/10G.iso 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 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 http://speedtest.milkywan.fr/files/10G.iso" bestping="9999" for pinghost in $HOSTLST; do @@ -23,7 +29,7 @@ for pinghost in $HOSTLST; do else ping=$(ping -4 -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') fi - echo "host: $domain - ping: $ping" + [ "$FASTTEST" ] || echo "host: $domain - ping: $ping" if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then bestping=$ping HOST=$pinghost @@ -32,11 +38,12 @@ done [ -z "$HOST" ] && HOST="https://speed.hetzner.de/10GB.bin" -echo "Best server is $HOST, running test:" +[ "$FASTTEST" ] || echo "Best server is $HOST, running test:" trap : HUP INT TERM if [ -z "$INTERFACE" ]; then curl -4 -o /dev/null $HOST || echo else + : /etc/init.d/sqm stop $INTERFACE domain=$(echo $HOST | awk -F/ '{print $3}') hostip=$(dig +nocmd +noall +answer A $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ') if [ -n "$(ipset list 2>/dev/null | grep ss_rules)" ]; then @@ -44,10 +51,16 @@ else ipset add ss_rules_dst_bypass_all $ip done fi - curl -4 -o /dev/null --interface $INTERFACE $HOST || echo + if [ "$FASTTEST" ]; then + avg_speed=$(curl -4 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' --interface $INTERFACE $HOST 2>/dev/null) + echo "$avg_speed" + else + curl -4 --max-time 4 -o /dev/null --interface $INTERFACE $HOST || echo + fi if [ -n "$(ipset list 2>/dev/null | grep ss_rules)" ]; then for ip in $hostip; do ipset del ss_rules_dst_bypass_all $ip done fi + : /etc/init.d/sqm start $INTERFACE fi diff --git a/openmptcprouter/files/bin/omr-test-speed-server b/openmptcprouter/files/bin/omr-test-speed-server index df61352ec..a937a6763 100755 --- a/openmptcprouter/files/bin/omr-test-speed-server +++ b/openmptcprouter/files/bin/omr-test-speed-server @@ -1,6 +1,10 @@ #!/bin/sh SERVER=$1 INTERFACE=$2 +[ "$3" = "upload" ] && UPLOAD=$3 +[ "$3" = "fasttest" ] && FASTTEST=$3 +[ "$4" = "upload" ] && UPLOAD=$4 +[ "$4" = "fasttest" ] && FASTTEST=$4 [ -z "$SERVER" ] && SERVER="vps" KEY=$(uci -q get openmptcprouter.$SERVER.token) HOST=$(uci -q get openmptcprouter.$SERVER.ip | awk '{print $1}') @@ -8,19 +12,37 @@ PORT=$(uci -q get openmptcprouter.$SERVER.port) MP=false if [ -n "$KEY" ] && [ -n "$HOST" ] && [ -n "$PORT" ]; then trap : HUP INT TERM - echo "Download test via server ${SERVER}:" + [ -z "$FASTTEST" ] && echo "Disable SQM bandwidth limit on $INTERFACE" + : /etc/init.d/sqm stop $INTERFACE 2>&1 >/dev/null + [ -z "$FASTTEST" ] && echo "Download test via server ${SERVER}:" if [ -n "$INTERFACE" ]; then - if [ "$(multipath ${INTERFACE} | grep default)" ]; then - MP=true - /etc/init.d/omr-tracker stop 2>&1 >/dev/null - multipath ${INTERFACE} off - fi - curl -k -o /dev/null --interface $INTERFACE -H "Authorization: Bearer ${KEY}" https://${HOST}:${PORT}/speedtest || echo - if [ $MP ]; then - multipath ${INTERFACE} on - /etc/init.d/omr-tracker start & 2>&1 >/dev/null + #if [ "$(multipath ${INTERFACE} | grep default)" ]; then + # MP=true + # /etc/init.d/omr-tracker stop 2>&1 >/dev/null + # multipath ${INTERFACE} off + #fi + if [ -n "$FASTTEST" ]; then + if [ -n "$UPLOAD" ]; then + avg_speed=$(curl -k --max-time 30 -o /dev/null -qfsS -w '%{speed_upload}' -X POST -d @/boot/vmlinuz -d @/boot/vmlinuz --interface $INTERFACE -H "Authorization: Bearer ${KEY}" https://${HOST}:${PORT}/speedtest 2>/dev/null) + echo -n "$avg_speed" + else + avg_speed=$(curl -k --max-time 30 -o /dev/null -qfsS -w '%{speed_download}' --interface $INTERFACE -H "Authorization: Bearer ${KEY}" https://${HOST}:${PORT}/speedtest 2>/dev/null) + echo -n "$avg_speed" + fi + else + if [ -n "$UPLOAD" ]; then + curl -k -o /dev/null -X POST -d @/boot/vmlinuz -d @/boot/vmlinuz --interface $INTERFACE -H "Authorization: Bearer ${KEY}" https://${HOST}:${PORT}/speedtest || echo + else + curl -k -o /dev/null --interface $INTERFACE -H "Authorization: Bearer ${KEY}" https://${HOST}:${PORT}/speedtest || echo + fi fi + #if [ $MP ]; then + # multipath ${INTERFACE} on + # /etc/init.d/omr-tracker start & 2>&1 >/dev/null + #fi else curl -k -o /dev/null -H "Authorization: Bearer ${KEY}" https://${HOST}:${PORT}/speedtest || echo fi + [ -z "$FASTTEST" ] && echo "Restart SQM on $INTERFACE" + : /etc/init.d/sqm start $INTERFACE 2>&1 >/dev/null fi \ No newline at end of file From 2d3b37888d2069da879507d5b304239a921673a8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 8 Aug 2023 12:51:50 +0200 Subject: [PATCH 13/43] Add automatic speedtest in wizard --- .../luasrc/controller/openmptcprouter.lua | 7 +++- .../luasrc/view/openmptcprouter/wizard.htm | 18 ++++++-- .../share/omr/post-tracking.d/post-tracking | 42 +++++++++++++++++++ 3 files changed, 62 insertions(+), 5 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 592abcc89..b760b205c 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -415,6 +415,7 @@ function wizard_add() local downloadspeed = luci.http.formvalue("cbid.sqm.%s.download" % intf) or "0" local uploadspeed = luci.http.formvalue("cbid.sqm.%s.upload" % intf) or "0" + local testspeed = luci.http.formvalue("cbid.sqm.%s.testspeed" % intf) or "0" if not ucic:get("qos",intf) ~= "" then ucic:set("qos",intf,"interface") @@ -438,7 +439,7 @@ function wizard_add() ucic:set("sqm",intf,"script","piece_of_cake.qos") ucic:set("sqm",intf,"qdisc_advanced","0") ucic:set("sqm",intf,"linklayer","atm") - ucic:set("sqm",intf,"overhead","40") + ucic:set("sqm",intf,"overhead","44") ucic:set("sqm",intf,"enabled","0") ucic:set("sqm",intf,"debug_logging","0") ucic:set("sqm",intf,"verbosity","5") @@ -454,6 +455,10 @@ function wizard_add() ucic:set("sqm",intf,"qdisc","cake") ucic:set("sqm",intf,"script","piece_of_cake.qos") end + ucic:set("openmptcprouter",intf,"testspeed",testspeed) + if testspeed == "1" then + ucic:set("openmptcprouter",intf,"testspeed_lc") + end if downloadspeed ~= "0" and downloadspeed ~= "" then if sqmautorate == "1" and (ucic:get("network",intf,"downloadspeed") ~= downloadspeed or ucic:get("sqm",intf,"max_download") == "" or ucic:get("sqm",intf,"download") == "0") then ucic:set("sqm",intf,"download",math.ceil(downloadspeed*65/100)) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 6b005fe5b..159c22fc5 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -272,7 +272,7 @@ local method=uci:get("openmptcprouter","settings","encryption") if method == nil and ut.trim(sys.exec("cat /proc/cpuinfo | grep aes")) ~= "" then method="aes-256-gcm" - else + elseif method == nil then method="chacha20" end %> @@ -993,12 +993,22 @@ end %>
+ +
+ checked<% end %> /> +
+
+ <%:Run an automatic speedtest to calculate max speed.%> +
+
+
+

- <%:Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value.%> + <%:Used by Glorytun UDP and SQM/QoS if enabled.%>
-
+

- <%:Used by Glorytun UDP and SQM/QoS if enabled. 0 to use default value.%> + <%:Used by Glorytun UDP and SQM/QoS if enabled.%>