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.1The 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-launcherUpdate later with brew upgrade --cask singbox-launcher. The Cask installs the latest stable release, not a pre-release.
Option 3: Manual Installation
- Download:
singbox-launcher-v2.4.1-macos.zip - Extract the ZIP file
- Remove quarantine attribute (required):
xattr -cr "singbox-launcher.app" && chmod +x "singbox-launcher.app/Contents/MacOS/singbox-launcher"
- Double-click
singbox-launcher.appto 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)
- Download:
singbox-launcher-v2.4.1-win64-setup.exe - 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
- 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
- or
- 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-launcherinstead
- Under
- Run
singbox-launcher.exefrom 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-boxandwintun.dllon first launch
Windows 7 (x86, legacy)
- Download:
singbox-launcher-v2.4.1-win7-32.zip - 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 core1.14.4-lx.30-rc.2or 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, WindowsExcludeClipboardContentFromMonitorProcessing). 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;
requiredservers 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_keptnames 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 (
predefinedanswers*. 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 corpusrule_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 thesystemstack'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, corelx.21+) is now parsed by the registry like any other outbound: credentials andtlsare required,quictogether with uTLS is resolved the way the core demands (quicis 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/folderslists, creates and deletes folders (a folder with nodes only withwith_nodes=1; links to its nodes are removed);POST /state/serverstakes an optionaldetour(a root name or a node of a folder/subscription) for the nodes it adds;POST /remote/machines/{id}/config/rebuildbuilds a machine's config from its profile the way the wizard's Save does, and?deploy=1deploys it — profile edits made through the API no longer wait for Save in the UI. All of it is mirrored for remote machines.API.mdalso notes thatURLTestOutbound.timeoutis in milliseconds. - WireGuard: configurations with several peers keep all of them. A wg-quick
.conf(alsovpn://andawg://base64) with several[Peer]sections now becomes one node with all peers in file order — the core routes between them byAllowedIPs. Before, only the first peer was kept. A[Peer]withoutPublicKeyorEndpointis 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-resolvedcache 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
systemTUN stack blocked by firewalld. When the VPN is up but nothing loads andgvisorworks, a host firewall drops the local TCP forwarder of thesystemstack. The troubleshooting guide now has the narrowfirewall-cmdrule (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
trusttunneland 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 masquevhttp: autonode 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 sincev1.14.0-lx.27; the core no longer waits 10–16 s on start for an unrelated mux handshake. New:lxdruns the admin's own scripts at the core's lifecycle boundaries (pre_start,post_start,post_reload,post_stopin<state_dir>/hooks/, off by default,hooks.enabledindaemon.json, Unix only); the launcher does not manage them. lx.23: around_robinpool 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: XHTTPpacket-upupload 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 (astream-upwrite hanging after the server refused the upload, path slash, HTTP/2 pool and keep-alive, default Chrome headers, literal%inpath). lx.26: a DNSgroupcan carryhosts-type servers under the newhostskey — 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 itsdetourgroup and never goes below 1280 for a tunnel carrying IPv6 (a WARP tunnel over a large selector gets IPv6 back), AmneziaWGs4counts 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.dbis 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 streamdetour(no moreshort buffer1–5 s after the handshake); Tailscaledisable_taildropand the sender ID of received Taildrop files;lx.quic_sniff_decoy(see Highlights); theroute.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: theroute.lx_idle_*aliases are removed (the launcher never wrote them);golang.org/x/net,x/crypto,grpcupdated after govulncheck.
Technical / Internal
- Contract 1.1.141:
registry/protocols/trusttunnel.json(outbound, singbox source only, no core gate), threebody/singboxcorpus cases, LxBox §137. - Contract 1.1.144: the build cleans a DNS group's
hostskey (core1.14.4-lx.26, SPEC 143 of the core) after its members — only emitted servers of typehosts, no repeats, not the group itself and not its members stay, an empty list drops the key; ahostslink holds a server like a member does in backup import (used_bygroup:<tag>). Corpusdns/group_prunes_hosts,dns/group_hosts_all_dropped, LxBox §140. - Contract 1.1.145:
tcp_multi_path(Multipath TCP) moved fromskippedtobody.fieldsofregistry/dialer.json— a sing-box JSON node carrying it no longer loses the field withunknown_key; the launcher does not write it itself. Corpusbody/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>/taildropat 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_taildropfield withmin_core 1.14.4-lx.30-rc.2, emittedtrueunless the body saysfalse(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.jsongainsmtu_align,quic_sniff_decoy,masque_idle_timeout(both sides) and LxBox's fourwg_*(mobile only — desktop core builds lackwith_lx_idle_suspend); the rootlxblock is written by the template'sconfigthrough#if, a key only when it differs from the core default. No version gate: the core pin is1.14.4-lx.30. Contract 1.1.152:quic_sniff_decoyis a mode (off/detour/direct/all, defaultdetour), 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, WindowsExcludeClipboardContentFromMonitorProcessing). На 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: конфигурация с несколькими пирами сохраняет их все.
.confwg-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. Исправлено: узел masquevhttp: 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: аплинк XHTTPpacket-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), паддингs4AmneziaWG входит в накладные. 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: сборка чистит ключ
hostsDNS-группы (ядро1.14.4-lx.26, SPEC 143 ядра) после состава — остаются только эмитированные серверы типаhosts, без повторов, не сама группа и не её члены, пустой список снимает ключ; ссылка изhostsдержит сервер при импорте бэкапа как член (used_bygroup:<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.