github Leadaxe/LxBox v2.24.1
LxBox v2.24.1

latest releases: v2.25.19-rc.3, v2.25.19-rc.2, v2.25.19-rc.1...
one month ago

L×Box v2.24.1

Firefox and Safari fingerprints work with REALITY again, and a second form of
the AmneziaWG link stops losing the node.
REALITY servers on Xray v26.9.8 and
later accept only a handshake carrying a post-quantum key share, and the
fingerprint library shipped it in Chrome profiles alone — nodes handed out with
fp=firefox or fp=safari were silently forwarded to the camouflage site while
the same link worked in other clients. The core in this release brings the
Firefox 148 and Safari 26.3 profiles, both fingerprints pass on new and old
servers alike, and the warning for them is gone. Separately, panels hand out
AmneziaWG 3.1 as a link whose body is a whole configuration file rather than the
usual key@host:port; such a link used to leave an empty source. It is now
recognised and read like a pasted file. The rest of the release is the findings
from checking 2.24.0 on a device.

Отпечатки Firefox и Safari снова работают с REALITY, а вторая форма ссылки
AmneziaWG перестала терять узел.
Серверы REALITY на Xray 26.9.8 и новее
принимают только рукопожатие с постквантовым ключом обмена, а библиотека
отпечатков несла его лишь в профилях Chrome — узлы, которые панели раздают с
fp=firefox и fp=safari, молча уходили на камуфляжный сайт, хотя та же ссылка
работала в других клиентах. Ядро в этом релизе принесло профили Firefox 148 и
Safari 26.3, оба отпечатка проходят и на новых, и на старых серверах,
предупреждение для них снято. Отдельно: панели раздают AmneziaWG 3.1 ссылкой, в
теле которой лежит целый файл конфигурации, а не привычное ключ@хост:порт —
такая ссылка оставляла пустой источник. Теперь она распознаётся и читается как
вставленный файл. Остальное в релизе — находки проверки 2.24.0 на устройстве.


🇬🇧 English

🦊 REALITY: the firefox and safari fingerprints pass again (docs/spec/tasks/451, core SPEC 086 and 087)

  • Was: an XTLS/REALITY server from Xray v26.9.8 onwards accepts only a
    ClientHello that carries the hybrid X25519MLKEM768 key share before X25519.
    In the fingerprint library only the Chrome presets carried it — firefox there
    meant Firefox 120. A node whose subscription hands out fp=firefox was
    silently forwarded to the camouflage site: no error, no traffic, while the
    same node worked in Xray-based clients. The app could only warn and suggest
    switching to chrome.
  • Now: the core carries a fork of the fingerprint library with the Firefox 148
    and Safari 26.3 presets. Both fingerprints send the hybrid share and pass
    against new and old servers alike; the warning for them is gone.
  • Unchanged: the fingerprint from the subscription still goes into the config as
    it is — the app does not rewrite the source's choice. The edge, ios,
    android, 360 and qq fingerprints have no preset with the hybrid share
    anywhere, so new Xray still rejects them and the warning for them stays.
  • The set is tied to the core version: on a core older than v1.14.1-lx.3
    Firefox and Safari are rejected as before.

🔗 awg:// links that carry a whole configuration file (docs/spec/tasks/450)

  • Was: panels hand out AmneziaWG 3.1 as a link whose body is an encoded
    wg-quick file rather than key@host:port. Parsing looked for a host in that
    text, found no private key and dropped the node without a word — a subscription
    made of one such link produced an empty source.
  • Now: the form is recognised and read by the same converter as a pasted
    configuration file, with the AmneziaWG 2 and 3 fields, the MTU limit and key
    validation. The node name comes from the part after #, and without it from
    the server address. One link is one node.

🛰 Core v1.14.1-lx.3 (docs/KERNEL.md)

  • The base moves to sing-box v1.14.1, and a fourth fork submodule appears: the
    fingerprint library with the Firefox 148 and Safari 26.3 presets.
  • A VLESS encryption handshake no longer hangs forever against a node that
    accepts the connection and then goes silent.
  • Configuration, the wire format and the Java surface are unchanged.

🐛 Fixes from checking 2.24.0 on a device (docs/spec/tasks/447)

  • Workspaces: loading a slot rebuilds the config. Was: after switching slots
    the VPN started with the previous slot's config — the "config is stale" mark
    rested on file timestamps alone and was cleared by the first settings write
    (2.23.2 behaved the same). Now: loading a slot marks the config stale
    explicitly, and the home screen rebuilds it from the new slot's settings
    before the VPN starts.
  • Rule editor: Save in the top bar validates the JSON. Was: Save in the top
    bar and Save from the unsaved-changes dialog accepted an array (one rule split
    into "Rule 2" and "Rule 2 #2") and invalid JSON (a rule with no body, the typed
    text lost). Now: both buttons are blocked by the same check as the form
    button, the text stays in the field, and the error message wraps onto several
    lines instead of being cut off.
  • Routing: a JSON rule in the list has no outbound picker. Was: the tile
    showed direct even for a body with action: reject, and choosing anything
    changed nothing. Now: the action is visible in the subtitle together with the
    rule body, as in the editor.
  • Restoring a backup with Replace no longer brings back the startup
    questions.
    Was: after Replace and a restart, "Add tile" and "Check for
    updates?" appeared again. Now: the "already asked" marks stay on the device.

🪢 Tailscale

  • The state directory belongs to the node (docs/spec/tasks/445).
    Was: the directory was named after the node's final tag, so renaming the node
    or changing the folder prefix made it enter the tailnet as a new device — with
    a single-use key already spent; a deleted node left keys on disk; Workspaces
    slots shared one set of directories. Now: the name is issued to the node once
    and survives renaming and moving; deleting a node, a folder or a subscription
    removes the directory while the core is stopped; each slot keeps its own set.
  • The hostname defaults to the device name (docs/spec/tasks/449).
    Was: the Hostname field opened empty and Tailscale picked the name itself,
    taking the system host name — the device showed up in the admin console as
    node, and with several nodes as node-1, node-2. Now: the field is
    pre-filled with LxBox-<device model>; it can be edited or cleared, and an
    empty field still leaves the choice to Tailscale.

🧪 Tests

  • 4782 tests, flutter analyze clean, all five pre-flight checkers pass.
  • The contract corpus is in sync with the desktop launcher: the cases for the
    new link form pass with no local overrides, and the REALITY fingerprint cases
    follow the new norm.

🇷🇺 Русский

🦊 REALITY: отпечатки firefox и safari снова проходят (docs/spec/tasks/451, SPEC 086 и 087 ядра)

  • Было: сервер XTLS/REALITY на Xray 26.9.8 и новее принимает только приветствие,
    которое несёт гибридный ключ обмена X25519MLKEM768 перед X25519. В библиотеке
    отпечатков его несли лишь профили Chrome — firefox там означал Firefox 120.
    Узел, который подписка раздаёт с fp=firefox, молча уходил на камуфляжный
    сайт: ни ошибки, ни трафика, хотя тот же узел работал в клиентах на Xray.
    Приложение могло только предупредить и посоветовать chrome.
  • Стало: ядро несёт форк библиотеки отпечатков с профилями Firefox 148 и
    Safari 26.3. Оба отпечатка отправляют гибридный ключ и проходят и на новых, и
    на старых серверах; предупреждение для них снято.
  • Не меняется: отпечаток из подписки по-прежнему уходит в конфиг как есть —
    приложение не переписывает выбор источника. У отпечатков edge, ios,
    android, 360 и qq профиля с гибридным ключом нет нигде, поэтому новые
    Xray их отвергают, и предупреждение для них остаётся.
  • Набор привязан к версии ядра: на ядре старше v1.14.1-lx.3 Firefox и Safari
    отвергаются как прежде.

🔗 Ссылки awg:// с целым файлом конфигурации внутри (docs/spec/tasks/450)

  • Было: панели раздают AmneziaWG 3.1 ссылкой, в теле которой лежит закодированный
    файл wg-quick, а не ключ@хост:порт. Разбор искал в этом тексте хост, не
    находил приватный ключ и выбрасывал узел без единого слова — подписка из одной
    такой ссылки давала пустой источник.
  • Стало: форма распознаётся и читается тем же конвертером, что вставленный файл
    конфигурации, с полями AmneziaWG 2 и 3, ограничением MTU и проверкой ключей.
    Имя узла берётся из части после #, а без неё — из адреса сервера. Одна
    ссылка — один узел.

🛰 Ядро v1.14.1-lx.3 (docs/KERNEL.md)

  • База переходит на sing-box v1.14.1, и появляется четвёртый сабмодуль форка —
    библиотека отпечатков с профилями Firefox 148 и Safari 26.3.
  • Рукопожатие VLESS с шифрованием больше не виснет бесконечно на узле, который
    принимает соединение и молчит.
  • Конфигурация, формат на проводе и Java-поверхность не меняются.

🐛 Исправления по итогам проверки 2.24.0 на устройстве (docs/spec/tasks/447)

  • Workspaces: загрузка слота пересобирает конфиг. Было: после переключения
    слота VPN стартовал с конфигом прежнего слота — признак «конфиг устарел»
    держался только на времени изменения файлов и гас при первой же записи
    настроек (так было и в 2.23.2). Стало: загрузка слота помечает конфиг
    устаревшим явно, главный экран пересобирает его из настроек нового слота до
    старта VPN.
  • Редактор правила: Save в верхней панели проверяет JSON. Было: кнопка Save
    в верхней панели и Save из диалога несохранённых правок сохраняли массив
    (правило делилось на «Rule 2» и «Rule 2 #2») и невалидный JSON (правило без
    тела, набранный текст терялся). Стало: обе кнопки заблокированы той же
    проверкой, что кнопка формы, текст остаётся в поле; сообщение об ошибке
    переносится на строки, а не обрезается.
  • Routing: у JSON-правила в списке нет выпадающего списка outbound. Было:
    тайл показывал direct даже для тела с action: reject, выбор ничего не
    менял. Стало: действие видно в подписи с телом правила, как в редакторе.
  • Восстановление бэкапа с заменой не возвращает стартовые вопросы. Было:
    после Replace и перезапуска заново всплывали «Add tile» и «Check for
    updates?». Стало: отметки «уже спрашивали» остаются на устройстве.

🪢 Tailscale

  • Каталог состояния держится за узлом (docs/spec/tasks/445).
    Было: каталог назывался по финальному тегу узла, поэтому переименование узла
    или смена префикса папки приводили к входу в tailnet новым устройством — а
    одноразовый ключ уже потрачен; удалённый узел оставлял ключи на диске; слоты
    Workspaces делили один набор каталогов. Стало: имя выдаётся узлу один раз и
    переживает переименование и перенос; удаление узла, папки или подписки удаляет
    каталог при остановленном ядре; у каждого слота свой набор.
  • Имя устройства в tailnet по умолчанию (docs/spec/tasks/449).
    Было: поле Hostname открывалось пустым, и имя выбирал сам Tailscale — брал имя
    хоста системы, отчего устройство появлялось в админке как node, а при
    нескольких узлах как node-1, node-2. Стало: поле заполнено значением
    LxBox-<модель устройства>; его можно править или стереть, и пустое поле
    по-прежнему отдаёт выбор имени Tailscale.

🧪 Тесты

  • 4782 теста, flutter analyze чист, все пять проверок pre-flight проходят.
  • Корпус контракта синхронизирован с десктопным лаунчером: кейсы новой формы
    ссылки проходят без локальных отступлений, кейсы отпечатков REALITY — по новой
    норме.

Install / Установка

adb install -r LxBox-v2.24.1-arm64-v8a.apk

Без uninstall! Поверх существующей установки. Настройки и подписки сохранятся.

No uninstall needed — install over the existing one. Settings and subscriptions
are preserved.


Previous release / Предыдущий релиз: v2.24.0.

Don't miss a new LxBox release

NewReleases is sending notifications on new releases.