Release Notes: v1.5.6-beta8
Release date: 2026-06-03
Extends the built-in 3x-ui migration (migrate-xui) to proxy outbounds, many
more routing matchers, non-reality TLS certificates and the DNS block.
Follow-up to v1.5.6-beta7. No schema migrations; existing data is preserved.
What changed
- Proxy outbounds now migrate as s-ui outbounds — previously only WARP
(WireGuard),freedomandblackholeoutbounds were handled; an Xray
outboundsentry of typevmess,vless,trojan,shadowsocks,socks
orhttpwas dropped silently, so a chained/proxy outbound disappeared from
the migrated panel. Each such outbound is now converted to a first-class s-ui
(sing-box) outbound: server/port, credentials (uuid/password/method/
user-pass), VLESSflow, the TLS/Reality block (peer public key, short id,
SNI, uTLS fingerprint) and the transport (ws/grpc/http/httpupgrade)
are translated from the Xraysettings/streamSettingsshape. The outbound
is also registered as a routing target, so a rule that referenced it now
resolves to the migrated outbound instead of being flagged "requires manual
review". - System outbounds map to their sing-box home —
freedom→directand
blackhole→block(as before), and adnsoutbound now becomes a
hijack-dnsroute action (sing-box has nodnsoutbound).loopbackand any
protocol Xray does not emit (e.g.hysteria) are surfaced as a warning to
recreate manually rather than dropped silently. - No silent loss when routing import is off — proxy/WARP outbounds live in
the sourcexrayConfig, which is only read during routing import. When
routing import is disabled but the source contains outbounds, the plan now
shows a warning that they were not migrated and how to migrate them, instead
of omitting them with no trace. - Outbounds are created only when new — a re-import or scheduled sync does not
clobber an operator-edited outbound of the same tag. The import report gains
anoutboundscounter (imported/skipped). - Migrated routing and DNS now apply to the live config — they are merged
into the active sing-boxconfigsetting (route rules/rule sets, DNS
servers/rules), preserving existing rules and de-duplicating rule sets/servers
by tag. Previously the import wrote them to a separate setting the panel never
loaded, so imported routing had no effect; it does now. - More routing matchers map instead of "manual review" —
port/sourcePort
(including ranges),network,protocol,source,inboundTag(→inbound),
user(→auth_user), and non-geositedomains
(domain:/full:/keyword:/regexp:/bare →domain_suffix/domain/
domain_keyword/domain_regex).geosite:/geoip:matches become remote
rule_sets (MetaCubeXmeta-rules-dat), since sing-box 1.12 removed the inline
geoip/geositeroute fields; a sourcegeoipuses
rule_set_ip_cidr_match_source.attrsandbalancerTagstill require manual
review, since sing-box has no equivalent. - The Xray
dnsblock is translated to sing-box's format — typed servers
(udp/tls/https/h3/quic/tcp/local), domain-scoped servers become
DNS rules, plusfinal, query strategy andclient_subnet. Previously the
block was copied verbatim, which produced an invalid sing-box DNS config.
hosts/fakednsand out-of-range ports are flagged. - Non-reality TLS certificates migrate — an inbound whose
tlsSettingscarry
an inline certificate/key gets a real s-ui TLS record (server certificate +
client block). A certificate referenced only by a file path is flagged for
manual upload, because the importer reads only the database, not the source
host's disk. - Smaller fidelity fixes — the WebSocket transport now carries every request
header (not justHost);packet_encoding(xudp) is set when the source
used it; a multi-server outbound becomes per-server members plus aurltest
group; and Xraymuxis reported rather than enabled, because sing-box
multiplex is not wire-compatible with Xray mux. - Web admin keeps unsaved edits during the background refresh — the Basics,
DNS and Routing pages edited the live store config object directly, so the
10-second background config poll (and WSconfig_invalidated/reloadevents)
ransetNewData(), which replaces that object wholesale and silently reverted
any in-progress edit. These pages now edit a local clone of the config (the
same isolation Settings already used) and keep your edits until you press Save. - Routing import can no longer produce a config sing-box refuses to load — an
Xray external geoip reference (ext:<file>:<code>, e.g.ext:geoip_RU.dat:ru)
and bare IPs were written intoip_cidrverbatim. sing-box parsesip_cidr
withnetip.ParsePrefix, which rejects a value without a mask
(ipcidr: parse: no '/'), so the migrated config failed to start the core in a
restart loop.ext:is now mapped to a geoip rule set by its trailing code (a
custom file is approximated by the standardgeoip-<code>set — verify it), a
bare IP gets a/32//128host mask, and anything that is neither a geoip code
nor a valid IP/CIDR is dropped with a warning instead of breaking the config. - Migrated DNS no longer stops the core from starting — a DNS server reached
over a domain (https://dns.google/...,tls://...) was emitted without a
domain_resolver. sing-box 1.13 builds DNS-server dialers with
DirectResolver: true, so a domain-addressed server with no per-server
domain_resolverfails immediately (missing domain resolver for domain server address) — a globaldefault_domain_resolverdoes not cover it. The
migration now sets a per-serverdomain_resolver(a DNS server tag) on every
domain-addressed server, reusing an IP-addressed server from the migration as
the bootstrap (or appending a local one), exactly as s-ui's own DNS editor does
via its Dial control. TLS/HTTP servers also get thetls/headersblocks so a
migrated server is identical to a natively-created one. - A Trojan inbound no longer crashes the core (not migration-specific) — the
inbound editor wrote a top-levelpasswordfor Trojan inbounds, but sing-box's
Trojan inbound has no such field (it authenticates per user viausers) and
rejects the whole config withunknown field "password". The password field is
now shown only for Trojan outbounds (where it is valid), and the config
builder drops any leftover top-levelpasswordfrom a Trojan inbound, so
existing inbounds recover on the next core reload without an edit.
Upgrade
No manual migration; existing data is preserved. Re-run the migration with
routing import enabled (the wizard enables it by default) to bring over proxy
outbounds, routing rules and the DNS block; review anything the report flags as
needing manual recreation (file-path TLS certificates, attrs/balancer rules,
loopback/mux).
Примечания к релизу: v1.5.6-beta8
Дата релиза: 2026-06-03
Расширяет встроенную миграцию 3x-ui (migrate-xui) на прокси-аутбаунды, гораздо
большее число матчеров маршрутизации, не-reality TLS-сертификаты и блок DNS.
Продолжение v1.5.6-beta7. Без миграций схемы; существующие данные сохраняются.
Что изменилось
- Прокси-аутбаунды теперь мигрируют как аутбаунды s-ui — раньше
обрабатывались только WARP (WireGuard),freedomиblackhole, а запись
outboundsXray типаvmess,vless,trojan,shadowsocks,socksили
httpмолча отбрасывалась, поэтому цепочечный/прокси-аутбаунд пропадал из
перенесённой панели. Теперь каждый такой аутбаунд превращается в полноценный
аутбаунд s-ui (sing-box): сервер/порт, учётные данные (uuid/password/
method/логин-пароль),flowдля VLESS, блок TLS/Reality (публичный ключ
пира, short id, SNI, отпечаток uTLS) и транспорт (ws/grpc/http/
httpupgrade) переводятся из формата Xraysettings/streamSettings.
Аутбаунд также регистрируется как цель маршрутизации, поэтому правило,
ссылавшееся на него, теперь резолвится в перенесённый аутбаунд вместо пометки
«требует ручной проверки». - Системные аутбаунды сопоставляются со своим аналогом в sing-box —
freedom→directиblackhole→block(как и раньше), а аутбаундdns
теперь превращается в действие маршрутаhijack-dns(в sing-box нет
аутбаундаdns).loopbackи любой протокол, которого нет в Xray (например,
hysteria), выводятся как предупреждение для ручного пересоздания, а не
отбрасываются молча. - Никакой тихой потери при выключенном импорте роутинга — прокси/WARP
аутбаунды лежат в исходномxrayConfig, который читается только при импорте
роутинга. Если импорт роутинга выключен, но в источнике есть аутбаунды, план
теперь показывает предупреждение, что они не перенесены и как их перенести,
вместо того чтобы опустить их без следа. - Аутбаунды создаются только если они новые — повторный импорт или
запланированная синхронизация не затирают отредактированный оператором
аутбаунд с тем же тегом. В отчёте об импорте появляется счётчикoutbounds
(импортировано/пропущено). - Миграция маршрутизации и DNS теперь применяется к живому конфигу — они
мерджатся в активную настройкуconfigsing-box (route-правила/rule-set,
DNS-серверы/правила) с сохранением существующих правил и дедупликацией по тегу.
Раньше импорт писал их в отдельную настройку, которую панель не загружала,
поэтому маршрутизация не действовала; теперь действует. - Больше матчеров маршрутизации переносится, а не уходит в «ручную проверку» —
port/sourcePort(включая диапазоны),network,protocol,source,
inboundTag(→inbound),user(→auth_user) и не-geositeдомены
(domain:/full:/keyword:/regexp:/без префикса →domain_suffix/domain/
domain_keyword/domain_regex). Матчерыgeosite:/geoip:становятся remote
rule_set(MetaCubeXmeta-rules-dat), так как sing-box 1.12 удалил инлайновые
поляgeoip/geosite; для sourcegeoipставится
rule_set_ip_cidr_match_source.attrsиbalancerTagпо-прежнему требуют
ручной проверки — в sing-box нет аналога. - Блок
dnsиз Xray переводится в формат sing-box — типизированные серверы
(udp/tls/https/h3/quic/tcp/local), серверы с привязкой к доменам
становятся dns-правилами, плюсfinal, стратегия запросов иclient_subnet.
Раньше блок копировался «как есть», что давало невалидный DNS-конфиг sing-box.
hosts/fakednsи порты вне диапазона отмечаются. - Не-reality TLS-сертификаты мигрируют — инбаунд, у которого в
tlsSettings
лежит inline-сертификат/ключ, получает настоящую TLS-запись s-ui (серверный
сертификат + клиентский блок). Сертификат, заданный только путём к файлу,
отмечается для ручной загрузки, так как импортёр читает лишь базу, а не диск
исходного хоста. - Мелкие улучшения точности — WebSocket-транспорт переносит все заголовки
запроса (не толькоHost);packet_encoding(xudp) выставляется, если
источник его использовал; аутбаунд с несколькими серверами превращается в
членов по-серверно плюс группуurltest; Xraymuxсообщается, а не
включается, так как мультиплекс sing-box несовместим по протоколу с Xray mux. - Веб-админка сохраняет несохранённые правки при фоновом обновлении —
страницы Basics, DNS и Routing редактировали живой объект конфига из стора
напрямую, поэтому 10-секундный фоновый опрос конфига (и события WS
config_invalidated/reload) вызывалиsetNewData(), который заменяет этот
объект целиком и молча откатывал любую правку в процессе. Теперь эти страницы
редактируют локальную копию конфига (та же изоляция, что уже была в Settings)
и держат правки до нажатия Save. - Импорт маршрутизации больше не создаёт конфиг, который sing-box не загружает —
Xray-ссылка на внешний geoip (ext:<файл>:<код>, напр.ext:geoip_RU.dat:ru)
и «голые» IP попадали вip_cidrкак есть. sing-box парситip_cidrчерез
netip.ParsePrefix, который отвергает значение без маски
(ipcidr: parse: no '/'), поэтому перенесённый конфиг не запускал ядро и оно
уходило в цикл рестартов. Теперьext:маппится в geoip rule_set по хвостовому
коду (кастомный файл приближается стандартным наборомgeoip-<код>— проверьте),
голым IP добавляется маска/32//128, а всё, что не geoip-код и не валидный
IP/CIDR, отбрасывается с предупреждением, а не ломает конфиг. - Мигрированный DNS больше не мешает ядру стартовать — DNS-сервер, заданный
доменом (https://dns.google/...,tls://...), выдавался безdomain_resolver.
sing-box 1.13 строит dialer DNS-серверов сDirectResolver: true, поэтому
доменный сервер без per-serverdomain_resolverпадает сразу (missing domain resolver for domain server address) — глобальныйdefault_domain_resolverего
не покрывает. Теперь миграция ставит per-serverdomain_resolver(тег
DNS-сервера) каждому доменному серверу, переиспользуя как bootstrap IP-адресный
сервер из миграции (или добавляя local), ровно как это делает встроенный
DNS-редактор s-ui через свой Dial. TLS/HTTP-серверам добавляются блоки
tls/headers, чтобы мигрированный сервер был идентичен созданному вручную. - Trojan-инбаунд больше не роняет ядро (не связано с миграцией) — редактор
инбаунда писал верхнеуровневыйpasswordдля Trojan-инбаундов, но у sing-box
такого поля нет (аутентификация поusers, по клиентам), и он отвергает весь
конфиг сunknown field "password". Поле пароля теперь показывается только для
Trojan-аутбаундов (где оно валидно), а сборщик конфига срезает оставшийся
верхнеуровневыйpasswordу Trojan-инбаунда — так что уже созданные инбаунды
чинятся на ближайшей перезагрузке ядра без правки.
Обновление
Ручная миграция не нужна, данные сохраняются. Перезапустите миграцию с
включённым импортом роутинга (мастер включает его по умолчанию), чтобы перенести
прокси-аутбаунды, правила маршрутизации и блок DNS; проверьте всё, что отчёт
пометил как требующее ручного пересоздания (TLS-сертификаты по путям к файлам,
правила attrs/балансировки, loopback/mux).