インポート
Chuteは他のクライアント向けに書かれたプロキシ設定をインポートできます。受け付ける入力は2種類あります: 単一ノードの共有リンク(ss://、vmess://など)と、Clash/mihomo YAMLまたはsing-box JSON形式のプロファイル全体です。どちらもネイティブのChute設定に変換されます — 変換後に得られるのは[Proxy]、[Proxy Group]、[Rule]セクションを持つ通常のChuteプロファイルであり、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という形式です。例外は2つあります: vmess://はbase64エンコードされたJSONオブジェクト(add / ps / scy / net / aidというフィールド名を使うv2rayN形式)を含み、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で1層だけ包んでいても構いません。パースできた行はそれぞれポリシーになり、名前が重複した場合は2、3…というサフィックスが付くため、ルールやグループから各ノードを個別に指定できます。パースできなかった行は警告として報告されますが、ペイロードの残りはそのままインポートされます。インポートが失敗するのは、何ひとつ変換できなかった場合のみです。
上の表にないスキームのリンクは共有リンクとして認識されません。既知のスキームでも必須フィールドが欠けているリンクは、そのスキーム名を示すメッセージとともに拒否されます。
サポートされるパラメータ
読み取られるのは以下のクエリパラメータのみです。リンク内のそれ以外のものは無視されます。
| パラメータ | 適用対象 | 変換先 | |
|---|---|---|---|
sni、peer、servername |
全て | sni |
|
alpn(カンマ区切り) |
全て | alpn(値は`\ |
`で連結されます) |
fp |
全て | fingerprint(uTLSのClientHelloプロファイル) |
|
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 | 下記を参照 |
Shadowsocksのpluginの値はname;key=value;…として読み取られます。obfs-local / simple-obfs / obfsはobfsとobfs_paramになり、v2ray-pluginは(デフォルトの)websocketモードであればws=trueとws-path、ws-headersになります。それ以外のプラグインは警告を出して引き継がれません — 生成されたポリシーは、そのプラグインを必要とするサーバーには接続できません。
注意: VMessの
aid(alterId)が0以外の場合は警告として報告されます。ChuteはVMess AEADのみに対応しているため、レガシーなMD5ハンドシェイクを要求するサーバーでは認証できません。
プロファイルのインポート
認識される形式は3つです:
| 形式 | 処理 |
|---|---|
| ネイティブのChute/Surgeプロファイル | 変換ステップなしでそのまま使用されます |
| Clash / mihomo YAML | ネイティブ設定に変換されます |
| sing-box JSON | ネイティブ設定に変換されます |
形式は内容から検出され、ファイル名はヒントとしてのみ使用されます。{で始まる内容は、ファイル名が何であってもsing-box JSONとして扱われます(.yamlとして保存されたsing-boxプロファイルもYAMLとしてパースできてしまうため、名前だけでは信頼できません)。それ以外の場合、拡張子.confはネイティブ、.jsonはsing-box、.yaml / .ymlはClashを意味します。使用できるファイル名がない場合 — 例えばサブスクリプションの本文 — は、最初の意味のある行で決まります: #!MANAGED-CONFIGまたは[Section]ヘッダーはネイティブ、proxies:、proxy-groups:、rules:、proxy-providers:、rule-providers:はClashを意味します。それ以外はネイティブとして扱われます。
パースはできてもその方言を定義するセクションを1つも含まないドキュメントは、何もインポートしていないのに成功と報告するのではなく拒否されます: Clash YAMLにはproxies、proxy-groups、rules、proxy-providers、rule-providersのいずれかが少なくとも1つ必要で、sing-box JSONにはoutbounds、endpoints、routeが必要です。
変換できないエントリが1つあってもインポート全体が失敗することはありません。 各プロキシ、グループ、ルールはそれぞれ個別に変換され、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がプロトコル自体はサポートしているのにスキップされるものが2つあります:masqueプロキシはmihomoのフィールド構成が異なるため、tailscaleプロキシは[Tailscale]セクションで一度だけ設定し、組み込みのTAILSCALEポリシーを通して使用するためです。 - mihomoの2つのフィンガープリントキーは意味が異なるため区別されます:
client-fingerprintはfingerprint(uTLSのClientHelloプロファイル)になり、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は引用符付きで引き継がれますが、カンマや引用符を含むパターンは設定行のフォーマットでは表現できないため、警告とともに破棄されます。- ルールタイプは名前が異なる場合に変更されます:
MATCH→FINAL、DST-PORT→DEST-PORT、SRC-IP-CIDR→SRC-IP。REJECT-DROPとREJECT-TINYGIFはREJECTにまとめられ、PASSまたはCOMPATIBLEを対象とするルールはスキップされます。 - インラインの
rule-provider(payloadリストを持つtype: inline)は同等の具体的なルールに展開されます。Chuteの[Rule Provider]行はペイロードを埋め込めないためです。 - 一般設定のキーは、同等のものがある場合にマッピングされます:
mixed-portはHTTPのportになり(SOCKS5には独自のsocks-portが必要です)、allow-lanはallow-wifi-accessに、log-levelはloglevelにマッピングされ、external-controller/secretは外部HTTPコントローラーのオプションになり、有効化されたsnifferはsniffing-enabledになります。
sing-box変換に関する注意
- 変換されるアウトバウンドタイプ:
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ルーティング)には同等のものがないため、破棄されたものとして報告されます。
制限事項
- プロキシチェーンは実装されていません。 mihomoの
dialer-proxy、sing-boxのdetour、Clashのrelayグループはいずれもチェーンを表しますが、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。mihomoのsrc修飾子を持つルールも、誤ったエンドポイントでマッチしないようにスキップされます。mihomoのsub-rules(ネストされたルールツリー)は破棄されます。 - Chuteが自身で管理するプロトコルの詳細は引き継がれません: Hysteria2のポートホッピング(
ports)、TUICのheartbeat、AnyTLSのセッションプール調整、WireGuardのpeersリスト(単一のピアが設定されます)、workers。 - Chuteが実装していないトランスポートは、変換されるのではなく報告されます:
h2、http難読化、httpupgrade、v2ray-http-upgradeのWebSocketバリアント、WebSocketのmax-early-data、XHTTPのextra(XMUX / download-settings)。 - Clashの動作
modeはChuteでは設定キーではなくランタイムのスイッチです。globalまたはdirectモードのプロファイルは、警告とともにルールモードに変換されます。 - YAMLは標準のパーサーで読み取られるため、アンカーや
<<マージキーが機能します。複数行スカラーで書かれた値は1行に折りたたまれます。改行があると、その値が入る設定行が分割されてしまうためです。