--restore: адреса из таблицы hosts и link_host меняются при смене IP; проверка панели перебирает http и https, пока панель не ответит
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
* `kit check --deep` подключается к серверу настоящим клиентом, `--fix` лечит безопасное. Общий лимит трафика считается по всем подключениям пользователя, а в подписке Clash есть «Авто»: клиент сам выбирает быстрейший протокол. DNS в подписках теперь по DoH через прокси: запросы имён не гуляют где попало.
|
||||
* Ссылка подписки в браузере открывается страницей с трафиком, сроком и ссылками (а не белым экраном). Рядом с подпиской теперь ссылки «открыть в приложении»: одно нажатие, и подписка добавлена с названием. Со своим доменом панель и подписку можно открывать и по домену: `--panel-on domain` при установке или `kit net panel domain` потом. Вернулся `--restore`: чистый сервер поднимается из `kit backup`, как из резервной копии настроек телефона. Ссылки `kit user link --amnezia` и `--telegram` для AmneziaVPN и Telegram теперь одной командой, а исправление времени на Debian 13 прислал [xlok1e](https://github.com/xlok1e), спасибо.
|
||||
* Раздельная маршрутизация: `kit net split on` – и через VPN идёт только список популярных иностранских сервисов (нейросети, видео, соцсети, мессенджеры, GitHub, Google и другие), а всё остальное напрямую. Правила приезжают вместе с подпиской, домашним ничего настраивать не нужно: приложения на Mihomo (Clash Verge, FlClash, Mihomo Party) берут их из подписки, Happ – заголовком, приложения на JSON-подписке Xray – из конфига. DNS не течёт: имена из списка у клиента не разрешаются, а запросы про них идут по DoH через VPN (проверено настоящими клиентами Mihomo и Xray счётчиком пакетов). Список в `/etc/kit-sub/rules.yaml`, проверка по базам категорий `kit net split check`, после правки `kit net split apply`, он входит в `kit backup`. Идея и первый набросок – [VasilevVitalii](https://github.com/VasilevVitalii), спасибо. У v2rayN, Karing, Hiddify и приложений с обычным списком ссылок подписка прежняя.
|
||||
* Исправил `--restore` на сервер с другим IP: ссылки части протоколов (адреса в таблице `hosts` панели и в настройках kit-sub) оставались со старым IP, а проверка панели после запуска могла ложно сообщить «Панель не отвечает», если панель стартует не сразу.
|
||||
* Исправил `kit backup`: из `/root` он падал с «No such file or directory», работал только из `/`. Теперь работает откуда угодно. Если токен API панели в `/etc/x-ui/install-result.env` не подошёл (так бывает после обновления с 1.0), `kit` сам выпускает новый и сохраняет его, а если панель всё же не отвечает – говорит по-человечески (код ответа и вероятная причина), а не «Unsupported HTTP version in response».
|
||||
|
||||
Сервер обновится сам этой ночью, нетерпеливым – `kit update`.
|
||||
|
||||
+20
-7
@@ -837,12 +837,17 @@ connect_panel() {
|
||||
# shellcheck disable=SC1090
|
||||
. "$XUI_ENV"
|
||||
TOKEN=$XUI_API_TOKEN
|
||||
local scheme
|
||||
for scheme in https http; do
|
||||
API="$scheme://127.0.0.1:$XUI_PANEL_PORT/$XUI_WEB_BASE_PATH/panel/api"
|
||||
curl -fsk -m 5 -o /dev/null -H "Authorization: Bearer $XUI_API_TOKEN" "$API/server/getNewUUID" 2>/dev/null && break
|
||||
local scheme i
|
||||
# Панель только что запущена и отвечает не сразу: перебираем обе схемы заново, пока не ответит (раньше после первой неудачной
|
||||
# проверки скрипт оставался на http и до конца стучался по http в порт с TLS).
|
||||
for i in $(seq 1 60); do
|
||||
for scheme in https http; do
|
||||
API="$scheme://127.0.0.1:$XUI_PANEL_PORT/$XUI_WEB_BASE_PATH/panel/api"
|
||||
curl -fsk -m 5 -o /dev/null -H "Authorization: Bearer $XUI_API_TOKEN" "$API/server/getNewUUID" 2>/dev/null && return 0
|
||||
done
|
||||
sleep 2
|
||||
done
|
||||
wait_panel
|
||||
die "Панель не отвечает. Лог: journalctl -u x-ui -n 50"
|
||||
}
|
||||
|
||||
# Архив ядра: скачиваем по очереди с GitHub и с зеркала и принимаем только тот, чья SHA256 совпала.
|
||||
@@ -1666,9 +1671,15 @@ rx = re.compile(r"(?<![0-9.])" + re.escape(old) + r"(?![0-9])")
|
||||
sub = lambda v: rx.sub(new, v) if isinstance(v, str) else v
|
||||
db = sqlite3.connect("/etc/x-ui/x-ui.db")
|
||||
db.create_function("kit_sub", 1, sub)
|
||||
for table, cols in (("inbounds", ("settings", "stream_settings")), ("settings", ("value",))):
|
||||
# hosts – адреса для ссылок подписки (панель 3.9+): если их не заменить, часть ссылок после переезда ведёт на старый IP.
|
||||
for table, cols in (("inbounds", ("settings", "stream_settings")), ("settings", ("value",)),
|
||||
("hosts", ("address", "sni", "host_header", "remark", "server_description"))):
|
||||
if not db.execute("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?", (table,)).fetchone():
|
||||
continue
|
||||
have = {r[1] for r in db.execute("PRAGMA table_info(%s)" % table)}
|
||||
for c in cols:
|
||||
db.execute("UPDATE %s SET %s = kit_sub(%s)" % (table, c, c))
|
||||
if c in have:
|
||||
db.execute("UPDATE %s SET %s = kit_sub(%s)" % (table, c, c))
|
||||
db.commit(); db.close()
|
||||
for f in files:
|
||||
s = open(f).read()
|
||||
@@ -1806,6 +1817,8 @@ PY
|
||||
local files=()
|
||||
for f in "$XUI_ENV" /etc/kit/kit.env "$RESULT"; do if [[ -f $f ]]; then files+=("$f"); fi; done
|
||||
replace_host "$old_ip" "$HOST" "${files[@]}"
|
||||
# Адрес в ссылках, взятый из копии, тоже был старым IP (со своим доменом он остаётся доменом).
|
||||
[[ ${LINK_HOST:-} == "$old_ip" ]] && LINK_HOST=$HOST
|
||||
fi
|
||||
systemctl start x-ui
|
||||
connect_panel
|
||||
|
||||
Reference in New Issue
Block a user