Skip to content

Latest commit

 

History

History
91 lines (77 loc) · 9.29 KB

ROADMAP.md

File metadata and controls

91 lines (77 loc) · 9.29 KB

План still-ui

still-ui — форк 3x-ui v3.11.0. Порядок работ — от того, что мешает на живом сервере каждый день, к новым возможностям. Всё, что умеет 3x-ui, остаётся; изменения идут поверх небольшими шагами.

Сделано

  • Частичная правка клиента не ломает клиента. В 3x-ui v3.11.0 правка через /panel/api/clients/update/:email с частью полей выключала клиента и обнуляла limitIp, tgId, comment и прочее, чего не было в запросе. Теперь непереданные поля берутся из сохранённого клиента; явный ноль по-прежнему очищает. Ключи AmneziaWG сохранялись и в v3.11.0.

  • Отпечаток REALITY по умолчанию — ios. ClientHello ~517 байт помещается в один TCP-сегмент. У chrome и firefox он делится на два пакета, и у мобильных операторов, теряющих второй пакет, соединение рвётся на рукопожатии. Другой отпечаток по-прежнему выбирается во входе.

  • Потолок памяти панели в установщике. MemoryMax — 35% ОЗУ (256 МиБ…1 ГиБ), MemoryHigh — 85% от него, своп панели запрещён; своё значение — STILL_UI_MEMORY_MAX в /etc/default/still-ui. На сервере без свопа с ОЗУ ≤ 2 ГиБ установщик предлагает /swapfile на 2 ГиБ.

  • Переход с 3x-ui при установке. Установщик находит /etc/x-ui/x-ui.db, предлагает скопировать базу и остановить x-ui; файлы 3x-ui не трогает. Проверено на базе v3.11.0.

  • Xray отдельной службой (по настройке). STILL_XRAY_UNIT=on в /etc/default/still-ui + still-ui update: служба still-xray (свой пользователь, CAP_NET_BIND_SERVICE, ProtectSystem=strict, Restart=always, MemoryMax). Клиенты — через API без перезапуска, перезапуск ядра только при смене структуры входов, конфиг проверяется xray run -test, неподнявшийся откатывается на прошлый рабочий. Проверено: systemctl restart still-ui посреди скачивания 20 МБ через VPN — обрыва нет, PID Xray тот же; kill -9 ядра — systemd поднимает, панель доприменяет клиентов. По умолчанию Xray — дочерний процесс, как в 3x-ui. AmneziaWG, MTProto и TUIC живут в панели и при её перезапуске переподключаются.

  • Подхват продлённого сертификата. Xray сам перечитывает файлы раз в час (или раз в ocspStapling с); панель раз в минуту рукопожатием (TLS/QUIC) сверяет отдаваемый сертификат с файлом и перезапускает только ядро, если оно не подхватило продление вовремя (oneTimeLoading) или отдаваемый истекает в течение часа. Метка «Сертификаты» на главной. Проверено на входах VLESS-TLS и Hysteria.

  • Память панели под потоком соединений AmneziaWG. Каждое соединение выделяло два новых буфера по 32 КиБ; теперь буферы переиспользуются. 100 коротких соединений/с через AWG, 5 минут, по 3 прогона, 3x-ui v3.11.0 против still-ui: средняя память панели 403 → 176 МиБ (пик 525 → 211 МиБ), см. bench/awg-relay-churn.

  • Многосуточный замер памяти панели. 72 часа под смешанной нагрузкой, still-ui v1.6.0 рядом с 3x-ui v3.11.0 на одних данных и нагрузке: роста нет ни у одной (+0,1 МБ/ч за последние сутки). Медленные клиенты AmneziaWG держат буферы сокетов ядра (около 12 МБ на поток), это не утечка.

  • Импорт из Marzban, x-ui и 3x-ui до v3. still-ui import marzban <папка> (и Настройки → Импорт) переносит входы, пользователей и хосты с теми же UUID, паролями, ключом REALITY и портами, так что выданные ссылки и ссылки подписки Marzban продолжают работать. -dry-run — отчёт без записи; перед записью — резервная копия, запись — всё или ничего. Проверено с настоящим Marzban v0.8.4: scripts/test-import-marzban.sh.

  • Местные сайты напрямую. Настройки → Подписка → Местные сайты напрямую: сайты выбранной страны (доменные зоны, geosite, geoip) идут мимо VPN, список «всегда через VPN» (Telegram, YouTube и другие, плюс свои адреса) проверяется первым. Подписки JSON, Clash/Mihomo, Happ/INCY и файл правил для Shadowrocket. По умолчанию выключено.

  • Лимит устройств подписки, понятный человеку. Устройство сверх лимита получает не ошибку, а подписку с одним сообщением; общий лимит для панели, выбор для приложений без идентификатора устройства, срок, после которого молчащее устройство освобождает место, счётчик «2 / 3» на странице подписки. Панель хранит только хеш идентификатора.

  • Тревога об утечке подписки. Панель считает сети (IPv4 /24, IPv6 /48), из которых получают каждую подписку, и пишет в Telegram один раз, когда одну подписку получили из 6 сетей за 24 часа (оба числа настраиваются); снова — через неделю или когда сетей вдвое больше. Ничего не блокирует; за прокси адрес берётся только от доверенного прокси. Включено на новых установках, выключено на обновлённых.

  • Журнал подключений. Страница Подключения: кто, когда, через какой вход и куда, фильтры и выгрузка в CSV. Срок хранения (30 дней по умолчанию), предел размера и выбор, что сохранять об адресе назначения и адресе клиента; старые дни удаляются сами. По умолчанию выключен.

  • Против блокировок. Подбор цели REALITY с результатом каждой проверки; прыгающие порты Hysteria2, перенаправление для которых панель ставит сама (nftables) и отказывает там, где оно работать не может; для AmneziaWG — пакет I1 в виде QUIC или DNS и MTU 1280 одной кнопкой.

В работе

  • Сейчас ничего.

Дальше

Маршруты и выходы

  • Правила: заблокировать, пустить напрямую, пустить через другой выход (другой сервер, WARP).
  • Проверка правил перед применением: нельзя случайно открыть клиентам служебные порты и внутренние адреса сервера или отрезать всех.
  • Готовые наборы правил (реклама).

Несколько серверов

  • Добавить сервер одной командой-приглашением; входы и клиенты на нескольких серверах; подписка собирает все.
  • Отказ одного сервера не мешает управлять остальными.

Прочее

  • Резервная копия и восстановление базы одной командой.
  • Обновление и откат версии одной командой с проверкой, что база подходит выбранной версии.