Import

Chute kann Proxy-Konfigurationen importieren, die für andere Clients geschrieben wurden. Zwei Arten von Eingaben werden akzeptiert: Share-Links für einzelne Knoten (ss://, vmess://, …) und vollständige Profile als Clash/mihomo-YAML oder sing-box-JSON. Beide werden in native Chute-Konfiguration umgewandelt — was Sie danach erhalten, ist ein gewöhnliches Chute-Profil mit den Abschnitten [Proxy], [Proxy Group] und [Rule], keine fremde Datei, die Chute weiterhin interpretiert.

http://- und https://-Adressen werden nie als Share-Links behandelt. Sie sind Abonnement-Adressen: Der Inhalt wird zuerst heruntergeladen und dann entsprechend dem importiert, was der heruntergeladene Body tatsächlich enthält.


Share-Links — ein einzelner Link oder ein Abonnement, dessen Inhalt eine Liste davon ist — importiert nur Chute Mac. Chute iOS hat keinen Share-Link-Import: Seine Ersteinrichtung kann einen Server aus einem gescannten QR-Code einrichten, der einen ss://-, vmess://-, vless://-, trojan://-, hysteria2://-, socks5://- oder ssh://-Link enthält, und übernimmt daraus kaum mehr als Serveradresse, Port und Zugangsdaten — ein Link ohne Port erhält den Standard-Port aus der Tabelle unten. Chute tvOS und Chute Android lesen keine Share-Links.

Schema Resultierender Richtlinientyp Standard-Port
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

Die meisten Links verwenden die Form userinfo@host:port?query#name. Zwei weichen davon ab: vmess:// trägt ein base64-kodiertes JSON-Objekt (das v2rayN-Format mit den Feldnamen add / ps / scy / net / aid), und ss:// akzeptiert sowohl SIP002 (base64(method:password)@host:port) als auch die ältere Form, bei der der gesamte Body kodiert ist (base64(method:password@host:port)). Base64-Nutzlasten dürfen ohne Padding vorliegen und das URL-sichere Alphabet verwenden.

trojan://password@example.com:443?sni=example.com&alpn=h2,http/1.1#Tokyo%20Node

wird umgewandelt zu:

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

Der Text nach # wird prozentdekodiert und wird zum Richtliniennamen; vmess:// entnimmt ihn stattdessen dem Feld ps. Ein Link ohne Namen erhält den Namen host:port. Zeichen, die das Konfigurationsformat reserviert — =, ,, [, ], ", Tabulator und Zeilenumbruch — werden im Namen durch Leerzeichen ersetzt.

Trojan, Hysteria2, TUIC und AnyTLS sind reine TLS-Protokolle, daher wird tls=true auch dann ergänzt, wenn der Link es nicht ausdrücklich angibt.

Mehrere Links. Eine Nutzlast kann aus vielen Share-Links bestehen, die durch Zeilenumbrüche getrennt und optional in eine äußere Base64-Schicht eingepackt sind. Jede Zeile, die sich parsen lässt, wird zu einer Richtlinie, und wiederholte Namen erhalten das Suffix 2, 3 …, damit Regeln und Gruppen jeden Knoten weiterhin einzeln ansprechen können. Zeilen, die sich nicht parsen lassen, werden als Warnungen gemeldet, während der Rest der Nutzlast dennoch importiert wird; der Import schlägt nur fehl, wenn sich überhaupt nichts umwandeln ließ.

Ein Link, dessen Schema nicht in der obigen Tabelle steht, wird nicht als Share-Link erkannt. Ein Link mit bekanntem Schema, dem erforderliche Felder fehlen, wird mit einer Meldung abgelehnt, die dieses Schema benennt.

Nur die untenstehenden Query-Parameter werden gelesen; alles andere in einem Link wird ignoriert.

„Query-Links“ meint im Folgenden jedes Schema, das seine Einstellungen in einem Query-String mitführt: vless://, trojan://, hysteria2://, tuic://, anytls://, socks5:// und ssh://. ss:// und vmess:// werden von eigenen Parsern gelesen und sind nach der Tabelle beschrieben.

Parameter Gilt für Umgewandelt zu
sni, peer, servername Query-Links sni
alpn (kommagetrennt) Query-Links alpn (Werte mit `\ ` verbunden) — nur von TUIC-, Hysteria2- und MASQUE-Richtlinien gelesen, siehe Gemeinsame Parameter
fp Query-Links fingerprint (das uTLS-ClientHello-Profil)
allowInsecure, insecure, skip-cert-verify Query-Links skip-cert-verify=true
security=tls, xtls, reality Query-Links tls=true; bei socks5:// wählt das den Richtlinientyp socks5-tls
pbk, sid REALITY reality=true, public-key, short-id sowie server-name= aus sni / servername
flow VLESS xtls=true, flow
type/network=ws + path, host Query-Links ws=true, ws-path, ws-headers=Host:…
type/network=grpc + serviceName, servicename (oder path) Query-Links grpc=true, grpc-service-name
type/network=xhttp oder splithttp + path, host, mode Query-Links xhttp=true, xhttp-path, xhttp-host, xhttp-mode
obfs, obfs-password (auch obfs_password), up, down Hysteria2 Gleiche Optionsnamen
plugin=… Shadowsocks Siehe unten

ss:// liest aus dem Query ausschließlich plugin, daher werden sni, alpn, fp, allowInsecure, security und type= in einem Shadowsocks-Link ignoriert. vmess:// hat überhaupt keinen Query: Es entnimmt dieselben Einstellungen den Feldern sni, host, alpn, fp, net, path und tls seines JSON-Bodys. Und die drei Transport-Zeilen — ws, grpc, xhttp — erreichen niemals einen hysteria2://-, tuic://- oder anytls://-Link: Diese Richtlinien werden allein mit ihren eigenen Optionen und den TLS-Optionen geschrieben, denn jedes dieser Protokolle bringt seinen eigenen Transport mit.

Ein Shadowsocks-plugin-Wert wird als name;key=value;… gelesen. obfs-local / simple-obfs / obfs werden zu obfs und obfs_param. v2ray-plugin wird zu Shadowsocks über WebSocket: ws=true, path als ws-path, host als Host in ws-headers und tls als tls=true, wobei sni auf denselben Host gesetzt wird; ein mux von 0, false, no oder off wird zu ws-mux=false, jeder andere Wert behält den Standard. Sein quic-Modus hat keine Entsprechung: Das Plugin wird mit der Warnung <path>.plugin: Shadowsocks plugin 'v2ray-plugin' in quic mode has no KLNEKit equivalent; the proxy will not connect without it verworfen. Jede andere seiner Optionen wird mit <path>.plugin-opts.<key>: option has no KLNEKit equivalent and was dropped verworfen. Jedes andere Plugin erzeugt eine Warnung und wird verworfen: Die Richtlinie wird trotzdem geschrieben, kann sich aber nicht mit einem Server verbinden, der das Plugin voraussetzt.

Hinweis: Ein VMess-aid (alterId) ungleich null wird als Warnung gemeldet. Chute spricht ausschließlich VMess AEAD, und ein Server, der noch den alten MD5-Handshake verlangt, kann die Verbindung nicht authentifizieren.


Profil-Import

Drei Formate werden erkannt:

Format Handhabung
Natives Chute-, Surge- oder Shadowrocket-Profil Wird unverändert verwendet, ohne Umwandlungsschritt — siehe Surge- und Shadowrocket-Profile
Clash / mihomo YAML Wird in native Konfiguration umgewandelt
sing-box JSON Wird in native Konfiguration umgewandelt

Das Format wird aus dem Inhalt erkannt, der Dateiname dient nur als Hinweis. Inhalt, der mit { beginnt, wird als sing-box-JSON behandelt, wie auch immer die Datei heißt (ein als .yaml gespeichertes sing-box-Profil lässt sich weiterhin als YAML parsen, dem Namen allein ist also nicht zu trauen). Andernfalls bedeutet die Endung .conf nativ, .json sing-box und .yaml / .yml Clash. Wenn kein brauchbarer Dateiname vorliegt — etwa bei einem Abonnement-Body —, entscheidet die erste bedeutungstragende Zeile: #!MANAGED-CONFIG oder eine [Section]-Kopfzeile bedeutet nativ, und proxies:, proxy-groups:, rules:, proxy-providers: oder rule-providers: bedeutet Clash. Alles andere wird als nativ behandelt. Was eine Adresse liefert — ein Download oder ein Abonnement —, wird nach dem Body beurteilt: Der aus der Adresse entnommene Name zählt nur, wenn der Body keines dieser Merkmale zeigt; eine Adresse, die auf .conf endet und Clash liefert, wird also trotzdem konvertiert.

Ein Dokument, das sich zwar parsen lässt, aber keinen der Abschnitte enthält, die seinen Dialekt ausmachen, wird abgelehnt, statt als erfolgreicher Import von nichts gemeldet zu werden: Clash-YAML benötigt mindestens eines von proxies, proxy-groups, rules, proxy-providers oder rule-providers, und sing-box-JSON benötigt outbounds, endpoints oder route.

Ein einzelner nicht umwandelbarer Eintrag lässt den Import nie scheitern. Jeder Proxy, jede Gruppe und jede Regel wird für sich umgewandelt; diejenigen ohne Chute-Entsprechung werden übersprungen und gemeldet. Das Ergebnis umfasst die umgewandelte Konfiguration, eine Liste von Warnungen und eine Liste der übersprungenen Quellfelder. Dieselben Warnungen werden außerdem als Kommentare in den umgewandelten Text geschrieben, direkt neben dem Abschnitt, aus dem sie stammen:

[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

Zum Schluss wird der umgewandelte Text mit Chutes eigenem Parser erneut geparst. Jede Zeile, die der Parser ablehnt, wird als # KL-CONVERT-DROPPED: … auskommentiert und gemeldet, sodass ein zu 95 % umwandelbares Profil dennoch importiert wird und läuft.

Knotennamen werden dort umgeschrieben, wo sie das Konfigurationsformat brechen würden: , wird zu einem Leerzeichen und = wird zu -, und ein Name, der dadurch mit einem anderen kollidiert, erhält ein numerisches Suffix. Gruppenmitglieder und Regelziele werden entsprechend umgeschrieben, sodass jede Referenz weiterhin auf denselben Knoten zeigt. direct-Proxys/-Outbounds werden auf das integrierte DIRECT abgebildet und reject / block / dns auf REJECT.

Hinweis: Ein umgewandeltes Profil ist eine statische Momentaufnahme. Chute lädt ein Abonnement erneut herunter und parst es als natives Profil; ein Profil, das umgewandelt werden musste, wird deshalb ohne Auto-Update-URL gespeichert und aktualisiert sich nicht selbst.

Hinweise zur Clash-/mihomo-Umwandlung

Hinweis: dialer-proxy wird in underlying-proxy umgewandelt. Die importierte Referenz ist aktiv: Die Verbindungen der Richtlinie — TCP und, wo die Protokolle es erlauben, UDP — werden über den genannten Upstream aufgebaut, verschachtelte Referenzen bilden mehrere Hops. Fehlende oder zyklische Referenzen schlagen fail-closed fehl und werden protokolliert. Ein dialer-proxy, das einen Alias mit type: direct nennt, ist eine direkte Verbindung. Das override: dialer-proxy eines Proxy-Providers wird zum underlying-proxy des Providers; die übrigen override-Schlüssel werden weiterhin mit einer Warnung verworfen. Das proxy: eines Regel-Providers oder Proxy-Providers wird zu seinem policy=, sodass der Provider wie in mihomo über diese Richtlinie heruntergeladen wird.

  • Umgewandelte Proxy-Typen: ss, ssr, vmess, vless, trojan, http, socks5, hysteria2, tuic, anytls, wireguard, ssh. Typen, für die Chute keine Implementierung hat — snell, hysteria (v1), mieru, juicity, shadowquic, trusttunnel, openvpn, sudoku, vmess-http — werden mit einer Warnung übersprungen, die das Protokoll benennt. Zwei weitere werden übersprungen, obwohl Chute das Protokoll unterstützt: ein masque-Proxy, weil das mihomo-Feldlayout abweicht, und ein tailscale-Proxy, der einmalig im Abschnitt [Tailscale] konfiguriert und über die integrierte Richtlinie TAILSCALE genutzt wird. Ein type: https gibt es nicht: Ein HTTPS-Proxy ist, wie mihomo ihn schreibt, type: http mit tls: true, und type: https wird als nicht unterstützter Proxy-Typ gemeldet.
  • Die beiden Fingerabdruck-Schlüssel von mihomo bedeuten Unterschiedliches und werden auseinandergehalten: client-fingerprint wird zu fingerprint (das uTLS-ClientHello-Profil) und fingerprint wird zu cert-fingerprint-sha256 (ein Zertifikats-Pin).
  • udp: false wird zu udp-relay=false, und tfo wird zu tfo=true. Ein aktivierter smux-Block wird nicht übernommen — Chutes mux verwendet ein eigenes Framing, das ein mihomo- oder sing-box-Server nicht lesen kann —, und der Import sagt das: <path>.smux: multiplexing (smux) has no KLNEKit equivalent; mux is left off.
  • Das plugin eines ss-Proxys wird aus seinen plugin-opts umgewandelt: obfs (auch simple-obfs, obfs-local) zu obfs und obfs_param, und v2ray-plugin wie bei einem Share-Link — mode, tls, host, path und mux wie dort beschrieben, headers zu ws-headers, wobei ein Host darin an die Stelle von host tritt, und skip-cert-verify zu skip-cert-verify=true. mihomos Standard-Host bing.com wird nicht übernommen: Ohne host gilt der eigene Standard der Richtlinie. Jedes andere Plugin wird gemeldet und verworfen.
  • udp-over-tcp: true eines ss-Proxys wird zu udp-over-tcp=true, immer mit einer Version: udp-over-tcp-version wie angegeben, oder 1, wenn es fehlt, denn mihomos Standard ist das alte Framing, während Chutes 2 ist. Mit udp: false leitet der Proxy weiterhin kein UDP weiter, wie in mihomo.
  • Ein trojan-Proxy erhält immer tls=true: Trojan ist bei mihomo immer TLS, daher wird ein tls: false im Profil ignoriert. Ein wireguard-Proxy behält seine allowed-ips, die Chute durchsetzt — siehe WireGuard-Konfiguration.
  • Der host-key eines ssh-Proxys wird zu einem server-fingerprint in Anführungszeichen. Eine Liste wird zu einem einzigen server-fingerprint="…" mit allen Schlüsseln; ein Eintrag, der ein Anführungszeichen oder ein Komma enthält, lässt sich nicht in die Richtlinienzeile schreiben und wird gemeldet und verworfen.
  • Ein Feld, das einen einzelnen Wert erwartet, aber als Liste oder Mapping geschrieben ist, gilt als nicht vorhanden; ist das Feld Pflicht, wird der Eintrag gemeldet und übersprungen.
  • Die Gruppentypen select, url-test, fallback und load-balance werden samt ihren Health-Check-Optionen umgewandelt. Eine relay-Gruppe bleibt eine relay-Gruppe mit ihren Mitgliedern in derselben Reihenfolge: Das erste wird direkt verbunden, das letzte verbindet sich mit dem Ziel. use:-Mitglieder werden zu policy-provider:<name>-Referenzen, und include-all / include-all-proxies / include-all-providers werden zu einer expliziten Mitgliederliste expandiert.
  • filter und exclude-filter werden in Anführungszeichen übernommen, aber ein Muster, das ein Komma oder ein Anführungszeichen enthält, kann das Format der Konfigurationszeile nicht überstehen und wird mit einer Warnung verworfen.
  • Das exclude-type einer Gruppe wird als exclude-type= übernommen: Die genannten Proxy-Typen bleiben aus den Mitgliedern heraus, die ein Provider beisteuert. Für tcp-concurrent gibt es keinen eigenen Schalter — wo die Plattform es zulässt, lässt Chute bis zu fünf aufgelöste Adressen eines Ziels gegeneinander antreten, sonst verbindet es zur ersten — und der Import sagt das, statt es als bloßen Verlust zu melden.
  • Regeltypen werden dort umbenannt, wo die Namen abweichen: MATCH → FINAL, DST-PORT → DEST-PORT, SRC-IP-CIDR → SRC-IP. REJECT-DROP und REJECT-TINYGIF bleiben erhalten, da beide integrierte Chute-Richtlinien mit eigenem Verhalten sind; eine Regel, die auf PASS oder COMPATIBLE zielt, wird übersprungen.
  • Ein Inline-rule-provider (type: inline mit einer payload-Liste) wird zu den entsprechenden konkreten Regeln expandiert, da eine Chute-[Rule Provider]-Zeile keine Nutzlast einbetten kann.
  • Eine SUB-RULE,(condition),name-Regel und die von ihr benannte sub-rules:-Zuordnung werden zu gewöhnlichen Regeln aufgelöst: Jede Regel des Zweigs name wird zu AND,((condition),(rule)),POLICY, und das MATCH,X des Zweigs wird zu condition,X. Ein SUB-RULE innerhalb eines Zweigs legt seine Bedingung auf die umgebenden, bis zu 8 Ebenen tief. Ein fehlender Zweig oder einer, der auf einen gerade aufgelösten zurückführt, wird mit einer Umwandlungswarnung übersprungen.
  • Allgemeine Schlüssel werden dort abgebildet, wo eine Entsprechung existiert: mixed-port wird zum HTTP-port (SOCKS5 benötigt sein eigenes socks-port), allow-lan wird zu allow-wifi-access, log-level wird auf loglevel abgebildet, external-controller/secret werden zu den Optionen des externen HTTP-Controllers, und ein aktivierter sniffer wird zu sniffing-enabled.
  • bind-address wird zu interface und socks-interface — der Adresse, an die sich die beiden Listener binden. * steht für jede Adresse. Ist zusätzlich allow-lan gesetzt, weitet Chutes allow-wifi-access die Bindung ohnehin auf jede Adresse aus, und der Import sagt das: Entfernen Sie allow-wifi-access, um die engere Bindung zu behalten.
  • authentication wird zu je einer http-auth-Zeile pro Zugangsdatensatz, die dieselben beiden Listener absichert. Ein Eintrag ohne : zwischen Benutzer und Passwort wird gemeldet und verworfen.
  • external-controller-cors wird zu external-http-cors, aber nur, wenn die erlaubten Ursprünge ohnehin schon „beliebig“ sind (* oder gar keine Liste). Chutes Schalter kennt nur ganz oder gar nicht, daher bleibt er bei einem Profil, das bestimmte Ursprünge nennt, ausgeschaltet, und der Import sagt warum — ihn einzuschalten hieße, jedem Ursprung den Zugriff zu geben, den das Profil einem einzigen gewährt hat. allow-private-network hat keine Entsprechung, und der Header wird nicht gesendet.
  • mihomo teilt den exakten und den Glob-Abgleich von Prozessen auf zwei Regeltypen auf; Chute hat nur einen, und das ist der Glob-Typ. PROCESS-NAME-WILDCARD und PROCESS-PATH-WILDCARD werden deshalb zu PROCESS-NAME und PROCESS-PATH, die * und ? genauso lesen. Ein Literal ohne beides trifft weiterhin exakt zu.
  • tun wird dort abgebildet, wo Chute denselben Schlüssel hat: dns-hijack wird zu hijack-dns (mihomos any:53 wird zu *:53 umgeschrieben), route-address zu tun-included-routes und route-exclude-address zu tun-excluded-routes. stack, auto-route, auto-detect-interface, auto-redirect, mtu, strict-route, endpoint-independent-nat, device, inet4-address, inet6-address, udp-timeout und gso werden stattdessen gemeldet — darüber entscheidet Chute selbst.
  • Der DNS-Block wird wie folgt abgebildet. hosts wird zu [Host]-Einträgen, wobei jede Adresse einer Liste erhalten bleibt. nameserver und fallback werden zu einer Menge verschmolzen und je nach Schreibweise des Eintrags als dns-server, doh, dot, doq oder doh3 geschrieben — Chute fragt alle konfigurierten Resolver gleichzeitig, ein eigener Fallback-Pool hat also nichts, worauf er zurückfallen könnte, und der Import sagt das. direct-nameserver und proxy-server-nameserver werden zu direct-dns-server und proxy-dns-server. fake-ip-filter wird zu always-real-ip. nameserver-policy wird zu einem [Host]-Eintrag je Schlüssel; ein rule-set:-Schlüssel wird zur satzbezogenen Form RULE-SET:<provider> = server:…, sofern der Provider ein http- oder file-Provider ist, und ein geosite:-Schlüssel wird mit einer Warnung verworfen.
  • Ebenfalls im DNS-Block: use-system-hosts: false wird zu read-etc-hosts = false. use-hosts: false hat keine Entsprechung — die [Host]-Tabelle wird immer herangezogen — und wird gemeldet. fake-ip-filter-mode: whitelist kehrt den Filter um, was always-real-ip nicht ausdrücken kann; die Liste bleibt daher eine Blacklist, und der Import sagt das. default-nameserver dient dem Bootstrap der Hostnamen der Resolver selbst; Chute löst diese über den System-Resolver auf, und der Import verweist stattdessen auf die [Host]-Zeile, die sie festlegt.

Hinweise zur sing-box-Umwandlung

  • Umgewandelte Outbound-Typen: shadowsocks, vmess, vless, trojan, hysteria2, tuic, anytls, shadowtls, wireguard, http, socks, ssh. selector und urltest werden zu den Richtliniengruppen select und url-test. Ein shadowsocks-plugin wird für obfs-local (auch simple-obfs oder obfs geschrieben) umgewandelt, zu obfs und obfs_param, und für v2ray-plugin, dessen plugin_opts-Zeichenkette (tls;host=…;path=…) wie bei einem Share-Link umgewandelt wird, wobei seine Warnungen plugin_opts statt plugin-opts nennen; jedes andere Plugin wird gemeldet und verworfen, und der Outbound wird trotzdem geschrieben, kann sich aber nicht mit einem Server verbinden, der das Plugin voraussetzt. Ein trojan-Outbound erhält tls=true nur, wenn sein tls.enabled gesetzt ist, wie in sing-box; ohne das wird er als Klartext-Trojan importiert — ergänzen Sie tls=true, sofern der Server nicht wirklich Klartext spricht.
  • Innerhalb eines Outbounds: Ein transport vom Typ xhttp oder splithttp wird zu xhttp=true mit xhttp-path, xhttp-host, xhttp-mode und xhttp-headers. Ein aktiviertes tls.ech wird zu ech=true, und sein config wird zu ech-config=. REALITYs public_key wird zu public-key; ein Outbound ohne ihn wird mit einer Warnung umgewandelt, da sein REALITY-Handshake nicht gelingen kann. Eine SSH-host_key-Liste wird zu einem einzigen server-fingerprint="…" in Anführungszeichen mit allen Schlüsseln; ein Eintrag mit einem Anführungszeichen oder Komma wird gemeldet und verworfen. Ein alter wireguard-Outbound behält seine local_address-Liste als self-ip und self-ip-v6 (die erste Adresse jeder Familie), sein pre_shared_key als preshared-key und sein reserved als reserved="a,b,c" in Anführungszeichen; eine peers-Liste wird gemeldet und verworfen, da Chute einen einzigen Peer konfiguriert.
  • Auch endpoints (ab sing-box 1.11) werden umgewandelt: Ein wireguard-Endpoint wird zu einer wireguard-Richtlinie mit eigenem [WireGuard <tag>]-Abschnitt, in dem die allowed_ips seines Peers zu allowed-ips werden, und der erste tailscale-Endpoint wird zum Abschnitt [Tailscale], genutzt über die integrierte Richtlinie TAILSCALE. Andere Endpoint-Typen werden mit einer Warnung übersprungen. Der Abschnittsname ist der Richtlinienname ohne Leerzeichen und eckige Klammern, denn das Format der Konfigurationszeile verwirft Leerzeichen, wenn es section-name= abgleicht; zwei Richtlinien, die danach kollidieren würden, erhalten das Suffix -2, -3 …
  • Die Dial-Felder (Verbindungsaufbau) werden wie beim mihomo-Pfad abgebildet: tcp_fast_open wird zu tfo=true und network: tcp zu udp-relay=false. udp_over_tcp eines shadowsocks-Outbounds — true oder {"enabled": true, "version": 1} — wird zu udp-over-tcp=true; udp-over-tcp-version=1 wird nur für Version 1 geschrieben, denn sing-boxs Standard, Version 2, ist auch Chutes. Ein aktiviertes multiplex wird bewusst nicht übernommen: sing-box handelt smux / yamux / h2mux mit eigenem Padding aus, während Chutes mux ein eigenes Framing verwendet, das ein sing-box-Server nicht lesen kann; der Outbound wird daher ohne Multiplexing umgewandelt, und eine Warnung sagt das. detour wird zu einer aktiven underlying-proxy=-Referenz; verschachtelte detours bilden mehrere Hops, während Zyklen und fehlende Referenzen fail-closed fehlschlagen. Auch das detour eines wireguard-Endpoints bleibt erhalten, und sein Tunnel läuft über das UDP-Relay dieses Upstreams; ein tailscale-Endpoint mit einem anderen detour als direct wird nicht importiert, und Referenzen darauf schlagen fail-closed fehl, mit einer Warnung.
  • route.rule_set: Ein inline-Regelsatz wird zu einem Abschnitt [Ruleset <tag>], remote- und local-Regelsätze werden zu [Rule Provider]-Zeilen (type=http / type=file) mit format=sing-box-source. Ein Regelsatz in einem kompilierten Binärformat wird mit einer Warnung übersprungen: Verweisen Sie stattdessen auf die source-Fassung (.json oder YAML) desselben Satzes. Auf diesem Pfad ist das Binärformat .srs, erkannt an format: binary oder an einem Pfad auf .srs, wenn format fehlt; .mrs wird nur auf dem Clash-Rule-Provider-Pfad erkannt, wo mihomo das Format genauso aus der Endung ableitet. Unter macOS schreibt der Importer die URL auf die Quell-Nutzlast daneben um, sofern der Provider eine anbietet; unter iOS, Apple TV und Android nicht, weil die binär veröffentlichten Sätze ohnehin weit über dem liegen, was diese Plattformen laden. Mit früheren Versionen importierte Profile schrieben diese Regelsätze als format=mihomo-yaml und luden daraus keine Regeln; sie laden jetzt, ohne erneut importiert zu werden. Ein Remote-Regelsatz wird so heruntergeladen, wie sing-box ihn herunterlädt: über sein download_detour, seinen http_client (ein Tag aus http_clients oder ein Inline-Client) oder route.default_http_client und, wenn nichts davon angegeben ist, über den Standard-Outbound (route.final). Dieser Weg wird zum policy= des Providers; einer, der zu direct aufgelöst wird, fügt nichts hinzu.
  • Eine sing-box-Dauer behält ihre Einheit: update_interval: 3d sind drei Tage, und d, h, m, s und ms werden alle gelesen. Ein Intervall mit nicht erkannter Einheit fiel auf den Standard von einem Tag zurück — nicht das, was ein Profil mit 7d wollte.
  • Routing-Regeln folgen dem Schlüssel action: route/bypass verwenden den benannten Outbound, reject wird zu REJECT (method: drop zu REJECT-DROP), und hijack-dns, sniff und resolve erzeugen nichts, weil Chute diese aus [General] heraus steuert. Wie in sing-box sind Matcher derselben Art innerhalb einer Regel Alternativen, und verschiedene Arten müssen alle zutreffen: domain, domain_suffix, domain_keyword, domain_regex, ip_cidr, geoip und ip_is_private bilden eine Art; port und port_range eine weitere, ebenso source_ip_cidr und source_ip_is_private sowie source_port und source_port_range; jeder andere Matcher ist eine Art für sich. Eine Regel mit einer Art wird zu einer Zeile pro Wert, eine Regel mit mehreren Arten zu einer einzigen AND-Regel — {"network": "udp", "port": 443} wird zu AND,((DEST-PORT,443),(PROTOCOL,udp)). Ein domain_suffix mit führendem Punkt (.cn) wird zu DOMAIN-SUFFIX,cn. Regeln mit type: logical werden zu AND / OR / NOT, invert umschließt die ganze Regel mit NOT, und port_range (a:b) sowie source_port_range werden zu Portbereichen. Ein rule_set ist überall ein weiterer Matcher der Regel, auch innerhalb einer type: logical- oder invertierten Regel (siehe Logische Regel); mehrere Tags an einer Regel sind Alternativen. Nennt eines dieser Tags einen nicht importierbaren Satz, wird das Tag mit einem Hinweis verworfen und die Regel behält den Rest — sie trifft dann weniger. Die ganze Regel wird nur verworfen, wenn jedes von ihr genannte Tag gescheitert ist oder wenn das rule_set in einer type: logical- oder invertierten Regel steckt, wo das Weglassen einer Alternative ändern würde, was der Rest des Ausdrucks trifft. Ein Matcher ohne Chute-Entsprechung wird mit einer Warnung verworfen, wenn ein anderer Matcher seiner Art übrig bleibt (die Regel trifft dann weniger); andernfalls wird die ganze Regel mit einer Warnung verworfen, statt in eine Regel umgewandelt zu werden, die mehr trifft.
  • Der DNS-Server, der jeden Namen beantwortet, den keine DNS-Regel beansprucht — dns.final oder, ohne final, der erste Server —, wird zum [General]-DNS-Schlüssel seiner Art; sein detour wird als Suffix #proxy=<policy> geschrieben und ein local-Server als system; proxy-dns-server wird nicht geschrieben. Die übrigen Server werden über die [Host]-Einträge erreicht, zu denen dns.rules werden; dort wird der local-Server als server:system geschrieben und das detour eines einfachen, DoH-, DoQ- oder DoH3-Servers als Suffix #proxy=<policy>; der [Host]-Eintrag eines DoT-Servers kann keines tragen, daher wird dessen detour dort mit einer Warnung verworfen. Eine DNS-Regel, die ein ganzes rule_set an einen Resolver leitet, wird zur satzbezogenen Form RULE-SET:<tag> = server:… — aber nur, wenn rule_set der einzige Matcher der Regel ist, denn sing-box verlangt, dass Matcher unterschiedlicher Art alle zutreffen, und ein [Host]-Schlüssel trägt nur eine Bedingung. Eine Regel, die einen nicht importierbaren Satz nennt, erhält keinen Eintrag — aus demselben Grund, aus dem auch ihre Routing-Regel keinen bekäme.

Surge- und Shadowrocket-Profile

Ein Surge- oder Shadowrocket-Profil wird direkt gelesen, ohne Umwandlungsschritt. Chute akzeptiert die Schreibweisen des jeweiligen Dialekts, sodass ein eingefügtes Profil weiter funktioniert; diese weichen von Chutes eigenen Schlüsseln ab oder kamen aus Kompatibilitätsgründen hinzu:

  • Abonnement-Gruppen. Surges policy-path=<url> (mit update-interval= und policy-regex-filter=) lädt die Mitglieder einer Gruppe von einer URL; include-all-proxies=true und include-other-group=<name> fügen alle Proxys oder die Mitglieder einer anderen Gruppe hinzu. Gruppenparameter, die Chute nicht nutzt, etwa no-alert oder icon-url, bleiben beim Speichern des Profils erhalten. Shadowrockets use=true kennzeichnet eine Gruppe, deren aufgeführte Namen Abonnements statt Proxys sind; jeder Name wird als Proxy-Provider gelesen. Shadowrockets random wird zu einer Random-Gruppe. Eine Gruppe eines Typs, den Chute nicht implementiert, etwa Surges external, behält ihre Mitglieder und läuft als select, mit einem Hinweis. Siehe Richtliniengruppe.
  • Integrierte Richtlinien. Shadowrockets PROXY steht für die im globalen Proxy-Modus gewählte Richtlinie, sofern das Profil kein eigenes Proxy definiert; jede REJECT-Variante (REJECT-DROP, REJECT-TINYGIF, REJECT-DICT, …) verhält sich so, wie ihr Name sagt. Siehe Integrierte Richtlinie.
  • Regeln. DST-PORT, Portbereiche, HOSTNAME-TYPE mit IPv4 / IPv6 / DOMAIN / SIMPLE, IP-ASN,AS…, FINAL,<policy>,dns-failed, notification-text= und Abschnitte [Ruleset <name>] — siehe Regel. Wie bei Surge stehen Modulregeln vor den eigenen Regeln des Profils.
  • Allgemein (Shadowrocket). update-url benennt die eigene Aktualisierungsadresse des Profils — das, was Surge in den #!MANAGED-CONFIG-Header schreibt; Chute liest beides. Eine Datei, die beides trägt, behält den Header, da nur der Header zusätzlich interval und strict tragen kann. Die update-url-Zeile selbst überlebt das Speichern, sodass ein Shadowrocket-Profil weiterhin als Shadowrocket-Profil gespeichert wird. close-if-proxy-chain-missing bleibt erhalten, doch Chute lehnt eine verkettete Richtlinie, deren Upstream fehlt, immer ab, wie es sein true tut. Shadowrockets Front-Proxy (前置代理), der dort nur in der App eingestellt wird, wird in Chute als global-underlying-proxy geschrieben.
  • DNS. Shadowrockets direct-dns-server, proxy-dns-server, fallback-dns-server, dns-direct-system, dns-fallback-system (hängt system an fallback-dns-server an und verschmilzt mit einem, das das Profil selbst deklariert) und always-ip-address sowie [Host]-Zeilen der Form ssid:<name> = server:…; Surges encrypted-dns-server, allow-dns-svcb, [Host] <domain> = script:<name> und server:force-syslib. Siehe DNS-Server und Lokale DNS-Zuordnung.
  • Allgemein. proxy-test-url und test-timeout (die Standardwerte für url-test-, fallback- und load-balance-Gruppen), udp-policy-not-supported-behaviour, encrypted-dns-skip-cert-verification sowie http-api / http-api-web-dashboard, die auf die Schlüssel des externen HTTP-Controllers abgebildet werden. Siehe Verschiedene Optionen.
  • Proxys. Das Schlüsselwort tuic-v5 und ein Abschnitt [WireGuard <name>], der mit peer = (…) geschrieben ist. Siehe Proxy-Server und WireGuard-Konfiguration.
  • HTTP. header-replace-regex, die http-request / http-response-Form der Body-Umschreibung, [Map Local] mit data-type=, status-code= und header="Key: value|…", die URL-Umschreibung reject-array / reject-tinygif sowie [MITM] h2, hostname-disabled und auto-quic-block. Siehe Header-Umschreibung, Body-Umschreibung, Mock-Antwort, URL-Umschreibung und HTTPS-Entschlüsselung.
  • Skripte und Module. cronexp=, type=generic und event-name= in [Script]; #!system_version, #!REQUIREMENT, #!IOS-ONLY / #!MACOS-ONLY / #!TVOS-ONLY sowie %APPEND% / %INSERT% im [General] eines Moduls. #!system_version und #!REQUIREMENT werden nur erfasst: Chute liest sie aus dem Modul, keine App zeigt sie an, und keines von beiden entscheidet darüber, ob das Modul geladen wird. Siehe JavaScript-Scripting und Modul.
  • Abschnitte, die Chute nicht implementiert — [Keystore], [Port Forwarding], [Testing], [DHCP], [Snell Server], [Panel], [Ponte], [MTProto] — laden mit je einem Hinweis und werden unverändert zurückgeschrieben; [Tailscale <name>] wird als [Tailscale] gelesen. Siehe Konfiguration.

Nicht verfügbar: Eine [Proxy]-Zeile mit einem Protokoll, das Chute nicht implementiert, ist kein Konfigurationsfehler. Die Richtlinie wird mit einem Hinweis verworfen, die Zeile bleibt beim Speichern unverändert erhalten, und Verweise auf diese Richtlinie werden hängend — sie fallen zur Laufzeit fail-closed auf REJECT, statt nach DIRECT durchzusickern. So erkannt werden Surges snell, external, h2-connect und trust-tunnel; Shadowrockets hysteria (v1), juicity, sudoku, openconnect, mieru, brook, lua, http2, http3, relay und subscribe; sowie tailscale, das Chute einmal im Abschnitt [Tailscale] konfiguriert und über die integrierte Richtlinie TAILSCALE verwendet. Ein [General]-Schlüssel ohne Chute-Entsprechung wird ebenso mit einem Hinweis ignoriert, während seine Zeile unverändert bleibt.


Einschränkungen

  • Proxy-Verkettung trägt TCP und UDP. mihomos dialer-proxy und sing-boxs detour werden zu underlying-proxy-Referenzen, Clashs relay-Gruppen bleiben Relay-Gruppen mit derselben Hop-Reihenfolge, und der Download-Weg eines Providers (mihomos proxy:, sing-boxs download_detour oder http_client) wird zu seinem policy=. Zyklen, fehlende Referenzen und ein QUIC- oder WireGuard-Hop über einen Upstream ohne UDP werden abgelehnt und protokolliert, statt direkt gesendet zu werden; ein Shadowsocks-Knoten mit udp-over-tcp trägt sein UDP auch über einen solchen Upstream.
  • Optionen ohne Chute-Entsprechung werden mit einer Warnung verworfen statt stillschweigend: pro Proxy ip-version, interface-name, routing-mark, mptcp, packet-encoding, global-padding, authenticated-length und encryption sowie udp-over-tcp / udp-over-tcp-version bei jedem Proxy außer ss; pro Gruppe disable-udp, interface-name und routing-mark; sowie die General-Schlüssel geodata-mode, geox-url, find-process-mode, unified-delay, tproxy-port, redir-port und weitere. Das icon einer Gruppe ist die Ausnahme: Es ist Bildmaterial, es ändert keinen Datenverkehr, und es wird stillschweigend verworfen.
  • Regeltypen ohne Entsprechung werden übersprungen: IP-SUFFIX, SRC-IP-SUFFIX, SRC-GEOIP, SRC-IP-ASN, DSCP, UID, PROCESS-PATH-REGEX, IP-ACCEPT und REMATCH-NAME. Eine Regel mit dem src-Modifikator von mihomo wird ebenfalls übersprungen, statt am falschen Endpunkt abzugleichen.
  • GEOSITE und die GEOIP-Kategorien, die keine ISO-Ländercodes sind, benennen Sätze in mihomos Geodaten-Dateien, die Chute nicht mitbringt. GEOIP,private und GEOIP,lan werden auf jeder Plattform zu RULE-SET,LAN, dem eingebauten Satz privater Adressen — ohne Download. Der Rest hängt davon ab, wo der Import läuft: Unter macOS wird die Regel zu RULE-SET,geosite-<tag> (bzw. geoip-<tag>), und daneben wird eine [Rule Provider]-Zeile erzeugt, die auf die für diesen Satz veröffentlichte YAML-Nutzlast zeigt und die Sie wie jede andere Zeile umbiegen oder löschen können. Unter iOS, Apple TV und Android wird die Regel mit einer entsprechenden Meldung verworfen, weil diese Sätze größer sind, als die Plattform umwandeln würde — importieren Sie das Profil auf einem Desktop, um sie zu behalten. Ein ISO-Ländercode geht weiterhin an die mitgelieferte GeoIP-Datenbank und braucht überhaupt keinen Satz.
  • Protokolldetails, die Chute selbst verwaltet, werden nicht übernommen: Hysteria2-Port-Hopping (ports), TUIC-heartbeat, AnyTLS-Session-Pool-Feinabstimmung, WireGuard-peers-Listen (es wird ein einzelner Peer konfiguriert) und workers.
  • Transporte, die Chute nicht implementiert, werden gemeldet statt umgewandelt: h2, http-Verschleierung, httpupgrade, die WebSocket-Variante v2ray-http-upgrade, WebSocket-max-early-data und XHTTP-extra (XMUX / Download-Settings). Ein sing-box-Outbound, dessen transport.type httpupgrade oder quic ist, bildet die Ausnahme: Für ihn wird nichts erzeugt und auch nichts gemeldet — prüfen Sie solche Outbounds nach dem Import von Hand.
  • Clashs Betriebs-mode ist in Chute ein Laufzeitschalter, kein Konfigurationsschlüssel; ein Profil im Modus global oder direct wird mit einer Warnung in den Regelmodus umgewandelt.
  • YAML wird mit einem Standard-Parser gelesen, daher funktionieren Anker und der Merge-Schlüssel <<. Ein als mehrzeiliger Skalar geschriebener Wert wird auf eine Zeile zusammengefaltet, weil ein Zeilenumbruch die Konfigurationszeile spalten würde, in der er landet.
  • Ein Profil, dessen Richtliniennamen {...}-Platzhalter sind — was ein Abonnement-Generator vor seinem eigenen Ersetzungsschritt ausgibt —, wird als Vorlage benannt: Der Import sagt das einmal, statt nur jeden Verweis auf einen Platzhalter als undefinierte Richtlinie zu melden.
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-30 15:11:19

Diese Seite ist eine Übersetzung der englischen Version. Bei Abweichungen ist die englische Version maßgeblich.

results matching ""

    No results matching ""