Web コンソール
Chute は動作中のカーネル内から HTTP で管理コンソールを提供します。全プラットフォームで同一の唯一のインターフェースであり、設定するのではなく見る必要があるとき — リクエストの経路、発動しない書き換え、接続が拒否された理由 — 本マニュアルは常にここを指します。
これは Chute Dashboard ではありません。Dashboard は Chute インスタンスに接続する独立した macOS アプリで、ここで説明するコンソールはカーネル自身が提供し、ブラウザーで開きます。
有効化と入り方
コンソールには [General] セクションの external-http-controller が必要です。既定では無効です:
[General]
external-http-controller = 127.0.0.1:9090
external-http-ui = true
アクセスには認証が必要です。external-http-secret を設定しない場合、Chute はトークンを生成して control-token ファイルに保存し、再起動後も同じトークンを使い続けます。したがって実際の入り方は、トークンが付いたアドレスをアプリから受け取ることです。ページは読み込み時にそのアドレスからトークンを取り込み、ブラウザーの localStorage に保持するので、ブラウザーごとのサインインは一度で済みます。各プラットフォームに入口があります — Web コンソールを開く を参照してください。
Overview(概要)
サービスが動作中かどうか、稼働時間、メモリ使用量、HTTP と SOCKS のリスナーのアドレスとポート、そしてこの実行が使っているファイルパス。ブラウザーのタブがどのインスタンスを指しているのか分からなくなったとき、このページが教えてくれます。
Traffic(トラフィック)
エンジン全体の累積バイト数と現在の速度、速度の履歴グラフ、アダプターごとの内訳。「そもそも何か流れているのか」に答え、ポリシーグループが複数の出口から選んでいるとき実際にどれが担っているかを見るために使います。
Connections(接続)
最も長く見ることになるページです。タブは 2 つあります:
- Current(現在) — いま開いている接続。
- History(履歴) — 閉じた接続。新しい順で、この実行の記録から読み戻されます。
各行にはホスト、ポート、種別、選ばれたポリシー、命中したルール、継続時間、バイト数が並びます。継続時間はこのブラウザータブがその接続を初めて見た時点から数えたもので、接続が開かれた時点からではないため、意味を持つのは Current(現在) タブだけです。Inspect(詳細) はその場で行を展開し、このリクエストがなぜそこへ行ったのかに答えます:
| 項目 | 何が分かるか |
|---|---|
| 一致したルール / ルールの出所 | この接続を決めたルール行と、それがどのセクション由来か |
| 選択されたポリシー / アダプター | ルールが選んだポリシーと、実際に運んだ出口 |
| DNS の出所 | どのリゾルバが答えたか、キャッシュ命中だったか |
| 適用された書き換え | このメッセージを変更した書き換え/Mock ルール — ルール自身の文言で。接続ごとに保持されるのは最大 16 件で、それを超えると「他 N 件は表示されていません」と示されます |
| 終了理由 / 備考 | なぜ終わったか、そしてカーネルが伝えたかったこと |
表の下には、取得されたリクエストとレスポンス(ヘッダーとボディ)が回線上の姿のまま表示されます(HTTPS 復号の対象ホストでは復号後の姿です)。
ボディにはトラフィック記録が前提です
ボディは Chute が取得していた場合にのみ存在します。問題を再現する前に記録を有効にしてください:
[General]にreplica = true、または- Chute Mac: メニューバー → トラフィックキャプチャ、または
- API:
PUT /api/features/record-trafficに{"enabled": true}。
無効でも接続は経路の帰属情報とタイミングを伴って表示されます — 欠けるのはペイロードだけです。[Replica] セクションは取得対象をさらに絞ります — そこにあるフィルターは hide-crashlytics-request を含めすべて有効です — ので、そこで除外されたリクエストにもボディはありません。
HAR で書き出す
Connections ページの Export HAR(HAR をエクスポート) は、現在のタブを HAR 1.2 ファイルとしてダウンロードします — 上限はエンドポイントの既定である 100 件(エンドポイントの limit で最大 300 件まで)で、History タブ自体は最大 200 件を表示します。HAR は標準形式です。ブラウザーの開発者ツール(Network パネル → インポート)や、Charles、Proxyman といったツールで開けます。
書き出しにはそれらのツールが期待するもの — リクエストとレスポンスのヘッダー、タイミング、記録が有効なときはボディ — に加えて、HAR に対応するフィールドが無い情報を収めた _kl オブジェクトがエントリごとに付きます:選ばれたポリシー、命中したルール、発動した書き換えです。送信と受信の時間は推測ではなくキャプチャ自身のタイムスタンプに基づくため、意味のある値です。 アプリにも独自の出口があります。Chute iOS の Dashboard には HARとしてエクスポート と すべてをHARでエクスポート があり(同じ形式でカーネルが生成します)、Chute Mac の接続詳細ウィンドウには リクエストと履歴 ボタンがあってコンソールを開きます — 開くのはコンソールのホームで、その接続そのものではありません。 1 エントリは 1 接続です。複数のリクエストを運んだ keep-alive 接続では、書き出しは最初のメッセージを記述し、後続メッセージの何バイトを省いたかを注記します。
DNS
リゾルバのキャッシュと各レコードに答えたサーバー、[Host] 由来のエントリ、そしてシステムの hosts ファイル。Clear Cache(キャッシュをクリア) は動的レコードを消去します。ここに 1 件ずつ削除する操作はなく、それは API の DELETE /api/dns/records/:domain にしかありません。
Policies(ポリシー)
アウトバウンドモード(Rule / Global / Direct — ルール / グローバル / 直接接続)と、各ポリシーグループの現在の選択。ここで選択を変えると動作中のカーネルに即座に反映されます — アプリでグループを切り替えるのと同じ操作です。
Rules(ルール)
このページには性質の異なる 2 種類が並びます。
ルーティングルール — [Rule] セクションを評価順に並べたもの。設定ファイル由来なので読み取り専用です。
書き換えと Mock のルール — URL 書き換え、ヘッダー書き換え、ボディ書き換え、Mock、および MitM ホスト一覧。これらはここで追加・削除できます:
- 設定ファイルに書くのとまったく同じ形でルールを貼り付け、Add(追加) を押します。解析できない行はパーサーの指摘とともに拒否され、保存されません — 決して命中しないルールには症状が無いので、その場で知るほうが良いのです。
- Remove(削除) は 1 件を削除し、Clear(クリア) は系統を空にします。
- 変更は動作中のカーネルにのみ存在します。設定ファイルには書き戻されず、リロードや再起動でファイルの内容に戻ります。ここで試し、うまくいった 1 行をファイルに書いてください。
書き換えと Mock の一致 — この実行で命中したすべての書き換え・Mock ルールと、その回数および最後に命中した時刻。この表が追跡するのは最大 512 種類のルールで、それを超えた分は「他に何件が発動したが記録できなかったか」として示されます。この表が「書き換えが効かない」への答えです。ここに現れないルールは一度も命中していません。命中したのに目に見える変化が無い場合とは別の問題です。見分け方は書き換えが効かないのはなぜ?を参照してください。
Diagnostics(診断)
エンジンが何を保持しているか、前回の実行がどう終わったか、そしてこちらから撃てる一連のプローブ。
- Footprint / CPU / Uptime / Live flows / Superseded flows / Engine generation(メモリ使用量 / CPU / 稼働時間 / アクティブなフロー / 旧世代のフロー / エンジン世代) — この実行の現在の姿。フロー数が横ばいなのにフットプリントが上がり続けるなら調べる価値があります。iOS と tvOS では、システムが拡張を回収する前に見ているのもこの値です。
- Previous exit(前回の終了) —
Clean(正常終了)、Terminated unexpectedly(予期せず終了)、Killed for memory(メモリ不足で強制終了)のいずれかと、前回の実行 id・稼働時間・ピーク時フットプリント。Chute が「クラッシュした」ときはまずここを読んでください。Killed for memory(メモリ不足で強制終了)は Chute の不具合ではなくシステムによる回収を意味し、次に何を調べるべきかが変わります。 - Refusals(拒否) — エンジンが何を断ったか、その理由は何かを、リソースと理由で数えた表。接続が落ちて他に説明が無いとき、理由はたいていここにあります。
- Run a probe(プローブを実行) — 到達性(ポートを与えれば TCP、無ければ ICMP)、動作中のリゾルバによる DNS クエリ、出口 IP の確認、ポリシーのレイテンシテスト。いずれも上限付きで、必ず 1 回だけ応答します。定義されていないポリシー名は計測されずに拒否されるので、打ち間違いは打ち間違いとして返ってきます。
- Events(イベント) — この実行で注目すべき出来事:大量の失敗、出口の変化など。
- Tailscale —
[Tailscale]セクションがある場合はエンジンの現在の状態を表示します。無い場合はidleで、これは正常な答えです。 - Download diagnostic bundle(診断バンドルをダウンロード) — サポートへの連絡に添付できる、秘匿処理済みのアーカイブ 1 つ。内容は診断バンドルを送るを参照してください。
Config(設定)
動作中の設定を編集可能なボックスに表示し、Reload(再読み込み) でボックスの内容を適用します。
ここに表示される設定は機密が取り除かれています。 パスワード、制御用のシークレット、CA のパスフレーズ、WireGuard の鍵などは
<redacted>と表示されます。Reload(再読み込み) はボックスの内容をそのまま適用するため、表示されたテキストのままリロードすると、それらの機密が文字列<redacted>として動作中のカーネルに書き込まれます — それらを必要とするポリシーは失敗し始めます。設定ファイルには触れないので、その設定を選び直せば元に戻ります。このページは設定を読むため、そして自分で全文を入力した変更を適用するために使ってください。ファイル自体を編集するには各アプリのエディターを使います。
Logs(ログ)
カーネルログのライブ追尾。レベルごとに色分けされ、Pause(一時停止) で読みたいときに止められます。詳細度はこのページではなく loglevel で決まります — 必要な行が無ければ、上げてから再現してください。
コンソールが渡しうるもの
コンソールへのアクセスは、その実行が見たすべてへのアクセスだと考えてください。URL・ヘッダー・プロセス名を含む接続記録、取得されたリクエストとレスポンスのボディ、設定、そしてログを渡せます。だからこそ認証なしが既定ではなく、ループバック以外にバインドするには自分でシークレットを設定する必要があります — external-http-secret を参照してください。
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。