43 Commits
Author SHA1 Message Date
maxdmitrov 2c6549a3af README: протоколы в строку, «распознают», без блока про DNS, диагностика в командах KIT, KIT заглавными 2026-10-06 19:26:04 +03:00
maxdmitrov 018d9cefa2 --restore: файлы настроек копии – только печатные ASCII, нулевой байт больше не выключает проверку
Нулевой байт в kit.env, install-result.env или kit-backup.env заставлял GNU grep считать
файл двоичным и молчать: safe_env «проходил», а bash при «.» выкидывал нулевые байты
и выполнял остальное (лишние имена вроде PATH и KIT_CLI_URL).

- проверка архива отклоняет три файла настроек с байтами вне 0x20–0x7E и \n (и больше 64 КиБ),
  3x-ui.txt – не UTF-8 или с управляющими символами (кроме \n и \t), больше 1 МиБ;
  проверяются все записи с таким именем, в том числе повторные;
- safe_env: сначала tr – только печатные ASCII и \n, затем grep -a под LC_ALL=C;
- grep -a там, где kit и установщик читают свои файлы настроек (kit.sh: замена токена API);
- отрицательные тесты: \0, \r, \x1b, \x80, \xff в начале, в середине, в конце, отдельной строкой
  и в значении в каждом из трёх файлов, повторная запись в архиве, 3x-ui.txt.
2026-10-06 18:58:38 +03:00
maxdmitrov 436acffc22 Мануал: --restore проверяет и значения в настройках копии 2026-10-06 18:40:45 +03:00
maxdmitrov 25848a24c1 --restore: самоподписанный сертификат, если Let's Encrypt не выдал его на новый IP
Подключения из копии ссылаются на /root/cert/ip, а без файла Xray не стартует,
хотя установщик писал «Готово». Теперь перед запуском панели проверяю файлы
сертификатов из базы; если нет – кладу самоподписанный на тот же путь (только
/root/cert/ip или /root/cert/self) и закрепляю отпечаток в подключениях, как при
обычной установке. Предупреждение – сразу и в блоке «Внимание».

В конце жду процесс Xray: если не поднялся – вместо «Готово» красное сообщение
и код возврата 1. Тест: tools/test/restore_archive_test.py.
2026-10-06 16:58:53 +03:00
maxdmitrov 972757ed75 kit net: перезапуск ядра Xray, если правка на ходу закрыла порт; kit check видит упавшее ядро и UDP
Панель 3.9.0 меняет подключение через API ядра: старое удаляет, а новое с маскировкой
Hysteria2 ядро 26.6.27 не принимает, и 443/udp закрывается (kit net masq on, kit net fp,
kit net on). Теперь после правки kit сверяет порты и при нужде перезапускает ядро
(server/restartXrayService, запасной путь – systemctl restart x-ui).

kit check: процесс Xray (дочерний у x-ui) и порты всех включённых подключений,
TCP и UDP отдельно (nginx на 443/tcp больше не считается за Hysteria2). kit fix
перезапускает ядро. Тест: tools/test/kit_ports_test.py.
2026-10-06 16:50:04 +03:00
maxdmitrov 159c1b271d Hysteria2: отдельный установщик убран из 1.2, на его месте заглушка
scripts/hysteria2.sh остаётся в подписанном релизе: старая `hy2 update`
скачает его, сверит SHA256, запустит `__update_binary`, получит код 1
с подсказкой и не заменит команду hy2. Заглушка ничего не удаляет и не
останавливает. Hysteria2 по-прежнему входит в основную установку.

Убраны мануал hysteria2.md и его картинки, проверка одинаковых ключей
kit/hy2 в release.sh и CI, строка Hysteria в check-upstream.sh.
2026-10-06 16:10:07 +03:00
maxdmitrov 888a4cb46b Заглушка: случайная страница при установке вместо девяти фиксированных
stub_site собирает страницу из частей: 20 тем (кафе, пекарня, фотограф, заметки,
мастерские, документация и т. п.) × 5 вёрсток = 100 вариантов, плюс случайное
название, подзаголовок, 3 пункта из 5, адрес, палитра, шрифт и скругление.
Без внешних ресурсов, UTF-8. Вымышленный бренд из старых шаблонов убран, в том числе
из запасной страницы kit net masq. Страница сохраняется в /var/www/kit/index.html
в обоих режимах: её показывают nginx и Hysteria2, её берёт kit net masq, её
возвращает --restore. Тест: tools/test/stub_test.py.
2026-10-06 15:54:00 +03:00
maxdmitrov 43835928bb --restore: файлы настроек из копии – только по белому списку имён, без подключения в основной shell
kit-backup.env больше не подключается через «.» в установщике: значения читаются
в подоболочке (env_get). safe_env проверяет имена для каждого файла (kit-backup.env,
install-result.env, kit.env); лишнее имя – «Это не резервная копия 3X-UI KIT…».
RESULT, XUI_ENV, PATH, IFS, KIT_* из архива не принимаются, HOST в kit.env должен
совпадать с адресом копии, порт панели – число. Тест: tools/test/restore_env_test.py.
2026-10-06 15:41:16 +03:00
maxdmitrov 7741f26eb4 Убрана фраза «проверено настоящими клиентами» из changelog, инструкции, комментария и README матрицы 2026-10-06 15:23:34 +03:00
maxdmitrov 635c909426 Откат 28a7917: формат sing-box для Karing и Hiddify не применяется клиентами (Karing игнорирует правила, Hiddify не показывает серверы) 2026-10-06 14:12:41 +03:00
maxdmitrov 8e2215f9f4 kit net split: Karing и Hiddify получают конфиг sing-box с правилами (route, dns без утечек, наборы .srs через VPN); kit net split check сверяет и наборы sing-box; тесты 2026-10-06 13:58:01 +03:00
maxdmitrov 73bbaadd48 kit net split: маршрутизация для Happ (заголовок Routing) и JSON-подписки Xray через настройки панели, kit net split apply; проверено клиентами Mihomo и Xray 2026-10-06 11:16:20 +03:00
maxdmitrov d74ef02d65 kit net split: правила только приложениям на ядре Mihomo (Karing и другие на sing-box получают подписку прежней) 2026-10-05 23:10:15 +03:00
maxdmitrov 3a7b760dfc Тексты: без ссылок на операторов и блокировки в мануале и комментарии установщика 2026-10-05 21:57:06 +03:00
maxdmitrov a8a4aae6b3 kit net split: полный список популярных иностранных сервисов, проверка GEOSITE и GEOIP по базе, прощающий разбор файла, проверка прав на файл 2026-10-05 21:54:28 +03:00
maxdmitrov 88f2c1066b kit net split: больше категорий в шаблоне (комментарии), проверка названий GEOSITE по базе в kit net split check, честное сообщение об ошибке 2026-10-05 21:50:38 +03:00
maxdmitrov 3ea6c0c868 kit net split: раздельная маршрутизация в Clash-подписке (rules.yaml, без утечек DNS), в копию и восстановление; kit backup работает не только из /; понятное сообщение при отказе панели 2026-10-05 21:46:51 +03:00
maxdmitrov 31bc2d5480 Установщик: «рекомендуем» у своего домена, без «mihomo» в строке о проекте, без ссылок «открыть в приложении» и без деления протоколов на группы; обновление панели проверяет подключения клиентом и откатывает при сбое; README: отдельная Hysteria2 наравне с 11 протоколами 2026-10-05 18:01:28 +03:00
maxdmitrov 2a8cfe6ea2 kit-sub: файлы страницы подписки для браузера (assets); ссылки «открыть в приложении» для Hiddify, Clash Verge, FlClash, Mihomo Party, v2rayNG 2026-10-05 17:40:48 +03:00
maxdmitrov c4e6ed1a5d Ссылки «открыть в приложении» (Karing, Happ) рядом с подпиской: в kit user link и в итоге установки 2026-10-05 17:39:43 +03:00
maxdmitrov 7425c672b8 Правки по независимому аудиту: --restore (сертификат домена, xver при сбое, LINK_HOST), REALITY-2 при панели по домену, резервная копия базы через SQLite, ответы kit-sub как у nginx, меньше параллельность подбора сайта, перемешивание запасных сайтов, нейтральные тексты 2026-10-05 16:51:26 +03:00
maxdmitrov 00319a6655 Панель и подписка по домену или по IP: kit net panel, --panel-on при установке, выбор в диалоге, возврат при --restore 2026-10-05 16:38:41 +03:00
maxdmitrov f22e043902 Тексты: нейтральные формулировки 2026-10-05 16:28:55 +03:00
maxdmitrov 2b5b9c8d9e manuals: меню kit, kit net, kit check --deep/--fix, --restore 2026-10-04 20:46:03 +03:00
maxdmitrov 3d3f3e2d9d 1.1.2: исправление установки с сертификатом Let's Encrypt на IP, ufw и порты SSH, параметры, kit-sub, kit user 2026-10-03 21:36:22 +03:00
099117c2a7 1.1.1: kit check и kit fix, заголовки Happ, безопасная загрузка ядра, инструкция XKeen
- kit check и kit fix: проверка служб, сертификата, подписки, сайта маскировки, прав на файлы; безопасная починка
- kit-sub: пропускает заголовки Happ (Routing и др.) до клиентов
- ядро Xray: запасная загрузка через зеркало только с проверкой SHA256, tools/release.sh сверяет суммы с официальными
- установка со своим доменом: при отказе Let's Encrypt предлагается самоподписанный сертификат
- README: инструкция XKeen, команды kit, новый баннер; правки инструкций и changelog

Co-authored-by: xlok1e <124461726+xlok1e@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 16:47:12 +03:00
maxdmitrovandClaude Sonnet 5.5 9bfa777687 README и инструкция: постоянная база без привязки к версии (новости – в CHANGELOG и релизах)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 14:16:37 +03:00
maxdmitrovandClaude Sonnet 5.5 98217c56ae Документация сверена с кодом: вопрос про маскировку, порты, режим без сертификата, hy2 restart, справка kit backup
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 13:46:37 +03:00
maxdmitrovandClaude Sonnet 5.5 942c2bf9a7 1.1: --restore отложен до 1.2; без сертификата Let's Encrypt на IP установка не врёт про «Готово»
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 13:16:58 +03:00
Claude 0a19858efa 1.1: подписанное автообновление, kit backup и --restore, случайная заглушка
- kit update ставит только релизы, у которых SHA256SUMS подписан ключом автора
  (ssh-keygen -Y verify), версия внутри подписи совпадает, файлы сошлись с хешами;
  откат на старую версию запрещён; после обновления проверяется подписка, иначе возврат
- автообновление: systemd-таймер раз в сутки ночью со случайной задержкой,
  kit update --manual / --auto, журнал /var/log/kit-update.log
- hy2 update тоже проверяет подпись
- tools/release.sh: проверка версий и хеша установщика 3X-UI, SHA256SUMS и подпись
- kit backup и 3x-ui.sh --restore: архив 600, строгая проверка архива, конфиги nginx
  и kit-sub собираются заново, смена IP в подключениях
- сайт-заглушка: случайный из шести шаблонов внутри скрипта
- zashboard закреплён на v3.29.1, короткие тире и 192.168.x.x в текстах и картинках
- CI: ключ подписи одинаковый в kit и hy2, проверка подписи релиза
- CHANGELOG, README, инструкция, SECURITY.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7GrBSRPVXhrz3RAprWDnt
2026-09-30 19:15:19 +00:00
itsnotkubrickandClaude Opus 5.5 7167c8158d 1.1: kit update и kit version для доставки исправлений на серверы 1.0
kit update скачивает kit и kit-sub из тега релиза, переводит kit-sub на работу
без root, убирает cron меню x-ui и исправляет ссылку подписки в панели.
При сбое новой kit-sub возвращает прежнюю.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7GrBSRPVXhrz3RAprWDnt
2026-09-30 18:22:52 +00:00
itsnotkubrick 74ae124f4a Страница: без «Инструкций» и «Как устроено», установка сразу после требований 2026-09-27 19:54:58 +03:00
itsnotkubrick 201e3d7811 Новая страница 3X-UI KIT, «Дополнительные пользователи» вместо «Друзья» 2026-09-27 19:49:31 +03:00
itsnotkubrick de2a3e10c9 Репозиторий переименован в 3X-UI_KIT — новые ссылки 2026-09-27 19:45:34 +03:00
itsnotkubrick c39fe19b08 Всё TCP через порт 443: nginx разводит по SNI и путям
- nginx stream на 443: по SNI — REALITY, XHTTP REALITY (свой сайт маскировки), MTProto
  (свой FakeTLS-домен); остальное — HTTPS-сервер nginx
- HTTPS-сервер: VLESS WS, VMess WS, Trojan gRPC, подписка (kit-sub) и панель по секретным
  путям, сайт-заглушка на всё прочее
- Подключения слушают только localhost, ссылки ведут на 443 через External Proxy 3X-UI;
  настоящие IP клиентов доходят через proxy protocol (лимит устройств работает)
- Снаружи открыты только 443/tcp, 80, SSH, Shadowsocks и UDP-порты
- Режим для новых установок с доверенным сертификатом; --multi-port — прежняя схема;
  старые многопортовые установки не переделываются автоматически

Проверено: Mihomo по подписке 10/10 у двух пользователей, официальный AmneziaWG,
матрица Xray/Mihomo/sing-box, панель и заглушка, пробы REALITY и MTProto без ключа.
2026-09-27 19:16:09 +03:00
itsnotkubrick e13ae7f42f Пользователи: kit — один пользователь сразу на всех протоколах
- scripts/kit.sh (команда kit на сервере): user add/list/link/limit/off/on/del;
  общие трафик, лимит, срок и число устройств на все протоколы
- Установщик создаёт подключения без клиентов и первого пользователя сразу во все,
  имя подписки случайное (чужую подписку не угадать по имени)
- AmneziaWG: у записи 3X-UI одна пара ключей WireGuard, поэтому ко второму AmneziaWG
  подключается запись-«двойник» с подпиской «-awg»; kit работает с обеими как с одной
- kit-sub фильтрует по содержимому: Clash-приложениям без AmneziaWG он вырезается,
  приложениям со ссылками не отдаются vpn:// и tg://

Проверено: три пользователя — Mihomo по подписке 10/10 у каждого, официальный клиент
AmneziaWG — оба варианта у каждого; выключение, лимиты и удаление действуют на все записи.
2026-09-27 19:00:32 +03:00
itsnotkubrick 0ce96f08e1 Подписка с учётом приложения: kit-sub перед подпиской 3X-UI
- scripts/kit-sub.py — посредник на публичном порту подписки (HTTPS), 3X-UI только на 127.0.0.1
- Clash/Mihomo (Clash Verge, FlClash…) получают конфиг 3X-UI плюс AmneziaWG
- Happ, v2rayN, Karing, Hiddify — ссылки без AmneziaWG, которого они не умеют
- expire=0 убирается из Subscription-Userinfo — больше нет «01.01.1970»
- Сертификат перечитывается после продления Let's Encrypt, TLS в потоках, тайм-ауты
- Установщик ставит kit-sub сам (systemd, ограничения безопасности); адрес подписки не меняется

Проверено: Mihomo по итоговому Clash-конфигу — все 10 прокси, включая оба AmneziaWG;
обновление поверх существующей установки на сервере в России.
2026-09-27 18:13:46 +03:00
itsnotkubrick 90946b2802 Инструкция 3X-UI: Shadowsocks блокирует мобильный МТС (проверено на телефоне: по Wi-Fi работает) 2026-09-27 18:06:40 +03:00
itsnotkubrick 7f0ee4f517 Подписка: AmneziaWG и MTProto отдельно, чтобы не ломать приложения без их поддержки
Проверено на телефоне (Karing, мобильный МТС): приложения на sing-box и Xray видят
AmneziaWG как обычный WireGuard и не подключаются. Теперь общая подписка содержит
только протоколы, которые понимают все приложения; AmneziaWG — в подписке «-awg»
(Clash Verge, FlClash), ссылки vpn:// для AmneziaVPN и tg:// для Telegram — в /root/3x-ui.txt.

- Повторный запуск: панель по HTTPS определяется сама
- Клиент с занятым именем (остался от удалённого подключения) получает уникальное имя
2026-09-27 18:00:17 +03:00
itsnotkubrick 58aaf72690 Проверка на сервере в России: WireGuard не по умолчанию, MTProto только при доступе к Telegram
Установка командой из инструкции на чистый Ubuntu 24.04 в России:
- Let's Encrypt на IP выпускается, панель/подписка/TLS-протоколы на нём
- через интернет работают REALITY, Hysteria2, XHTTP, VLESS/VMess WS, Trojan gRPC,
  Shadowsocks, TUIC и оба AmneziaWG (Mihomo, Xray, sing-box, официальный AmneziaWG)
- обычный WireGuard режет DPI (ответ сервера не доходит) — убран из набора по умолчанию
- хостер блокирует Telegram — установщик проверяет доступ и пропускает MTProto
2026-09-27 17:43:08 +03:00
itsnotkubrick 5958eceefb Установщик 3X-UI: 12 протоколов и единая подписка одной командой
- REALITY, Hysteria2, XHTTP, VLESS/VMess WS, Trojan gRPC, Shadowsocks 2022, TUIC,
  WireGuard, AmneziaWG (классика и 3.1, обфускация генерируется), MTProto
- Все подключения пользователя с общим subId — 3X-UI собирает одну подписку;
  Clash/Mihomo-клиенты получают готовый конфиг, остальные — ссылки
- Свой сертификат: --cert/--key; без Let's Encrypt — самоподписанный, отпечаток в ссылках (pcs)
- --protocols для выбора протоколов, повторный запуск досоздаёт недостающее
- Генератор Mihomo: AmneziaWG 3.1 с правильными именами параметров и version: 3
- Инструкция и матрица обновлены: подписка проверена на Xray, Mihomo и sing-box
2026-09-27 17:19:33 +03:00
itsnotkubrick 2b938baa31 Новое название: 3X-UI + Hysteria2 Kit, ссылки на itsnotkubrick/Reality_Hysteria2
- Баннер, заголовки, шапки генераторов и картинки без прежнего названия
- Все ссылки на установку, генераторы и репозиторий — на новый адрес
- hysteria2.sh: файл настроек install.env, старый pinkman.env переносится сам
2026-09-26 19:20:52 +03:00
PinkmanXXX 5edd23bd2b Свои скрипты установки 3X-UI + REALITY и Hysteria2
- scripts/3x-ui.sh: официальная 3X-UI v3.8.5 её установщиком, сертификат
  Let's Encrypt на IP для панели, подключение VLESS REALITY через API,
  подбор сайта для маскировки, ufw, ссылка и QR-код
- scripts/hysteria2.sh: официальный Hysteria 2.12.3 с проверкой sha256,
  Let's Encrypt или самоподписанный сертификат с pinSHA256, сайт-заглушка,
  ufw, команда hy2 для управления пользователями
- Инструкции переписаны под скрипты, старые (x-ui-pro, Blitz) удалены

Проверено: сквозные тесты в контейнерах с systemd и подключение через
интернет к тестовому серверу (VLESS REALITY и Hysteria2).
2026-09-25 22:12:37 +03:00