github Leadaxe/singbox-launcher v2.4.1
release v2.4.1

2 hours ago

Release v2.4.1

Downloads

macOS (Universal) - Supports both Apple Silicon and Intel

Option 1: Installation Script (Recommended)

Install with a single command (version v2.4.1):

curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v2.4.1

The script will:

  • Download the release archive
  • Extract and install to /Applications/
  • Fix macOS quarantine attributes and permissions
  • Launch the application automatically

Option 2: Homebrew (stable releases only, available a few hours after the release)

brew install --cask leadaxe/tap/singbox-launcher

Update later with brew upgrade --cask singbox-launcher. The Cask installs the latest stable release, not a pre-release.

Option 3: Manual Installation

  1. Download: singbox-launcher-v2.4.1-macos.zip
  2. Extract the ZIP file
  3. Remove quarantine attribute (required):
    xattr -cr "singbox-launcher.app" && chmod +x "singbox-launcher.app/Contents/MacOS/singbox-launcher"
  4. Double-click singbox-launcher.app to run
    • If macOS blocks the app, go to System Settings → Privacy & Security and click "Open Anyway"
    • Alternatively, right-click the app and select "Open" (first time only)

Windows (amd64)

Option 1: Installer (Recommended)

  1. Download: singbox-launcher-v2.4.1-win64-setup.exe
  2. Run it and confirm the administrator prompt once. The launcher goes to C:\Program Files\singbox-launcher, your data to %LOCALAPPDATA%\singbox-launcher; sing-box.exe, wintun.dll, the config template and Mesa3D are included, nothing is downloaded on first launch
    • Tasks: desktop shortcut, Start with Windows, software OpenGL (Mesa3D) for RDP / VMs without a GPU
    • Installing over a previous version keeps your data; uninstall from Settings → Apps asks whether to remove the data too
    • The installer is not code-signed yet: if SmartScreen shows "Windows protected your PC", click More info → Run anyway

Option 2: Portable ZIP

  1. Download: singbox-launcher-v2.4.1-win64.zip
    • or singbox-launcher-v2.4.1-win64-full.zip — full bundle: sing-box.exe, wintun.dll, the config template and Mesa3D (mesa3d/, used only when no hardware OpenGL — RDP, VMs) are already inside, nothing is downloaded on first launch
  2. Extract the ZIP file to a folder your account can write to, for example D:\Tools\singbox-launcher\ — settings stay next to the program (portable.txt)
    • Under C:\Program Files\ the launcher keeps its data in %LOCALAPPDATA%\singbox-launcher instead
  3. Run singbox-launcher.exe from that folder — no administrator rights, no UAC prompt
    • TUN needs administrator rights: Start offers Restart as administrator or Switch to proxy mode
    • The regular archive downloads sing-box and wintun.dll on first launch

Windows 7 (x86, legacy)

  1. Download: singbox-launcher-v2.4.1-win7-32.zip
  2. Extract the ZIP file to a folder and run singbox-launcher-win7-32.exe
    • For Windows 7 / 32-bit or legacy compatibility only
    • Runs as administrator (UAC prompt on every start), settings stay next to the program (portable.txt); no installer and no daemon service

Linux Support

⚠️ Linux build temporarily unavailable - мы ищем тестировщика для ручного тестирования перед включением автоматической сборки.

Checksums

See checksums.txt for SHA256 checksums of all files.

Release notes — v2.4.1 (2026-11-03)

EN

A patch release after v2.4.0. Core sing-box-lx 1.14.4-lx.30 (was 1.14.3-lx.21), contract 1.1.156 (was 1.1.130).

New

  • Tailscale: send and receive files (Taildrop). The Network tab of a Tailscale node has a new Files section: files sent to this device show up there with their size and sender — Save puts the file into Downloads and removes it from the inbox, Delete removes it, a file still arriving shows its progress and Cancel. The … menu of an online device that accepts files has Send file… with a progress sheet. If Taildrop is off in the tailnet, the section says so. With Save to Downloads automatically on, received files go straight to Downloads even when the window is closed (macOS shows a notification); the setting belongs to this computer and is not in backups. Each Tailscale node keeps its own inbox in its state directory (taildrop_directory, set only when the node does not set it). Taildrop is off by default on every Tailscale node: turn on Allow Taildrop in the node settings (Add server → Tailscale or the node's edit window). Behaviour change: the core used to accept files on any Tailscale node silently; with core 1.14.4-lx.30-rc.2 or newer a node without the checkbox refuses incoming files until you allow it (contract 1.1.150). Works where the launcher talks to the core over gRPC: the macOS daemon, the Windows service (64-bit) and remote machines; not on Linux classic or 32-bit Windows. Same as LxBox.
  • Tailscale: clipboard and links between LxBox and the computer. In a device's … menu on the Network tab of a Tailscale node of this computer's core: Send text… opens a box with the current clipboard — Send to clipboard puts it into the device's clipboard, Open on opens a single http(s) link there. Accept clipboard and Accept links (off by default, per device, not in backups) let that device put text into this computer's clipboard and open links in the browser; a notification says so. Commands older than two minutes, from devices without the permission, or of unknown kinds are dropped, and the service file always leaves the inbox. A file received with Save to Downloads automatically off now shows a notification too. Remote machines' nodes keep such files as ordinary files. Same format as LxBox (contract docs/SERVICE_FILES.md).
  • Double copy sends the clipboard to your phone. Tick Send double copy here in a device's … menu (Tailscale node of this computer's core); from then on, copying the same text twice in a row (Cmd+C twice on macOS, Ctrl+C twice on Windows, within a second) sends it to that device's clipboard, with a notification. Passwords copied from a password manager are never sent (macOS ConcealedType, Windows ExcludeClipboardContentFromMonitorProcessing). Not on Linux. The phone accepts it only with its own clipboard permission for this computer. Contract 1.1.156.
  • DNS: template servers can be deleted. The template's DNS servers are now a catalog: they are added to your list once, and after that the list is yours — a template server you do not need can be deleted with Del and stays deleted after restarts and reopening the Configurator. Add from template opens the whole catalog: a deleted server comes back with the template's defaults, a server already in the list is added as your own copy (its current settings, a new tag) and opens in the editor; Add all defaults returns all deleted ones. A server that something still uses (Final DNS, the default domain resolver, a DNS rule, a rule's DNS option, a DNS group, another server's domain resolver, a preset) cannot be deleted: the tooltip says what uses it; required servers stay. Existing setups keep every server they had — the config does not change after the update.
  • Backup: deleted template DNS servers travel between devices. The backup file now carries the source's template catalog (dns.template_catalog) and the full server list. Importing a file removes a template server the source deleted — unless something here still uses it (backup_dns_entry_kept names what); Final DNS / default resolver pointing to a server missing here are reset to the template default, and an imported DNS group with no servers here comes in turned off. Older backups without the catalog are merged as before, nothing is removed. Same rules as LxBox (contract 1.1.135–1.1.136).
  • Rules: answer DNS with a fixed IP (hosts-style). The rule window's DNS tab now has Answer: Default (DNS Final), Dedicated server, or Fixed IP — one address per line, IPv4 or IPv6. Domains matched by the rule get these addresses straight from the core (predefined answers *. 300 IN A|AAAA <ip>; a family without addresses gets an empty answer), and traffic to them follows the rule's action. Same as LxBox; contract 1.1.139 (rules[].dns.fixedIps) with a shared corpus rule_dns.
  • Linux: TUN auto redirect. New setting Wizard → Settings → "TUN auto redirect (Linux)" (sing-box auto_redirect): TCP is routed into the core with nftables/iptables rules instead of the system stack's local forwarder, so a host firewall like firewalld no longer blocks the VPN. On by default on this computer, off for remote machines; emitted only on Linux with auto-route enabled. Confirmed by the reporter of issue #129 on openSUSE. Contract 1.1.133.
  • Settings: three core tunnel options. Wizard → Settings has Tunnel MTU alignment (lx.mtu_align: clamp by default, fill, off), QUIC sniff decoy (lx.quic_sniff_decoy: one non-QUIC byte ahead of the first QUIC packet of MASQUE, Hysteria2 and TUIC connections, so a relay that rewrites the destination by the sniffed SNI leaves it alone; by default only on connections carried by another outbound — through detour — and also direct, all, off) and MASQUE idle timeout (lx.masque.idle_timeout, off by default: closes an idle WARP tunnel and reopens it on demand; a node's own value wins). Same names and defaults as LxBox (contracts 1.1.151–1.1.152).
  • TrustTunnel nodes are known to the launcher. A sing-box JSON node of type trusttunnel (AdGuard TrustTunnel, core lx.21+) is now parsed by the registry like any other outbound: credentials and tls are required, quic together with uTLS is resolved the way the core demands (quic is dropped, the node runs over HTTP/2), unknown keys are reported. No share link and no Add server form yet — the node comes in as JSON. Contract 1.1.141.
  • Debug API: folders, node detour, and a machine's config built without the wizard (issue #152). GET/POST/DELETE /state/folders lists, creates and deletes folders (a folder with nodes only with with_nodes=1; links to its nodes are removed); POST /state/servers takes an optional detour (a root name or a node of a folder/subscription) for the nodes it adds; POST /remote/machines/{id}/config/rebuild builds a machine's config from its profile the way the wizard's Save does, and ?deploy=1 deploys it — profile edits made through the API no longer wait for Save in the UI. All of it is mirrored for remote machines. API.md also notes that URLTestOutbound.timeout is in milliseconds.
  • WireGuard: configurations with several peers keep all of them. A wg-quick .conf (also vpn:// and awg:// base64) with several [Peer] sections now becomes one node with all peers in file order — the core routes between them by AllowedIPs. Before, only the first peer was kept. A [Peer] without PublicKey or Endpoint is skipped on its own (wgconf_peer_dropped), and a peer with a broken key no longer drops the whole node — only that peer (wg_peer_dropped). Same as LxBox; contract 1.1.140.

Changed

  • TUN MTU defaults to 9000, as in sing-box. The template default for TUN MTU was 1492; it is now 9000, the core's own default, same as LxBox. A value you set yourself in Settings stays as it is. If UDP through a WireGuard/AmneziaWG node misbehaves, set TUN MTU back to 1492 or lower. Contract 1.1.143.
  • Backup import: an edited template DNS server stays one server. LxBox now lets you edit a template DNS server; the edit is saved as your own server under the same tag. Importing such a backup no longer lists the server twice, and no longer removes the template server as "deleted by the source". When both sides have the tag, the receiving side keeps its own record, whether it is the template one or the edited one. Contract 1.1.142.
  • macOS: notifications come from the launcher. Notifications (auto-deploy, short info messages) were shown as coming from Script Editor with its icon, and the launcher had no entry in Notifications settings: macOS refuses the modern notification API to an ad-hoc signed app, and the fallback was osascript. Now the launcher sends them through the older notification center, which works with an ad-hoc signature — notifications carry the launcher's icon, and on the first one macOS asks for permission once; it can then be turned on or off in System Settings → Notifications. If macOS refuses that center for the launcher (it remembers apps that once used the modern API), notifications go the old way, from Script Editor, as before.
  • Troubleshooting: Linux password prompts list the fifth Polkit action. The core (lx.24+) flushes the systemd-resolved cache on a network change, which is a fifth Polkit action, org.freedesktop.resolve1.flush-caches. The troubleshooting guide now lists all five and notes that a rule made from the original four-action recipe in issue #126 needs it added.
  • Troubleshooting: Linux system TUN stack blocked by firewalld. When the VPN is up but nothing loads and gvisor works, a host firewall drops the local TCP forwarder of the system stack. The troubleshooting guide now has the narrow firewall-cmd rule (issue #129).

Fixed

  • SRS rules with many links: dead links are named, not hidden. The real cause of "more than 7 SRS links fail" was a link that returns HTTP 404, not the group deadline: the download stopped at the first broken file and the dialog only said "see the log". Now every file of the rule is downloaded, and if some links do not exist the dialog lists them by file name so they can be removed from the rule.
  • macOS: windows no longer freeze after sleep. After the Mac woke up, the launcher's windows kept reacting to clicks but showed the pre-sleep picture until the window was resized. Now every window is resized by one pixel and back shortly after wake, which makes macOS give it a fresh drawing surface.
  • Fixed: saving a machine config with a TrustTunnel node showed "the machine will refuse it on Deploy". The candidate config is checked by the launcher's own bundled core; when that core is older than lx.21 it does not know trusttunnel and rejected the whole file, although the machine's newer core accepts it. With the registry entry the launcher no longer feeds the node to a core that cannot run it blindly; the check itself still uses the bundled core — update it to lx.21 or newer to get a clean Save.
  • Fixed: a remote machine stuck on a greyed-out "Connecting… 5/5". If you pressed Connect on another machine while one was still retrying, the first row kept the disabled "Connecting…" button forever and could not be connected again until restart. Now its retries stop and the row gets its Connect button back.

Core

  • sing-box-lx 1.14.4-lx.30 (was 1.14.3-lx.21), base upstream sing-box 1.14.4. Fixes: a masque vhttp: auto node no longer keeps the previous core instance in memory after every reload (Stop/Start, apply) — on a router the heap grew until the GC ate both CPU cores within days, affected since v1.14.0-lx.27; the core no longer waits 10–16 s on start for an unrelated mux handshake. New: lxd runs the admin's own scripts at the core's lifecycle boundaries (pre_start, post_start, post_reload, post_stop in <state_dir>/hooks/, off by default, hooks.enabled in daemon.json, Unix only); the launcher does not manage them. lx.23: a round_robin pool no longer sends new connections to a node that failed its last probe; stopping the core with many WireGuard/AmneziaWG endpoints is fast again; a stop hanging over 20 s writes a goroutine dump to the core log. lx.24: connection test through the core (a tree of stages with the root cause; the launcher does not show it yet). lx.25: XHTTP packet-up upload no longer waits for each POST's reply (single-stream upload is no longer capped by the round trip), six smaller XHTTP gaps against Xray closed (a stream-up write hanging after the server refused the upload, path slash, HTTP/2 pool and keep-alive, default Chrome headers, literal % in path). lx.26: a DNS group can carry hosts-type servers under the new hosts key — names they list are answered locally before the group picks a network member (the launcher cleans the key at build, contract 1.1.144); MTU alignment no longer clamps a WireGuard/MASQUE tunnel through a proxy member of its detour group and never goes below 1280 for a tunnel carrying IPv6 (a WARP tunnel over a large selector gets IPv6 back), AmneziaWG s4 counts in the overhead. lx.27: WireGuard/AmneziaWG peer status is per session — after a wake from idle sleep a peer no longer shows the destroyed session's handshake as live. lx.28: cache.db is taken over inside one process (issue #61); a MASQUE node no longer hangs the core on stop. lx.29: the memory limit is measured against the Go runtime, not the process RSS. lx.30: a MASQUE/Hysteria2/TUIC tunnel survives oversize datagrams through a stream detour (no more short buffer 1–5 s after the handshake); Tailscale disable_taildrop and the sender ID of received Taildrop files; lx.quic_sniff_decoy (see Highlights); the route.lx_idle_* aliases are removed (the launcher never wrote them); dependencies updated by govulncheck. This release has no UPX-packed router builds: Download core for a machine with a packed core falls back to the plain binary with a warning. lx.30: the route.lx_idle_* aliases are removed (the launcher never wrote them); golang.org/x/net, x/crypto, grpc updated after govulncheck.

Technical / Internal

  • Contract 1.1.141: registry/protocols/trusttunnel.json (outbound, singbox source only, no core gate), three body/singbox corpus cases, LxBox §137.
  • Contract 1.1.144: the build cleans a DNS group's hosts key (core 1.14.4-lx.26, SPEC 143 of the core) after its members — only emitted servers of type hosts, no repeats, not the group itself and not its members stay, an empty list drops the key; a hosts link holds a server like a member does in backup import (used_by group:<tag>). Corpus dns/group_prunes_hosts, dns/group_hosts_all_dropped, LxBox §140.
  • Contract 1.1.145: tcp_multi_path (Multipath TCP) moved from skipped to body.fields of registry/dialer.json — a sing-box JSON node carrying it no longer loses the field with unknown_key; the launcher does not write it itself. Corpus body/singbox/dialer_tcp_multi_path, LxBox §141.
  • Contract 1.1.146–1.1.150, 1.1.153–1.1.156: Taildrop. taildrop_directory = <state_directory>/taildrop at build (1.1.147); service files over Taildrop (registry/service_files.json, docs/SERVICE_FILES.md, 1.1.148–1.1.149; a sensitive clip may be sent after showing it, 1.1.153; implemented by the launcher, 1.1.154); disable_taildrop field with min_core 1.14.4-lx.30-rc.2, emitted true unless the body says false (1.1.150). The core field gate now orders pre-releases: lx.30-rc.1 < lx.30-rc.2 < lx.30.
  • Contract 1.1.151: registry/vars.json gains mtu_align, quic_sniff_decoy, masque_idle_timeout (both sides) and LxBox's four wg_* (mobile only — desktop core builds lack with_lx_idle_suspend); the root lx block is written by the template's config through #if, a key only when it differs from the core default. No version gate: the core pin is 1.14.4-lx.30. Contract 1.1.152: quic_sniff_decoy is a mode (off/detour/direct/all, default detour), emitted only for the three on-modes via #in. LxBox §147–§148.

RU

Патч после v2.4.0. Ядро sing-box-lx 1.14.4-lx.30 (было 1.14.3-lx.21), контракт 1.1.156 (было 1.1.130).

Новое

  • Tailscale: отправка и приём файлов (Taildrop). На вкладке Network узла Tailscale появилась секция Files: присланные на это устройство файлы видны с размером и отправителем — Save кладёт файл в «Загрузки» и убирает из входящих, Delete удаляет, у принимаемого файла — прогресс и Cancel. В меню … устройства, которое в сети и принимает файлы, — Send file… с листом прогресса. Если Taildrop в tailnet выключен, секция так и пишет. С галкой Save to Downloads automatically принятые файлы сами ложатся в «Загрузки», даже при закрытом окне (на macOS — уведомление); галка — настройка этого компьютера, в бэкап не идёт. Входящие у каждого узла Tailscale свои, в его каталоге состояния (taildrop_directory, ставится, только если узел не задал его сам). Taildrop по умолчанию выключен у каждого узла Tailscale: включается галкой Allow Taildrop в настройках узла (Add server → Tailscale или окно правки узла). Смена поведения: раньше ядро молча принимало файлы на любой узел Tailscale; с ядром 1.14.4-lx.30-rc.2 и новее узел без галки входящие отклоняет, пока его не разрешить (контракт 1.1.150). Работает там, где лаунчер говорит с ядром по gRPC: демон macOS, служба Windows (64 бита) и удалённые машины; на Linux classic и 32-битной Windows — нет. Как у LxBox.
  • Tailscale: буфер обмена и ссылки между LxBox и компьютером. В меню … устройства на вкладке Network узла Tailscale своего ядра: Send text… открывает поле с текущим буфером — Send to clipboard кладёт текст в буфер устройства, Open on <устройство> открывает там одну http(s)-ссылку. Галки Accept clipboard и Accept links (по умолчанию выключены, на устройство, в бэкап не идут) разрешают устройству класть текст в буфер этого компьютера и открывать ссылки в браузере; об этом приходит уведомление. Команды старше двух минут, от устройства без разрешения и неизвестных видов отбрасываются, служебный файл из входящих уходит всегда. Принятый файл без галки Save to Downloads automatically теперь тоже даёт уведомление. У узлов удалённых машин такие файлы остаются обычными. Формат общий с LxBox (контракт docs/SERVICE_FILES.md).
  • Двойное копирование отправляет буфер на телефон. Поставьте галку Send double copy here в меню … устройства (узел Tailscale своего ядра) — дальше текст, скопированный дважды подряд (Cmd+C два раза на macOS, Ctrl+C два раза на Windows, в пределах секунды), уходит в буфер этого устройства, об этом приходит уведомление. Пароли из менеджера паролей не уходят никогда (macOS ConcealedType, Windows ExcludeClipboardContentFromMonitorProcessing). На Linux — нет. Телефон принимает только с разрешением на буфер от этого компьютера. Контракт 1.1.156.
  • DNS: шаблонные серверы можно удалять. DNS-серверы шаблона теперь каталог: в ваш список они попадают один раз, дальше список ваш — ненужный шаблонный сервер удаляется кнопкой Del и не возвращается ни перезапуском, ни повторным открытием Конфигуратора. Добавить из шаблона открывает весь каталог: удалённый сервер возвращается с настройками шаблона, уже добавленный — появляется вашей копией (текущие настройки, новый тег) и сразу открывается в редакторе; Вернуть все шаблонные — все удалённые сразу. Сервер, который что-то использует (Final DNS, резолвер доменов по умолчанию, DNS-правило, DNS-опция правила, DNS-группа, резолвер другого сервера, пресет), удалить нельзя — подсказка называет, кто его держит; обязательные (required) серверы остаются. У существующих настроек все серверы на месте — конфиг после обновления тот же.
  • Бэкап: удалённые шаблонные DNS-серверы переносятся между устройствами. Файл бэкапа несёт каталог шаблона источника (dns.template_catalog) и полный список серверов. Импорт снимает шаблонный сервер, удалённый источником, — если здесь его ничего не держит (иначе backup_dns_entry_kept называет, что держит); Final DNS и резолвер по умолчанию на сервер, которого здесь нет, сбрасываются на умолчание шаблона, а ввезённая DNS-группа без серверов приезжает выключенной. Старые бэкапы без каталога сливаются как раньше, ничего не снимается. Правила те же, что у LxBox (контракт 1.1.135–1.1.136).
  • Правила: ответ DNS фиксированным IP (как hosts). На вкладке DNS окна правила появился Ответ: По умолчанию (DNS Final), Отдельный сервер или Фиксированный IP — по одному адресу в строке, IPv4 или IPv6. Домены правила получают эти адреса прямо от ядра (predefined, записи *. 300 IN A|AAAA <ip>; семейство без адресов — пустой ответ), а трафик к ним идёт по действию правила. Как у LxBox; контракт 1.1.139 (rules[].dns.fixedIps), общий корпус rule_dns.
  • Linux: TUN auto redirect. Новая настройка Wizard → Settings → «TUN auto redirect (Linux)» (sing-box auto_redirect): TCP заворачивается в ядро правилами nftables/iptables вместо локального форвардера стека system, и хост-файрвол вроде firewalld больше не блокирует VPN. По умолчанию включена на этом компьютере, выключена для удалённых машин; эмитится только на Linux при включённом auto-route. Подтверждено автором issue #129 на openSUSE. Контракт 1.1.133.
  • Settings: три настройки туннелей ядра. В Мастере → Settings появились Tunnel MTU alignment (lx.mtu_align: по умолчанию clamp, ещё fill и off), QUIC sniff decoy (lx.quic_sniff_decoy: один не-QUIC байт перед первым QUIC-пакетом соединений MASQUE, Hysteria2 и TUIC, чтобы релей, переписывающий адрес по подсмотренному SNI, его не трогал; по умолчанию только на соединениях через другой outbound — through detour, ещё direct, all, off) и MASQUE idle timeout (lx.masque.idle_timeout, по умолчанию выключено: простаивающий туннель WARP закрывается и открывается снова по требованию; значение узла сильнее). Имена и дефолты как в LxBox (контракты 1.1.151–1.1.152).
  • Узлы TrustTunnel известны лаунчеру. Узел sing-box JSON типа trusttunnel (AdGuard TrustTunnel, ядро lx.21+) теперь разбирается реестром как любой другой outbound: учётные данные и tls обязательны, quic вместе с uTLS разрешается так, как требует ядро (quic снимается, узел идёт по HTTP/2), незнакомые ключи называются. Ссылки для обмена и формы Add server пока нет — узел приходит JSON'ом. Контракт 1.1.141.
  • Debug API: папки, detour узла и сборка конфига машины без Мастера (issue #152). GET/POST/DELETE /state/folders показывает, заводит и удаляет папки (непустую — только с with_nodes=1, ссылки на её узлы снимаются); POST /state/servers принимает необязательный detour (корневое имя или узел папки/подписки) для добавляемых узлов; POST /remote/machines/{id}/config/rebuild собирает конфиг машины из её профиля так же, как Save Мастера, а ?deploy=1 сразу его деплоит — правки профиля через API больше не ждут Save в интерфейсе. Всё зеркалировано для удалённых машин. В API.md добавлено, что URLTestOutbound.timeout — в миллисекундах.
  • WireGuard: конфигурация с несколькими пирами сохраняет их все. .conf wg-quick (а также vpn:// и awg:// base64) с несколькими секциями [Peer] теперь становится одним узлом со всеми пирами в порядке файла — трафик между ними ядро разводит по AllowedIPs. Раньше оставался только первый пир. [Peer] без PublicKey или Endpoint пропускается одна (wgconf_peer_dropped), а пир с битым ключом больше не роняет весь узел — снимается только он (wg_peer_dropped). Как у LxBox; контракт 1.1.140.

Изменено

  • TUN MTU по умолчанию 9000, как в sing-box. Дефолт TUN MTU в шаблоне был 1492, теперь 9000 — собственный дефолт ядра, как у LxBox. Значение, заданное вами в Settings, остаётся как есть. Если UDP через узел WireGuard/AmneziaWG ведёт себя плохо, верните TUN MTU 1492 или меньше. Контракт 1.1.143.
  • Импорт бэкапа: правленый шаблонный DNS-сервер остаётся одним сервером. В LxBox шаблонный DNS-сервер теперь можно править; правка сохраняется своим сервером под тем же тегом. Импорт такого бэкапа больше не показывает сервер дважды и не снимает шаблонный сервер как «удалённый источником». Когда тег есть у обеих сторон, остаётся запись приёмника — шаблонная или правленая. Контракт 1.1.142.
  • macOS: уведомления приходят от лаунчера. Уведомления (автодеплой, короткие информационные сообщения) показывались от имени «Редактора скриптов» с его иконкой, а в настройках уведомлений лаунчера не было: ad-hoc подписанному приложению macOS не даёт новый API уведомлений, и запасным путём был osascript. Теперь лаунчер шлёт их через прежний центр уведомлений, который работает с ad-hoc подписью, — уведомления идут с иконкой лаунчера, при первом macOS один раз спрашивает разрешение, дальше их можно включать и выключать в «Системные настройки → Уведомления». Если macOS не пускает лаунчер к этому центру (она помнит приложения, когда-то ходившие через новый API), уведомления идут старым путём, от «Редактора скриптов», как раньше.
  • Troubleshooting: в запросах пароля на Linux появилось пятое действие Polkit. Ядро (lx.24+) сбрасывает кэш systemd-resolved при смене сети — это пятое действие Polkit, org.freedesktop.resolve1.flush-caches. В руководстве по диагностике теперь перечислены все пять и сказано, что правило по первой версии рецепта из issue #126 нужно дополнить.
  • Troubleshooting: стек system на Linux режет firewalld. Когда VPN поднят, но ничего не грузится, а с gvisor работает, хост-файрвол рубит локальный TCP-форвардер стека system. В руководстве по диагностике появилось точечное правило firewall-cmd (issue #129).

Исправлено

  • SRS-правило с множеством ссылок: мёртвые ссылки называются поимённо. Настоящая причина «больше 7 SRS-ссылок не работает» — ссылка, отвечающая HTTP 404, а не дедлайн группы: загрузка вставала на первом битом файле, а окно писало только «подробности в логе». Теперь качаются все файлы правила, и если каких-то ссылок не существует, окно перечисляет их по имени файла, чтобы их убрали из правила.
  • macOS: окна больше не замирают после сна. После пробуждения Мака окна лаунчера реагировали на клики, но показывали картинку до сна, пока окно не потянешь за край. Теперь вскоре после пробуждения каждое окно на мгновение увеличивается на пиксель и возвращается обратно — macOS выдаёт ему новую поверхность для рисования.
  • Исправлено: сохранение конфига машины с узлом TrustTunnel показывало «машина откажет на Deploy». Кандидат конфига проверяет ядро из бандла лаунчера; если оно старше lx.21, оно не знает trusttunnel и отвергало весь файл, хотя более новое ядро на машине его принимает. С записью в реестре лаунчер больше не отдаёт узел ядру вслепую; сама проверка по-прежнему идёт ядром бандла — обновите его до lx.21 или новее, чтобы Save проходил чисто.
  • Исправлено: удалённая машина застревала на неактивной «Connecting… 5/5». Если, пока одна машина повторяла попытки, нажать Connect у другой, строка первой навсегда оставалась с серой кнопкой «Connecting…», и подключиться к ней снова можно было только после перезапуска. Теперь её повторы прекращаются, и в строку возвращается кнопка Connect.

Ядро

  • sing-box-lx 1.14.4-lx.30 (было 1.14.3-lx.21), база — апстримный sing-box 1.14.4. Исправлено: узел masque vhttp: auto больше не держит в памяти предыдущий экземпляр ядра после каждой пересборки (Stop/Start, apply) — на роутере куча росла, пока GC за несколько дней не съедал оба ядра CPU, затронуты версии с v1.14.0-lx.27; старт ядра больше не ждёт 10–16 с чужой mux-handshake. Новое: lxd запускает скрипты администратора на границах жизненного цикла ядра (pre_start, post_start, post_reload, post_stop в <state_dir>/hooks/, по умолчанию выключено, hooks.enabled в daemon.json, только Unix); лаунчер ими не управляет. lx.23: пул round_robin больше не отправляет новые соединения узлу, провалившему последнюю пробу; остановка ядра с многими WireGuard/AmneziaWG-endpoint'ами снова быстрая; остановка, зависшая дольше 20 с, пишет дамп горутин в лог ядра. lx.24: проверка соединения силами ядра (дерево стадий с корневой причиной; лаунчер её пока не показывает). lx.25: аплинк XHTTP packet-up больше не ждёт ответа на каждый POST (скорость выгрузки одного потока не привязана к RTT), закрыты шесть мелких расхождений XHTTP с Xray (зависавшая запись stream-up после отказа сервера, слэш в пути, пул и keep-alive HTTP/2, заголовки Chrome по умолчанию, % в path буквально). lx.26: DNS-группа group может нести серверы типа hosts в новом ключе hosts — имена из их списков отвечаются локально до выбора сетевого участника (лаунчер чистит ключ при сборке, контракт 1.1.144); выравнивание MTU больше не зажимает туннель WireGuard/MASQUE через прокси-участника группы в его detour и не опускает ниже 1280 туннель, несущий IPv6 (у WARP над большим селектором возвращается IPv6), паддинг s4 AmneziaWG входит в накладные. lx.27: статус пира WireGuard/AmneziaWG считается по сессии — после пробуждения из сна пир больше не показывает рукопожатие уничтоженной сессии как живое. lx.28: cache.db перехватывается внутри одного процесса (issue #61); узел MASQUE больше не вешает ядро на остановке. lx.29: лимит памяти меряется по рантайму Go, а не по RSS процесса. lx.30: туннель MASQUE/Hysteria2/TUIC переживает слишком большие датаграммы через потоковый detour (больше нет short buffer через 1–5 с после рукопожатия); disable_taildrop у Tailscale и ID отправителя принятых файлов Taildrop; lx.quic_sniff_decoy (см. Основное); алиасы route.lx_idle_* удалены (лаунчер их не писал); зависимости обновлены по govulncheck. В релизе нет UPX-сжатых роутерных сборок: Download core для машины со сжатым ядром берёт обычный бинарь с предупреждением. lx.30: алиасы route.lx_idle_* удалены (лаунчер их не писал); golang.org/x/net, x/crypto, grpc обновлены по govulncheck.

Техническое / Внутреннее

  • Контракт 1.1.141: registry/protocols/trusttunnel.json (outbound, только источник singbox, без гейта по ядру), три кейса корпуса body/singbox, LxBox §137.
  • Контракт 1.1.144: сборка чистит ключ hosts DNS-группы (ядро 1.14.4-lx.26, SPEC 143 ядра) после состава — остаются только эмитированные серверы типа hosts, без повторов, не сама группа и не её члены, пустой список снимает ключ; ссылка из hosts держит сервер при импорте бэкапа как член (used_by group:<tag>). Корпус dns/group_prunes_hosts, dns/group_hosts_all_dropped, LxBox §140.
  • Контракт 1.1.145: tcp_multi_path (Multipath TCP) перенесён из skipped в body.fields реестра registry/dialer.json — узел sing-box JSON с этим полем больше не теряет его с unknown_key; сам лаунчер его не пишет. Корпус body/singbox/dialer_tcp_multi_path, LxBox §141.
  • Контракт 1.1.146–1.1.150, 1.1.153–1.1.156: Taildrop. taildrop_directory = <state_directory>/taildrop при сборке (1.1.147); служебные файлы поверх Taildrop (registry/service_files.json, docs/SERVICE_FILES.md, 1.1.148–1.1.149; чувствительный клип можно отправить после показа, 1.1.153; реализовано у лаунчера, 1.1.154); поле disable_taildrop с min_core 1.14.4-lx.30-rc.2, эмитится true, если в теле нет false (1.1.150). Полевой гейт ядра различает пре-релизы: lx.30-rc.1 < lx.30-rc.2 < lx.30.
  • Контракт 1.1.151: в registry/vars.json — mtu_align, quic_sniff_decoy, masque_idle_timeout (обе стороны) и четыре wg_* LxBox (только mobile — десктопные сборки ядра без with_lx_idle_suspend); корневой блок lx пишет config шаблона через #if, ключ — только если отличается от дефолта ядра. Гейта по версии нет: пин ядра 1.14.4-lx.30. Контракт 1.1.152: quic_sniff_decoy — режим (off/detour/direct/all, дефолт detour), эмитится только для трёх включающих режимов через #in. LxBox §147–§148.

Don't miss a new singbox-launcher release

NewReleases is sending notifications on new releases.