From 34dca22728a06b6d5a6630c36fa9678fb2a75206 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Wed, 23 Aug 2023 16:24:41 +0200 Subject: [PATCH 1/9] Remove compilation of 5.15 kernel image --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 73ea5f1b7..150ce71da 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: OMR_TARGET: [bpi-r1, bpi-r2, bpi-r64, rpi2, rpi4, wrt32x, espressobin, r2s, rpi3, wrt3200acm, x86, x86_64, ubnt-erx, r4s, r7800, rutx, r5s, qnap-301w] - OMR_KERNEL: [5.4, 5.15, 6.1] + OMR_KERNEL: [5.4, 6.1] runs-on: ubuntu-latest continue-on-error: true From 051577195e7173e744735b7afd39d943ec3ea277 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 24 Aug 2023 14:36:42 +0200 Subject: [PATCH 2/9] Add possibility to send mail when server or proxy is down/up --- .../luasrc/model/cbi/omr-tracker.lua | 14 ++++ omr-tracker/files/bin/omr-tracker-server | 76 ++++++++++++++++++- omr-tracker/files/bin/omr-tracker-ss | 36 +++++++++ omr-tracker/files/bin/omr-tracker-v2ray | 37 +++++++++ omr-tracker/files/etc/config/omr-tracker | 4 +- 5 files changed, 162 insertions(+), 5 deletions(-) diff --git a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua index bd83a2035..d81df88be 100644 --- a/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua +++ b/luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua @@ -41,6 +41,13 @@ o.default = "0" o.datatype = "range(0, 100)" o.rmempty = false +o = s:option(Flag, "mail_alert", translate("Mail alert"), translate("Send a mail when connection state change")) +o.optional = false +o.rmempty = false +o.default = false +o.disabled = 0 +o.enabled = 1 + o = s:option(DynamicList, "hosts", translate("Hosts"), translate("IPs or domains must be available over http")) o.placeholder = "bing.com" o.default = { "bing.com", "google.com" } @@ -84,6 +91,13 @@ o.default = "0" o.datatype = "range(0, 100)" o.rmempty = false +o = s:option(Flag, "mail_alert", translate("Mail alert"), translate("Send a mail when connection state change")) +o.optional = false +o.rmempty = false +o.default = false +o.disabled = 0 +o.enabled = 1 + s = m:section(TypedSection, "defaults", translate("Defaults Settings"), translate("OMR-Tracker create needed routes and detect when a connection is down or up")) s.anonymous = true diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index a25bf9055..b00e142bb 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -91,7 +91,7 @@ _check_master() { del openvpn.omr.remote add_list openvpn.omr.remote=$ip commit openvpn - set openmptcprouter.vps.current='1' + set openmptcprouter.${name}.current='1' commit openmptcprouter EOF /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null @@ -106,15 +106,49 @@ _check_master() { fi config_load shadowsocks-libev config_foreach _enable_redir ss_redir + OMR_TRACKER_STATUS_MSG="Answer to ping and to API check" + mail_alert="$(uci -q get omr-tracker.server.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is UP\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_up)" + [ -n "$script_alert_down" ] && eval $script_alert_up count=$((count+1)) else logger -t "OMR-Tracker-Server" "Master server ${name} down ($ip)" + OMR_TRACKER_STATUS_MSG="No answer to ping and API check" uci -q batch <<-EOF >/dev/null - set openmptcprouter.vps.current='0' + set openmptcprouter.${name}.current='0' commit openmptcprouter EOF config_load shadowsocks-libev config_foreach _disable_redir ss_redir + mail_alert="$(uci -q get omr-tracker.server.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is down\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)" + [ -n "$script_alert_down" ] && eval $script_alert_down fi countips=$((countips+1)) } @@ -169,7 +203,7 @@ _check_backup() { del openvpn.omr.remote add_list openvpn.omr.remote=$ip commit openvpn - set openmptcprouter.vps.current='1' + set openmptcprouter.${name}.current='1' commit openmptcprouter EOF /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null @@ -185,14 +219,48 @@ _check_backup() { fi config_load shadowsocks-libev config_foreach _enable_redir ss_redir + OMR_TRACKER_STATUS_MSG="Answer to ping and to API check" + mail_alert="$(uci -q get omr-tracker.server.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is UP\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_up)" + [ -n "$script_alert_down" ] && eval $script_alert_up count=$((count+1)) else uci -q batch <<-EOF >/dev/null - set openmptcprouter.vps.current='0' + set openmptcprouter.${name}.current='0' commit openmptcprouter EOF config_load shadowsocks-libev config_foreach _disable_redir ss_redir + OMR_TRACKER_STATUS_MSG="No answer to ping and to API check" + mail_alert="$(uci -q get omr-tracker.server.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Server ${name}/g" -e "s/%DEVICE%/${ip}/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: Server ${name} (${ip}) is down\n. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)" + [ -n "$script_alert_down" ] && eval $script_alert_down fi countips=$((countips+1)) } diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index ad12bdf13..b0d7e2ab4 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -83,8 +83,25 @@ while true; do nocontact="" [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.ss_${server})" = "" ] && { _log "Shadowsocks ${server} is up (can contact via http ${host})" + OMR_TRACKER_STATUS_MSG="Shadowsocks ${server} is up (can contact via http ${host})" uci -q set openmptcprouter.omr.ss_${server}="up" uci -q commit openmptcprouter.omr + mail_alert="$(uci -q get omr-tracker.proxy.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Shadowsocks Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Shadowsocks Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: Shadowsocks Proxy is UP." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_up="$(uci -q get omr-tracker.proxy.script_alert_up)" + [ -n "$script_alert_up" ] && eval $script_alert_up } if [ -z "$($IPTABLESSAVE 2>/dev/null | grep :ssr)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then _log "Reload Shadowsocks rules" @@ -99,6 +116,7 @@ while true; do [ "${last}" -ge "${retry}" ] && { if [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ssr)" ]; then _log "Shadowsocks ${server} is down (can't contact via http ${nocontact})" + OMR_TRACKER_STATUS_MSG="Shadowsocks ${server} is down (can't contact via http ${nocontact})" uci -q set openmptcprouter.omr.ss_${server}="down" uci -q commit openmptcprouter.omr [ "$(uci show openmptcprouter.omr | grep ss_ | grep up)" = "" ] && /etc/init.d/shadowsocks-libev rules_down 2> /dev/null @@ -109,7 +127,25 @@ while true; do _ping_server $serverip if [ "$server_ping" = false ]; then _log "Server $server ($serverip) seems down, no answer to ping" + OMR_TRACKER_STATUS_MSG="${OMR_TRACKER_STATUS_MSG} - Server $server ($serverip) seems down, no answer to ping" fi + mail_alert="$(uci -q get omr-tracker.proxy.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Shadowsocks Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/Shadowsocks Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: Shadowsocks Proxy is down\n\nConnection failure of ShadowSocks proxy detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)" + [ -n "$script_alert_down" ] && eval $script_alert_down + if [ "$disabled" != "1" ] && [ "$(pgrep ss-redir)" = "" ] && [ "$(uci -q get shadowsocks-libev.${server}.key)" != "" ]; then _log "Can't find shadowsocks, restart it..." /etc/init.d/shadowsocks-libev restart diff --git a/omr-tracker/files/bin/omr-tracker-v2ray b/omr-tracker/files/bin/omr-tracker-v2ray index 9201d54b0..d63d8b767 100755 --- a/omr-tracker/files/bin/omr-tracker-v2ray +++ b/omr-tracker/files/bin/omr-tracker-v2ray @@ -79,8 +79,26 @@ while true; do nocontact="" [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.v2ray)" = "" ] && { _log "V2Ray is up (can contact via http ${host})" + OMR_TRACKER_STATUS_MSG="V2Ray is up (can contact via http ${host})" uci -q set openmptcprouter.omr.v2ray="up" uci -q commit openmptcprouter.omr + /etc/init.d/openmptcprouter-vps set_vps_firewall + mail_alert="$(uci -q get omr-tracker.proxy.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/V2Ray Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/V2Ray Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: V2Ray Proxy is UP." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_up="$(uci -q get omr-tracker.proxy.script_alert_up)" + [ -n "$script_alert_up" ] && eval $script_alert_up } if [ -z "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep v2r)" ]; then _log "Reload V2Ray rules" @@ -95,8 +113,10 @@ while true; do [ "${last}" -ge "${retry}" ] && { if [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep v2r)" ]; then _log "V2Ray is down (can't contact via http ${nocontact})" + OMR_TRACKER_STATUS_MSG="V2Ray is down (can't contact via http ${nocontact})" uci -q set openmptcprouter.omr.v2ray="down" uci -q commit openmptcprouter.omr + /etc/init.d/openmptcprouter-vps set_vps_firewall /etc/init.d/v2ray rules_down 2> /dev/null _get_ip server_ping=false @@ -104,7 +124,24 @@ while true; do _ping_server $server if [ "$server_ping" = false ]; then _log "Server ($server) seems down, no answer to ping" + OMR_TRACKER_STATUS_MSG="${OMR_TRACKER_STATUS_MSG} - Server ($server) seems down, no answer to ping" fi + mail_alert="$(uci -q get omr-tracker.proxy.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/V2Ray Proxy/g" -e "s/%DEVICE%/V2Ray Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/V2Ray Proxy/g" -e "s/%DEVICE%/V2Ray Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: V2Ray Proxy is down\n\nConnection failure of V2Ray proxy detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)" + [ -n "$script_alert_down" ] && eval $script_alert_down sleep $wait_test fi } diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index f0c485a70..a2666586a 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -42,10 +42,12 @@ config proxy 'proxy' option wait_test '0' option interval_tries '1' option interval '5' + option mail_alert '0' config server 'server' option enabled '1' option tries '3' option timeout '10' option wait_test '0' - option interval '5' \ No newline at end of file + option interval '5' + option mail_alert '0' From a8387400ba1be320e804cd8b7ba7c614062f92f2 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 25 Aug 2023 11:06:40 +0200 Subject: [PATCH 3/9] Add V2Ray Trojan and VMess protocol support --- .../luasrc/controller/openmptcprouter.lua | 16 +++- .../luasrc/view/openmptcprouter/settings.htm | 2 +- .../luasrc/view/openmptcprouter/wizard.htm | 6 +- .../files/etc/init.d/openmptcprouter-vps | 7 +- v2ray-core/files/etc/init.d/v2ray | 94 +++++++++++++++++-- .../files/etc/uci-defaults/3010-omr-v2ray | 28 +++++- 6 files changed, 139 insertions(+), 14 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 12775aa6c..bb680c730 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -675,9 +675,16 @@ function wizard_add() ucic:set("shadowsocks-libev",sectionname,"disabled","0") end end) - elseif default_proxy == "v2ray" and serversnb > 0 and serversnb > disablednb then + elseif (default_proxy == "v2ray" or default_proxy == "v2ray-vmess" or default_proxy == "v2ray-trojan") and serversnb > 0 and serversnb > disablednb then --ucic:set("shadowsocks-libev","sss0","disabled","1") ucic:set("v2ray","main","enabled","1") + if default_proxy == "v2ray" then + ucic:set("v2ray","omrout","protocol","vless") + elseif default_proxy == "v2ray-vmess" then + ucic:set("v2ray","omrout","protocol","vmess") + elseif default_proxy == "v2ray-trojan" then + ucic:set("v2ray","omrout","protocol","trojan") + end ucic:foreach("shadowsocks-libev", "server", function(s) local sectionname = s[".name"] ucic:set("shadowsocks-libev",sectionname,"disabled","1") @@ -733,6 +740,7 @@ function wizard_add() ucic:set("ubond","general","host",server_ip) ucic:set("v2ray","omrout","s_vmess_address",server_ip) ucic:set("v2ray","omrout","s_vless_address",server_ip) + ucic:set("v2ray","omrout","s_trojan_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:set("qos","serverin","srchost",server_ip) @@ -771,6 +779,7 @@ function wizard_add() ucic:set("ubond","general","host",server_ip) ucic:set("v2ray","omrout","s_vmess_address",server_ip) ucic:set("v2ray","omrout","s_vless_address",server_ip) + ucic:set("v2ray","omrout","s_trojan_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:set("qos","serverin","srchost",server_ip) @@ -822,6 +831,7 @@ function wizard_add() 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") + ucic:set("v2ray","omrout","s_trojan_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") @@ -832,6 +842,7 @@ function wizard_add() 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") + ucic:set("v2ray","omrout","s_trojan_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") @@ -842,6 +853,7 @@ function wizard_add() 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") + ucic:set("v2ray","omrout","s_trojan_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") @@ -852,6 +864,7 @@ 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") + ucic:set("v2ray","omrout","s_trojan_user_security","chacha20-poly1305") else ucic:set("openmptcprouter","settings","encryption","other") end @@ -892,6 +905,7 @@ function wizard_add() local v2ray_user = luci.http.formvalue("v2ray_user") ucic:set("v2ray","omrout","s_vmess_user_id",v2ray_user) ucic:set("v2ray","omrout","s_vless_user_id",v2ray_user) + ucic:set("v2ray","omrout","s_trojan_user_id",v2ray_user) ucic:save("v2ray") ucic:commit("v2ray") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index 678d1d8e9..a7fe51806 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -298,7 +298,7 @@
- +
checked<% end %>>
diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 28cc694ae..e9c9ba5fb 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -233,12 +233,14 @@

- <%:Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and UDP when V2Ray is enabled.%> + <%:Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and UDP when V2Ray VLESS or VMESS is enabled.%> <%:Only ShadowSocks is supported with server multiple IPs for now.%>
diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 8955b5ff2..162eaade4 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -942,7 +942,7 @@ _vps_firewall_redirect_port() { #uci -q delete firewall.$1 #return fi - [ "$(uci -q get v2ray.main.enabled)" = "0" ] && v2ray="0" + [ "$(uci -q get v2ray.main.enabled)" = "0" ] && [ "$(uci -q get openmptcprouter.omr.v2ray)" != "down" ] && v2ray="0" [ "$proto" = "all" ] && proto="tcp udp" [ "$proto" = "" ] && proto="tcp udp" [ "$src" = "vpn" ] && [ -n "$proto" ] && [ -n "$src_dport" ] && [ "$enabled" != "0" ] && [ "$name" != "Allow-DHCP-Request-VPN" ] && { @@ -1425,14 +1425,17 @@ _set_config_from_vps() { v2ray_port="65228" if ([ -n "$v2ray_key" ] && [ "$v2ray_key" != "$(uci -q get v2ray.omrout.s_vmess_user_id)" ]) || ([ -n "$v2ray_port" ] && [ "$v2ray_port" != "$(uci -q get v2ray.omrout.s_vmess.port)" ]); then uci -q batch <<-EOF >/dev/null + set v2ray.omrout.s_trojan_user_id="$v2ray_key" + set v2ray.omrout.s_trojan_port="$((v2ray_port+1))" set v2ray.omrout.s_vmess_user_id="$v2ray_key" - set v2ray.omrout.s_vmess_port="$v2ray_port" + set v2ray.omrout.s_vmess_port="$((v2ray_port+2))" set v2ray.omrout.s_vless_user_id="$v2ray_key" set v2ray.omrout.s_vless_port="$v2ray_port" EOF if [ "$(uci -q get v2ray.omrout.s_vmess_address)" != "127.0.0.1" ]; then uci -q set v2ray.omrout.s_vmess_address="$vpsip" uci -q set v2ray.omrout.s_vless_address="$vpsip" + uci -q set v2ray.omrout.s_trojan_address="$vpsip" fi uci -q commit v2ray logger -t "OMR-VPS" "V2ray restart..." diff --git a/v2ray-core/files/etc/init.d/v2ray b/v2ray-core/files/etc/init.d/v2ray index 654858c19..c6b29d5fd 100755 --- a/v2ray-core/files/etc/init.d/v2ray +++ b/v2ray-core/files/etc/init.d/v2ray @@ -282,6 +282,14 @@ inbound_section_validate() { 's_vless_default_user_level:uinteger' \ 's_vless_detour_to:string' \ 's_vless_disable_insecure_encryption:bool:0' \ + 's_trojan_client_id:string' \ + 's_trojan_client_alter_id:and(uinteger, max(65535))' \ + 's_trojan_client_email:string' \ + 's_trojan_client_user_level:uinteger' \ + 's_trojan_default_alter_id:and(uinteger, max(65535))' \ + 's_trojan_default_user_level:uinteger' \ + 's_trojan_detour_to:string' \ + 's_trojan_disable_insecure_encryption:bool:0' \ 'ss_network:or("tcp", "kcp", "ws", "http", "domainsocket", "quic")' \ 'ss_security:or("none", "tls")' \ 'ss_tls_server_name:host' \ @@ -368,6 +376,13 @@ outbound_section_validate() { 's_vless_user_security:or("auto", "aes-128-gcm", "chacha20-poly1305", "none")' \ 's_vless_user_encryption:or("auto", "none")' \ 's_vless_user_level:uinteger' \ + 's_trojan_address:host' \ + 's_trojan_port:port' \ + 's_trojan_user_id:string' \ + 's_trojan_user_alter_id:and(uinteger, max(65535))' \ + 's_trojan_user_security:or("auto", "aes-128-gcm", "chacha20-poly1305", "none")' \ + 's_trojan_user_encryption:or("auto", "none")' \ + 's_trojan_user_level:uinteger' \ 'ss_network:or("tcp", "kcp", "ws", "http", "domainsocket", "quic")' \ 'ss_security:or("none", "tls")' \ 'ss_tls_server_name:host' \ @@ -427,12 +442,12 @@ add_v2ray_redirect_rules() { v2ray-rules -f logger -t "v2ray" "v2ray-rules -l ${port} -L ${port} -s $OUTBOUND_SERVERS_V4 --rule-name def --src-default forward --dst-default forward --local-default forward" commandline="-l ${port} -s $OUTBOUND_SERVERS_V4 --rule-name def --src-default forward --dst-default forward --local-default forward" - [ "$(uci -q get v2ray.main_transparent_proxy.redirect_udp)" = "1" ] && commandline="$commandline -L ${port}" + [ "$(uci -q get v2ray.main_transparent_proxy.redirect_udp)" = "1" ] && ([ "$(uci -q get v2ray.omrout.protocol)" = "vless" ] || [ "$(uci -q get v2ray.omrout.protocol)" = "vmess" ]) && commandline="$commandline -L ${port}" v2ray-rules $commandline [ "$(uci -q get v2ray.main.inbounds | grep omr6)" != "" ] && { v2ray-rules6 -f commandline="-l $((port+1)) -L $((port+1)) -s $OUTBOUND_SERVERS_V6 --rule-name def --src-default forward --dst-default forward --local-default forward" - [ "$(uci -q get v2ray.main_transparent_proxy.redirect_udp)" = "1" ] && commandline="$commandline -L ${port+1}" + [ "$(uci -q get v2ray.main_transparent_proxy.redirect_udp)" = "1" ] && ([ "$(uci -q get v2ray.omrout.protocol)" = "vless" ] || [ "$(uci -q get v2ray.omrout.protocol)" = "vmess" ]) && commandline="$commandline -L ${port+1}" v2ray-rules6 $commandline } [ -f /etc/init.d/omr-bypass ] && [ -z "$(pgrep -f omr-bypass)" ] && { @@ -1066,7 +1081,7 @@ add_inbound_setting() { json_close_object # default - if [ -n "$s_vmess_detour_to" ] ; then + if [ -n "$s_vless_detour_to" ] ; then json_add_object "detour" json_add_string "to" "$s_vless_detour_to" json_close_object # detour @@ -1074,6 +1089,45 @@ add_inbound_setting() { json_add_boolean "disableInsecureEncryption" "$s_vless_disable_insecure_encryption" + json_close_object # settings + ;; + "trojan") + json_add_object "settings" + + if [ -n "$s_trojan_client_id" ] ; then + json_add_array "clients" + json_add_object "" + + json_add_string "password" "$s_trojan_client_id" + + test -n "$s_trojan_client_alter_id" && \ + json_add_int "alterId" "$s_trojan_client_alter_id" + test -n "$s_trojan_client_email" && \ + json_add_string "email" "$s_trojan_client_email" + test -n "$s_trojan_client_user_level" && \ + json_add_int "level" "$s_trojan_client_user_level" + + json_close_object + json_close_array # clients + fi + + json_add_object "default" + + test -n "$s_trojan_default_alter_id" && \ + json_add_int "alterId" "$s_trojan_default_alter_id" + test -n "$s_trojan_default_user_level" && \ + json_add_int "level" "$s_trojan_default_user_level" + + json_close_object # default + + if [ -n "$s_trojan_detour_to" ] ; then + json_add_object "detour" + json_add_string "to" "$s_trojan_detour_to" + json_close_object # detour + fi + + json_add_boolean "disableInsecureEncryption" "$s_trojan_disable_insecure_encryption" + json_close_object # settings ;; esac @@ -1535,7 +1589,25 @@ add_outbound_setting() { json_close_object - json_close_array # vlext + json_close_array # vnext + json_close_object # settings + ;; + "trojan") + json_add_object "settings" + + json_add_array "servers" + json_add_object "" + + json_add_string "address" "$s_trojan_address" + append_server_address "$s_trojan_address" + + json_add_int "port" "$s_trojan_port" + + json_add_string "password" "$s_trojan_user_id" + + json_close_object + + json_close_array # trojan json_close_object # settings ;; esac @@ -1806,7 +1878,7 @@ init_transparent_proxy() { TRANSPARENT_PROXY_PORT="$redirect_port" TRANSPARENT_PROXY_USE_TPROXY="$use_tproxy" - if [ "x$redirect_udp" = "x1" ] ; then + if [ "x$redirect_udp" = "x1" ] && [ "$(uci -q get v2ray.omrout.protocol)" = "vless" ]; then TRANSPARENT_PROXY_ADDITION="udp" elif [ "x$redirect_dns" = "x1" ] ; then TRANSPARENT_PROXY_ADDITION="dns" @@ -2115,8 +2187,16 @@ rules_up() { config_load v2ray config_get enabled main enabled "0" [ "$enabled" = "0" ] && return - OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_vless_address)" - OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_vless_address)" + if [ "$(uci -q get v2ray.omrout.protocol)" = "vless" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_vless_address)" + OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_vless_address)" + elif [ "$(uci -q get v2ray.omrout.protocol)" = "vmess" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_vmess_address)" + OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_vmess_address)" + elif [ "$(uci -q get v2ray.omrout.protocol)" = "trojan" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_trojan_address)" + OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_trojan_address)" + fi TRANSPARENT_PROXY_PORT="$(uci -q get v2ray.omr.port)" [ -n "$OUTBOUND_SERVERS_V4" ] || [ -n "$OUTBOUND_SERVERS_V6" ] && { logger -t "v2ray" "Rules UP" diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index 84bfbaa31..2caa7c001 100644 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -36,7 +36,7 @@ if [ -z "$(uci -q get v2ray.main)" ]; then set v2ray.omrout.tag='omrout_tunnel' set v2ray.omrout.protocol='vless' set v2ray.omrout.s_vmess_address='' - set v2ray.omrout.s_vmess_port='65228' + set v2ray.omrout.s_vmess_port='65230' set v2ray.omrout.s_vmess_user_id='' set v2ray.omrout.s_vmess_user_security='none' set v2ray.omrout.s_vmess_user_alter_id='0' @@ -46,6 +46,12 @@ if [ -z "$(uci -q get v2ray.main)" ]; then set v2ray.omrout.s_vless_user_security='none' set v2ray.omrout.s_vless_user_encryption='none' set v2ray.omrout.s_vless_user_alter_id='0' + set v2ray.omrout.s_trojan_address='' + set v2ray.omrout.s_trojan_port='65229' + set v2ray.omrout.s_trojan_user_id='' + set v2ray.omrout.s_trojan_user_security='none' + set v2ray.omrout.s_trojan_user_encryption='none' + set v2ray.omrout.s_trojan_user_alter_id='0' set v2ray.omrout.ss_network='tcp' set v2ray.omrout.ss_security='tls' set v2ray.omrout.ss_tls_allow_insecure='1' @@ -155,4 +161,24 @@ if [ "$(uci -q get v2ray.policy_level_0.conn_idle)" = "2400" ]; then EOF fi +if [ "$(uci -q get v2ray.omrout.s_vmess_port)" = "65228" ]; then + uci -q batch <<-EOF >/dev/null + set v2ray.omrout.s_vmess_port='65230' + commit v2ray + EOF +fi + +if [ "$(uci -q get v2ray.omrout.s_trojan_port)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set v2ray.omrout.s_trojan_address='' + set v2ray.omrout.s_trojan_port='65229' + set v2ray.omrout.s_trojan_user_id='' + set v2ray.omrout.s_trojan_user_security='none' + set v2ray.omrout.s_trojan_user_encryption='none' + set v2ray.omrout.s_trojan_user_alter_id='0' + commit v2ray + EOF +fi + +fi exit 0 \ No newline at end of file From 1e70503fe0312f282b6798d34a87f35858d963b3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 25 Aug 2023 15:39:34 +0200 Subject: [PATCH 4/9] Add V2Ray Socks Protocol support --- .../luasrc/controller/openmptcprouter.lua | 11 ++- .../luasrc/view/openmptcprouter/wizard.htm | 6 +- .../files/etc/init.d/openmptcprouter-vps | 3 + v2ray-core/files/etc/init.d/v2ray | 72 +++++++++++-------- .../files/etc/uci-defaults/3010-omr-v2ray | 17 +++++ 5 files changed, 76 insertions(+), 33 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index bb680c730..0800e1c08 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -675,7 +675,7 @@ function wizard_add() ucic:set("shadowsocks-libev",sectionname,"disabled","0") end end) - elseif (default_proxy == "v2ray" or default_proxy == "v2ray-vmess" or default_proxy == "v2ray-trojan") and serversnb > 0 and serversnb > disablednb then + elseif (default_proxy == "v2ray" or default_proxy == "v2ray-vmess" or default_proxy == "v2ray-trojan" or default_proxy == "v2ray-socks") and serversnb > 0 and serversnb > disablednb then --ucic:set("shadowsocks-libev","sss0","disabled","1") ucic:set("v2ray","main","enabled","1") if default_proxy == "v2ray" then @@ -684,6 +684,8 @@ function wizard_add() ucic:set("v2ray","omrout","protocol","vmess") elseif default_proxy == "v2ray-trojan" then ucic:set("v2ray","omrout","protocol","trojan") + elseif default_proxy == "v2ray-socks" then + ucic:set("v2ray","omrout","protocol","socks") end ucic:foreach("shadowsocks-libev", "server", function(s) local sectionname = s[".name"] @@ -741,6 +743,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_address",server_ip) ucic:set("v2ray","omrout","s_vless_address",server_ip) ucic:set("v2ray","omrout","s_trojan_address",server_ip) + ucic:set("v2ray","omrout","s_socks_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:set("qos","serverin","srchost",server_ip) @@ -780,6 +783,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_address",server_ip) ucic:set("v2ray","omrout","s_vless_address",server_ip) ucic:set("v2ray","omrout","s_trojan_address",server_ip) + ucic:set("v2ray","omrout","s_socks_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:set("qos","serverin","srchost",server_ip) @@ -832,6 +836,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_user_security","none") ucic:set("v2ray","omrout","s_vless_user_security","none") ucic:set("v2ray","omrout","s_trojan_user_security","none") + ucic:set("v2ray","omrout","s_socks_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") @@ -843,6 +848,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") ucic:set("v2ray","omrout","s_trojan_user_security","aes-128-gcm") + ucic:set("v2ray","omrout","s_socks_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") @@ -854,6 +860,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") ucic:set("v2ray","omrout","s_trojan_user_security","aes-128-gcm") + ucic:set("v2ray","omrout","s_socks_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") @@ -865,6 +872,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_user_security","chacha20-poly1305") ucic:set("v2ray","omrout","s_vless_user_security","chacha20-poly1305") ucic:set("v2ray","omrout","s_trojan_user_security","chacha20-poly1305") + ucic:set("v2ray","omrout","s_socks_user_security","chacha20-poly1305") else ucic:set("openmptcprouter","settings","encryption","other") end @@ -906,6 +914,7 @@ function wizard_add() ucic:set("v2ray","omrout","s_vmess_user_id",v2ray_user) ucic:set("v2ray","omrout","s_vless_user_id",v2ray_user) ucic:set("v2ray","omrout","s_trojan_user_id",v2ray_user) + ucic:set("v2ray","omrout","s_socks_user_id",v2ray_user) ucic:save("v2ray") ucic:commit("v2ray") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index e9c9ba5fb..b616b2191 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -236,6 +236,7 @@ <% if nixio.fs.access("/etc/init.d/v2ray") then %><% end %> <% if nixio.fs.access("/etc/init.d/v2ray") then %><% end %> <% if nixio.fs.access("/etc/init.d/v2ray") then %><% end %> + <% if nixio.fs.access("/etc/init.d/v2ray") then %><% end %>
@@ -245,7 +246,7 @@
- + <% if nixio.fs.access("/etc/init.d/shadowsocks-libev") then %>
@@ -256,6 +257,8 @@
+ <% end %> + <% if nixio.fs.access("/etc/init.d/v2ray") then %>
@@ -266,6 +269,7 @@
+ <% end %>
diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 162eaade4..2e8e7177c 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -1425,6 +1425,8 @@ _set_config_from_vps() { v2ray_port="65228" if ([ -n "$v2ray_key" ] && [ "$v2ray_key" != "$(uci -q get v2ray.omrout.s_vmess_user_id)" ]) || ([ -n "$v2ray_port" ] && [ "$v2ray_port" != "$(uci -q get v2ray.omrout.s_vmess.port)" ]); then uci -q batch <<-EOF >/dev/null + set v2ray.omrout.s_socks_user_id="$v2ray_key" + set v2ray.omrout.s_socks_port="$((v2ray_port+1))" set v2ray.omrout.s_trojan_user_id="$v2ray_key" set v2ray.omrout.s_trojan_port="$((v2ray_port+1))" set v2ray.omrout.s_vmess_user_id="$v2ray_key" @@ -1436,6 +1438,7 @@ _set_config_from_vps() { uci -q set v2ray.omrout.s_vmess_address="$vpsip" uci -q set v2ray.omrout.s_vless_address="$vpsip" uci -q set v2ray.omrout.s_trojan_address="$vpsip" + uci -q set v2ray.omrout.s_socks_address="$vpsip" fi uci -q commit v2ray logger -t "OMR-VPS" "V2ray restart..." diff --git a/v2ray-core/files/etc/init.d/v2ray b/v2ray-core/files/etc/init.d/v2ray index c6b29d5fd..671aad1dd 100755 --- a/v2ray-core/files/etc/init.d/v2ray +++ b/v2ray-core/files/etc/init.d/v2ray @@ -290,6 +290,8 @@ inbound_section_validate() { 's_trojan_default_user_level:uinteger' \ 's_trojan_detour_to:string' \ 's_trojan_disable_insecure_encryption:bool:0' \ + 's_socks_client_id:string' \ + 's_socks_client_email:string:"openmptcprouter"' \ 'ss_network:or("tcp", "kcp", "ws", "http", "domainsocket", "quic")' \ 'ss_security:or("none", "tls")' \ 'ss_tls_server_name:host' \ @@ -383,6 +385,10 @@ outbound_section_validate() { 's_trojan_user_security:or("auto", "aes-128-gcm", "chacha20-poly1305", "none")' \ 's_trojan_user_encryption:or("auto", "none")' \ 's_trojan_user_level:uinteger' \ + 's_socks_address:host' \ + 's_socks_port:port' \ + 's_socks_user_id:string' \ + 's_socks_email:string:openmptcprouter' \ 'ss_network:or("tcp", "kcp", "ws", "http", "domainsocket", "quic")' \ 'ss_security:or("none", "tls")' \ 'ss_tls_server_name:host' \ @@ -1003,6 +1009,14 @@ add_inbound_setting() { json_close_object json_close_array # accounts fi + if [ -n "$s_socks_client_id" ] ; then + json_add_array "accounts" + json_add_object "" + json_add_string "user" "$s_socks_email" + json_add_string "pass" "$s_socks_client_id" + json_close_object + json_close_array # accounts + fi json_add_boolean "udp" "$s_socks_udp" @@ -1503,36 +1517,6 @@ add_outbound_setting() { json_add_boolean "ota" "$s_shadowsocks_ota" json_close_object - json_close_array # servers - json_close_object # settings - ;; - "socks") - json_add_object "settings" - json_add_array "servers" - - json_add_object "" - - json_add_string "address" "$s_socks_server_address" - append_server_address "$s_socks_server_address" - - json_add_int "port" "$s_socks_server_port" - - if [ -n "$s_socks_account_user" ] ; then - json_add_array "users" - json_add_object "" - - json_add_string "user" "$s_socks_account_user" - json_add_string "pass" "$s_socks_account_pass" - - test -n "$s_socks_user_level" && \ - json_add_int "level" "$s_socks_user_level" - - json_close_object - json_close_array # users - fi - - json_close_object - json_close_array # servers json_close_object # settings ;; @@ -1610,6 +1594,29 @@ add_outbound_setting() { json_close_array # trojan json_close_object # settings ;; + "socks") + json_add_object "settings" + + json_add_array "servers" + json_add_object "" + + json_add_string "address" "$s_socks_address" + append_server_address "$s_socks_address" + + json_add_int "port" "$s_socks_port" + + json_add_array "users" + json_add_object "" + json_add_string "pass" "$s_socks_user_id" + json_add_string "user" "$s_socks_email" + json_close_object + json_close_array # users + + json_close_object + + json_close_array # socks + json_close_object # settings + ;; esac json_add_object "streamSettings" @@ -1878,7 +1885,7 @@ init_transparent_proxy() { TRANSPARENT_PROXY_PORT="$redirect_port" TRANSPARENT_PROXY_USE_TPROXY="$use_tproxy" - if [ "x$redirect_udp" = "x1" ] && [ "$(uci -q get v2ray.omrout.protocol)" = "vless" ]; then + if [ "x$redirect_udp" = "x1" ] && [ "$(uci -q get v2ray.omrout.protocol)" != "trojan" ] && [ "$(uci -q get v2ray.omrout.protocol)" != "socks" ]; then TRANSPARENT_PROXY_ADDITION="udp" elif [ "x$redirect_dns" = "x1" ] ; then TRANSPARENT_PROXY_ADDITION="dns" @@ -2196,6 +2203,9 @@ rules_up() { elif [ "$(uci -q get v2ray.omrout.protocol)" = "trojan" ]; then OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_trojan_address)" OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_trojan_address)" + elif [ "$(uci -q get v2ray.omrout.protocol)" = "socks" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get v2ray.omrout.s_socks_address)" + OUTBOUND_SERVERS_V6="$(uci -q get v2ray.omrout.s_socks_address)" fi TRANSPARENT_PROXY_PORT="$(uci -q get v2ray.omr.port)" [ -n "$OUTBOUND_SERVERS_V4" ] || [ -n "$OUTBOUND_SERVERS_V6" ] && { diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index 2caa7c001..847a6e8d7 100644 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -52,6 +52,12 @@ if [ -z "$(uci -q get v2ray.main)" ]; then set v2ray.omrout.s_trojan_user_security='none' set v2ray.omrout.s_trojan_user_encryption='none' set v2ray.omrout.s_trojan_user_alter_id='0' + set v2ray.omrout.s_socks_address='' + set v2ray.omrout.s_socks_port='65229' + set v2ray.omrout.s_socks_user_id='' + set v2ray.omrout.s_socks_user_security='none' + set v2ray.omrout.s_socks_user_encryption='none' + set v2ray.omrout.s_socks_user_alter_id='0' set v2ray.omrout.ss_network='tcp' set v2ray.omrout.ss_security='tls' set v2ray.omrout.ss_tls_allow_insecure='1' @@ -179,6 +185,17 @@ if [ "$(uci -q get v2ray.omrout.s_trojan_port)" = "" ]; then commit v2ray EOF fi +if [ "$(uci -q get v2ray.omrout.s_socks_port)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set v2ray.omrout.s_socks_address='' + set v2ray.omrout.s_socks_port='65229' + set v2ray.omrout.s_socks_user_id='' + set v2ray.omrout.s_socks_user_security='none' + set v2ray.omrout.s_socks_user_encryption='none' + set v2ray.omrout.s_socks_user_alter_id='0' + commit v2ray + EOF +fi fi exit 0 \ No newline at end of file From 3d61e812bee27f3afa5416b327039ef6eaab4e74 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 25 Aug 2023 15:40:03 +0200 Subject: [PATCH 5/9] Fix errors in cake autorate --- .../root/usr/share/sqm-autorate/cake-autorate.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh index c81ead0fa..0b6a71927 100755 --- a/luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh +++ b/luci-app-sqm-autorate/root/usr/share/sqm-autorate/cake-autorate.sh @@ -45,7 +45,7 @@ declare -A proc_pids ## Disable globbing (expansion of *). set -f ## Forbid using unset variables. -set -u +#set -u ## The exit status of a pipeline is the status of the last ## command to exit with a non-zero status, or zero if no ## command exited with a non-zero status. @@ -2254,7 +2254,7 @@ do log_msg "DEBUG" "Warning: no reflector response within: ${stall_detection_timeout_s} seconds. Checking loads." - log_msg "DEBUG" "load check is: (( ${achieved_rate_kbps[dl]} kbps > ${connection_stall_thr_kbps} kbps for download && ${achieved_rate_kbps[ul]} kbps > ${connection_stall_thr_kbps} kbps for upload ))" + #log_msg "DEBUG" "load check is: (( ${achieved_rate_kbps[dl]} kbps > ${connection_stall_thr_kbps} kbps for download && ${achieved_rate_kbps[ul]} kbps > ${connection_stall_thr_kbps} kbps for upload ))" # non-zero load so despite no reflector response within stall interval, the connection not considered to have stalled # and therefore resume normal operation From e9057e9a37fbaf267711b40ad6b12d32082cbd7b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 25 Aug 2023 15:40:31 +0200 Subject: [PATCH 6/9] Fix shadowsocks password support --- shadowsocks-libev/files/shadowsocks-libev.init | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/shadowsocks-libev/files/shadowsocks-libev.init b/shadowsocks-libev/files/shadowsocks-libev.init index 094e1fdbd..7c7e39d6e 100644 --- a/shadowsocks-libev/files/shadowsocks-libev.init +++ b/shadowsocks-libev/files/shadowsocks-libev.init @@ -27,14 +27,17 @@ ss_mkjson_server_conf() { ss_mkjson_server_conf_() { [ -n "$server_port" ] || return 1 + [ -z "$method" ] || json_add_string method "$method" [ -z "$server" ] || json_add_string server "$server" json_add_int server_port "$server_port" - [ -z "$method" ] || json_add_string method "$method" [ -z "$key" ] || { key="$(echo $key | sed 's/+/-/g; s/\//_/g;')" json_add_string key "$key" } - [ -z "$password" ] || json_add_string password "$password" + [ -z "$password" ] || { + password="$(echo $password | sed 's/+/-/g; s/\//_/g;')" + json_add_string password "$password" + } [ -z "$password" ] && [ -z "$key" ] && return 1 [ -z "$plugin" ] || json_add_string plugin "$plugin" [ -z "$plugin_opts" ] || json_add_string plugin_opts "$plugin_opts" From 6e70daf2e6055728a9d616c4dee65a4030fe73ee Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 25 Aug 2023 15:41:17 +0200 Subject: [PATCH 7/9] Resolve domain in omr-tracker-server in case of server IP change --- omr-tracker/files/bin/omr-tracker-server | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index b00e142bb..9990647fb 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -65,6 +65,8 @@ _check_master() { [ "$master" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { set_ip() { local ip=$1 + ipresolve="$(resolveip -4 $ip | head -n 1)" + [ -z "$ipresolve" ] && ip="$ipresolve" #_ping_server $ip _check_server $ip $port if [ "$server_ping" = true ]; then @@ -177,6 +179,9 @@ _check_backup() { config_get disabled $1 disabled [ "$backup" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { set_ip() { + local ip=$1 + ipresolve="$(resolveip -4 $ip | head -n 1)" + [ -z "$ipresolve" ] && ip="$ipresolve" #_ping_server $ip _check_server $ip $port #[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" = "$ip" ] && break From e1d2d0360800392d0564c5d1bf6ea0ec5662b98d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 25 Aug 2023 15:41:44 +0200 Subject: [PATCH 8/9] Fix Glorytun-UDP path settings --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 024195ca8..dd1772d34 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1250,9 +1250,9 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 fi else if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then @@ -1266,9 +1266,9 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 fi else if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then From 844807f25a434629aeab9985c2079567d985764c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Sat, 26 Aug 2023 07:33:46 +0200 Subject: [PATCH 9/9] Fix V2RAY SOCKS port --- v2ray-core/files/etc/uci-defaults/3010-omr-v2ray | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index 847a6e8d7..e72351856 100644 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -53,7 +53,7 @@ if [ -z "$(uci -q get v2ray.main)" ]; then set v2ray.omrout.s_trojan_user_encryption='none' set v2ray.omrout.s_trojan_user_alter_id='0' set v2ray.omrout.s_socks_address='' - set v2ray.omrout.s_socks_port='65229' + set v2ray.omrout.s_socks_port='65231' set v2ray.omrout.s_socks_user_id='' set v2ray.omrout.s_socks_user_security='none' set v2ray.omrout.s_socks_user_encryption='none' @@ -188,7 +188,7 @@ fi if [ "$(uci -q get v2ray.omrout.s_socks_port)" = "" ]; then uci -q batch <<-EOF >/dev/null set v2ray.omrout.s_socks_address='' - set v2ray.omrout.s_socks_port='65229' + set v2ray.omrout.s_socks_port='65231' set v2ray.omrout.s_socks_user_id='' set v2ray.omrout.s_socks_user_security='none' set v2ray.omrout.s_socks_user_encryption='none'