Steer: проверка VPN ждёт, пока ядро поднимет туннель, а не только появления устройства
Устройство туннеля ядро 2.0 создаёт сразу, до выбора узла и рукопожатия: единственная попытка curl попадала в «подключаемся», и после «Применить» рабочий туннель объявлялся мёртвым — ядро пускало сервисы напрямую до прохода сторожа. Теперь ожидание up из steer status (до 90 с) и три попытки трафика; причина отказа — словами. v2.16 Committed-by: agy-cli (autonomous, run 96)
This commit is contained in:
1 parent
5ba242ead1
commit
83969aa15f
1 file changed
+20
-2
+20
-2
@@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Version: 2.15
|
# Version: 2.16
|
||||||
set -e
|
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"
|
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
|
umask 022
|
||||||
|
|
||||||
CONF="/etc/config/zapret"
|
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"
|
ZM_SCRIPT_URL="https://raw.githubusercontent.com/StressOzz/Zapret-Manager/refs/heads/main/ZapretManager_LuCI.sh"
|
||||||
GH_RAW="https://raw.githubusercontent.com"
|
GH_RAW="https://raw.githubusercontent.com"
|
||||||
GH_MAIN="https://github.com"
|
GH_MAIN="https://github.com"
|
||||||
@@ -9625,13 +9625,31 @@ _st_vpn_check() {
|
|||||||
echo "[FAIL] VPN: ни один узел подписки не поднялся — проверьте задержку узлов на вкладке «Подписка»"
|
echo "[FAIL] VPN: ни один узел подписки не поднялся — проверьте задержку узлов на вкладке «Подписка»"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
# Устройство туннеля ядро 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)"
|
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')"
|
ip="$(echo "$tr" | sed -n 's/^ip=//p')"; loc="$(echo "$tr" | sed -n 's/^loc=//p')"
|
||||||
if [ -n "$ip" ]; then
|
if [ -n "$ip" ]; then
|
||||||
echo "[ OK ] VPN: трафик идёт через узел подписки (выход $ip${loc:+, $loc})"
|
echo "[ OK ] VPN: трафик идёт через узел подписки (выход $ip${loc:+, $loc})"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
w=$((w + 1)); [ "$w" -lt 3 ] && sleep 5
|
||||||
|
done
|
||||||
|
if [ "$STL_UP" = true ]; then
|
||||||
echo "[FAIL] VPN: туннель поднят, но трафик через него не идёт"
|
echo "[FAIL] VPN: туннель поднят, но трафик через него не идёт"
|
||||||
|
else
|
||||||
|
echo "[FAIL] VPN: ни один выбранный узел не ответил за 90 с — проверьте задержку узлов на вкладке «Подписка»"
|
||||||
|
fi
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user