diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 31e803161..37e032e59 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -830,8 +830,15 @@ function wizard_add() ucic:set("xray","omrout","s_trojan_address",server_ip) ucic:set("xray","omrout","s_socks_address",server_ip) ucic:set("xray","omrout","s_shadowsocks_address",server_ip) - luci.sys.call("uci -q del openvpn.omr.remote") - luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + luci.sys.call("uci -q del openvpn." .. sectionname .. ".remote") + luci.sys.call("uci -q add_list openvpn." .. sectioname .. ".remote=" .. server_ip) + end + end) + --luci.sys.call("uci -q del openvpn.omr.remote") + --luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) ucic:set("qos","serverin","srchost",server_ip) ucic:set("qos","serverout","dsthost",server_ip) local nbip = 0 @@ -882,8 +889,15 @@ function wizard_add() ucic:set("xray","omrout","s_trojan_address",server_ip) ucic:set("xray","omrout","s_socks_address",server_ip) ucic:set("xray","omrout","s_shadowsocks_address",server_ip) - luci.sys.call("uci -q del openvpn.omr.remote") - luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + luci.sys.call("uci -q del openvpn." .. sectionname .. ".remote") + luci.sys.call("uci -q add_list openvpn." .. sectionname .. ".remote=" .. server_ip) + end + end) + --luci.sys.call("uci -q del openvpn.omr.remote") + --luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) ucic:set("qos","serverin","srchost",server_ip) ucic:set("qos","serverout","dsthost",server_ip) local nbip = 0 @@ -938,7 +952,13 @@ function wizard_add() ucic:set("shadowsocks-libev","sss1","method","none") ucic:set("shadowsocks-rust","sss0","method","none") ucic:set("shadowsocks-rust","sss1","method","none") - ucic:set("openvpn","omr","cipher","none") + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + ucic:set("openvpn",sectionname,"cipher","none") + end + end) + --ucic:set("openvpn","omr","cipher","none") ucic:set("mlvpn","general","cleartext_data","1") ucic:set("v2ray","omrout","s_vmess_user_security","none") ucic:set("v2ray","omrout","s_vless_user_security","none") @@ -957,7 +977,13 @@ function wizard_add() ucic:set("shadowsocks-libev","sss1","method","aes-256-gcm") ucic:set("glorytun","vpn","chacha20","0") ucic:set("glorytun-udp","vpn","chacha","0") - ucic:set("openvpn","omr","cipher","AES-256-GCM") + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + ucic:set("openvpn",sectionname,"cipher","AES-256-GCM") + end + end) + --ucic:set("openvpn","omr","cipher","AES-256-GCM") ucic:set("mlvpn","general","cleartext_data","0") ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") @@ -977,7 +1003,13 @@ function wizard_add() ucic:set("shadowsocks-libev","sss1","method","aes-256-cfb") ucic:set("glorytun","vpn","chacha20","0") ucic:set("glorytun-udp","vpn","chacha","0") - ucic:set("openvpn","omr","cipher","AES-256-CFB") + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + ucic:set("openvpn",sectionname,"cipher","AES-256-CFB") + end + end) + --ucic:set("openvpn","omr","cipher","AES-256-CFB") ucic:set("mlvpn","general","cleartext_data","0") ucic:set("v2ray","omrout","s_vmess_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") @@ -997,7 +1029,13 @@ function wizard_add() ucic:set("shadowsocks-libev","sss1","method","chacha20-ietf-poly1305") ucic:set("glorytun","vpn","chacha20","1") ucic:set("glorytun-udp","vpn","chacha","1") - ucic:set("openvpn","omr","cipher","chacha20-poly1305") + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + ucic:set("openvpn",sectionname,"cipher","chacha20-poly1305") + end + end) + --ucic:set("openvpn","omr","cipher","chacha20-poly1305") 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") @@ -1224,10 +1262,34 @@ function wizard_add() ucic:commit("ubond") if default_vpn == "openvpn" and disablednb ~= serversnb then - ucic:set("openvpn","omr","enabled",1) - ucic:set("network","omrvpn","proto","none") + if ucic:get("openmptcprouter","settings","openvpn_lb") == "0" then + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + ucic:set("openvpn",sectionname,"enabled",0) + ucic:set("network",sectioname,"proto","none") + end + end) + ucic:set("openvpn","omr","enabled",1) + else + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + ucic:set("openvpn",sectionname,"enabled",1) + ucic:set("network",sectioname,"proto","none") + end + end) + --ucic:set("openvpn","omr","enabled",1) + end + --ucic:set("network","omrvpn","proto","none") else - ucic:delete("openvpn","omr","enabled") + ucic:foreach("openvpn","openvpn", function(s) + local sectionname = s[".name"] + if sectionname:match("^omr.*") then + ucic:delete("openvpn",sectionname,"enabled") + end + end) + --ucic:delete("openvpn","omr","enabled") end ucic:save("openvpn") ucic:commit("openvpn") @@ -1362,6 +1424,17 @@ function settings_add() local externalcheck = luci.http.formvalue("externalcheck") or "1" ucic:set("openmptcprouter","settings","external_check",externalcheck) + -- Enable/disable OpenVPN multiple clients + local openvpnlb = luci.http.formvalue("openvpnlb") or "1" + if ucic:get("openmptcprouter","settings","openvpn_lb") ~= openvpnlb then + ucic:set("openmptcprouter","settings","openvpn_lb",openvpnlb) + ucic:foreach("openmptcprouter", "server", function(s) + local sectionname = s[".name"] + ucic:set("openmptcprouter",sectionname,"get_config","1") + end) + + end + -- Enable/disable restrict proxy to LAN local restricttolan = luci.http.formvalue("restricttolan") or "0" ucic:set("openmptcprouter","settings","restrict_to_lan",restricttolan) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index 5f2594c35..47fdb814b 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -364,6 +364,16 @@ +
+ +
+ checked<% end %>> +
+
+ <%:Disable OpenVPN multi clients to distribute connections and use more CPU cores%> +
+
+
diff --git a/omr-tracker/files/usr/share/omr/lib/common-post-tracking.sh b/omr-tracker/files/usr/share/omr/lib/common-post-tracking.sh index d8d4e874c..312952cf7 100755 --- a/omr-tracker/files/usr/share/omr/lib/common-post-tracking.sh +++ b/omr-tracker/files/usr/share/omr/lib/common-post-tracking.sh @@ -712,3 +712,23 @@ dns_flush() { unbound-control flush-negative >/dev/null 2>&1 unbound-control flush-bogus >/dev/null 2>&1 } + +set_vpn_balancing_routes() { + vpngw="$1" + vpn_route() { + local vpnname + vpnname=$1 + [ -z "$(echo $vpnname | grep omr)" ] && return + config_get enabled $vpnname enabled + [ "$enabled" != "1" ] && return + config_get dev $vpnname dev + [ -z "$dev" ] && return + allvpnroutes="$allvpnroutes nexthop via $vpngw dev $dev" + } + allvpnroutes="" + config_load openvpn + config_foreach vpn_route openvpn + _log "allvpnroutes: $allvpnroutes" + [ -n "$allvpnroutes" ] && ip route replace default scope global${allvpnroutes} >/dev/null 2>&1 +} + diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up index 21be40f3d..8c67bf96c 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up @@ -61,13 +61,18 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om fi fi if { [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; } && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ]; then - _log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE (was $default_gw)" [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw : $default_gw - Current route: $(ip r)" - ip route replace default scope global via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd >/dev/null 2>&1 + if [ "$(uci -q get openvpn.omr2.enabled)" != "1" ]; then + _log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE (was $default_gw)" + ip route replace default scope global via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd >/dev/null 2>&1 + else + _log "Tunnel up : Replace default route by load balancing to $OMR_TRACKER_DEVICE_GATEWAY" + set_vpn_balancing_routes "$OMR_TRACKER_DEVICE_GATEWAY" + fi if [ "$(pgrep -f openmptcprouter-vps)" = "" ]; then /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 & fi - [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && conntrack -D -p udp >/dev/null 2>&1 + [ -n "$(uci -q get shadowsocks-libev.sss0)" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && conntrack -D -p udp >/dev/null 2>&1 [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)" fi @@ -388,5 +393,7 @@ if [ "$(sysctl -qen net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ] || [ "$(sysct fi [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter +#[ -n "$OMR_TRACKER_DEVICE" ] && OMR_TRACKER_PREV_DEVICE="$OMR_TRACKER_DEVICE" + #ubus call network reload exit 0 \ No newline at end of file diff --git a/openmptcprouter/files/bin/omr-speedtest b/openmptcprouter/files/bin/omr-speedtest index c71266842..2c3578e55 100755 --- a/openmptcprouter/files/bin/omr-speedtest +++ b/openmptcprouter/files/bin/omr-speedtest @@ -1,35 +1,123 @@ #!/bin/sh +# +# Copyright (C) 2018-2024 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# This script check speed using Speedtest servers + INTERFACE="$1" + +bypass_host_enable() { + INTERFACE=$1 + HOST=$2 + [ -n "$(tc qdisc show dev $INTERFACE | grep ingress)" ] && /etc/init.d/sqm stop $INTERFACE + domain=$(echo $HOST | awk -F/ '{print $3}') + if [ "$IPV6" = true ]; then + hostip=$(dig +nocmd +noall +answer AAAA $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ') + if [ -n "$(ipset list 2>/dev/null | grep ss_rules6)" ]; then + for ip in $hostip; do + ipset add ss_rules6_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then + for ip in $hostip; do + nft add element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 + done + fi + else + 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 + for ip in $hostip; do + ipset add ss_rules_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then + for ip in $hostip; do + nft add element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 + done + fi + fi +} + + +bypass_host_disable() { + INTERFACE=$1 + HOST=$2 + domain=$(echo $HOST | awk -F/ '{print $3}') + if [ "$IPV6" = true ]; then + hostip=$(dig +nocmd +noall +answer AAAA $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ') + if [ -n "$(ipset list 2>/dev/null | grep ss_rules6)" ]; then + for ip in $hostip; do + ipset del ss_rules6_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then + for ip in $hostip; do + nft delete element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 + done + fi + else + 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 + for ip in $hostip; do + ipset del ss_rules_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then + for ip in $hostip; do + nft delete element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 + done + fi + fi + /etc/init.d/sqm start $INTERFACE +} + +if [ -f /usr/bin/v2ray ]; then + upload_file="/usr/bin/v2ray" +elif [ -f /usr/bin/xray ]; then + upload_file="/usr/bin/xray" +elif [ -f /boot/vmlinuz ]; then + upload_file="/boot/vmlinuz" +elif [ -f /bin/bash ]; then + upload_file="/bin/bash" +else + upload_file="/bin/busybox" +fi + echo "Download server list..." -wget -q -O /tmp/speedtest.lst http://c.speedtest.net/speedtest-servers-static.php +wget -q -O /tmp/speedtest.lst https://www.speedtest.net/api/js/servers bestuploadurl="" besthost="" bestpinghost="" +sponsor="" bestping="999" echo "Select best server..." while read line; do - if [ "$(echo $line | grep url)" != "" ]; then - pinghost=$(echo $line | awk -F'"' '{print $18}' | cut -d: -f1) - host=$(echo $line | awk -F'"' '{print $18}') - uploadurl=$(echo $line | awk -F'"' '{print $2}') - ping=$(ping -c1 -w1 $pinghost | cut -d "/" -s -f5 | cut -d "." -f1) - echo -n "." - if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then - bestping=$ping - bestuploadurl=$uploadurl - besthost=$host - bestpinghost=$pinghost - fi + host=$(echo $line | jsonfilter -e '@.host') + pinghost=$(echo $host | awk -F: '{print $1}') + url=$(echo $line | jsonfilter -e '@.url') + ping=$(ping -c1 -w1 $pinghost | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') + echo -n "." + if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then + bestping=$ping + besturl=$url + besthost=$host + bestpinghost=$pinghost + sponsor=$(echo $line | jsonfilter -q -e '@.sponsor') fi -done < /tmp/speedtest.lst +done < <(cat /tmp/speedtest.lst | jsonfilter -e '@[*]') echo -echo "Done: url: $bestuploadurl - host: $besthost - ping: $bestping" +echo "Done: url: $besturl - host: $besthost - ping: $bestping - sponsor: $sponsor" echo "Download test:" if [ -z "$INTERFACE" ]; then curl -4 $besthost/speedtest/random7000x7000.jpg >/dev/null || echo else - hostip=$(dig +short $bestpinghost | tr -d "\n") - ipset add ss_rules_dst_bypass_all $hostip + bypass_host_enable $INTERFACE $bestpinghost + echo "Download:" curl -4 --interface $INTERFACE $besthost/speedtest/random7000x7000.jpg >/dev/null || echo - ipset del ss_rules_dst_bypass_all $hostip -fi \ No newline at end of file + echo "Upload:" + curl -4 --interface $INTERFACE -F "file=@$upload_file" $besturl >/dev/null || echo + bypass_host_disable $INTERFACE $bestpinghost +fi diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index e5ccadc34..11b4f6d14 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -1,6 +1,11 @@ #!/bin/sh -# (c) Yannick Chabanois (ycarus@zugaina.org) for OpenMPTCProuter # +# Copyright (C) 2018-2024 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# This script test global or interface speed # FORCEVPS=false @@ -15,26 +20,174 @@ for i in $@; do :; done INTERFACE="$i" [ "$INTERFACE" = "forcevps" ] || [ "$INTERFACE" = "fasttest" ] && INTERFACE="" +IPV6=false +if [ "$(basename $0)" = "omr-test-speedv6" ]; then + IPV6=true +fi + [ -n "$INTERFACE" ] && [ ! -d "/sys/class/net/$INTERFACE" ] && { echo "You must use a real interface. You wan find them using 'ip a' for example (not $INTERFACE)" exit 0 } -[ "$FASTTEST" = true ] || 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 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 - domain=$(echo $pinghost | awk -F/ '{print $3}') - if [ -z "$INTERFACE" ] || [ "$FORCEVPS" = true ]; then - ping=$(ping -4 -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') +HOSTLST6="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 http://ipv6.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" + +select_server() { + [ "$FASTTEST" = true ] || echo "Select best test server..." + bestping="9999" + if [ "$IPV6" = true ]; then + for pinghost in $HOSTLST6; do + domain=$(echo $pinghost | awk -F/ '{print $3}') + if [ -z "$INTERFACE" ] || [ "$FORCEVPS" = true ]; then + ping=$(ping -6 -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') + else + ping=$(ping -6 -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') + fi + [ "$FASTTEST" = true ] || echo "host: $domain - ping: $ping" + if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then + bestping=$ping + HOST=$pinghost + fi + done else - ping=$(ping -4 -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') + for pinghost in $HOSTLST; do + domain=$(echo $pinghost | awk -F/ '{print $3}') + if [ -z "$INTERFACE" ] || [ "$FORCEVPS" = true ]; then + ping=$(ping -4 -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') + else + ping=$(ping -4 -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') + fi + [ "$FASTTEST" = true ] || echo "host: $domain - ping: $ping" + if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then + bestping=$ping + HOST=$pinghost + fi + done fi - [ "$FASTTEST" = true ] || echo "host: $domain - ping: $ping" - if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then - bestping=$ping - HOST=$pinghost +} + +get_speed_global() { + HOST=$1 + if [ "$IPV6" = true ]; then + curl -6 -o /dev/null $HOST || echo + else + curl -4 -o /dev/null $HOST || echo fi +} + +get_speed_global_fast() { + HOST=$1 + if [ "$IPV6" = true ]; then + avg_speed=$(curl -6 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' $HOST 2>/dev/null) + else + avg_speed=$(curl -4 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' $HOST 2>/dev/null) + fi + echo "$avg_speed" +} + +bypass_host_enable() { + INTERFACE=$1 + HOST=$2 + [ -n "$(tc qdisc show dev $INTERFACE | grep ingress)" ] && /etc/init.d/sqm stop $INTERFACE + domain=$(echo $HOST | awk -F/ '{print $3}') + if [ "$IPV6" = true ]; then + hostip=$(dig +nocmd +noall +answer AAAA $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ') + if [ -n "$(ipset list 2>/dev/null | grep ss_rules6)" ]; then + for ip in $hostip; do + ipset add ss_rules6_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then + for ip in $hostip; do + nft add element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 + done + fi + else + 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 + for ip in $hostip; do + ipset add ss_rules_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then + for ip in $hostip; do + nft add element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 + done + fi + fi +} + + +bypass_host_disable() { + INTERFACE=$1 + HOST=$2 + domain=$(echo $HOST | awk -F/ '{print $3}') + if [ "$IPV6" = true ]; then + hostip=$(dig +nocmd +noall +answer AAAA $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ') + if [ -n "$(ipset list 2>/dev/null | grep ss_rules6)" ]; then + for ip in $hostip; do + ipset del ss_rules6_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then + for ip in $hostip; do + nft delete element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 + done + fi + else + 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 + for ip in $hostip; do + ipset del ss_rules_dst_bypass_all $ip + done + fi + if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then + for ip in $hostip; do + nft delete element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 + done + fi + fi + /etc/init.d/sqm start $INTERFACE +} + +get_speed_interface() { + INTERFACE=$1 + HOST=$2 + bypass_host_enable $INTERFACE $HOST + if [ "$IPV6" = true ]; then + curl -6 -o /dev/null --interface $INTERFACE $HOST || echo + else + curl -4 -o /dev/null --interface $INTERFACE $HOST || echo + fi + bypass_host_disable $INTERFACE $HOST +} + +get_speed_interface_fast() { + INTERFACE=$1 + HOST=$2 + bypass_host_enable $INTERFACE $HOST + if [ "$IPV6" = true ]; then + avg_speed=$(curl -6 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' --interface $INTERFACE $HOST 2>/dev/null) + else + avg_speed=$(curl -4 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' --interface $INTERFACE $HOST 2>/dev/null) + fi + echo "$avg_speed" + bypass_host_disable $INTERFACE $HOST +} + +response="000" +try=0 +while [ "$response" = "000" ] && [ "$try" -le 3 ]; do + select_server + if [ "$IPV6" = true ]; then + response=$(curl -6 --write-out '%{http_code}' --silent --head --insecure -IL --connect-timeout 5 --output /dev/null $HOST) + HOSTLST6=$(echo $HOSTLST6 | tr ' ' '\n' | grep -v "$HOST" | xargs) + else + response=$(curl -4 --write-out '%{http_code}' --silent --head --insecure -IL --connect-timeout 5 --output /dev/null $HOST) + HOSTLST=$(echo $HOSTLST | tr ' ' '\n' | grep -v "$HOST" | xargs) + fi + try=$((try+1)) done [ -z "$HOST" ] && HOST="http://speedtest.milkywan.fr/files/10G.iso" @@ -43,40 +196,14 @@ done trap : HUP INT TERM if [ -z "$INTERFACE" ]; then if [ "$FASTTEST" = true ]; then - avg_speed=$(curl -4 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' $HOST 2>/dev/null) - echo "$avg_speed" + get_speed_global_fast $HOST else - curl -4 -o /dev/null $HOST || echo + get_speed_global $HOST fi else - [ -n "$(tc qdisc show dev $INTERFACE | grep ingress)" ] && /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 - for ip in $hostip; do - ipset add ss_rules_dst_bypass_all $ip - done - fi - if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then - for ip in $hostip; do - nft add element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 - done - fi if [ "$FASTTEST" = true ]; then - avg_speed=$(curl -4 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' --interface $INTERFACE $HOST 2>/dev/null) - echo "$avg_speed" + get_speed_interface_fast $INTERFACE $HOST else - curl -4 -o /dev/null --interface $INTERFACE $HOST || echo + get_speed_interface $INTERFACE $HOST 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 - if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then - for ip in $hostip; do - nft delete element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 - done - fi - /etc/init.d/sqm start $INTERFACE fi diff --git a/openmptcprouter/files/bin/omr-test-speedv6 b/openmptcprouter/files/bin/omr-test-speedv6 deleted file mode 100755 index 792b23eca..000000000 --- a/openmptcprouter/files/bin/omr-test-speedv6 +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/sh -# (c) Yannick Chabanois (ycarus@zugaina.org) for OpenMPTCProuter -# -# - -FORCEVPS=false -FASTTEST=false -if [ "$1" = "forcevps" ]; then - FORCEVPS=true -fi -if [ "$1" = "fasttest" ]; then - FASTTEST=true -fi -for i in $@; do :; done -INTERFACE="$i" -[ "$INTERFACE" = "forcevps" ] || [ "$INTERFACE" = "fasttest" ] && INTERFACE="" - -[ -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 -} - - -[ "$FASTTEST" = true ] || 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 http://ipv6.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 - domain=$(echo $pinghost | awk -F/ '{print $3}') - if [ -z "$INTERFACE" ] || [ "$FORCEVPS" = true ]; then - ping=$(ping -6 -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1) - else - ping=$(ping -6 -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1) - fi - [ "$FASTTEST" = true ] || echo "host: $domain - ping: $ping" - if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then - bestping=$ping - HOST=$pinghost - fi -done - - -[ -z "$HOST" ] && HOST="http://speedtest.milkywan.fr/files/10G.iso" - -[ "$FASTTEST" = true ] || echo "Best server is $HOST, running test:" -trap : HUP INT TERM -if [ -z "$INTERFACE" ]; then - curl -6 $HOST >/dev/null || echo -else - /etc/init.d/sqm stop $INTERFACE - domain=$(echo $HOST | awk -F/ '{print $3}') - hostip=$(dig +nocmd +noall +answer AAAA $domain | grep -v CNAME | awk '{print $5}' | tr '\n' ' ') - if [ -n "$(ipset list 2>/dev/null | grep ss_rules6)" ]; then - for ip in $hostip; do - ipset add ss_rules6_dst_bypass_all $ip - done - fi - if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then - for ip in $hostip; do - nft add element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 - done - fi - if [ "$FASTTEST" = true ]; then - avg_speed=$(curl -6 --max-time 10 -o /dev/null -qfsS -w '%{speed_download}' --interface $INTERFACE $HOST 2>/dev/null) - echo "$avg_speed" - else - curl -6 --interface $INTERFACE $HOST >/dev/null || echo - fi - if [ -n "$(ipset list 2>/dev/null | grep ss_rules6)" ]; then - for ip in $hostip; do - ipset del ss_rules6_dst_bypass_all $ip - done - fi - if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then - for ip in $hostip; do - nft delete element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 - done - fi - /etc/init.d/sqm start $INTERFACE -fi diff --git a/openmptcprouter/files/bin/omr-test-speedv6 b/openmptcprouter/files/bin/omr-test-speedv6 new file mode 120000 index 000000000..6dc31bde2 --- /dev/null +++ b/openmptcprouter/files/bin/omr-test-speedv6 @@ -0,0 +1 @@ +omr-test-speed \ No newline at end of file diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 7767211b0..e0f4d2e63 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1451,6 +1451,25 @@ _set_ssrust_server() { fi } +_set_openvpn_server() { + local option=$2 + local value=$3 + if [ "$value" = "true" ]; then + value=1 + elif [ "$value" = "false" ]; then + value=0 + fi + if [ "$(echo $1 | grep omr)" != "" ]; then + if [ "$option" = "remote" ]; then + uci -q delete openvpn.$1.$option + uci -q add_list openvpn.$1.$option=$value + else + uci -q set openvpn.$1.$option=$value + fi + fi +} + + _set_config_from_vps() { local shadowsocks_disabled vpn glorytun_state redirect shorewall_redirect mlvpn_key openvpn_key dsvpn_key [ -z "$vps_config" ] && vps_config=$(_get_json "config") @@ -1625,10 +1644,12 @@ _set_config_from_vps() { if [ "$(uci -q get shadowsocks-libev.sss0.server)" != "127.0.0.1" ]; then config_foreach _set_ss_server server "server" $vpsip fi - uci -q commit shadowsocks-libev - if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ -n "$(uci -q changes shadowsocks-libev)" ]; then - logger -t "OMR-VPS" "Shadowsocks restart..." - /etc/init.d/shadowsocks-libev restart >/dev/null 2>&1 + if [ -n "$(uci -q changes shadowsocks-libev)" ]; then + uci -q commit shadowsocks-libev + if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ]; then + logger -t "OMR-VPS" "Shadowsocks restart..." + /etc/init.d/shadowsocks-libev restart >/dev/null 2>&1 + fi fi fi @@ -1653,10 +1674,12 @@ _set_config_from_vps() { if [ "$(uci -q get shadowsocks-rust.sss0.server)" != "127.0.0.1" ]; then config_foreach _set_ssrust_server server "server" $vpsip fi - uci -q commit shadowsocks-rust - if [ "$(uci -q get shadowsocks-rust.sss0.disabled)" != "1" ] && [ -n "$(uci -q changes shadowsocks-rust)" ]; then - logger -t "OMR-VPS" "Shadowsocks Rust restart..." - /etc/init.d/shadowsocks-rust restart >/dev/null 2>&1 + if [ -n "$(uci -q changes shadowsocks-rust)" ]; then + uci -q commit shadowsocks-rust + if [ "$(uci -q get shadowsocks-rust.sss0.disabled)" != "1" ]; then + logger -t "OMR-VPS" "Shadowsocks Rust restart..." + /etc/init.d/shadowsocks-rust restart >/dev/null 2>&1 + fi fi fi @@ -1681,10 +1704,12 @@ _set_config_from_vps() { uci -q set v2ray.omrout.s_trojan_address="$vpsip" uci -q set v2ray.omrout.s_socks_address="$vpsip" fi - uci -q commit v2ray - if [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ -n "$(uci -q changes v2ray)" ]; then - logger -t "OMR-VPS" "V2ray restart..." - /etc/init.d/v2ray restart >/dev/null 2>&1 + if [ -n "$(uci -q changes v2ray)" ]; then + uci -q commit v2ray + if [ "$(uci -q get v2ray.main.enabled)" = "1" ]; then + logger -t "OMR-VPS" "V2ray restart..." + /etc/init.d/v2ray restart >/dev/null 2>&1 + fi fi fi @@ -1718,10 +1743,12 @@ _set_config_from_vps() { uci -q set xray.omrout.s_socks_address="$vpsip" uci -q set xray.omrout.s_shadowsocks_address="$vpsip" fi - uci -q commit xray - if [ "$(uci -q get xray.main.enabled)" = "1" ] && [ -n "$(uci -q changes xray)" ]; then - logger -t "OMR-VPS" "Xray restart..." - /etc/init.d/xray restart >/dev/null 2>&1 + if [ -n "$(uci -q changes xray)" ]; then + uci -q commit xray + if [ "$(uci -q get xray.main.enabled)" = "1" ]; then + logger -t "OMR-VPS" "Xray restart..." + /etc/init.d/xray restart >/dev/null 2>&1 + fi fi fi @@ -1747,8 +1774,8 @@ _set_config_from_vps() { if [ "$(uci -q get glorytun.vpn.host)" != "127.0.0.1" ]; then uci -q set glorytun.vpn.host="$vpsip" fi - uci -q commit glorytun if [ -n "$(uci -q changes glorytun)" ]; then + uci -q commit glorytun logger -t "OMR-VPS" "Glorytun restart..." /etc/init.d/glorytun restart >/dev/null 2>&1 fi @@ -1772,8 +1799,8 @@ _set_config_from_vps() { if [ "$(uci -q get glorytun-udp.vpn.host)" != "127.0.0.1" ]; then uci -q set glorytun-udp.vpn.host="$vpsip" fi - uci -q commit glorytun-udp if [ -n "$(uci -q changes glorytun-udp)" ]; then + uci -q commit glorytun-udp logger -t "OMR-VPS" "Glorytun UDP restart..." /etc/init.d/glorytun-udp restart >/dev/null 2>&1 fi @@ -1790,20 +1817,31 @@ _set_config_from_vps() { if [ "$vpn" = "openvpn" ]; then openvpn_state=1 fi - uci -q batch <<-EOF >/dev/null - set openvpn.omr.port=$openvpn_port - set openvpn.omr.secret="/etc/luci-uploads/openvpn.key" - EOF - if [ "$openvpn_state" = "1" ]; then + config_load openvpn + config_foreach _set_openvpn_server openvpn "port" "$openvpn_port" + config_foreach _set_openvpn_server openvpn "secret" "/etc/luci-uploads/openvpn.key" + + #uci -q batch <<-EOF >/dev/null + # set openvpn.omr.port=$openvpn_port + # set openvpn.omr.secret="/etc/luci-uploads/openvpn.key" + #EOF + if [ "$(uci -q get openmptcprouter.settings.openvpn_lb)" = "0" ]; then + config_foreach _set_openvpn_server openvpn "enabled" "0" uci -q set openvpn.omr.enabled=$openvpn_state else - uci -q del openvpn.omr.enabled + config_foreach _set_openvpn_server openvpn "enabled" "$openvpn_state" fi + #if [ "$openvpn_state" = "1" ]; then + # uci -q set openvpn.omr.enabled=$openvpn_state + #else + # uci -q del openvpn.omr.enabled + #fi if [ "$(uci -q get openvpn.omr.remote)" != "127.0.0.1" ]; then - uci -q set openvpn.omr.remote="$vpsip" + config_foreach _set_openvpn_server openvpn "remote" "$vpsip" + #uci -q set openvpn.omr.remote="$vpsip" fi - uci -q commit openvpn if [ -n "$(uci -q changes openvpn)" ]; then + uci -q commit openvpn logger -t "OMR-VPS" "OpenVPN restart..." /etc/init.d/openvpn restart fi @@ -1828,21 +1866,43 @@ _set_config_from_vps() { if [ "$vpn" = "openvpn" ]; then openvpn_state=1 fi - uci -q batch <<-EOF >/dev/null - set openvpn.omr.port=$openvpn_port - set openvpn.omr.key="/etc/luci-uploads/client.key" - set openvpn.omr.cert="/etc/luci-uploads/client.crt" - set openvpn.omr.ca="/etc/luci-uploads/ca.crt" - set openvpn.omr.enabled=$openvpn_state - set openvpn.omr.tls_client=1 - set openvpn.omr.client=1 - set openvpn.omr.allow_recursive_routing=1 - EOF - if [ -z "$(uci -q get openvpn.omr.remote | grep $vpsip)" ]; then - uci -q add_list openvpn.omr.remote="$vpsip" + + NBCPU=$(grep -c '^processor' /proc/cpuinfo | tr -d "\n") + if [ "$NBCPU" -gt 1 ] && [ -z "$(uci -q get openvpn.omr2)" ]; then + [ -f /rom/etc/uci-defaults/2020-omr-vpn ] && ./rom/etc/uci-defaults/2020-omr-vpn + [ -f /usr/share/omr-update/2020-omr-vpn ] && ./usr/share/omr-update/2020-omr-vpn + fi + + config_load openvpn + if [ "$(uci -q get openmptcprouter.settings.openvpn_lb)" = "0" ]; then + config_foreach _set_openvpn_server openvpn "enabled" "0" + uci -q set openvpn.omr.enabled=$openvpn_state + else + config_foreach _set_openvpn_server openvpn "enabled" "$openvpn_state" + fi + config_foreach _set_openvpn_server openvpn "key" "/etc/luci-uploads/client.key" + config_foreach _set_openvpn_server openvpn "cert" "/etc/luci-uploads/client.crt" + config_foreach _set_openvpn_server openvpn "ca" "/etc/luci-uploads/ca.crt" + config_foreach _set_openvpn_server openvpn "tls_client" "1" + config_foreach _set_openvpn_server openvpn "client" "1" + config_foreach _set_openvpn_server openvpn "allow_recursive_routing" "1" + + #uci -q batch <<-EOF >/dev/null + # set openvpn.omr.port=$openvpn_port + # set openvpn.omr.key="/etc/luci-uploads/client.key" + # set openvpn.omr.cert="/etc/luci-uploads/client.crt" + # set openvpn.omr.ca="/etc/luci-uploads/ca.crt" + # set openvpn.omr.enabled=$openvpn_state + # set openvpn.omr.tls_client=1 + # set openvpn.omr.client=1 + # set openvpn.omr.allow_recursive_routing=1 + #EOF + if [ "$(uci -q get openvpn.omr.remote)" != "127.0.0.1" ]; then + config_foreach _set_openvpn_server openvpn "remote" "$vpsip" + #uci -q set openvpn.omr.remote="$vpsip" fi - uci -q commit openvpn if [ -n "$(uci -q changes openvpn)" ]; then + uci -q commit openvpn logger -t "OMR-VPS" "OpenVPN restart..." /etc/init.d/openvpn restart fi @@ -1864,8 +1924,8 @@ _set_config_from_vps() { if [ "$(uci -q get mlvpn.general.host)" != "127.0.0.1" ]; then uci -q set mlvpn.general.host="$vpsip" fi - uci -q commit mlvpn if [ -n "$(uci -q changes mlvpn)" ]; then + uci -q commit mlvpn logger -t "OMR-VPS" "MLVPN restart..." /etc/init.d/mlvpn restart fi @@ -1888,8 +1948,8 @@ _set_config_from_vps() { if [ "$(uci -q get dsvpn.vpn.host)" != "127.0.0.1" ]; then uci -q set dsvpn.vpn.host="$vpsip" fi - uci -q commit dsvpn if [ -n "$(uci -q changes dsvpn)" ]; then + uci -q commit dsvpn logger -t "OMR-VPS" "DSVPN restart..." /etc/init.d/dsvpn restart fi @@ -1959,9 +2019,9 @@ _set_config_from_vps() { uci -q batch <<-EOF >/dev/null set network.omr6in4.ip6addr="$omr6in4_vps_remoteip" set network.omr6in4.gateway="$omr6in4_vps_localip" - commit network EOF if [ -n "$(uci -q changes network)" ]; then + uci -q commit network /etc/init.d/network reload sleep 6 fi diff --git a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn index 789e47d21..513eed491 100755 --- a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn +++ b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn @@ -30,54 +30,6 @@ if [ "$(uci -q get network.omrvpn.txqueuelen)" = "1000" ]; then EOF fi -if [ "$(uci -q get openvpn.omr.proto)" != "tcp-client" ]; then - uci -q batch <<-EOF >/dev/null - set openvpn.omr=openvpn - set openvpn.omr.dev=tun0 - set openvpn.omr.port=65301 - set openvpn.omr.cipher=AES-256-GCM - set openvpn.omr.proto=tcp-client - set openvpn.omr.auth_nocache=1 - set openvpn.omr.client=1 - set openvpn.omr.tls_client=1 - set openvpn.omr.reneg_sec=0 - set openvpn.omr.allow_recursive_routing=1 - set openvpn.omr.sndbuf=0 - set openvpn.omr.rcvbuf=0 - set openvpn.omr.route_delay=5 - set openvpn.omr.disable_dco=1 - set openvpn.omr.ping_restart=60 - commit openvpn - EOF -fi -if [ -z "$(uci -q get openvpn.omr.disable_dco)" ]; then - uci -q batch <<-EOF >/dev/null - set openvpn.omr.disable_dco=1 - commit openvpn - EOF -fi -if [ -z "$(uci -q get openvpn.omr.ping_restart)" ]; then - uci -q batch <<-EOF >/dev/null - set openvpn.omr.ping_restart=60 - commit openvpn - EOF -fi -if [ -z "$(uci -q get openvpn.omr.tun_mtu)" ]; then - uci -q batch <<-EOF >/dev/null - set openvpn.omr.tun_mtu=1420 - commit openvpn - EOF -fi - - -uci -q delete openvpn.omr.secret -uci -q delete openvpn.omr.ncp_disable=0 - -#if [ "$(uci -q get openvpn.omr.com_lzo)" = "" ]; then -# uci -q batch <<-EOF >/dev/null -# set openvpn.omr.comp_lzo=adaptive -# EOF -#fi if [ "$(uci -q get ipsec.ipsec.password)" = "myvpn" ]; then uci -q batch <<-EOF >/dev/null set ipsec.ipsec.enabled='0' @@ -86,6 +38,7 @@ if [ "$(uci -q get ipsec.ipsec.password)" = "myvpn" ]; then chmod u+x /etc/init.d/ipsec fi + if [ "$(uci -q get dsvpn.vpn)" = "" ]; then uci -q batch <<-EOF >/dev/null set dsvpn.vpn=dsvpn @@ -185,5 +138,70 @@ if [ "$(uci -q get openmptcprouter.settings.vpn)" = "" ]; then EOF fi +if [ "$(uci -q get openvpn.omr.proto)" != "tcp-client" ] || [ -z "$(uci -q get openvpn.omr.disable_dco)" ] || [ -z "$(uci -q get openvpn.omr.ping_restart)" ] || [ -z "$(uci -q get openvpn.omr.tun_mtu)" ]; then + uci -q batch <<-EOF >/dev/null + set openvpn.omr=openvpn + set openvpn.omr.dev=tun0 + set openvpn.omr.port=65301 + set openvpn.omr.cipher=AES-256-GCM + set openvpn.omr.proto=tcp-client + set openvpn.omr.auth_nocache=1 + set openvpn.omr.client=1 + set openvpn.omr.tls_client=1 + set openvpn.omr.reneg_sec=0 + set openvpn.omr.allow_recursive_routing=1 + set openvpn.omr.sndbuf=0 + set openvpn.omr.rcvbuf=0 + set openvpn.omr.route_delay=5 + set openvpn.omr.disable_dco=1 + set openvpn.omr.ping_restart=60 + set openvpn.omr.tun_mtu=1420 + delete openvpn.omr.secret + delete openvpn.omr.ncp_disable=0 + commit openvpn + EOF +fi +NBCPU=$(grep -c '^processor' /proc/cpuinfo | tr -d "\n") +if [ "$NBCPU" -gt 1 ] && [ -z "$(uci -q get openvpn.omr2)" ]; then + [ "$NBCPU" -gt 4 ] && NBCPU=4 + for c in $(seq 2 $NBCPU); do + uci -q batch <<-EOF >/dev/null + set openvpn.omr$c=openvpn + set openvpn.omr$c.dev=tun$((c-1)) + set openvpn.omr$c.port=65301 + set openvpn.omr$c.cipher=AES-256-GCM + set openvpn.omr$c.proto=tcp-client + set openvpn.omr$c.auth_nocache=1 + set openvpn.omr$c.client=1 + set openvpn.omr$c.tls_client=1 + set openvpn.omr$c.reneg_sec=0 + set openvpn.omr$c.allow_recursive_routing=1 + set openvpn.omr$c.sndbuf=0 + set openvpn.omr$c.rcvbuf=0 + set openvpn.omr$c.route_delay=5 + set openvpn.omr$c.disable_dco=1 + set openvpn.omr$c.ping_restart=60 + set openvpn.omr$c.tun_mtu=1420 + del_list firewall.zone_vpn.device=tun$((c-1)) + add_list firewall.zone_vpn.device=tun$((c-1)) + EOF + done + uci -q commit openvpn + uci -q commit firewall + uci set -q openmptcprouter.vps.get_config="1" + uci -q set openmptcprouter.settings.openvpn_lb="0" + uci -q commit openmptcprouter +fi + + +# This must not be enabled, this break everything +#if [ "$(uci -q get openvpn.omr.com_lzo)" = "" ]; then +# uci -q batch <<-EOF >/dev/null +# set openvpn.omr.comp_lzo=adaptive +# EOF +#fi + + + rm -f /tmp/luci-indexcache exit 0 diff --git a/openmptcprouter/files/etc/uci-defaults/2093-opkg b/openmptcprouter/files/etc/uci-defaults/2093-opkg index 4cad586db..cded7f80a 100755 --- a/openmptcprouter/files/etc/uci-defaults/2093-opkg +++ b/openmptcprouter/files/etc/uci-defaults/2093-opkg @@ -1,19 +1,37 @@ #!/bin/sh source /etc/os-release if [ "$ID" = "openmptcprouter" ]; then - cat > "/etc/opkg/customfeeds.conf" <<-EOF - src/gz openwrt_luci https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/luci - src/gz openwrt_packages https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/packages - src/gz openwrt_base https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/base - src/gz openwrt_routing https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/routing - src/gz openwrt_telephony https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/telephony - EOF - TARGET="$(cat /etc/banner | awk '/TARGET/ {print $2}')" - cat > "/etc/opkg/distfeeds.conf" <<-EOF - src/gz openmptcprouter_core https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/targets/${OPENWRT_BOARD}/packages - src/gz openmptcprouter_base https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/base - src/gz openmptcprouter_luci https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/luci - src/gz openmptcprouter_openmptcprouter https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/openmptcprouter - src/gz openmptcprouter_packages https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/packages - EOF + if [ -f /etc/opkg/customfeeds.conf ]; then + cat > "/etc/opkg/customfeeds.conf" <<-EOF + src/gz openwrt_luci https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/luci + src/gz openwrt_packages https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/packages + src/gz openwrt_base https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/base + src/gz openwrt_routing https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/routing + src/gz openwrt_telephony https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/telephony + EOF + TARGET="$(cat /etc/banner | awk '/TARGET/ {print $2}')" + cat > "/etc/opkg/distfeeds.conf" <<-EOF + src/gz openmptcprouter_core https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/targets/${OPENWRT_BOARD}/packages + src/gz openmptcprouter_base https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/base + src/gz openmptcprouter_luci https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/luci + src/gz openmptcprouter_openmptcprouter https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/openmptcprouter + src/gz openmptcprouter_packages https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/packages + EOF + elif [ -f /etc/apk/repositories.d/distfeeds.list ]; then + cat > "/etc/apk/repositories.d/customfeeds.list" <<-EOF + https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/luci/packages.adb + https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/packages/packages.adb + https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/base/packages.adb + https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/routing/packages.adb + https://packages.openmptcprouter.com/${VERSION_ID}/${OPENWRT_ARCH}/telephony/packages.adb + EOF + TARGET="$(cat /etc/banner | awk '/TARGET/ {print $2}')" + cat > "/etc/apk/repositories.d/distfeeds.list" <<-EOF + https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/targets/${OPENWRT_BOARD}/packages/packages.adb + https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/base/packages.adb + https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/luci/packages.adb + https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/openmptcprouter/packages.adb + https://download.openmptcprouter.com/release/${VERSION_ID}/${TARGET}/packages/${OPENWRT_ARCH}/packages/packages.adb + EOF + fi fi \ No newline at end of file