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
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.
Unterstützte Parameter
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-proxywird inunderlying-proxyumgewandelt. 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. Eindialer-proxy, das einen Alias mittype: directnennt, ist eine direkte Verbindung. Dasoverride: dialer-proxyeines Proxy-Providers wird zumunderlying-proxydes Providers; die übrigenoverride-Schlüssel werden weiterhin mit einer Warnung verworfen. Dasproxy:eines Regel-Providers oder Proxy-Providers wird zu seinempolicy=, 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: einmasque-Proxy, weil das mihomo-Feldlayout abweicht, und eintailscale-Proxy, der einmalig im Abschnitt[Tailscale]konfiguriert und über die integrierte RichtlinieTAILSCALEgenutzt wird. Eintype: httpsgibt es nicht: Ein HTTPS-Proxy ist, wie mihomo ihn schreibt,type: httpmittls: true, undtype: httpswird als nicht unterstützter Proxy-Typ gemeldet. - Die beiden Fingerabdruck-Schlüssel von mihomo bedeuten Unterschiedliches und werden auseinandergehalten:
client-fingerprintwird zufingerprint(das uTLS-ClientHello-Profil) undfingerprintwird zucert-fingerprint-sha256(ein Zertifikats-Pin). udp: falsewird zuudp-relay=false, undtfowird zutfo=true. Ein aktiviertersmux-Block wird nicht übernommen — Chutesmuxverwendet 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
plugineinesss-Proxys wird aus seinenplugin-optsumgewandelt:obfs(auchsimple-obfs,obfs-local) zuobfsundobfs_param, undv2ray-pluginwie bei einem Share-Link —mode,tls,host,pathundmuxwie dort beschrieben,headerszuws-headers, wobei einHostdarin an die Stelle vonhosttritt, undskip-cert-verifyzuskip-cert-verify=true. mihomos Standard-Hostbing.comwird nicht übernommen: Ohnehostgilt der eigene Standard der Richtlinie. Jedes andere Plugin wird gemeldet und verworfen. udp-over-tcp: trueeinesss-Proxys wird zuudp-over-tcp=true, immer mit einer Version:udp-over-tcp-versionwie angegeben, oder1, wenn es fehlt, denn mihomos Standard ist das alte Framing, während Chutes 2 ist. Mitudp: falseleitet der Proxy weiterhin kein UDP weiter, wie in mihomo.- Ein
trojan-Proxy erhält immertls=true: Trojan ist bei mihomo immer TLS, daher wird eintls: falseim Profil ignoriert. Einwireguard-Proxy behält seineallowed-ips, die Chute durchsetzt — siehe WireGuard-Konfiguration. - Der
host-keyeinesssh-Proxys wird zu einemserver-fingerprintin Anführungszeichen. Eine Liste wird zu einem einzigenserver-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,fallbackundload-balancewerden samt ihren Health-Check-Optionen umgewandelt. Einerelay-Gruppe bleibt einerelay-Gruppe mit ihren Mitgliedern in derselben Reihenfolge: Das erste wird direkt verbunden, das letzte verbindet sich mit dem Ziel.use:-Mitglieder werden zupolicy-provider:<name>-Referenzen, undinclude-all/include-all-proxies/include-all-providerswerden zu einer expliziten Mitgliederliste expandiert. filterundexclude-filterwerden 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-typeeiner Gruppe wird alsexclude-type=übernommen: Die genannten Proxy-Typen bleiben aus den Mitgliedern heraus, die ein Provider beisteuert. Fürtcp-concurrentgibt 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-DROPundREJECT-TINYGIFbleiben erhalten, da beide integrierte Chute-Richtlinien mit eigenem Verhalten sind; eine Regel, die aufPASSoderCOMPATIBLEzielt, wird übersprungen. - Ein Inline-
rule-provider(type: inlinemit einerpayload-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 benanntesub-rules:-Zuordnung werden zu gewöhnlichen Regeln aufgelöst: Jede Regel des Zweigsnamewird zuAND,((condition),(rule)),POLICY, und dasMATCH,Xdes Zweigs wird zucondition,X. EinSUB-RULEinnerhalb 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-portwird zum HTTP-port(SOCKS5 benötigt sein eigenessocks-port),allow-lanwird zuallow-wifi-access,log-levelwird aufloglevelabgebildet,external-controller/secretwerden zu den Optionen des externen HTTP-Controllers, und ein aktiviertersnifferwird zusniffing-enabled. bind-addresswird zuinterfaceundsocks-interface— der Adresse, an die sich die beiden Listener binden.*steht für jede Adresse. Ist zusätzlichallow-langesetzt, weitet Chutesallow-wifi-accessdie Bindung ohnehin auf jede Adresse aus, und der Import sagt das: Entfernen Sieallow-wifi-access, um die engere Bindung zu behalten.authenticationwird zu je einerhttp-auth-Zeile pro Zugangsdatensatz, die dieselben beiden Listener absichert. Ein Eintrag ohne:zwischen Benutzer und Passwort wird gemeldet und verworfen.external-controller-corswird zuexternal-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-networkhat 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-WILDCARDundPROCESS-PATH-WILDCARDwerden deshalb zuPROCESS-NAMEundPROCESS-PATH, die*und?genauso lesen. Ein Literal ohne beides trifft weiterhin exakt zu. tunwird dort abgebildet, wo Chute denselben Schlüssel hat:dns-hijackwird zuhijack-dns(mihomosany:53wird zu*:53umgeschrieben),route-addresszutun-included-routesundroute-exclude-addresszutun-excluded-routes.stack,auto-route,auto-detect-interface,auto-redirect,mtu,strict-route,endpoint-independent-nat,device,inet4-address,inet6-address,udp-timeoutundgsowerden stattdessen gemeldet — darüber entscheidet Chute selbst.- Der DNS-Block wird wie folgt abgebildet.
hostswird zu[Host]-Einträgen, wobei jede Adresse einer Liste erhalten bleibt.nameserverundfallbackwerden zu einer Menge verschmolzen und je nach Schreibweise des Eintrags alsdns-server,doh,dot,doqoderdoh3geschrieben — 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-nameserverundproxy-server-nameserverwerden zudirect-dns-serverundproxy-dns-server.fake-ip-filterwird zualways-real-ip.nameserver-policywird zu einem[Host]-Eintrag je Schlüssel; einrule-set:-Schlüssel wird zur satzbezogenen FormRULE-SET:<provider> = server:…, sofern der Provider einhttp- oderfile-Provider ist, und eingeosite:-Schlüssel wird mit einer Warnung verworfen. - Ebenfalls im DNS-Block:
use-system-hosts: falsewird zuread-etc-hosts = false.use-hosts: falsehat keine Entsprechung — die[Host]-Tabelle wird immer herangezogen — und wird gemeldet.fake-ip-filter-mode: whitelistkehrt den Filter um, wasalways-real-ipnicht ausdrücken kann; die Liste bleibt daher eine Blacklist, und der Import sagt das.default-nameserverdient 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.selectorundurltestwerden zu den Richtliniengruppenselectundurl-test. Einshadowsocks-pluginwird fürobfs-local(auchsimple-obfsoderobfsgeschrieben) umgewandelt, zuobfsundobfs_param, und fürv2ray-plugin, dessenplugin_opts-Zeichenkette (tls;host=…;path=…) wie bei einem Share-Link umgewandelt wird, wobei seine Warnungenplugin_optsstattplugin-optsnennen; 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. Eintrojan-Outbound erhälttls=truenur, wenn seintls.enabledgesetzt ist, wie in sing-box; ohne das wird er als Klartext-Trojan importiert — ergänzen Sietls=true, sofern der Server nicht wirklich Klartext spricht. - Innerhalb eines Outbounds: Ein
transportvom Typxhttpodersplithttpwird zuxhttp=truemitxhttp-path,xhttp-host,xhttp-modeundxhttp-headers. Ein aktiviertestls.echwird zuech=true, und seinconfigwird zuech-config=. REALITYspublic_keywird zupublic-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 einzigenserver-fingerprint="…"in Anführungszeichen mit allen Schlüsseln; ein Eintrag mit einem Anführungszeichen oder Komma wird gemeldet und verworfen. Ein alterwireguard-Outbound behält seinelocal_address-Liste alsself-ipundself-ip-v6(die erste Adresse jeder Familie), seinpre_shared_keyalspreshared-keyund seinreservedalsreserved="a,b,c"in Anführungszeichen; einepeers-Liste wird gemeldet und verworfen, da Chute einen einzigen Peer konfiguriert. - Auch
endpoints(ab sing-box 1.11) werden umgewandelt: Einwireguard-Endpoint wird zu einerwireguard-Richtlinie mit eigenem[WireGuard <tag>]-Abschnitt, in dem dieallowed_ipsseines Peers zuallowed-ipswerden, und der erstetailscale-Endpoint wird zum Abschnitt[Tailscale], genutzt über die integrierte RichtlinieTAILSCALE. 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 essection-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_openwird zutfo=trueundnetwork: tcpzuudp-relay=false.udp_over_tcpeinesshadowsocks-Outbounds —trueoder{"enabled": true, "version": 1}— wird zuudp-over-tcp=true;udp-over-tcp-version=1wird nur für Version 1 geschrieben, denn sing-boxs Standard, Version 2, ist auch Chutes. Ein aktiviertesmultiplexwird bewusst nicht übernommen: sing-box handelt smux / yamux / h2mux mit eigenem Padding aus, während Chutesmuxein eigenes Framing verwendet, das ein sing-box-Server nicht lesen kann; der Outbound wird daher ohne Multiplexing umgewandelt, und eine Warnung sagt das.detourwird zu einer aktivenunderlying-proxy=-Referenz; verschachtelte detours bilden mehrere Hops, während Zyklen und fehlende Referenzen fail-closed fehlschlagen. Auch dasdetoureineswireguard-Endpoints bleibt erhalten, und sein Tunnel läuft über das UDP-Relay dieses Upstreams; eintailscale-Endpoint mit einem anderendetourals direct wird nicht importiert, und Referenzen darauf schlagen fail-closed fehl, mit einer Warnung. route.rule_set: Eininline-Regelsatz wird zu einem Abschnitt[Ruleset <tag>],remote- undlocal-Regelsätze werden zu[Rule Provider]-Zeilen (type=http/type=file) mitformat=sing-box-source. Ein Regelsatz in einem kompilierten Binärformat wird mit einer Warnung übersprungen: Verweisen Sie stattdessen auf die source-Fassung (.jsonoder YAML) desselben Satzes. Auf diesem Pfad ist das Binärformat.srs, erkannt anformat: binaryoder an einem Pfad auf.srs, wennformatfehlt;.mrswird 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 alsformat=mihomo-yamlund 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 seindownload_detour, seinenhttp_client(ein Tag aushttp_clientsoder ein Inline-Client) oderroute.default_http_clientund, wenn nichts davon angegeben ist, über den Standard-Outbound (route.final). Dieser Weg wird zumpolicy=des Providers; einer, der zudirectaufgelöst wird, fügt nichts hinzu.- Eine sing-box-Dauer behält ihre Einheit:
update_interval: 3dsind drei Tage, undd,h,m,sundmswerden alle gelesen. Ein Intervall mit nicht erkannter Einheit fiel auf den Standard von einem Tag zurück — nicht das, was ein Profil mit7dwollte. - Routing-Regeln folgen dem Schlüssel
action:route/bypassverwenden den benannten Outbound,rejectwird zuREJECT(method: dropzuREJECT-DROP), undhijack-dns,sniffundresolveerzeugen 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,geoipundip_is_privatebilden eine Art;portundport_rangeeine weitere, ebensosource_ip_cidrundsource_ip_is_privatesowiesource_portundsource_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 einzigenAND-Regel —{"network": "udp", "port": 443}wird zuAND,((DEST-PORT,443),(PROTOCOL,udp)). Eindomain_suffixmit führendem Punkt (.cn) wird zuDOMAIN-SUFFIX,cn. Regeln mittype: logicalwerden zuAND/OR/NOT,invertumschließt die ganze Regel mitNOT, undport_range(a:b) sowiesource_port_rangewerden zu Portbereichen. Einrule_setist überall ein weiterer Matcher der Regel, auch innerhalb einertype: 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 dasrule_setin einertype: 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.finaloder, ohnefinal, der erste Server —, wird zum[General]-DNS-Schlüssel seiner Art; seindetourwird als Suffix#proxy=<policy>geschrieben und einlocal-Server alssystem;proxy-dns-serverwird nicht geschrieben. Die übrigen Server werden über die[Host]-Einträge erreicht, zu denendns.ruleswerden; dort wird derlocal-Server alsserver:systemgeschrieben und dasdetoureines 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 ganzesrule_setan einen Resolver leitet, wird zur satzbezogenen FormRULE-SET:<tag> = server:…— aber nur, wennrule_setder 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>(mitupdate-interval=undpolicy-regex-filter=) lädt die Mitglieder einer Gruppe von einer URL;include-all-proxies=trueundinclude-other-group=<name>fügen alle Proxys oder die Mitglieder einer anderen Gruppe hinzu. Gruppenparameter, die Chute nicht nutzt, etwano-alertodericon-url, bleiben beim Speichern des Profils erhalten. Shadowrocketsuse=truekennzeichnet eine Gruppe, deren aufgeführte Namen Abonnements statt Proxys sind; jeder Name wird als Proxy-Provider gelesen. Shadowrocketsrandomwird zu einer Random-Gruppe. Eine Gruppe eines Typs, den Chute nicht implementiert, etwa Surgesexternal, behält ihre Mitglieder und läuft alsselect, mit einem Hinweis. Siehe Richtliniengruppe. - Integrierte Richtlinien. Shadowrockets
PROXYsteht für die im globalen Proxy-Modus gewählte Richtlinie, sofern das Profil kein eigenesProxydefiniert; 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-TYPEmitIPv4/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-urlbenennt 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ätzlichintervalundstricttragen kann. Dieupdate-url-Zeile selbst überlebt das Speichern, sodass ein Shadowrocket-Profil weiterhin als Shadowrocket-Profil gespeichert wird.close-if-proxy-chain-missingbleibt erhalten, doch Chute lehnt eine verkettete Richtlinie, deren Upstream fehlt, immer ab, wie es seintruetut. Shadowrockets Front-Proxy (前置代理), der dort nur in der App eingestellt wird, wird in Chute alsglobal-underlying-proxygeschrieben. - DNS. Shadowrockets
direct-dns-server,proxy-dns-server,fallback-dns-server,dns-direct-system,dns-fallback-system(hängtsystemanfallback-dns-serveran und verschmilzt mit einem, das das Profil selbst deklariert) undalways-ip-addresssowie[Host]-Zeilen der Formssid:<name> = server:…; Surgesencrypted-dns-server,allow-dns-svcb,[Host] <domain> = script:<name>undserver:force-syslib. Siehe DNS-Server und Lokale DNS-Zuordnung. - Allgemein.
proxy-test-urlundtest-timeout(die Standardwerte für url-test-, fallback- und load-balance-Gruppen),udp-policy-not-supported-behaviour,encrypted-dns-skip-cert-verificationsowiehttp-api/http-api-web-dashboard, die auf die Schlüssel des externen HTTP-Controllers abgebildet werden. Siehe Verschiedene Optionen. - Proxys. Das Schlüsselwort
tuic-v5und ein Abschnitt[WireGuard <name>], der mitpeer = (…)geschrieben ist. Siehe Proxy-Server und WireGuard-Konfiguration. - HTTP.
header-replace-regex, diehttp-request/http-response-Form der Body-Umschreibung,[Map Local]mitdata-type=,status-code=undheader="Key: value|…", die URL-Umschreibungreject-array/reject-tinygifsowie[MITM]h2,hostname-disabledundauto-quic-block. Siehe Header-Umschreibung, Body-Umschreibung, Mock-Antwort, URL-Umschreibung und HTTPS-Entschlüsselung. - Skripte und Module.
cronexp=,type=genericundevent-name=in[Script];#!system_version,#!REQUIREMENT,#!IOS-ONLY/#!MACOS-ONLY/#!TVOS-ONLYsowie%APPEND%/%INSERT%im[General]eines Moduls.#!system_versionund#!REQUIREMENTwerden 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-proxyund sing-boxsdetourwerden zuunderlying-proxy-Referenzen, Clashsrelay-Gruppen bleiben Relay-Gruppen mit derselben Hop-Reihenfolge, und der Download-Weg eines Providers (mihomosproxy:, sing-boxsdownload_detouroderhttp_client) wird zu seinempolicy=. 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 mitudp-over-tcpträ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-lengthundencryptionsowieudp-over-tcp/udp-over-tcp-versionbei jedem Proxy außerss; pro Gruppedisable-udp,interface-nameundrouting-mark; sowie die General-Schlüsselgeodata-mode,geox-url,find-process-mode,unified-delay,tproxy-port,redir-portund weitere. Dasiconeiner 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-ACCEPTundREMATCH-NAME. Eine Regel mit demsrc-Modifikator von mihomo wird ebenfalls übersprungen, statt am falschen Endpunkt abzugleichen. GEOSITEund dieGEOIP-Kategorien, die keine ISO-Ländercodes sind, benennen Sätze in mihomos Geodaten-Dateien, die Chute nicht mitbringt.GEOIP,privateundGEOIP,lanwerden auf jeder Plattform zuRULE-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 zuRULE-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) undworkers. - Transporte, die Chute nicht implementiert, werden gemeldet statt umgewandelt:
h2,http-Verschleierung,httpupgrade, die WebSocket-Variantev2ray-http-upgrade, WebSocket-max-early-dataund XHTTP-extra(XMUX / Download-Settings). Ein sing-box-Outbound, dessentransport.typehttpupgradeoderquicist, 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-
modeist in Chute ein Laufzeitschalter, kein Konfigurationsschlüssel; ein Profil im Modusglobaloderdirectwird 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.
Diese Seite ist eine Übersetzung der englischen Version. Bei Abweichungen ist die englische Version maßgeblich.