Дорожная карта
Дорожная карта охватывает все репозитории getmikan: ядро Citrus и форки utls, tls, http, smux и restls-client-go. Переход панели Mikan на Citrus зависит от ядра и тоже здесь. Это план, а не обещание сроков.
Сделано
Заголовок раздела «Сделано»Подробно, со ссылками на каждый PR, — в журнале изменений.
- Релизы. Бета-релизы
v1.0.0-beta.1иv1.0.0-beta.2, собранные изdev; см. новость о второй бете. - Совместимость с Xray. Пост-квантовый REALITY на клиенте и сервере (X25519MLKEM768, ML-DSA-65), XHTTP с поведением Xray, ключи и ссылки ECH в форматах Xray. Автотесты против Xray v26.10.10 в CI.
- Пользователи в ядре. Shadowsocks 2022 с несколькими пользователями, статистика трафика и онлайн-адресов, лимиты скорости, соединений, адресов, квоты и срока, смена пользователей входящих без перезапуска,
PUT /rules. - События и наблюдаемость.
GET /events(WebSocket, SSE, NDJSON), Prometheus/metrics, пробы/healthzи/readyz, события отклонённой авторизации, JSON-логи. - Каскады. Группы
type: chainс проверкой каждого хопа. - Новое в сети и DNS. Листенеры на unix-сокете, DNSCrypt v2, сниффер BitTorrent и правило
PROTOCOL,trusted-proxy-headerот доверенных прокси. - Чистка. Удалены VMess, SSR, Hysteria v1, TUIC v4, потоковые шифры Shadowsocks, v2ray-plugin и mKCP.
- Укрепление. Ревью безопасности, ревью кода и статический аудит закрыты исправлениями, в том числе оставшиеся находки по серверным рукопожатиям, fallback, повторам 0-RTT и форкам utls и ResTLS (#140–#142, #148); TLS 1.2 минимум; самообновление сверяется с
checksums.txt; CI закреплён по хешам. См. Безопасность. - Производительность. Загрузка: пакетная запись, до +50% на REALITY, Trojan и SS2022 (#119). Скачивание: чтение по 64 КиБ и TLS-записи в сокет вместе, в 32 потока REALITY 2802 → 4235 МБ/с, Trojan 2737 → 3936, SS2022 3895 → 4392 (#124). Пинг под нагрузкой: эхо рядом с восемью закачками 55–63 → 20 мс (#131). Память простаивающего туннеля: Trojan −36%, AnyTLS −18%, REALITY −12% (#129). QUIC: отставание от sing-box на новых потоках 10–12% → 4–6% (#125); меньше аллокаций на новое соединение (#118). Раньше: XHTTP по h2 тратит вдвое меньше CPU на гигабайт, простаивающее соединение — на 30 КБ меньше памяти.
- AnyTLS. Переработка (#130): в 32 потока скачивание вдвое быстрее, загрузка +23%, быстрее sing-box; гонка в клиенте устранена.
- Для серверов и панелей. PROXY protocol v1 и v2 на TCP-входящих для фронтендов вроде SNI-роутера (#136); профили запуска без root для systemd и Docker (#144); одноразовые тикеты для WebSocket контроллера вместо secret в URL (#143); User-Agent
clash.meta/<версия> citrus/<версия>(#146) и полеcoreвGET /version(#147), чтобы панели и приложения отличали Citrus от mihomo. - Сравнение и замеры. Сравнение четырёх серверов — Xray, sing-box, mihomo и Citrus — на восьми протоколах (#126); ночная проверка производительности в CI против mihomo (#127).
- Совместимость с клиентами. Автотесты: клиенты mihomo v1.19.31 и v1.19.32 против сервера Citrus по всем протоколам, см. Совместимость.
- Go 1.26. Минимальная версия Go — 1.26, поэтому
golang.org/x/net,x/cryptoиx/textобновлены до текущих релизов с исправлениями безопасности. Отдельных сборок на старых версиях Go (-go120–-go125) больше нет; см. Переход с mihomo. - Форки. utls
v1.8.8-citrus.1–.3, tlsv0.1.8-citrus.1, httpv0.1.8-citrus.1–.2; у utls и tls после этих тегов есть коммиты вdev(скачивание, память). Новый форк smux исправляет отправку буфера вызывающего после ошибки; форк restls-client-go — гонки счётчиков записей; оба пока без тегов. - Документация. Сайт на двух языках: старт, конфигурация, контроллер, пользователи, лимиты, метрики, события, цепочки, переход с mihomo.
В работе
Заголовок раздела «В работе»- Приложение MikanApp на Citrus. Сборка с ядром Citrus; в «О приложении» ядро называется по самому ядру — Citrus или Mihomo.
- Переход панели Mikan на Citrus. Панель встраивает ядро как библиотеку, и переход зависит от первого релиза:
- подменить в
go.modпанели модули utls, tls, http и smux на форки getmikan, как это делает Citrus; - получать события из
/eventsвместо опроса/traffic/users,/limits/usersи других ручек; - задавать
secretконтроллера: без него ядро не откроет контроллер на сетевом адресе; - перенести на VLESS пользовательские конфиги нод с VMess, который из Citrus удалён.
- подменить в
- Живая проверка. Тестовая нода на Citrus и чек-лист для телефона: подключение каждым протоколом из подписки, переключение сетей и авиарежим, скорость, статистика и лимиты в панели.
- Документация на английском наравне с русским. Страницы сайта есть на обоих языках; дальше — комментарии в
docs/config.yaml, которые пока в основном на китайском, как в mihomo.
- Производительность Shadowsocks 2022. Сейчас каждое соединение сразу выделяет два буфера по 64 КБ — всего sing-shadowsocks заранее выделяет около 150 КиБ на соединение. План — форк sing-shadowsocks, где буферы берутся, только когда идут данные.
- Подпись релизов. Подписывать
checksums.txtв CI и проверять подпись ключом, встроенным в Citrus, при самообновлении. - Проверка загружаемых дашбордов и geodata на подлинность.
- Дальнейшее укрепление. Продолжение ревью и аудитов по мере роста кода.
Ждёт решения
Заголовок раздела «Ждёт решения»- Еженедельная синхронизация с mihomo. Workflow готов и проверен, но чтобы он открывал PR, в настройках репозитория нужно разрешить GitHub Actions создавать pull request’ы.
- Форк sing-quic. Паддинг Hysteria2 стоит около 4% CPU на поток; чтобы это исправить, нужен форк sing-quic.
- Лимит потоков TUIC. Сервер TUIC принимает не больше 2048 потоков на одно QUIC-соединение; клиент sing-box, который не ждёт разрешения на новые потоки, сверх этого получает ошибки.
- Теги релизов форков smux, tls и utls. У smux тегов ещё нет, у tls и utls в
devесть коммиты после тегов-citrus.
