Импорт

Chute может импортировать конфигурацию прокси, написанную для других клиентов. Принимаются два вида входных данных: ссылки для обмена для отдельных узлов (ss://, vmess://, …) и целые профили в формате Clash/mihomo YAML или sing-box JSON. И то и другое преобразуется в нативную конфигурацию Chute — в результате вы получаете обычный профиль Chute с разделами [Proxy], [Proxy Group] и [Rule], а не чужой файл, который Chute продолжает интерпретировать.

Адреса http:// и https:// никогда не считаются ссылками для обмена. Это адреса подписок: сначала загружается содержимое, а затем оно импортируется в соответствии с тем, чем окажется тело ответа.


Схема Результирующий тип политики Порт по умолчанию
ss:// ss 8388
vmess:// vmess 443
vless:// vless 443
trojan:// trojan 443
hysteria2://, hy2:// hysteria2 443
tuic:// tuic 443
anytls:// anytls 443
socks5://, socks:// socks5 1080
ssh:// ssh 22

Большинство ссылок имеют вид userinfo@host:port?query#name. Две отличаются: vmess:// содержит JSON-объект в кодировке base64 (формат v2rayN с именами полей add / ps / scy / net / aid), а ss:// принимает как SIP002 (base64(method:password)@host:port), так и более старую форму с кодированием всего тела base64(method:password@host:port). Полезная нагрузка base64 может быть записана без заполнения и может использовать URL-безопасный алфавит.

trojan://[email protected]:443?sni=example.com&alpn=h2,http/1.1#Tokyo%20Node

преобразуется в:

[Proxy]
Tokyo Node = trojan, example.com, 443, password=password, tls=true, sni=example.com, alpn=h2|http/1.1

Текст после # декодируется из процентной кодировки и становится именем политики; для vmess:// оно берется из поля ps. Ссылка без имени получает имя host:port. Символы, зарезервированные форматом конфигурации — =, ,, [, ], ", табуляция и перевод строки, — заменяются в имени пробелами.

Trojan, Hysteria2, TUIC и AnyTLS — протоколы, работающие только поверх TLS, поэтому tls=true добавляется, даже если ссылка это явно не указывает.

Несколько ссылок. Полезная нагрузка может содержать много ссылок для обмена, разделенных переводами строк и, возможно, обернутых одним внешним слоем base64. Каждая строка, которая успешно разбирается, становится политикой, а повторяющиеся имена получают суффиксы 2, 3 …, чтобы правила и группы по-прежнему могли обращаться к каждому узлу по отдельности. Строки, которые не удалось разобрать, отмечаются предупреждениями, а остальная часть полезной нагрузки все равно импортируется; импорт завершается ошибкой только тогда, когда не удалось преобразовать вообще ничего.

Ссылка со схемой, отсутствующей в таблице выше, не распознается как ссылка для обмена. Ссылка с известной схемой, но без обязательных полей отклоняется с сообщением, называющим эту схему.

Считываются только перечисленные ниже параметры запроса; все остальное в ссылке игнорируется.

Параметр Применяется к Преобразуется в
sni, peer, servername Всем sni
alpn (через запятую) Всем alpn (значения объединяются через `\ `)
fp Всем fingerprint (профиль ClientHello uTLS)
allowInsecure, insecure, skip-cert-verify Всем skip-cert-verify=true
security=tls, xtls, reality Всем tls=true
pbk, sid REALITY reality=true, public-key, short-id
flow VLESS xtls=true, flow
type/network=ws + path, host Всем ws=true, ws-path, ws-headers=Host:…
type/network=grpc + serviceName (или path) Всем grpc=true, grpc-service-name
type/network=xhttp или splithttp + path, host, mode Всем xhttp=true, xhttp-path, xhttp-host, xhttp-mode
obfs, obfs-password, up, down Hysteria2 Те же имена параметров
plugin=… Shadowsocks См. ниже

Значение plugin в Shadowsocks читается как name;key=value;…. obfs-local / simple-obfs / obfs превращаются в obfs и obfs_param; v2ray-plugin в своем (используемом по умолчанию) режиме websocket превращается в ws=true с ws-path и ws-headers. Любой другой плагин вызывает предупреждение и не переносится — получившаяся политика не подключится к серверу, который его требует.

Внимание: Ненулевое значение aid (alterId) в VMess отмечается предупреждением. Chute поддерживает только VMess AEAD, и сервер, все еще требующий устаревшего рукопожатия MD5, не пройдет аутентификацию.


Импорт профилей

Распознаются три формата:

Формат Обработка
Нативный профиль Chute/Surge Используется как есть, без этапа преобразования
Clash / mihomo YAML Преобразуется в нативную конфигурацию
sing-box JSON Преобразуется в нативную конфигурацию

Формат определяется по содержимому, а имя файла используется только как подсказка. Содержимое, начинающееся с {, считается sing-box JSON независимо от того, как называется файл (профиль sing-box, сохраненный как .yaml, все равно разбирается как YAML, поэтому одному имени доверять нельзя). В остальных случаях расширение .conf означает нативный формат, .json — sing-box, а .yaml / .yml — Clash. Когда пригодного имени файла нет — например, у тела подписки, — решает первая значащая строка: #!MANAGED-CONFIG или заголовок [Section] означают нативный формат, а proxies:, proxy-groups:, rules:, proxy-providers: или rule-providers: означают Clash. Все остальное считается нативным форматом.

Документ, который успешно разбирается, но не содержит ни одного из разделов, определяющих его диалект, отклоняется, а не выдается как успешный импорт пустоты: для Clash YAML нужен хотя бы один из proxies, proxy-groups, rules, proxy-providers или rule-providers, а для sing-box JSON — outbounds, endpoints или route.

Одна непреобразуемая запись никогда не срывает импорт. Каждый прокси, каждая группа и каждое правило преобразуются по отдельности; те, у которых нет эквивалента в Chute, пропускаются и отмечаются в отчете. Результат содержит преобразованную конфигурацию, список предупреждений и список пропущенных полей исходного файла. Те же предупреждения записываются и в преобразованный текст в виде комментариев, рядом с разделом, из которого они появились:

[Proxy]
HK 01 = ss, example.com, 8388, aes-128-gcm, password
# KL-CONVERT-WARNING [proxies[3]]: proxy type 'snell' was skipped — Snell is a Surge-proprietary protocol KLNEKit does not implement

Наконец, преобразованный текст повторно разбирается собственным парсером Chute. Любая строка, отклоненная парсером, закомментируется как # KL-CONVERT-DROPPED: … и попадает в отчет, поэтому профиль, преобразуемый на 95%, все равно импортируется и работает.

Имена узлов переписываются там, где они нарушили бы формат конфигурации: , заменяется пробелом, а = — на -; имя, которое после этого совпадает с другим, получает числовой суффикс. Члены групп и назначения правил переписываются соответствующим образом, поэтому каждая ссылка продолжает указывать на тот же узел. Прокси/исходящие соединения direct сопоставляются со встроенной политикой DIRECT, а reject / block / dns — с REJECT.

Внимание: Преобразованный профиль — это статический снимок. Chute повторно загружает подписку и разбирает ее как нативный профиль, поэтому профиль, который потребовалось преобразовать, сохраняется без URL автообновления и не будет обновляться сам.

Замечания по преобразованию Clash / mihomo

Внимание: dialer-proxy преобразуется в underlying-proxy. Chute разбирает и сохраняет этот параметр, но не реализует цепочки прокси — политика с этим параметром записывает предупреждение в журнал и подключается напрямую к своему собственному серверу. Трафик, который в mihomo шел по цепочке, после импорта по цепочке не идет.

  • Преобразуемые типы прокси: ss, ssr, vmess, vless, trojan, http, socks5, hysteria2, tuic, anytls, wireguard, ssh. Типы, для которых у Chute нет реализации — snell, hysteria (v1), mieru, juicity, shadowquic, trusttunnel, openvpn, sudoku, vmess-http, — пропускаются с предупреждением, называющим протокол. Еще два пропускаются, хотя сам протокол Chute поддерживает: прокси masque, поскольку раскладка полей в mihomo отличается, и прокси tailscale, который настраивается один раз в разделе [Tailscale] и используется через встроенную политику TAILSCALE.
  • Два ключа отпечатков в mihomo означают разное и не смешиваются: client-fingerprint превращается в fingerprint (профиль ClientHello uTLS), а fingerprint — в cert-fingerprint-sha256 (закрепление сертификата).
  • udp: false превращается в udp-relay=false, tfo — в tfo=true, а включенный блок smux — в mux=true.
  • Типы групп select, url-test, fallback и load-balance преобразуются вместе со своими параметрами проверки работоспособности. Группа relay пропускается — это цепочка, которая не реализована. Члены из use: превращаются в ссылки policy-provider:<name>, а include-all / include-all-proxies / include-all-providers разворачиваются в явный список членов.
  • filter и exclude-filter переносятся в кавычках, но шаблон, содержащий запятую или кавычку, не может уцелеть в формате строки конфигурации и отбрасывается с предупреждением.
  • Типы правил переименовываются там, где имена различаются: MATCHFINAL, DST-PORTDEST-PORT, SRC-IP-CIDRSRC-IP. REJECT-DROP и REJECT-TINYGIF сводятся к REJECT; правило, указывающее на PASS или COMPATIBLE, пропускается.
  • Встроенный rule-provider (type: inline со списком payload) разворачивается в эквивалентные конкретные правила, поскольку строка [Rule Provider] в Chute не может содержать встроенную полезную нагрузку.
  • Общие ключи сопоставляются там, где есть эквивалент: mixed-port становится HTTP-портом port (для SOCKS5 нужен собственный socks-port), allow-lanallow-wifi-access, log-level сопоставляется с loglevel, external-controller/secret становятся параметрами внешнего HTTP-контроллера, а включенный sniffersniffing-enabled.

Замечания по преобразованию sing-box

  • Преобразуемые типы исходящих соединений (outbound): shadowsocks, vmess, vless, trojan, hysteria2, tuic, anytls, shadowtls, wireguard, http, socks, ssh. selector и urltest становятся группами политик select и url-test.
  • detour вызывает предупреждение по той же причине, что и dialer-proxy: построение цепочек исходящих соединений не реализовано, и исходящее соединение подключается напрямую к своему собственному серверу.
  • Записи route.rule_set превращаются в строки [Rule Provider] (type=http для удаленных, type=file для локальных; всегда читаются как классические списки правил в формате mihomo YAML). Набор правил в двоичном формате .srs отклоняется — Chute читает только текстовые полезные нагрузки правил.
  • Правила маршрутизации следуют ключу action: route/bypass используют указанное исходящее соединение, reject превращается в REJECT, а hijack-dns, sniff и resolve не порождают ничего, поскольку Chute управляет ими из [General].
  • Настройки multiplex и dns.rules (маршрутизация DNS по доменам) не имеют эквивалента и отмечаются как отброшенные.

Ограничения

  • Цепочки прокси не реализованы. dialer-proxy в mihomo, detour в sing-box и группы relay в Clash — все они описывают цепочку; ни одна из них не приводит к передаче трафика по цепочке в Chute.
  • Параметры, не имеющие эквивалента в Chute, отбрасываются с предупреждением, а не молча: у прокси — ip-version, interface-name, routing-mark и mptcp; у групп — exclude-type, disable-udp, interface-name, routing-mark и icon; а также общие ключи bind-address, tcp-concurrent, geodata-mode, geox-url, find-process-mode, unified-delay, authentication, tproxy-port, redir-port и другие.
  • Типы правил, не имеющие эквивалента, пропускаются: GEOSITE, IP-SUFFIX, SRC-IP-SUFFIX, SRC-GEOIP, SRC-IP-ASN, DSCP, UID, SUB-RULE, PROCESS-PATH-REGEX, PROCESS-NAME-WILDCARD, PROCESS-PATH-WILDCARD и IP-ACCEPT. Правило с модификатором src из mihomo также пропускается, вместо того чтобы сопоставляться не с той конечной точкой. sub-rules из mihomo (вложенные деревья правил) отбрасываются.
  • Детали протоколов, которыми Chute управляет самостоятельно, не переносятся: перескок портов в Hysteria2 (ports), heartbeat в TUIC, настройка пула сессий AnyTLS, списки peers в WireGuard (настраивается один пир) и workers.
  • Транспорты, которые Chute не реализует, отмечаются в отчете вместо преобразования: h2, обфускация http, httpupgrade, вариант WebSocket v2ray-http-upgrade, max-early-data для WebSocket и extra в XHTTP (XMUX / download-settings).
  • Рабочий режим mode в Clash — это переключатель времени выполнения в Chute, а не ключ конфигурации; профиль в режиме global или direct преобразуется в режим правил с предупреждением.
  • YAML читается стандартным парсером, поэтому якоря и ключ слияния << работают. Значение, записанное как многострочный скаляр, сворачивается в одну строку, поскольку перевод строки разорвал бы строку конфигурации, в которую оно попадает.
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-08-13 17:01:32

results matching ""

    No results matching ""