From 83969aa15f7d4c15a777dbb7c57e4fe6e4096cc4 Mon Sep 17 00:00:00 2001 From: xyzmean <163691714+xyzmean@users.noreply.github.com> Date: Sat, 3 Oct 2026 17:14:11 +0300 Subject: [PATCH] =?UTF-8?q?Steer:=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20VPN=20=D0=B6=D0=B4=D1=91=D1=82,=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=8F=D0=B4=D1=80=D0=BE=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BC=D0=B5=D1=82=20=D1=82=D1=83=D0=BD=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C,=20=D0=B0=20=D0=BD=D0=B5=20=D1=82=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BA=D0=BE=20=D0=BF=D0=BE=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=83=D1=81=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Устройство туннеля ядро 2.0 создаёт сразу, до выбора узла и рукопожатия: единственная попытка curl попадала в «подключаемся», и после «Применить» рабочий туннель объявлялся мёртвым — ядро пускало сервисы напрямую до прохода сторожа. Теперь ожидание up из steer status (до 90 с) и три попытки трафика; причина отказа — словами. v2.16 Committed-by: agy-cli (autonomous, run 96) --- ZapretManager_LuCI.sh | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/ZapretManager_LuCI.sh b/ZapretManager_LuCI.sh index e937fdc..14026c4 100644 --- a/ZapretManager_LuCI.sh +++ b/ZapretManager_LuCI.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Version: 2.15 +# Version: 2.16 set -e GREEN="\033[1;32m"; CYAN="\033[1;36m"; YELLOW="\033[1;33m"; MAGENTA="\033[1;35m"; BLUE="\033[0;34m"; NC="\033[0m"; DGRAY="\033[38;5;244m" @@ -50,7 +50,7 @@ cat > '/opt/zapret-manager-luci/backend.sh.zm-new' << 'ZM_INSTALLER_EOF' umask 022 CONF="/etc/config/zapret" -ZM_VERSION="2.15" +ZM_VERSION="2.16" ZM_SCRIPT_URL="https://raw.githubusercontent.com/StressOzz/Zapret-Manager/refs/heads/main/ZapretManager_LuCI.sh" GH_RAW="https://raw.githubusercontent.com" GH_MAIN="https://github.com" @@ -9625,13 +9625,31 @@ _st_vpn_check() { echo "[FAIL] VPN: ни один узел подписки не поднялся — проверьте задержку узлов на вкладке «Подписка»" return 1 fi - tr="$(curl -s --interface "$ST_VPN_OUT" --connect-timeout 5 --max-time 10 https://www.cloudflare.com/cdn-cgi/trace 2>/dev/null)" - ip="$(echo "$tr" | sed -n 's/^ip=//p')"; loc="$(echo "$tr" | sed -n 's/^loc=//p')" - if [ -n "$ip" ]; then - echo "[ OK ] VPN: трафик идёт через узел подписки (выход $ip${loc:+, $loc})" - return 0 + # Устройство туннеля ядро 2.0 создаёт сразу, ещё до выбора узла и рукопожатия, — проверка + # трафика в этот момент попадала в «подключаемся» и объявляла рабочий туннель мёртвым. Ждём, + # пока ядро само скажет «выход поднят» (перебор узлов подписки — до 90 с), и проверяем трафик + # несколькими попытками. + w=0 + while [ "$w" -lt 90 ]; do + stl_state vpn >/dev/null 2>&1 + [ "$STL_UP" = true ] && break + sleep 2; w=$((w + 2)) + done + w=0 + while [ "$w" -lt 3 ]; do + tr="$(curl -s --interface "$ST_VPN_OUT" --connect-timeout 5 --max-time 10 https://www.cloudflare.com/cdn-cgi/trace 2>/dev/null)" + ip="$(echo "$tr" | sed -n 's/^ip=//p')"; loc="$(echo "$tr" | sed -n 's/^loc=//p')" + if [ -n "$ip" ]; then + echo "[ OK ] VPN: трафик идёт через узел подписки (выход $ip${loc:+, $loc})" + return 0 + fi + w=$((w + 1)); [ "$w" -lt 3 ] && sleep 5 + done + if [ "$STL_UP" = true ]; then + echo "[FAIL] VPN: туннель поднят, но трафик через него не идёт" + else + echo "[FAIL] VPN: ни один выбранный узел не ответил за 90 с — проверьте задержку узлов на вкладке «Подписка»" fi - echo "[FAIL] VPN: туннель поднят, но трафик через него не идёт" return 1 }