その他オプション
[General]
ipv6 = true
loglevel = notify
skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local
tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
tun-included-routes = 192.168.1.12/32
共通オプション
完全なIPv6サポートを有効にする(デフォルト: true)
ipv6 = true
loglevel(デフォルト: warning)
loglevel = notify
none、fatal、warning、notify、info、verboseのいずれか。verboseを日常使用で有効にすることは推奨されません。パフォーマンスが大幅に低下するためです。
skip-proxy
skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local
iOS版では、このオプションはこれらのドメイン/IP範囲への接続をChuteプロキシではなくChute TUNで処理するよう強制します。macOS版では、「システムプロキシとして設定」が有効な場合にこれらの設定がシステムに適用されます。このオプションは一部のアプリとの互換性問題を修正するために使用されます。
- 単一のドメインを指定するには、ドメイン名を入力します(例: apple.com)。
- ドメイン上の全てのWebサイトを指定するには、ドメイン名の前にアスタリスクを使用します(例: *apple.com)。
- ドメインの特定の部分を指定するには、各部分を指定します(例: store.apple.com)。
- IPアドレスでホストまたはネットワークを指定するには、192.168.2.11のような特定のIPアドレス、または192.168.2.*や192.168.2.0/24のようなアドレス範囲を入力します。
注意: IPアドレスまたはアドレス範囲を入力した場合、そのアドレスを使用してそのホストに接続する場合にのみプロキシをバイパスでき、そのアドレスに解決されるドメイン名でホストに接続する場合にはバイパスできません。
プロキシサーバーのリッスン
interface = 127.0.0.1
port = 8118
socks-interface = 127.0.0.1
socks-port = 8119
interface / portはHTTPプロキシサーバーのリッスンアドレスとポートを制御します(デフォルト127.0.0.1:8118)。socks-interface / socks-portはSOCKS5プロキシサーバーを制御します(デフォルト127.0.0.1:8119)。
互換性エイリアス:
doh-serverはdohのエイリアスとして受け付けられます。http-listen/socks5-listen(例:0.0.0.0:6152、[::]:6153、またはポート番号のみ)は上記のinterface/port設定にマッピングされます。ワイルドカードのリッスンホスト(0.0.0.0、::、*)はallow-wifi-access = trueも設定します。
インバウンドプロキシ認証
http-auth = username:password
ChuteのHTTPおよびSOCKS5プロキシサーバーを使用する前に、クライアントに認証を要求します。この行を繰り返して複数の認証情報を許可できます。
システムリクエストをバイパス
bypass-system = true
有効にすると、システムプロセスから送信されたリクエストはChuteの処理をバイパスします。
デフォルト:
true。
常に実IPを使用
always-real-ip = *.example.com, tracker.example.org
ChuteがハイジャックされたDNSクエリに対して偽のIPアドレスを提供する場合(hijack-dnsを参照)、このカンマ区切りリストにマッチするホスト名には、代わりに常に実際に解決されたIPアドレスが返されます。ワイルドカードがサポートされています。
既存の接続を中断
interrupt-exist-connections = true
有効にすると、任意のポリシーグループで選択されたポリシーを(URLテスト、フォールバック、ロードバランス、SSID、または手動選択によって)変更した際に、古いポリシーを使用していた既存の接続を正常に切断します。これにより、接続が古いプロキシに残り続けることなく、新しく選択されたプロキシを即座に使用するようになります。
影響を受ける各接続は、強制切断される前に3秒のタイムアウトで正常に閉じられます。
デフォルト:
false。これはグローバル設定であり、全てのポリシーグループに影響します。
Network Framework(macOS / tvOS)
network-framework = true
アウトバウンド接続にApple Network.frameworkを有効にします。Network.frameworkを使用すると、サポートされているプラットフォームでより良いパフォーマンスと最新のTLSスタック統合が得られます。
デフォルト: macOSでは
true、iOSとtvOSではfalse。
単純なホスト名を除外
exclude-simple-hostnames = true
有効にすると、単純なホスト名(ドットを含まない単一ラベル名、例: localhost)へのリクエストはプロキシルールをバイパスし、ローカルで解決されます。これにより、ローカルネットワーク名に対する不要なDNSルックアップを回避できます。
Chute Macでは、初回起動時に一度だけ実行されるマイグレーションによってこのオプションがデフォルトで有効になります。ユーザーが明示的にオフに設定した場合は、その設定が尊重されます。
デフォルト:
false。
データベース記録を無効にする
disable-db-record = true
有効にすると、Chuteはトラフィックレコードのローカルデータベースへの書き込みを停止します。これによりパフォーマンスが向上しストレージ使用量が削減されますが、Chute Dashboardでトラフィック履歴が利用できなくなります。
デフォルト:
false。
メニューバー速度表示(Macのみ)
menu-bar-show-speed = true
有効にすると、Chute Macは現在のアップロードおよびダウンロード速度をメニューバーに表示します。
デフォルト:
false。
他のDNSサーバーをハイジャック
hijack-dns = 8.8.8.8:53
デフォルトでは、ChuteはChute DNSアドレス(198.18.0.2)に送信されたDNSクエリに対してのみ偽のIPアドレスを返します。標準DNSに送信されたクエリは単に転送されます。
一部のデバイスやソフトウェアは常にハードコードされたDNSサーバーを使用します(例えば、Google Speakersは常に8.8.8.8を使用します)。このオプションを使用してクエリをハイジャックし、偽のアドレスを取得できます。
hijack-dns = *:53を使用して全てのDNSクエリをハイジャックすることもできます。
除外ルート
tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
Chute VIFはTCPおよびUDPプロトコルのみを処理できます。このオプションを使用して特定のIP範囲をバイパスし、全てのトラフィックを通過させます。
注意: このオプションは拡張モードのVIF(utun)タイプでのみ機能し、PacketTunnel VPNタイプを使用する場合は効果がありません。Chuteプロキシサーバーによって処理されるリクエストは影響を受けません。'skip-proxy'と'tun-excluded-routes'を組み合わせて、特定のHTTPトラフィックがChuteをバイパスするようにしてください。
このオプションはシステムエラーENOMEM(メモリを割り当てられません)を引き起こす可能性があります。これはiOSシステムのバグのようです。可能であればこのオプションを使用しないでください。
含めるルート
tun-included-routes = 192.168.1.12/32
デフォルトでは、Chute VIFインターフェースは自身をデフォルトルートとして宣言します。しかし、Wi-Fiインターフェースがより小さいルートを持っているため、一部のトラフィックがChute VIFインターフェースを通過しない場合があります。このオプションを使用してより小さいルートを追加します。
注意: このオプションは拡張モードのVIF(utun)タイプでのみ機能し、PacketTunnel VPNタイプを使用する場合は効果がありません。
プロトコルスニッフィング
sniffing-enabled = true
sniffing-timeout = 100
Chuteは初期バイトを検査することで接続の実際のプロトコルを検出できます。これにより、非HTTPインバウンド接続でもPROTOCOL,TLS,Proxyのようなルールが正しく機能します。
sniffing-enabled(デフォルト: false)
sniffing-enabled = true
TCP接続のプロトコル検出を有効にします。
sniffing-timeout(デフォルト: 100ms)
sniffing-timeout = 200
プロトコルを判断するために初期データを待つ最大時間(ミリ秒)。遅い接続でプロトコル検出が失敗する場合は、この値を増やしてください。
QUICのブロック
block-quic = auto
検出されたQUIC(HTTP/3を含む)トラフィックをChuteが拒否するかどうかを制御します。QUICはUDP上で動作するため、ChuteのHTTP MitMでは復号できません。QUICを拒否すると、対応するクライアントにTCPでの再試行を促し、TCPベースのプロキシ処理や、設定済みの場合はHTTPS復号を適用できるようになります。
| 値 | 動作 |
|---|---|
off |
QUICのグローバルブロックを適用しません(デフォルト)。検出されたQUICトラフィックは通常のルーティングルールに従います。 |
on |
DIRECTにルーティングされたトラフィックを含め、検出されたすべてのQUICフローを拒否します。 |
auto |
最終的な送信ポリシーがプロキシの場合にのみ、検出されたQUICを拒否します。DIRECTにルーティングされたトラフィックは許可され、REJECTにルーティングされたトラフィックはそのルールによって引き続き拒否されます。 |
TUN経由のトラフィックでは、拒否されたQUICフローにICMP/ICMPv6 Port Unreachableメッセージを返すため、対応するクライアントはQUICのタイムアウトを待たずにTCPへフォールバックできます。
block-quicのQUIC検出は自動的に行われ、sniffing-enabledは必要ありません。sniffing-enabledはTCPのプロトコルスニッフィングを制御します。QUICフローをルール単位で処理する場合は、PROTOCOL,QUIC,...ルールを使用してください。
TUNをバイパス
bypass-tun = 192.168.0.0/16, 10.0.0.0/8
skip-proxyと似ていますが、TUN/VIFルーティングレベルで動作します。これらのIP範囲への接続はTUNインターフェースを完全にバイパスし、システムネットワークスタックを直接通過します。
注意: このオプションは拡張モードのVIF(utun)タイプでのみ機能します。PacketTunnel VPNタイプを使用する場合は効果がありません。
拒否時にエラーページを表示
show-error-page-for-reject = true
有効にすると、Chuteは拒否されたリクエストに対して接続を単に切断する代わりに、ユーザーフレンドリーなエラーページを返します。
楽観的DNS
optimistic-dns = false
有効にすると、Chuteはバックグラウンドでレコードを更新しながら、キャッシュされたDNS結果を即座に返します。これにより、古いDNSレコードを返す可能性と引き換えに接続レイテンシが削減されます。
デフォルト:
true。無効にするにはoptimistic-dns = falseを設定してください。
Wi-Fiアクセスを許可
allow-wifi-access = true
同じネットワーク上の他のデバイスから Chute の HTTP / SOCKS5 プロキシポートに到達できるようにします。両方のリスナーのバインドアドレスを 0.0.0.0 に広げる動作です。Surge 形式の設定(および sing-box インポート時の allow-lan マッピング)はこのフラグだけを持ち、interface は既定の 127.0.0.1 のままなので、フラグ自身がバインドアドレスを広げる必要があります。
このフラグと明示的なワイルドカード
interfaceは同じ意図の二通りの書き方で、Chute は両者の和集合を取ります。すでに0.0.0.0と書かれた設定の動作は変わりません。フラグを変更すると両方のリスナーが再バインドされるため、アクセスの取り消しは再起動を待たずリロード時に反映されます。これらはプロキシポートであり、
http-authを設定しない限り認証はありません。自分の管理外のネットワークでは資格情報も設定してください。
管理設定
#!MANAGED-CONFIG https://example.com/config.conf interval=86400 strict=false
先頭行に #!MANAGED-CONFIG ヘッダーを持つ設定は、そのURLから自動的に再取得されます。ヘッダーのパラメータと更新の動作についてはマネージド設定を参照してください。
レプリカ / トラフィック記録
replica = true
[General] の replica キー(replica = true)がトラフィック記録を有効にします。[Replica] セクションは Chute Dashboard に表示される内容のフィルタリングを担当し、そのキーは Replica に記載されています。
外部コントローラーアクセス(Chute Dashboard)
external-controller-access = password@0.0.0.0:6155
Chute Dashboardが使用するリモートコントロールサーバーを起動します。値はpassword@host:portです。パスワードの前にオプションでユーザー名を付けられます(user:password@host:port)。iOSでは、付随するUSBチャンネルがport + 1で開かれます(macOSでは開かれません)。 接続方法は Chute Dashboard のページにあります。
HTTPコントロールAPIとWeb UI
[General]
external-http-controller = 127.0.0.1:9090
external-http-secret = your-secret-token
external-http-ui = true
external-http-cors = false
Chuteは、ClashやSurgeのダッシュボードと同様の組み込みHTTPコントロールAPIとWebベースの管理UIを提供します。APIはRESTエンドポイントを通じてカーネルステータス、トラフィック、接続、DNS、ポリシー制御、設定管理を公開します。
external-http-controller(デフォルト: 無効)
external-http-controller = 127.0.0.1:9090
HTTP 制御サーバーのアドレスとポート。ローカル限定にするには 127.0.0.1 を使います。ループバック以外のアドレス(例: 192.168.1.5:9090)にバインドする場合は external-http-secret の明示が必須です。指定がなければサーバーは起動を拒否し、何が足りないかをログに残します。
ワイルドカードアドレス(0.0.0.0、::、*)はこの検査ではループバック以外として扱われます。すべてのインターフェースで待ち受ける、つまりローカル限定の正反対だからです。受け付けられる書き方は 0.0.0.0:9090、*:9090(同じ意味)、IPv6 なら [::]:9090 です — 裸の :::9090 は自動的に角括弧で囲まれます。解析できないアドレスは、コントローラーを黙って無効にする代わりに設定エラーとして報告されます。127.0.0.0/8 全体がループバックであり、127.0.0.1 だけではありません。
external-http-secret(デフォルト: 自動生成されたトークン)
external-http-secret = your-secret-token
API 認証に使う Bearer トークン。リクエストにはヘッダー Authorization: Bearer <secret> が必要です。トークンはこのヘッダーでのみ受け付けられ、クエリパラメータでは渡せません。比較は定数時間で行われます。認証失敗は 401 と {"ok": false, "error": {"code": "unauthorized", "message": "missing or invalid token"}} を返します。保護されるのは /api/* と Clash 互換エイリアスのみで、Web UI の静的アセットにトークンは不要です(external-http-ui = false ではそれ自体が無くなり、ページは 404 になります)。
このキーが無い場合、Chute は認証なしで配信するのではなくトークンを生成します。 生成されたトークンは Chute の共有フォルダー内の control-token に所有者のみ読み取り可能な権限で書き出されます — 設定ファイルの隣ではなく、iOS と tvOS では App Group コンテナ、Android ではアプリの private データディレクトリです。再起動後も使い回され、各アプリが表示します(Web コンソールを開くを参照)。制御 API は接続データベースを渡すことができ、その記録には実行中に見たすべての URL・ヘッダー・プロセス名が含まれます。認証なしが既定であってよい理由はありません。
それでも認証なしで配信したい場合は、設定で明示してください:
external-http-secret = none
これが受け付けられるのはループバックへのバインドのときだけです。ループバック以外では、none もキー無しも不十分で、制御サーバーは起動を拒否し、何が必要かを伝えます。
アップグレード時の注意: 「
external-http-secretが無い=認証なし」に依存していた場合、ローカルのスクリプトは401を受け取るようになります。アプリから生成トークンを読み取るか、external-http-secret = noneと書いて従来の動作を明示的に選んでください。
external-http-ui(デフォルト: true)
external-http-ui = true
有効にすると、Chuteはコントローラーアドレスで組み込みWeb UIを提供します。Web UIは概要ダッシュボード、接続管理、DNS検査、トラフィック監視、ポリシー制御、設定編集を提供します。APIを有効にしたままUIを無効にするにはfalseに設定します。
Web コンソールを開く
コンソールは制御サーバーのアドレスで提供されます。各アプリはアドレスとトークンを渡してくれます — 自動生成されたトークンも含めてで、そうでなければ読む手段がありません:
- Chute Mac: メニューバー → Web コンソールを開く、および Web コンソールのトークンをコピー。接続の詳細ウィンドウにも リクエストと履歴 があり、コンソールを開きます — 開くのはホームで、その接続そのものではありません。
- Chute iOS: コントロールパネル → Web UI の行 → 開く、アドレスをコピー、アクセストークンをコピー。
- Chute tvOS: コントロールパネルには Web UI スイッチの下に Web UI アドレス という独立した行があり、ホストとポートを表示します。選択すると、リスナーが他のデバイスから到達可能なら QR コードが表示されます — サインイン用トークンは画面ではなくコードの中にだけ入っています。コントローラーがループバックにバインドされている場合は代わりに説明が表示されます。ループバックのコンソールはスマートフォンから開けないからです。
- Chute Android: コントロールパネルはアドレスを HTTP API スイッチのサブタイトルとして表示し、別に 生成されたアクセストークン の行があってタップでコピーできます — この行はカーネルがトークンを生成したときにだけ現れ、自分で設定したシークレットは決して表示されません。
これらが示すアドレスはトークンをクエリパラメータとして含みます。ページは読み込み時にそれを消費してアドレスバーから取り除くため、リンクを開くだけでサインインが完了し、32 桁の 16 進数を書き写す必要はありません。
external-http-cors(デフォルト: false)
external-http-cors = true
APIレスポンスにCORS(Cross-Origin Resource Sharing)ヘッダーを有効にします。Web UIやサードパーティツールが異なるオリジンからAPIにアクセスする必要がある場合に便利です。
APIエンドポイント:
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET |
/api/status |
ランタイムステータス、ポート、稼働時間 |
GET |
/api/traffic |
グローバルおよびポリシーごとのトラフィックカウンター |
GET |
/api/connections |
現在のアクティブな接続 |
DELETE |
/api/connections/:id |
接続を閉じる |
GET |
/api/connections/history |
履歴接続レコード |
GET |
/api/connections/processes |
プロセスごとの接続統計 |
GET |
/api/connections/:id/request |
接続のキャプチャされたリクエストデータ |
GET |
/api/connections/:id/response |
接続のキャプチャされたレスポンスデータ |
GET |
/api/dns |
DNSキャッシュレコード |
DELETE |
/api/dns/cache |
DNSキャッシュを消去 |
DELETE |
/api/dns/records/:domain |
単一のDNSレコードを削除 |
GET |
/api/config |
現在の設定 |
PUT |
/api/config |
設定を再読み込み |
POST |
/api/config/validate |
設定を解析してエラーを報告する(読み込みはしない) |
GET |
/api/policies |
ポリシーグループと現在の選択 |
PUT |
/api/policies/:group |
ポリシーグループの選択を変更 |
PUT |
/api/mode |
アウトバウンドモードを設定 |
GET |
/api/features |
機能スイッチの状態 |
PUT |
/api/features/mitm |
MitMを切り替え |
PUT |
/api/features/record-traffic |
トラフィック記録を切り替え |
GET |
/api/rules |
読み込まれたルールと、命中した書き換えルール |
POST |
/api/rules/match |
リクエストがどこへ送られるか(実際には送らない) |
GET |
/api/logs |
最近のログエントリ |
GET |
/api/loglevel |
現在のログレベルと、書き出し中のセクション |
PUT |
/api/loglevel |
再起動せずにログレベルやセクションを変更 |
GET |
/api/health |
エンジンの健全性: 拒否数、世代、フットプリント、前回の終了 |
GET |
/api/events |
この実行で注目すべき出来事 |
GET |
/api/tailscale |
Tailscale エンジンの現在の状態 |
POST |
/api/diagnostics/ping |
ICMP または TCP による到達性プローブ |
POST |
/api/diagnostics/dns-query |
実行中のリゾルバでドメインを解決 |
POST |
/api/diagnostics/egress-probe |
現在の出口 IP を検出 |
POST |
/api/diagnostics/url-test/:policy |
ポリシーのレイテンシテストを実行 |
POST |
/api/diagnostics/bundle |
秘匿処理済みの診断アーカイブを作成 |
GET |
/api/connections/export |
接続を HAR 1.2 として書き出し |
GET |
/api/rewrites |
すべての書き換え/Mock 系統と MitM ホスト一覧 |
GET |
/api/rewrites/:family |
1 つの系統のルール |
POST |
/api/rewrites/:family |
ルールを追加 |
DELETE |
/api/rewrites/:family/:id |
ルールを削除 |
DELETE |
/api/rewrites/:family |
系統をクリア |
GET |
/api/mitm/hosts |
現在復号しているホスト |
POST |
/api/mitm/hosts |
ホストを追加 |
DELETE |
/api/mitm/hosts/:host |
ホストを削除 |
DELETE |
/api/mitm/hosts |
一覧をクリア |
エンドポイントの注意点:
GET /api/connectionsはlimit(正の整数、デフォルトおよび最大は1000)とcursor(カーソルより大きいidを持つ接続のみを返す)を受け付けます。レスポンスのdataにはconnections、total、page_size、has_moreが含まれ、さらにページがある場合はnext_cursorも含まれます。GET /api/connections/historyはlimit(デフォルト100、最大1000)とcursor/before(同義。両方を渡すと拒否されます)を受け付けます。GET /api/connections/:id/requestと.../responseは{"connection_id": <id>, "data": "<base64>"}を返します。2 MiBを超えるキャプチャは413を返します。GET /api/configは、機密値(http-auth、external-http-secret、ca-p12、ca-passphrase、WireGuardの鍵など)を<redacted>に置き換えた設定を返します — 結果をそのままPUT /api/configに送り返さないでください。プレースホルダーがそのまま設定に書き込まれてしまいます。PUT /api/configはJSON{"configuration": "<full text>"}、または生の設定テキストをリクエストボディとして受け付けます(上限1 MB)。成功するとカーネルが再読み込みされます — 実行されていなかった場合は起動します。PUT /api/policies/:groupは、ボディのキーpolicy、name、selected、selectのうち最初に存在するものから選択値を取ります。値はポリシー名でも、数値インデックスの文字列でも構いません。特殊なグループ名GLOBALはグローバル選択ポリシーを設定します。PUT /api/modeはJSON数値を必要とします:{"mode": 0}—0はルール、1は直接接続、2はプロキシです。PUT /api/features/mitmとPUT /api/features/record-trafficは{"enabled": true}を取ります。GET /api/logsはsince(Unix秒)を受け付けます。インメモリバッファは最新の1000エントリを保持し、各エントリは{timestamp, level, section, message}です。GET /api/healthはエンジンが何を保持しているか、直近で何を理由に拒否したか、そして前回の実行がどう終わったか(clean、unclean、suspected_memory— トラブルシューティングを参照)を返します。GET /api/eventsはメモリ上のリングを返します。?persisted=1はこの実行の保存済み履歴を読み、記録が無効ならavailable: falseを返します。[Tailscale]セクションが無い場合、GET /api/tailscaleはstate: "idle"を返します。これはエラーではなく正常な答えです。POST /api/diagnostics/*の各プローブはクエリ文字列でも JSON ボディでも引数を受け取り、10 秒で打ち切られ、必ず 1 回だけ応答します。url-test/:policyは定義されていないポリシー名を拒否し、REJECTを計測したりはしません。POST /api/rules/matchは接続を開かずにリクエストがどこへ行くかを答えます。host(または host とポートを取り出すためのurl)、port(既定 443)、および任意でip、protocol、process、process_path、src_ip、src_port、in_port、in_type、in_user、in_name、network、ssid、bssid、from_tun、user_agentを受け取ります — 知らないフィールドは無視されず、受理可能な一覧とともに拒否されます。応答にはmatched(ルールの行、種別、指名するポリシー、そしてグループが現在指しているresolved_policy)、policy、need_resolve、そして算出の根拠となったrule_countとmatch_generationが含まれます。ドメインは 2 回マッチされる(名前で 1 回、アドレスが判明してからもう 1 回)ためpassesは 1 パスにつき 1 項目です。ipを渡さない場合は解決前のパスだけになり、応答はnoteでそう伝えます。explain=trueを加えると、同じくマッチし得た候補ルールを最大 50 件、展開しなかったルールセットの数とともに返します。POST /api/config/validateは設定を解析して捨てます。動作中のカーネルは何も取り込みません。{"configuration": "<full text>"}として送るか、生のテキストをそのまま送ってください。応答はvalid、error_count、advisory_count、rule_count、policy_count、および{line, severity, content, error}からなるerrorsの一覧です —severityは拒否された行と、留保付きで受理された行を区別し、contentは問題の行(伏字済み。壊れた[Proxy]行はたいてい、それを壊した当のパスワードを抱えているからです)。PUT /api/configの前に使ってください。あちらはデバッグ中の実行を再起動してしまいます。GET /api/loglevelは現在のlevel、nslog_level、ファイルに書き出し中のsections、そして設定可能なavailable_levels/available_sectionsを返します。PUT(またはPATCH)はlevel、sections、またはその両方を受け取ります。sectionsはセクション名の配列か文字列"all"で、空の配列は拒否されます — 記録を止めたい場合はlevelをnoneにしてください。この方法でレベルを変えても実行は再起動されません。それがこの API の意義です:ファイルに書いたloglevel = verboseは再読み込みが必要で、再読み込みは見ようとしていたものを失わせます。GET /api/rulesはrewrite_hitsも返します。この実行で命中した書き換え/Mock ルールとその回数です。そこに現れないルールは一度も命中していません — 「書き換えが効かない」の最も一般的な理由がこれです。 この表が追跡するのは最大 512 種類のルールで、それを超えた分はrewrite_hit_dropped_rulesとして報告されます。POST /api/rewrites/:familyは{"rule": "<configuration line>"}を受け取ります。設定ファイルに書くのと同じ一行です。解析できない行は400で拒否され、決して命中しないルールとして保存されることはありません。:familyはurl-rewrite、header-rewrite、body-rewrite、mockのいずれかです。この方法で追加したルールは実行中のカーネルにのみ存在し、設定ファイルには書き戻されません。GET /api/connections/export?format=harは HAR 1.2 ドキュメントを、POST /api/diagnostics/bundleは zip を返します。どちらもファイルなので、他のエンドポイントと違い{"ok": ..., "data": ...}のエンベロープには包まれません。exportはsource(既定はcurrent、ほかにhistory)、limit(既定 100、最大 300)、ids、および取得済みペイロードを含めるbodies=1を受け付けます。各エントリには HAR に対応するフィールドが無い情報 — 選ばれたポリシー、命中したルール、発動した書き換え — が_klオブジェクトとして付きます。
例 — ステータスを読み取り、ポリシーグループを切り替える:
curl -H "Authorization: Bearer your-secret-token" http://127.0.0.1:9090/api/status
{"ok":true,"data":{"running":true,"outbound_mode":0,"mitm":false, ...}}
curl -X PUT -H "Authorization: Bearer your-secret-token" \
-d '{"policy": "ProxyB"}' http://127.0.0.1:9090/api/policies/MainGroup
{"ok":true,"data":{"outbound_mode":0,"selectable_groups":[...], ...}}
例 — リクエストを送る前に、それがどこへ行くかを尋ねます:
curl -X POST -H "Authorization: Bearer your-secret-token" \
-d '{"url": "https://api.example.com/v1/orders", "explain": true}' \
http://127.0.0.1:9090/api/rules/match
{"ok":true,"data":{"policy":"MainGroup","matched":{"rule":"DOMAIN-SUFFIX,example.com,MainGroup", ...}, ...}}
再現している最中に、実行を再起動せずログを 1 つのサブシステムに絞ります:
curl -X PUT -H "Authorization: Bearer your-secret-token" \
-d '{"level": "verbose", "sections": ["MitM", "DNS"]}' \
http://127.0.0.1:9090/api/loglevel
注意: この機能はデフォルトで無効です。全てのレスポンスは、成功時には
{"ok": true, "data": {...}}、エラー時には{"ok": false, "error": {"code": "...", "message": "..."}}のエンベロープを使用します。リクエストボディの上限は1 MBです。
PUTエンドポイントはPATCHも受け付けます。サードパーティのダッシュボード向けに、Clash互換のエイリアスパスが利用可能です:/version、/traffic、/connections、/configs、/proxies、/rules— パスには到達できますが、レスポンスはClashのスキーマではなくChute自身のエンベロープとフィールド名を使用するため(/versionは{"name", "run_id"}のみを返します)、Clashダッシュボードはそのままでは動作しません。
クライアントフィンガープリント
global-client-fingerprint = chrome
独自の fingerprint を持たないすべてのポリシーにTLSクライアントフィンガープリントを設定します。 ポリシー側の値が常に優先されるため、これは上書きではなくデフォルト値です。
指定できる値は chrome、firefox、safari、ios に加えて edge、360、
qq、android、random で、後者はいずれもChromeとして扱われます。認識できない値は
無視され、プラットフォームのTLSスタックが使用されます。
デフォルト: 空(プラットフォームのTLSスタック)。読み取るのはTrojan、VMess、VLESS、 ShadowTLSのポリシーだけです。
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。