From f6584db4dc42467ae4dcb9851bd7e1a7cad525ad Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 24 Jan 2024 20:08:20 +0100 Subject: [PATCH 1/6] Multiple Shadowsocks-Rust server IP management in wizard --- .../luasrc/controller/openmptcprouter.lua | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b6dc76b0f..b38c1321f 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -257,6 +257,11 @@ function wizard_add() end end + -- Enable/disable IPv6 + local disableipv6 = luci.http.formvalue("enableipv6") or "1" + ucic:set("openmptcprouter","settings","disable_ipv6",disableipv6) + + -- Set interfaces settings local downloadmax = 0 local uploadmax = 0 @@ -393,6 +398,10 @@ function wizard_add() ucic:set("network",intf,"ip6addr",ip6addr:gsub("%s+", "")) ucic:set("network",intf,"ip6gw",ip6gw:gsub("%s+", "")) ucic:set("network",intf,"ipv6","1") + elseif proto ~= "static" and proto ~= "dhcp" and disableipv6 ~= "1" then + ucic:set("network",intf,"ip6addr","") + ucic:set("network",intf,"ip6gw","") + ucic:set("network",intf,"ipv6","1") else ucic:set("network",intf,"ip6addr","") ucic:set("network",intf,"ip6gw","") @@ -521,9 +530,6 @@ function wizard_add() ucic:save("network") ucic:commit("network") - -- Enable/disable IPv6 - local disableipv6 = luci.http.formvalue("enableipv6") or "1" - ucic:set("openmptcprouter","settings","disable_ipv6",disableipv6) --local ut = require "luci.util" --local result = ut.ubus("openmptcprouter", "set_ipv6_state", { disable_ipv6 = disableipv6 }) local ula = luci.http.formvalue("ula") or "" @@ -759,6 +765,7 @@ function wizard_add() ucic:set("openmptcprouter","settings","proxy",default_proxy) ucic:save("openmptcprouter") ucic:save("shadowsocks-libev") + ucic:save("shadowsocks-rust") ucic:save("v2ray") ucic:save("xray") @@ -770,6 +777,14 @@ function wizard_add() ucic:delete("openmptcprouter","omr","ss_" .. sectionname) end end) + ucic:foreach("shadowsocks-rust","server", function(s) + local sectionname = s[".name"] + if sectionname:match("^sss.*") then + ucic:delete("shadowsocks-rust",sectionname,"ip") + ucic:set("shadowsocks-rust",sectionname,"disabled","1") + ucic:delete("openmptcprouter","omr","ss_" .. sectionname) + end + end) local ss_servers_nginx = {} local ss_servers_ha = {} @@ -818,15 +833,21 @@ function wizard_add() if default_proxy == "shadowsocks" and serversnb > disablednb and ssip ~= "" then ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","0") end + ucic:set("shadowsocks-rust","sss" .. nbip,"server",ssip) + if default_proxy == "shadowsocks-rust" and serversnb > disablednb and ssip ~= "" then + ucic:set("shadowsocks-rust","sss" .. nbip,"disabled","0") + end nbip = nbip + 1 if disableipv6 == "1" and nbip > 0 then ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","1") + ucic:set("shadowsocks-rust","sss" .. nbip,"disabled","1") break end end if nbip == 1 then --ucic:set("shadowsocks-libev","sss" .. nbip,"server",server_ip) ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","1") + ucic:set("shadowsocks-rust","sss" .. nbip,"disabled","1") end end k = k + 1 @@ -864,6 +885,10 @@ function wizard_add() if default_proxy == "shadowsocks" and serversnb > disablednb and ssip ~= "" then ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","0") end + ucic:set("shadowsocks-rust","sss" .. nbip,"server",ssip) + if default_proxy == "shadowsocks-rust" and serversnb > disablednb and ssip ~= "" then + ucic:set("shadowsocks-rust","sss" .. nbip,"disabled","0") + end nbip = nbip + 1 if disableipv6 == "1" and nbip > 0 then break @@ -872,6 +897,7 @@ function wizard_add() if nbip == 1 then -- ucic:set("shadowsocks-libev","sss" .. nbip,"server",server_ip) ucic:set("shadowsocks-libev","sss" .. nbip,"disabled","1") + ucic:set("shadowsocks-rust","sss" .. nbip,"disabled","1") end end end @@ -894,6 +920,7 @@ function wizard_add() ucic:save("glorytun-udp") --ucic:commit("glorytun") ucic:save("shadowsocks-libev") + ucic:save("shadowsocks-rust") --ucic:commit("shadowsocks-libev") @@ -1059,6 +1086,8 @@ function wizard_add() ucic:commit("xray") ucic:save("shadowsocks-libev") ucic:commit("shadowsocks-libev") + ucic:save("shadowsocks-rust") + ucic:commit("shadowsocks-rust") -- Set Glorytun settings @@ -1218,6 +1247,7 @@ function wizard_add() -- luci.sys.call("sleep 2") --end luci.sys.call("/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/shadowsocks-rust restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") From 52380b373bac1bfddcd4bcd4f3c0f699d6c85ff1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 24 Jan 2024 20:08:41 +0100 Subject: [PATCH 2/6] Fix OMR-Bypass issue with IPv6 --- omr-bypass/files/etc/init.d/omr-bypass-nft | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/omr-bypass/files/etc/init.d/omr-bypass-nft b/omr-bypass/files/etc/init.d/omr-bypass-nft index a7ebdb39f..a6a8a01ec 100755 --- a/omr-bypass/files/etc/init.d/omr-bypass-nft +++ b/omr-bypass/files/etc/init.d/omr-bypass-nft @@ -584,7 +584,7 @@ _intf_rule() { uci batch <<-EOF set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}=rule set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}.name="omr_dst_bypass_${intf}_rule" - set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}.ipset="omr_dst_bypass_${intf}_4" + set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}.ipset="omr_dst_bypass_${intf}_${ipv46}" set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}.target='MARK' set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}.src='lan' set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}.dest='*' @@ -598,7 +598,7 @@ _intf_rule() { set firewall.omr_dst_bypass_${intf}_dstip_${ipv46}_accept.mark="0x${ipv46}539${count}" set firewall.omr_dst_bypass_${intf}_srcip_${ipv46}=rule set firewall.omr_dst_bypass_${intf}_srcip_${ipv46}.name="omr_dst_bypass_${intf}_srcip" - set firewall.omr_dst_bypass_${intf}_srcip_${ipv46}.ipset="omr_dst_bypass_${intf}_4" + set firewall.omr_dst_bypass_${intf}_srcip_${ipv46}.ipset="omr_dst_bypass_${intf}_${ipv46}" set firewall.omr_dst_bypass_${intf}_srcip_${ipv46}.src='lan' set firewall.omr_dst_bypass_${intf}_srcip_${ipv46}.dest='*' set firewall.omr_dst_bypass_${intf}_srcip_${ipv46}.target='MARK' From 5a3150844b39077ff9cad592c4f076b319d37643 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 24 Jan 2024 20:10:29 +0100 Subject: [PATCH 3/6] Multiple local test management for Shadowsocks-Rust --- omr-tracker/files/etc/init.d/omr-tracker | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 7614ed62c..73410f488 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -212,7 +212,7 @@ _initialize_shadowsocks_tracker() { 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}.local_port=${count} set shadowsocks-libev.tracker_${server}.mode=tcp_and_udp set shadowsocks-libev.tracker_${server}.timeout=600 set shadowsocks-libev.tracker_${server}.fast_open=1 @@ -233,6 +233,7 @@ _initialize_shadowsocks_tracker() { # EOF # /etc/init.d/shadowsocks-libev restart # } + count=$((count+1)) } _initialize_shadowsocks_rust_tracker() { @@ -252,7 +253,7 @@ _initialize_shadowsocks_rust_tracker() { set shadowsocks-rust.tracker_${server}=ss_local set shadowsocks-rust.tracker_${server}.server=$server set shadowsocks-rust.tracker_${server}.local_address="127.0.0.1" - set shadowsocks-rust.tracker_${server}.local_port=1111 + set shadowsocks-rust.tracker_${server}.local_port=${count) set shadowsocks-rust.tracker_${server}.mode=tcp_and_udp set shadowsocks-rust.tracker_${server}.timeout=600 set shadowsocks-rust.tracker_${server}.fast_open=0 @@ -265,6 +266,7 @@ _initialize_shadowsocks_rust_tracker() { logger -t "omr-tracker" "Restart ShadowSocks" /etc/init.d/shadowsocks-rust restart } + count=$((count+1)) } _launch_shadowsocks_tracker() { @@ -406,9 +408,11 @@ start_service() { local ss_enable=0 local ss_rust_enable=0 logger -t "omr-tracker" "Launching..." + count=1111 config_load shadowsocks-libev config_foreach _initialize_shadowsocks_tracker server + count=1111 config_load shadowsocks-rust config_foreach _initialize_shadowsocks_rust_tracker server From 546c06c785302ab106e8cba3e119cb770c446906 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 24 Jan 2024 20:11:18 +0100 Subject: [PATCH 4/6] Check WAN to server test using multiple IPs and fix display bug --- .../files/usr/libexec/rpcd/openmptcprouter | 62 ++++++++++++------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/openmptcprouter-api/files/usr/libexec/rpcd/openmptcprouter b/openmptcprouter-api/files/usr/libexec/rpcd/openmptcprouter index 35948e9e6..b680dce20 100755 --- a/openmptcprouter-api/files/usr/libexec/rpcd/openmptcprouter +++ b/openmptcprouter-api/files/usr/libexec/rpcd/openmptcprouter @@ -889,7 +889,7 @@ function interfaces_status() local master = uci:get("openmptcprouter",s[".name"],"master") or "1" local current = uci:get("openmptcprouter",s[".name"],"current") or "0" for key, value in pairs(serverips) do - serverip = sys.exec('resolveip ' .. value .. ' | head -n 1') + serverip = sys.exec('resolveip ' .. value .. ' | head -n 1 | tr -d "\n"') if serverip ~= "" and (current == "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 "" @@ -904,8 +904,7 @@ function interfaces_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 + elseif 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 @@ -991,7 +990,7 @@ function interfaces_status() mArray.openmptcprouter["vps_admin_error_msg"] = "No result" uci:set("openmptcprouter",s[".name"],"token_error","1") mArray.openmptcprouter["vps_admin_error"] = true - uci:delete("openmptcprouter",s[".name"],"token") + --uci:delete("openmptcprouter",s[".name"],"token") uci:save("openmptcprouter",s[".name"]) uci:commit("openmptcprouter",s[".name"]) end @@ -1477,26 +1476,41 @@ function interfaces_status() local server_ping = "" local server_http = "" --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 ~= "" or gateway6 ~= "") 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"] - end - if serverip ~= "" and uci:get("openmptcprouter", "settings", "disableserverping") ~= "1" then - local server_ping_test = sys.exec("ping -B -w 1 -c 1 -I " .. ifname .. " " .. serverip) - local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) - if server_ping_result ~= "" then - server_ping = "DOWN" - if connectivity == "OK" then - connectivity = "WARNING" - end - else - mArray.openmptcprouter["vps_status"] = "UP" - server_ping = "UP" - latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f5 | cut -d '.' -f1")) - end - end - + if ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and ifname ~= nil and (ipaddr ~= "" or ip6addr ~= "") and connectivity ~= "ERROR" then + if uci:get("openmptcprouter", "settings", "disableserverping") ~= "1" then + uci:foreach("openmptcprouter", "server", function(s) + local serverips = uci:get("openmptcprouter",s[".name"],"ip") or { "" } + local master = uci:get("openmptcprouter",s[".name"],"master") or "1" + local current = uci:get("openmptcprouter",s[".name"],"current") or "0" + if current == "1" then + for key, value in pairs(serverips) do + local serverip = mArray.openmptcprouter["service_addr"] + if serverip == "127.0.0.1" then + serverip = mArray.openmptcprouter["wan_addr"] + end + if gateway ~= "" then + serverip = sys.exec('resolveip -4 ' .. value .. ' | head -n 1') + elseif gateway6 ~= "" then + serverip = sys.exec('resolveip -6 ' .. value .. ' | head -n 1') + end + if serverip ~= "" then + local server_ping_test = sys.exec("ping -B -w 1 -c 1 -I " .. ifname .. " " .. serverip) + local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) + if server_ping_result ~= "" then + server_ping = "DOWN" + if connectivity == "OK" then + connectivity = "WARNING" + end + else + mArray.openmptcprouter["vps_status"] = "UP" + server_ping = "UP" + latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f5 | cut -d '.' -f1")) + end + end + end + end + end) + end if adminport == "" then adminport = "65500" end From 5b5ed0acfe65a1852c03ad291fb2e4b103b81672 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 24 Jan 2024 20:12:39 +0100 Subject: [PATCH 5/6] Update Shadowsocks-Rust default config with another server --- .../files/shadowsocks-rust.config | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/shadowsocks-rust/files/shadowsocks-rust.config b/shadowsocks-rust/files/shadowsocks-rust.config index 8dfa5197a..f488f9b60 100644 --- a/shadowsocks-rust/files/shadowsocks-rust.config +++ b/shadowsocks-rust/files/shadowsocks-rust.config @@ -12,6 +12,20 @@ config ss_redir hi1 option ipv6_first 1 option no_delay 0 +config ss_redir hi2 + option server 'sss1' + option local_address '::' + option local_port '1100' + option mode 'tcp_and_udp' + option timeout '1000' + option fast_open 0 + option verbose 0 + option syslog 1 + option reuse_port 0 + option mptcp 1 + option ipv6_first 1 + option no_delay 0 + config ss_rules 'ss_rules' option disabled 0 option redir_tcp 'hi1' @@ -28,6 +42,14 @@ config server 'sss0' option method '2022-blake3-aes-256-gcm' option obfs 0 +config server 'sss1' + option disabled 1 + option server '192.168.1.3' + option server_port '65280' + option password '' + option method '2022-blake3-aes-256-gcm' + option obfs 0 + config ss_tunnel 'dns' option disabled 1 option mode 'tcp_and_udp' From 24903788d1f16c1182caa4e55211b95bb6800948 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 24 Jan 2024 20:12:59 +0100 Subject: [PATCH 6/6] Update anonymous config script --- luci-app-openmptcprouter/root/bin/anonymous_config.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/luci-app-openmptcprouter/root/bin/anonymous_config.sh b/luci-app-openmptcprouter/root/bin/anonymous_config.sh index 65c0813a2..696e5c750 100755 --- a/luci-app-openmptcprouter/root/bin/anonymous_config.sh +++ b/luci-app-openmptcprouter/root/bin/anonymous_config.sh @@ -14,10 +14,15 @@ uci show | \ -e "/openvpn\.omr\.remote=/s/......$/xxxxxx'/" \ -e "/shadowsocks-libev\.sss.*\.server=/s/......$/xxxxxx'/" \ -e "/shadowsocks-libev\.sss.*\.key=/s/......$/xxxxxx'/" \ + -e "/shadowsocks-rust\.sss.*\.server=/s/......$/xxxxxx'/" \ + -e "/shadowsocks-rust\.sss.*\.key=/s/......$/xxxxxx'/" \ -e "/external_ip=/s/......$/xxxxxx'/" \ -e "/obfs_host=/s/..........$/xxxxxx'/" \ -e "/vmess_address=/s/......$/xxxxxx'/" \ -e "/vless_address=/s/......$/xxxxxx'/" \ + -e "/trojan_address=/s/......$/xxxxxx'/" \ + -e "/socks_address=/s/......$/xxxxxx'/" \ + -e "/vless_reality_address=/s/......$/xxxxxx'/" \ -e "/vpn\.key=/s/......$/xxxxxx'/" \ -e "/vps\.key=/s/......$/xxxxxx'/" \ -e "/wgkey=/s/......$/xxxxxx'/" \