Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f38aeefcbc | ||
|
|
d0bfb2dc38 |
@@ -1,3 +1,13 @@
|
||||
## v1.2.18: выбранный «свой домен» больше не подменяется соседом
|
||||
|
||||
* Что было: после выбора «ввести свой домен» установщик всё равно брал запасной сайт из подсети.
|
||||
Две причины, обе в моём коде: (1) выбор перезаписывался сырым значением меню (`own:домен`)
|
||||
вместо самого домена; (2) домен проверялся на «TLS 1.3 + HTTP/2» — а до установки на нём ещё нет
|
||||
сертификата, поэтому проверка честно не проходила и срабатывал откат на соседа. Теперь для своего
|
||||
домена проверка TLS не делается (он указывает на этот сервер — установщик сам выпустит
|
||||
сертификат Let's Encrypt), а автоподбор и запасной сайт включаются только если вы НЕ выбрали
|
||||
ничего (автовыбор).
|
||||
|
||||
## v1.2.17: меню маскировки идёт ПЕРВЫМ (меню автора больше не перебивает)
|
||||
|
||||
* Причина, по которой меню не было видно: **меню спрашивал сам установщик** («Свой домен / Сосед /
|
||||
|
||||
+7
-7
@@ -1,9 +1,9 @@
|
||||
# 3X-UI KIT 1.2.17
|
||||
# 3X-UI_autoVPS 1.2.17
|
||||
92e1ba60fa05d85d32e1a2feb2941323255a25a8cc7191fd2c3bbdd5991cfc77 scripts/3x-ui.sh
|
||||
4894afbdca1859bc856a62d7f805c060750af914148a6129d40bf81180d04067 scripts/hysteria2.sh
|
||||
975b421e22425ddeeab83e6816a40ed4239597719ef748bea2e98935e7b379ca scripts/kit.sh
|
||||
# 3X-UI KIT 1.2.18
|
||||
# 3X-UI_autoVPS 1.2.18
|
||||
17f3c107fece72dbbb37ec6d005fcc3d9d311cd844ad79d4df14297d485e0d56 scripts/3x-ui.sh
|
||||
554f77b5faae6bb2b4b3213474a99af9f7034aa170d80b9ea866c418f97757f1 scripts/hysteria2.sh
|
||||
84270d1774532975388cbda2fe8ee6cd8d0a3fb49d7f407d4e216d883068e8a4 scripts/kit.sh
|
||||
4027ea2c6dbc9fd176356acac3f676445419c2f021146ed25dfe5a304c3ac5fb scripts/kit-sub.py
|
||||
c38e5fe05bec66e747bb3feee2af4444d3a53d66e74ef1acb59861fbafa65e4c scripts/kit-local.sh
|
||||
8910165cf4dd156fc5c362cf244092e63fbf13ca80b062aa5d1a482b4a37a957 scripts/3x-ui-local.sh
|
||||
def65f6e126b8289916c66a36d8532fe268897e174531b44e2b3fb1b0022865b VERSION
|
||||
e006d219f51b48168a7b9141727e3b75a1ebfb8013fe209a18fd97d67e7ab519 scripts/3x-ui-local.sh
|
||||
1046822942b68dbf8a31e81e25f587c411ec42cfa7b13498b2df79723e8b248a VERSION
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
-----BEGIN SSH SIGNATURE-----
|
||||
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgozRJ+f9RB6qO9S9j3BWCDtC0bV
|
||||
FHakRSSqtQPljLoQUAAAARM3gtdWkta2l0LXJlbGVhc2UAAAAAAAAABnNoYTUxMgAAAFMA
|
||||
AAALc3NoLWVkMjU1MTkAAABAE/O+/f6JrWhdvtE4m+QV7Tbbvud8JXbhZY/2q55P3V8pCo
|
||||
hLfPy5QqSY93ATeluWWujzAZLXUp9VOrMVB9UJCA==
|
||||
AAALc3NoLWVkMjU1MTkAAABAkSq6xKu5HQBADkCbeMG24hbLEoqIxuuUn8Mql5yZGmlQ7q
|
||||
sUSWjkG812I97rCCA8LL+AArhFm+pWLgQZsMpXAQ==
|
||||
-----END SSH SIGNATURE-----
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
KIT_VERSION="1.2.17" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
KIT_VERSION="1.2.18" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}"
|
||||
NS="3x-ui-kit-release"
|
||||
SIG_ID="releases@3x-ui-kit"
|
||||
|
||||
+5
-9
@@ -30,7 +30,7 @@ wait_apt_idle() {
|
||||
XUI_VERSION="v3.9.0"
|
||||
# SHA256 установщика 3X-UI этой версии: тег могут передвинуть, а хеш – нет (проверено 2026-09-30).
|
||||
XUI_INSTALL_SHA256="18616fe26c8f6c92db6daa2dcd7cd53c5143ee69ecfd26d8ea6dc9b2c78607a6"
|
||||
KIT_VERSION="1.2.17"
|
||||
KIT_VERSION="1.2.18"
|
||||
# kit и kit-sub берём из того же релиза, что и этот скрипт, а не из меняющейся ветки main.
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$KIT_VERSION"
|
||||
# Ядро Xray для панели. С 26.7.x клиенты на Mihomo и sing-box (Hiddify, FlClash,
|
||||
@@ -625,10 +625,11 @@ kl_sni_menu() {
|
||||
NB_ALL=("${nb[@]}")
|
||||
# Наш шов: показываем найденное и даём выбрать — отдельно для REALITY и для XHTTP/MTProto.
|
||||
if [[ ${KL_PICK_SNI:-} == 1 && $yes == no ]] && { : </dev/tty; } 2>/dev/null; then
|
||||
local pick pick2
|
||||
local pick pick2 own_sni=no
|
||||
pick=$(kl_sni_menu "REALITY (TCP 443) — под какой сайт маскировать" ${nb[@]+"${nb[@]}"})
|
||||
case $pick in
|
||||
own:*)
|
||||
own_sni=yes
|
||||
DOMAIN=${pick#own:}
|
||||
if domain_points_here "$DOMAIN" 2>/dev/null; then
|
||||
SNI=$DOMAIN; ok "маскировка под свой домен: ${B}$DOMAIN${N} (сертификат Let's Encrypt выпустит установщик)"
|
||||
@@ -638,13 +639,8 @@ kl_sni_menu() {
|
||||
;;
|
||||
sni:*) SNI=${pick#sni:} ;;
|
||||
esac
|
||||
if ((${#nb[@]})); then
|
||||
[[ -n $pick ]] && SNI=$pick || SNI=${nb[0]}
|
||||
elif [[ -n $pick ]]; then
|
||||
SNI=$pick
|
||||
fi
|
||||
if [[ -n $SNI ]]; then
|
||||
if ! sni_ok "$SNI"; then
|
||||
if [[ $own_sni == no ]] && ! sni_ok "$SNI"; then
|
||||
warn "$SNI не отвечает по TLS 1.3 + HTTP/2 — беру найденное в подсети"
|
||||
SNI="${nb[0]:-$SNI}"
|
||||
fi
|
||||
@@ -663,7 +659,7 @@ kl_sni_menu() {
|
||||
if [[ -z $SNI ]] && ((${#nb[@]})); then
|
||||
SNI=${nb[0]}; SNI2=${SNI2:-${nb[1]:-}}; SNI3=${nb[2]:-}
|
||||
ok "найден: ${B}$SNI${N} · та же подсеть · TLS 1.3, h2, сертификат верный"
|
||||
else
|
||||
elif [[ -z $SNI ]]; then
|
||||
warn "В подсети подходящего сайта не нашёл."
|
||||
echo " Лучший выход – свой домен: запустите снова с --domain vpn.example.com"
|
||||
if [[ -n ${KL_PICK_SNI:-} && ${KL_PICK_SNI} == 1 && -z $SNI ]]; then
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём
|
||||
# останавливается и не заменяет команду hy2.
|
||||
|
||||
KIT_VERSION="1.2.17"
|
||||
KIT_VERSION="1.2.18"
|
||||
|
||||
cat >&2 <<'MSG'
|
||||
Отдельный установщик Hysteria2 больше не поддерживается.
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
set -Eeuo pipefail
|
||||
export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам
|
||||
|
||||
KIT_VERSION="1.2.17"
|
||||
KIT_VERSION="1.2.18"
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main"
|
||||
# Файлы новой версии берём из её тега, а не из меняющейся ветки main.
|
||||
kit_ref_raw() { echo "https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$1"; }
|
||||
|
||||
+8
-1
@@ -321,7 +321,14 @@ def main():
|
||||
'scripts/3x-ui.sh',
|
||||
' if ((${#nb[@]})); then\n SNI=${nb[0]}; SNI2=${nb[1]:-}; SNI3=${nb[2]:-}\n',
|
||||
False,
|
||||
' # Наш шов: показываем найденное и даём выбрать — отдельно для REALITY и для XHTTP/MTProto.\n if [[ ${KL_PICK_SNI:-} == 1 && $yes == no ]] && { : </dev/tty; } 2>/dev/null; then\n local pick pick2\n pick=$(kl_sni_menu "REALITY (TCP 443) — под какой сайт маскировать" ${nb[@]+"${nb[@]}"})\n case $pick in\n own:*)\n DOMAIN=${pick#own:}\n if domain_points_here "$DOMAIN" 2>/dev/null; then\n SNI=$DOMAIN; ok "маскировка под свой домен: ${B}$DOMAIN${N} (сертификат Let\'s Encrypt выпустит установщик)"\n else\n SNI=$DOMAIN; later "домен $DOMAIN не указывает на этот сервер — маскируюсь под него как под чужой сайт"\n fi\n ;;\n sni:*) SNI=${pick#sni:} ;;\n esac\n if ((${#nb[@]})); then\n [[ -n $pick ]] && SNI=$pick || SNI=${nb[0]}\n elif [[ -n $pick ]]; then\n SNI=$pick\n fi\n if [[ -n $SNI ]]; then\n if ! sni_ok "$SNI"; then\n warn "$SNI не отвечает по TLS 1.3 + HTTP/2 — беру найденное в подсети"\n SNI="${nb[0]:-$SNI}"\n fi\n ok "маскировка REALITY: ${B}$SNI${N}"\n fi\n if [[ " ${PROTOS[*]} " == *" xhttp "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then\n pick2=$(kl_sni_menu "XHTTP и MTProto (различаются по имени сайта) — какой сайт взять" ${nb[@]+"${nb[@]}"})\n [[ $pick2 == sni:* ]] && pick2=${pick2#sni:}\n [[ $pick2 == own:* ]] && pick2=${pick2#own:}\n [[ -n $pick2 ]] && SNI2=$pick2\n [[ -n $SNI2 ]] && ok "маскировка XHTTP/MTProto: ${B}$SNI2${N}"\n fi\n fi\n if ((${#nb[@]})); then ok "подходящих соседей найдено: ${#nb[@]}"\n else warn "в подсети подходящих сайтов не нашлось (адреса проверены, откликов нет)"; fi\n if [[ -z $SNI ]] && ((${#nb[@]})); then\n SNI=${nb[0]}; SNI2=${SNI2:-${nb[1]:-}}; SNI3=${nb[2]:-}\n',
|
||||
' # Наш шов: показываем найденное и даём выбрать — отдельно для REALITY и для XHTTP/MTProto.\n if [[ ${KL_PICK_SNI:-} == 1 && $yes == no ]] && { : </dev/tty; } 2>/dev/null; then\n local pick pick2 own_sni=no\n pick=$(kl_sni_menu "REALITY (TCP 443) — под какой сайт маскировать" ${nb[@]+"${nb[@]}"})\n case $pick in\n own:*)\n own_sni=yes\n DOMAIN=${pick#own:}\n if domain_points_here "$DOMAIN" 2>/dev/null; then\n SNI=$DOMAIN; ok "маскировка под свой домен: ${B}$DOMAIN${N} (сертификат Let\'s Encrypt выпустит установщик)"\n else\n SNI=$DOMAIN; later "домен $DOMAIN не указывает на этот сервер — маскируюсь под него как под чужой сайт"\n fi\n ;;\n sni:*) SNI=${pick#sni:} ;;\n esac\n if [[ -n $SNI ]]; then\n if [[ $own_sni == no ]] && ! sni_ok "$SNI"; then\n warn "$SNI не отвечает по TLS 1.3 + HTTP/2 — беру найденное в подсети"\n SNI="${nb[0]:-$SNI}"\n fi\n ok "маскировка REALITY: ${B}$SNI${N}"\n fi\n if [[ " ${PROTOS[*]} " == *" xhttp "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then\n pick2=$(kl_sni_menu "XHTTP и MTProto (различаются по имени сайта) — какой сайт взять" ${nb[@]+"${nb[@]}"})\n [[ $pick2 == sni:* ]] && pick2=${pick2#sni:}\n [[ $pick2 == own:* ]] && pick2=${pick2#own:}\n [[ -n $pick2 ]] && SNI2=$pick2\n [[ -n $SNI2 ]] && ok "маскировка XHTTP/MTProto: ${B}$SNI2${N}"\n fi\n fi\n if ((${#nb[@]})); then ok "подходящих соседей найдено: ${#nb[@]}"\n else warn "в подсети подходящих сайтов не нашлось (адреса проверены, откликов нет)"; fi\n if [[ -z $SNI ]] && ((${#nb[@]})); then\n SNI=${nb[0]}; SNI2=${SNI2:-${nb[1]:-}}; SNI3=${nb[2]:-}\n',
|
||||
'авто-шов: replace, строк 2',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' ok "найден: ${B}$SNI${N} · та же подсеть · TLS 1.3, h2, сертификат верный"\n else\n',
|
||||
False,
|
||||
' ok "найден: ${B}$SNI${N} · та же подсеть · TLS 1.3, h2, сертификат верный"\n elif [[ -z $SNI ]]; then\n',
|
||||
'авто-шов: replace, строк 2',
|
||||
),
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user