REALITY: у новых пользователей включён xtls-rprx-vision; kit user vision для существующих; kit check сообщает, у кого он выключен

This commit is contained in:
maxdmitrov
2026-10-04 02:03:56 +03:00
parent 2e40b85fd4
commit 5232e431de
3 changed files with 31 additions and 2 deletions
+1
View File
@@ -90,6 +90,7 @@ kit user link имя # показать п
kit user link имя --amnezia # ссылка vpn:// для приложения AmneziaVPN kit user link имя --amnezia # ссылка vpn:// для приложения AmneziaVPN
kit user link имя --telegram # ссылка tg:// для Telegram и QR-код kit user link имя --telegram # ссылка tg:// для Telegram и QR-код
kit user limit имя [--gb N] [--days N] [--devices N] # изменить лимиты (0 – без ограничений) kit user limit имя [--gb N] [--days N] [--devices N] # изменить лимиты (0 – без ограничений)
kit user vision имя|--all [off] # включить xtls-rprx-vision для REALITY (у новых пользователей включён сам)
kit user off имя # временно выключить пользователя kit user off имя # временно выключить пользователя
kit user on имя # включить обратно kit user on имя # включить обратно
kit user del имя # удалить пользователя kit user del имя # удалить пользователя
+1 -1
View File
@@ -985,7 +985,7 @@ ensure_user() {
else else
SUBID=$(rand_str 16 | tr 'A-Z' 'a-z') SUBID=$(rand_str 16 | tr 'A-Z' 'a-z')
api POST clients/add "$(jq -nc --arg e "$NAME" --arg s "$SUBID" --argjson ids "$ids" \ api POST clients/add "$(jq -nc --arg e "$NAME" --arg s "$SUBID" --argjson ids "$ids" \
'{client: {email: $e, subId: $s, totalGB: 0, expiryTime: 0, limitIp: 0, enable: true, comment: "kit"}, inboundIds: $ids}')" >/dev/null '{client: {email: $e, subId: $s, totalGB: 0, expiryTime: 0, limitIp: 0, enable: true, flow: "xtls-rprx-vision", comment: "kit"}, inboundIds: $ids}')" >/dev/null
awg_attach "$NAME" "$SUBID" awg_attach "$NAME" "$SUBID"
fi fi
} }
+29 -1
View File
@@ -184,7 +184,7 @@ cmd_add() {
sid=$(rand_id) sid=$(rand_id)
body=$(jq -nc --arg e "$name" --arg s "$sid" --argjson t "$(gb_bytes "$gb")" --argjson x "$(days_ms "$days")" \ body=$(jq -nc --arg e "$name" --arg s "$sid" --argjson t "$(gb_bytes "$gb")" --argjson x "$(days_ms "$days")" \
--argjson ip "$devices" --argjson ids "$ids" '{client: {email: $e, subId: $s, totalGB: $t, expiryTime: $x, --argjson ip "$devices" --argjson ids "$ids" '{client: {email: $e, subId: $s, totalGB: $t, expiryTime: $x,
limitIp: $ip, enable: true, comment: "kit"}, inboundIds: $ids}') limitIp: $ip, enable: true, flow: "xtls-rprx-vision", comment: "kit"}, inboundIds: $ids}')
api POST clients/add "$body" >/dev/null api POST clients/add "$body" >/dev/null
awg_attach "$name" "$sid" "$(gb_bytes "$gb")" "$(days_ms "$days")" "$devices" awg_attach "$name" "$sid" "$(gb_bytes "$gb")" "$(days_ms "$days")" "$devices"
say "Пользователь $name добавлен во все протоколы ($(api GET inbounds/list | jq length))$( ((gb)) && echo ", лимит $gb ГБ")$( ((days)) && echo ", на $days дн")." say "Пользователь $name добавлен во все протоколы ($(api GET inbounds/list | jq length))$( ((gb)) && echo ", лимит $gb ГБ")$( ((days)) && echo ", на $days дн")."
@@ -355,6 +355,29 @@ UNIT
} }
limit_timer_enabled() { systemctl is-enabled -q kit-limit.timer 2>/dev/null; } limit_timer_enabled() { systemctl is-enabled -q kit-limit.timer 2>/dev/null; }
# xtls-rprx-vision для REALITY. Панель сама ставит flow только там, где он допустим (REALITY по TCP), на XHTTP, WS и др. его нет.
# Клиент без Vision не подключится к серверу, где у пользователя Vision включён, поэтому у существующих пользователей
# включаем только по команде: ссылки в подписке обновятся сами, а вручную сохранённые ссылки на REALITY придётся заменить.
cmd_vision() { # имя|--all [off]
local target=${1:-} flow="xtls-rprx-vision" e rec body n=0
[[ -n $target ]] || die "kit user vision имя|--all [off]"
[[ ${2:-} == off ]] && flow=""
if [[ $target == --all ]]; then
mapfile -t _emails < <(clients | jq -r '.[] | select(.email | test("-awg[0-9]*$") | not) | .email')
else
valid_name "$target"; [[ -n $(client "$target") ]] || die "Нет пользователя $target"
_emails=("$target")
fi
for e in "${_emails[@]}"; do
rec=$(client "$e")
body=$(jq -c --arg f "$flow" '{email, subId, totalGB, expiryTime, limitIp, enable, comment} + {flow: $f}' <<<"$rec")
api POST "clients/update/$e" "$body" >/dev/null
n=$((n + 1))
done
if [[ -n $flow ]]; then say "Vision включён у $n польз.: ссылка REALITY в подписке теперь с flow=xtls-rprx-vision (приложения подхватят при обновлении подписки)."
else say "Vision выключен у $n польз."; fi
}
cmd_toggle() { # имя true|false cmd_toggle() { # имя true|false
valid_name "$1" valid_name "$1"
[[ -n $(client "$1") ]] || die "Нет пользователя $1" [[ -n $(client "$1") ]] || die "Нет пользователя $1"
@@ -672,6 +695,9 @@ check_services() {
if auto_enabled; then c_ok "автообновление включено" if auto_enabled; then c_ok "автообновление включено"
elif [[ -f $KIT_MANUAL ]]; then c_info "автообновление выключено вами (включить: kit update --auto)" elif [[ -f $KIT_MANUAL ]]; then c_info "автообновление выключено вами (включить: kit update --auto)"
else c_bad timer "автообновление не включено"; fi else c_bad timer "автообновление не включено"; fi
local novis
novis=$(api GET inbounds/list 2>/dev/null | jq -r '[.[] | select(.remark == "REALITY") | (.settings | if type == "string" then fromjson else . end).clients[]? | select((.flow // "") == "")] | length' 2>/dev/null || echo 0)
if [[ ${novis:-0} =~ ^[0-9]+$ ]] && ((novis > 0)); then c_info "у $novis польз. в REALITY не включён xtls-rprx-vision (включить: kit user vision имя|--all)"; fi
if limit_timer_enabled; then c_ok "проверка общего лимита трафика включена" if limit_timer_enabled; then c_ok "проверка общего лимита трафика включена"
else c_bad limit "проверка общего лимита трафика не включена (лимит у AmneziaWG считался бы отдельно)"; fi else c_bad limit "проверка общего лимита трафика не включена (лимит у AmneziaWG считался бы отдельно)"; fi
} }
@@ -1091,6 +1117,7 @@ ${B}kit${N} $KIT_VERSION – управление сервером 3X-UI KIT
kit user off имя / kit user on имя выключить и включить kit user off имя / kit user on имя выключить и включить
kit user del имя удалить kit user del имя удалить
kit panel update [--force] обновить панель 3X-UI до проверенной версии (ядро и настройки сохраняются) kit panel update [--force] обновить панель 3X-UI до проверенной версии (ядро и настройки сохраняются)
kit user vision имя|--all [off] включить xtls-rprx-vision для REALITY (у новых пользователей включён сам)
kit user enforce [--dry-run] применить общий лимит сейчас (обычно само, раз в 5 минут) kit user enforce [--dry-run] применить общий лимит сейчас (обычно само, раз в 5 минут)
Сервер: Сервер:
@@ -1114,6 +1141,7 @@ case "$cmd_key" in
"user on") cmd_toggle "${3:-}" true ;; "user on") cmd_toggle "${3:-}" true ;;
"user del") shift 2; cmd_del "$@" ;; "user del") shift 2; cmd_del "$@" ;;
"user enforce") shift 2; cmd_enforce "$@" ;; "user enforce") shift 2; cmd_enforce "$@" ;;
"user vision") shift 2; cmd_vision "$@" ;;
"panel update") shift 2; panel_update "$@" ;; "panel update") shift 2; panel_update "$@" ;;
"__limit-timer on") limit_timer_on ;; "__limit-timer on") limit_timer_on ;;
"update "*) shift; cmd_update "$@" ;; "update "*) shift; cmd_update "$@" ;;