Importation
Chute peut importer des configurations de proxy écrites pour d'autres clients. Deux types d'entrées sont acceptés : les liens de partage de nœud unique (ss://, vmess://, …) et les profils entiers au format YAML Clash/mihomo ou JSON sing-box. Les deux sont convertis en configuration Chute native — ce que vous obtenez ensuite est un profil Chute ordinaire avec des sections [Proxy], [Proxy Group] et [Rule], et non un fichier étranger que Chute continuerait d'interpréter.
Les adresses http:// et https:// ne sont jamais traitées comme des liens de partage. Ce sont des adresses d'abonnement : le contenu est d'abord téléchargé, puis importé selon ce que le corps se révèle être.
Liens de partage
| Schéma | Type de politique obtenu | Port par défaut |
|---|---|---|
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 |
La plupart des liens adoptent la forme userinfo@host:port?query#name. Deux font exception : vmess:// transporte un objet JSON encodé en base64 (le format v2rayN, avec les noms de champ add / ps / scy / net / aid), et ss:// accepte à la fois le format SIP002 (base64(method:password)@host:port) et l'ancienne forme à corps entier base64(method:password@host:port). Les charges utiles base64 peuvent être sans remplissage et utiliser l'alphabet compatible URL.
trojan://[email protected]:443?sni=example.com&alpn=h2,http/1.1#Tokyo%20Node
se convertit en :
[Proxy]
Tokyo Node = trojan, example.com, 443, password=password, tls=true, sni=example.com, alpn=h2|http/1.1
Le texte après # est décodé (pourcentage) et devient le nom de la politique ; vmess:// le prend plutôt dans le champ ps. Un lien sans nom est nommé host:port. Les caractères réservés par le format de configuration — =, ,, [, ], ", tabulation et retour à la ligne — sont remplacés par des espaces dans le nom.
Trojan, Hysteria2, TUIC et AnyTLS sont des protocoles exclusivement TLS ; tls=true est donc ajouté même lorsque le lien ne le précise pas.
Liens multiples. Une charge utile peut contenir plusieurs liens de partage séparés par des retours à la ligne, éventuellement enveloppés dans une couche externe de base64. Chaque ligne analysable devient une politique, et les noms répétés reçoivent un suffixe 2, 3… afin que les règles et les groupes puissent toujours désigner chaque nœud individuellement. Les lignes non analysables sont signalées comme avertissements pendant que le reste de la charge utile est tout de même importé ; l'importation n'échoue que si rien n'a pu être converti.
Un lien dont le schéma ne figure pas dans le tableau ci-dessus n'est pas reconnu comme un lien de partage. Un lien au schéma connu mais dont des champs requis manquent est rejeté avec un message nommant ce schéma.
Paramètres pris en charge
Seuls les paramètres de requête ci-dessous sont lus ; tout le reste d'un lien est ignoré.
| Paramètre | S'applique à | Converti en | |
|---|---|---|---|
sni, peer, servername |
Tous | sni |
|
alpn (séparé par des virgules) |
Tous | alpn (valeurs jointes par `\ |
`) |
fp |
Tous | fingerprint (le profil ClientHello uTLS) |
|
allowInsecure, insecure, skip-cert-verify |
Tous | skip-cert-verify=true |
|
security=tls, xtls, reality |
Tous | tls=true |
|
pbk, sid |
REALITY | reality=true, public-key, short-id |
|
flow |
VLESS | xtls=true, flow |
|
type/network=ws + path, host |
Tous | ws=true, ws-path, ws-headers=Host:… |
|
type/network=grpc + serviceName (ou path) |
Tous | grpc=true, grpc-service-name |
|
type/network=xhttp ou splithttp + path, host, mode |
Tous | xhttp=true, xhttp-path, xhttp-host, xhttp-mode |
|
obfs, obfs-password, up, down |
Hysteria2 | Mêmes noms d'option | |
plugin=… |
Shadowsocks | Voir ci-dessous |
Une valeur plugin Shadowsocks est lue sous la forme nom;clé=valeur;…. obfs-local / simple-obfs / obfs deviennent obfs et obfs_param ; v2ray-plugin dans son mode websocket (par défaut) devient ws=true avec ws-path et ws-headers. Tout autre plugin produit un avertissement et n'est pas repris — la politique obtenue ne pourra pas se connecter à un serveur qui l'exige.
Remarque : un
aid(alterId) VMess non nul est signalé par un avertissement. Chute ne parle que VMess AEAD, et un serveur exigeant encore l'ancienne poignée de main MD5 n'authentifiera pas la connexion.
Importation de profil
Trois formats sont reconnus :
| Format | Traitement |
|---|---|
| Profil Chute/Surge natif | Utilisé tel quel, sans étape de conversion |
| YAML Clash / mihomo | Converti en configuration native |
| JSON sing-box | Converti en configuration native |
Le format est détecté à partir du contenu, le nom de fichier ne servant que d'indice. Un contenu commençant par { est traité comme du JSON sing-box quel que soit le nom du fichier (un profil sing-box enregistré en .yaml s'analyse tout de même comme du YAML, le nom seul ne peut donc pas faire foi). Sinon, une extension .conf signifie natif, .json signifie sing-box, et .yaml / .yml signifie Clash. Lorsqu'aucun nom de fichier exploitable n'est disponible — un corps d'abonnement, par exemple — la première ligne significative tranche : #!MANAGED-CONFIG ou un en-tête [Section] signifie natif, et proxies:, proxy-groups:, rules:, proxy-providers: ou rule-providers: signifie Clash. Tout le reste est traité comme natif.
Un document qui s'analyse mais ne contient aucune des sections définissant son dialecte est rejeté plutôt que signalé comme une importation réussie de rien du tout : le YAML Clash nécessite au moins l'un de proxies, proxy-groups, rules, proxy-providers ou rule-providers, et le JSON sing-box nécessite outbounds, endpoints ou route.
Une seule entrée non convertible ne fait jamais échouer l'importation. Chaque proxy, groupe et règle est converti individuellement ; ceux qui n'ont pas d'équivalent Chute sont ignorés et signalés. Le résultat comprend la configuration convertie, une liste d'avertissements et une liste des champs source ignorés. Ces mêmes avertissements sont également inscrits dans le texte converti sous forme de commentaires, à côté de la section dont ils proviennent :
[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
Enfin, le texte converti est réanalysé par l'analyseur propre à Chute. Toute ligne rejetée par l'analyseur est mise en commentaire sous la forme # KL-CONVERT-DROPPED: … et signalée, de sorte qu'un profil convertible à 95 % s'importe et fonctionne tout de même.
Les noms de nœud sont réécrits lorsqu'ils casseraient le format de configuration : , devient une espace et = devient -, et un nom entrant alors en collision avec un autre reçoit un suffixe numérique. Les membres de groupe et les destinations de règles sont réécrits en conséquence, afin que chaque référence continue de désigner le même nœud. Les proxys/sorties direct sont associés à la politique intégrée DIRECT, et reject / block / dns à REJECT.
Remarque : un profil converti est un instantané statique. Chute retélécharge un abonnement et l'analyse comme un profil natif ; un profil ayant dû être converti est donc enregistré sans URL de mise à jour automatique et ne s'actualisera pas de lui-même.
Notes de conversion Clash / mihomo
Remarque :
dialer-proxyest converti enunderlying-proxy. Chute analyse et conserve cette option mais n'implémente pas le chaînage de proxys — une politique la portant consigne un avertissement et se connecte directement à son propre serveur. Le trafic qui était chaîné sous mihomo ne l'est plus après l'importation.
- Types de proxy convertis :
ss,ssr,vmess,vless,trojan,http,socks5,hysteria2,tuic,anytls,wireguard,ssh. Les types pour lesquels Chute n'a pas d'implémentation —snell,hysteria(v1),mieru,juicity,shadowquic,trusttunnel,openvpn,sudoku,vmess-http— sont ignorés avec un avertissement nommant le protocole. Deux autres sont ignorés bien que Chute prenne en charge le protocole : un proxymasque, car la disposition des champs mihomo diffère, et un proxytailscale, qui se configure une seule fois dans la section[Tailscale]et s'utilise via la politique intégréeTAILSCALE. - Les deux clés d'empreinte de mihomo désignent des choses différentes et sont maintenues distinctes :
client-fingerprintdevientfingerprint(le profil ClientHello uTLS) etfingerprintdevientcert-fingerprint-sha256(un épinglage de certificat). udp: falsedevientudp-relay=false,tfodevienttfo=true, et un blocsmuxactivé devientmux=true.- Les types de groupe
select,url-test,fallbacketload-balancesont convertis avec leurs options de vérification d'état. Un grouperelayest ignoré — il s'agit de chaînage, non implémenté. Les membresuse:deviennent des référencespolicy-provider:<nom>, etinclude-all/include-all-proxies/include-all-providerssont développés en une liste explicite de membres. filteretexclude-filtersont repris entre guillemets, mais un motif contenant une virgule ou un guillemet ne peut pas survivre au format de ligne de configuration et est abandonné avec un avertissement.- Les types de règles sont renommés lorsque les noms diffèrent :
MATCH→FINAL,DST-PORT→DEST-PORT,SRC-IP-CIDR→SRC-IP.REJECT-DROPetREJECT-TINYGIFsont ramenés àREJECT; une règle visantPASSouCOMPATIBLEest ignorée. - Un
rule-provideren ligne (type: inlineavec une listepayload) est développé en règles concrètes équivalentes, puisqu'une ligne[Rule Provider]de Chute ne peut pas intégrer de charge utile. - Les clés générales sont associées lorsqu'un équivalent existe :
mixed-portdevient leportHTTP (SOCKS5 nécessite son propresocks-port),allow-landevientallow-wifi-access,log-levelest associé àloglevel,external-controller/secretdeviennent les options du contrôleur HTTP externe, et unsnifferactivé devientsniffing-enabled.
Notes de conversion sing-box
- Types de sorties convertis :
shadowsocks,vmess,vless,trojan,hysteria2,tuic,anytls,shadowtls,wireguard,http,socks,ssh.selectoreturltestdeviennent des groupes de politiquesselecteturl-test. detourproduit un avertissement pour la même raison quedialer-proxy: le chaînage de sorties n'est pas implémenté, et la sortie contacte directement son propre serveur.- Les entrées
route.rule_setdeviennent des lignes[Rule Provider](type=httppour les distantes,type=filepour les locales, toujours lues comme des listes de règles mihomo-YAML classiques). Un jeu de règles au format binaire.srsest rejeté — Chute ne lit que les charges utiles de règles au format texte. - Les règles de routage suivent la clé
action:route/bypassutilisent la sortie nommée,rejectdevientREJECT, ethijack-dns,sniffetresolvene produisent rien, car Chute les pilote depuis[General]. - Les réglages
multiplexetdns.rules(routage DNS par domaine) n'ont pas d'équivalent et sont signalés comme abandonnés.
Limitations
- Le chaînage de proxys n'est pas implémenté. Le
dialer-proxyde mihomo, ledetourde sing-box et les groupesrelayde Clash décrivent tous une chaîne ; aucun d'eux ne produit de trafic chaîné dans Chute. - Les options sans équivalent Chute sont abandonnées avec un avertissement plutôt que silencieusement : par proxy,
ip-version,interface-name,routing-marketmptcp; par groupe,exclude-type,disable-udp,interface-name,routing-marketicon; et les clés généralesbind-address,tcp-concurrent,geodata-mode,geox-url,find-process-mode,unified-delay,authentication,tproxy-port,redir-portet d'autres. - Les types de règles sans équivalent sont ignorés :
GEOSITE,IP-SUFFIX,SRC-IP-SUFFIX,SRC-GEOIP,SRC-IP-ASN,DSCP,UID,SUB-RULE,PROCESS-PATH-REGEX,PROCESS-NAME-WILDCARD,PROCESS-PATH-WILDCARDetIP-ACCEPT. Une règle portant le modificateursrcde mihomo est également ignorée, plutôt que d'établir une correspondance sur le mauvais point de terminaison. Lessub-rulesde mihomo (arbres de règles imbriqués) sont abandonnées. - Les détails de protocole que Chute gère lui-même ne sont pas repris : le saut de port Hysteria2 (
ports), leheartbeatTUIC, le réglage du pool de sessions AnyTLS, les listespeersWireGuard (un seul pair est configuré) etworkers. - Les transports que Chute n'implémente pas sont signalés au lieu d'être convertis :
h2, l'obfuscationhttp,httpupgrade, la variante WebSocketv2ray-http-upgrade,max-early-datade WebSocket, etextrade XHTTP (XMUX / download-settings). - Le
modede fonctionnement de Clash est un interrupteur d'exécution dans Chute, et non une clé de configuration ; un profil en modeglobaloudirectest converti en mode règles avec un avertissement. - Le YAML est lu avec un analyseur standard ; les ancres et la clé de fusion
<<fonctionnent donc. Une valeur écrite sous forme de scalaire multiligne est repliée sur une seule ligne, car un retour à la ligne scinderait la ligne de configuration où elle atterrit.