Web-Konsole
Chute liefert aus dem laufenden Kernel heraus eine Verwaltungskonsole über HTTP aus. Sie ist die einzige Oberfläche, die auf jeder Plattform gleich ist, und deshalb verweist dieses Handbuch dorthin, wann immer etwas angesehen statt konfiguriert werden muss — der Weg einer Anfrage, ein Rewrite, das nicht greift, oder der Grund, aus dem eine Verbindung abgelehnt wurde.
Dies ist nicht Chute Dashboard. Dashboard ist eine eigene macOS-App, die sich mit einer Chute-Instanz verbindet; die hier beschriebene Konsole wird vom Kernel selbst ausgeliefert und im Browser geöffnet.
Einschalten und hineinkommen
Die Konsole braucht external-http-controller im Abschnitt [General]. Standardmäßig ist sie aus:
[General]
external-http-controller = 127.0.0.1:9090
external-http-ui = true
Der Zugriff ist authentifiziert. Wenn Sie external-http-secret nicht setzen, erzeugt Chute ein Token und bewahrt es in einer Datei control-token auf, sodass dasselbe Token über Neustarts hinweg weiterverwendet wird — der praktische Weg hinein ist also, sich die Adresse samt Token von der App geben zu lassen. Die Seite übernimmt das Token beim Laden aus dieser Adresse und behält es im localStorage des Browsers, ein Browser meldet sich also nur einmal an. Jede Plattform hat dafür einen Einstieg; siehe Die Web-Konsole öffnen.
Overview (Übersicht)
Ob der Dienst läuft, wie lange schon, sein Speicherbedarf, Adressen und Ports der HTTP- und SOCKS-Listener sowie die Dateipfade dieses Laufs. Wenn unklar ist, auf welche Instanz ein Browser-Tab zeigt, klärt diese Seite es.
Traffic (Datenverkehr)
Kumulierte Bytes und aktuelle Geschwindigkeit für die gesamte Engine, ein Verlaufsdiagramm und eine Aufschlüsselung je Adapter. Beantwortet „bewegt sich überhaupt etwas“ und zeigt, welcher Ausgang die Last trägt, wenn eine Policy-Gruppe zwischen mehreren wählt.
Connections (Verbindungen)
Die Seite, auf der Sie die meiste Zeit verbringen werden. Zwei Reiter:
- Current (Aktuell) — Verbindungen, die gerade offen sind.
- History (Verlauf) — geschlossene Verbindungen, neueste zuerst, aus den Aufzeichnungen dieses Laufs gelesen.
Jede Zeile trägt Host, Port, Typ, gewählte Policy, passende Regel, Dauer und Byte-Zahlen. Die Dauer zählt ab dem Moment, in dem dieser Browser-Tab die Verbindung zum ersten Mal gesehen hat, nicht ab dem Öffnen der Verbindung — sie sagt also nur im Reiter Current (Aktuell) etwas aus. Inspect (Untersuchen) klappt die Zeile an Ort und Stelle auf und beantwortet, warum diese Anfrage dorthin ging:
| Feld | Was es sagt |
|---|---|
| Passende Regel / Regelherkunft | Die Regelzeile, die diese Verbindung entschieden hat, und aus welchem Abschnitt sie stammt |
| Gewählte Richtlinie / Adapter | Die von der Regel gewählte Policy und der Ausgang, der sie tatsächlich getragen hat |
| DNS-Herkunft | Welcher Resolver geantwortet hat und ob es ein Cache-Treffer war |
| Angewendete Umschreibungen | Die Rewrite- oder Mock-Regeln, die diese Nachricht verändert haben — im Wortlaut der Regel; je Verbindung werden höchstens 16 Treffer behalten, danach nennt die Zeile, wie viele weitere nicht angezeigt werden |
| Schließungsgrund / Hinweis | Warum sie endete und was der Kernel dazu zu sagen hatte |
Unter der Tabelle zeigt die aufgeklappte Zeile die aufgezeichnete Anfrage und Antwort — Header und Body, so wie sie über die Leitung gingen (für Hosts mit HTTPS-Entschlüsselung entschlüsselt).
Für Bodies muss die Aufzeichnung laufen
Bodies sind nur da, wenn Chute sie aufgezeichnet hat. Schalten Sie die Aufzeichnung ein, bevor Sie das Problem reproduzieren:
replica = truein[General], oder- Chute Mac: Menüleiste → Traffic Capture, oder
- die API:
PUT /api/features/record-trafficmit{"enabled": true}.
Ohne sie erscheinen Verbindungen weiterhin mit vollständiger Zuordnung und Zeitmessung — nur die Nutzdaten fehlen. Der Abschnitt [Replica] schränkt die Aufzeichnung weiter ein — jeder Filter dort, hide-crashlytics-request eingeschlossen, wird beachtet —, eine dort herausgefilterte Anfrage hat also ebenfalls keinen Body.
Als HAR exportieren
Export HAR (HAR exportieren) auf der Seite Connections lädt den aktuellen Reiter als HAR-1.2-Datei herunter — begrenzt auf 100 Einträge, den Standard des Endpunkts (limit am Endpunkt hebt ihn auf höchstens 300), während der Reiter History selbst bis zu 200 zeigt. HAR ist ein Standardformat: Öffnen Sie es in den Entwicklerwerkzeugen eines Browsers (Netzwerk-Panel → Importieren) oder in Werkzeugen wie Charles oder Proxyman.
Der Export enthält, was diese Werkzeuge erwarten — Header von Anfrage und Antwort, Zeitmessungen und, bei laufender Aufzeichnung, die Bodies — und dazu je Eintrag ein _kl-Objekt mit dem, wofür HAR kein Feld hat: gewählte Policy, passende Regel und die Rewrites, die gegriffen haben. Die Zeiten für Senden und Empfangen stammen aus den Zeitstempeln der Aufzeichnung selbst und sind nicht geschätzt, sie bedeuten also etwas. Die Apps haben eigene Ausgänge: Das Dashboard von Chute iOS bietet Als HAR exportieren und Alle als HAR exportieren (vom Kernel im selben Format erzeugt), und das Detailfenster einer Verbindung in Chute Mac hat die Schaltfläche Anfragen & Verlauf, die die Konsole öffnet — ihre Startseite, nicht diese bestimmte Verbindung. Ein Eintrag ist eine Verbindung: Bei einer Keep-Alive-Verbindung mit mehreren Anfragen beschreibt der Export die erste Nachricht und vermerkt, wie viele Bytes späterer Nachrichten er ausgelassen hat.
DNS
Der Cache des Resolvers samt antwortendem Server je Eintrag, die Einträge aus [Host] und die hosts-Datei des Systems. Clear Cache (Cache leeren) verwirft die dynamischen Einträge; ein Entfernen einzelner Einträge gibt es hier nicht — das existiert nur als DELETE /api/dns/records/:domain in der API.
Policies (Richtlinien)
Der Ausgangsmodus (Rule / Global / Direct — Regel / Global / Direkt) und jede Policy-Gruppe mit ihrer aktuellen Auswahl. Eine Änderung hier wirkt sofort auf den laufenden Kernel — es ist dieselbe Aktion wie das Umschalten einer Gruppe in den Apps.
Rules (Regeln)
Zwei verschiedene Dinge teilen sich diese Seite, und sie verhalten sich unterschiedlich.
Routing-Regeln — der Abschnitt [Rule], in Auswertungsreihenfolge. Nur lesbar: Sie stammen aus der Konfigurationsdatei.
Umschreibungs- & Mock-Regeln — URL-Rewrite, Header-Rewrite, Body-Rewrite und Mock sowie die MitM-Hostliste. Diese lassen sich hier hinzufügen und entfernen:
- Fügen Sie eine Regel genau so ein, wie Sie sie in die Konfigurationsdatei schreiben würden, und drücken Sie Add (Hinzufügen). Eine Zeile, die sich nicht parsen lässt, wird mit der Beanstandung des Parsers abgewiesen statt gespeichert — eine Regel, die nie passen kann, hat kein Symptom, also erfährt man es besser sofort.
- Remove (Entfernen) löscht eine Regel, Clear (Leeren) leert eine Familie.
- Änderungen leben nur im laufenden Kernel. Sie werden nicht in die Konfigurationsdatei zurückgeschrieben, und ein Neuladen oder Neustart bringt zurück, was die Datei sagt. Probieren Sie eine Regel hier aus und schreiben Sie die funktionierende Zeile dann in die Datei.
Treffer von Umschreibungen & Mocks — jede Rewrite- oder Mock-Regel, die während dieses Laufs gegriffen hat, mit Zähler und dem Zeitpunkt des letzten Treffers; die Tabelle verfolgt bis zu 512 verschiedene Regeln und nennt, wie viele weitere darüber hinaus ausgelöst haben. Diese Tabelle ist die Antwort auf „mein Rewrite tut nichts“: Eine Regel, die hier nie auftaucht, hat nie gepasst — ein anderes Problem als eine Regel, die gepasst und nichts Sichtbares getan hat. Wie man beides unterscheidet, steht unter Warum bewirkt mein Rewrite nichts?.
Diagnostics (Diagnose)
Was die Engine hält, wie der letzte Lauf endete, und eine Reihe von Prüfungen, die Sie auf sie abfeuern können.
- Footprint / CPU / Uptime / Live flows / Superseded flows / Engine generation (Speicherbedarf / CPU / Laufzeit / Aktive Flows / Flows älterer Generation / Engine-Generation) — die aktuelle Gestalt dieses Laufs. Ein Speicherbedarf, der steigt, während die Zahl der Flüsse gleich bleibt, lohnt eine Untersuchung; auf iOS und tvOS ist es zugleich das, was das System beobachtet, bevor es die Erweiterung zurückholt.
- Previous exit (Letzte Beendigung) —
Clean(Sauber),Terminated unexpectedly(Unerwartet beendet) oderKilled for memory(Wegen Speichermangel beendet), mit Lauf-ID, Laufzeit und Spitzenspeicher des vorherigen Laufs. Lesen Sie das zuerst, wenn Chute „abgestürzt“ ist: Killed for memory (Wegen Speichermangel beendet) heißt, das System hat Chute zurückgeholt, nicht dass Chute versagt hat — und das ändert, wonach man sucht. - Refusals (Ablehnungen) — eine Tabelle dessen, was die Engine abgelehnt hat und warum, gezählt nach Ressource und Grund. Wenn eine Verbindung verworfen wurde und nichts sonst es erklärt, steht der Grund meist hier.
- Run a probe (Prüfung ausführen) — Erreichbarkeit (ICMP, oder TCP bei angegebenem Port), eine DNS-Abfrage über den laufenden Resolver, eine Prüfung der Ausgangs-IP und der Latenztest einer Policy. Jede ist begrenzt und antwortet genau einmal. Ein nicht definierter Policy-Name wird abgewiesen statt gemessen, ein Tippfehler kommt also als Tippfehler zurück.
- Events (Ereignisse) — die bemerkenswerten Momente dieses Laufs: Massenfehler, Wechsel des Ausgangs und Ähnliches.
- Tailscale — der aktuelle Zustand der Engine, wenn ein
[Tailscale]-Abschnitt konfiguriert ist;idle, wenn es keinen gibt, was eine normale Antwort ist. - Download diagnostic bundle (Diagnosepaket herunterladen) — ein bereinigtes Archiv zum Anhängen an eine Support-Nachricht. Was darin ist, steht unter Ein Diagnosepaket senden.
Config (Konfiguration)
Die laufende Konfiguration in einem editierbaren Feld, mit Reload (Neu laden), um anzuwenden, was darin steht.
Die hier gezeigte Konfiguration ist um ihre Geheimnisse bereinigt. Passwörter, das Steuerungs-Secret, die CA-Passphrase, WireGuard-Schlüssel und Ähnliches erscheinen als
<redacted>. Reload (Neu laden) wendet genau das an, was im Feld steht — den angezeigten Text unverändert neu zu laden ersetzt diese Geheimnisse also durch das wörtliche<redacted>im laufenden Kernel, und Policies, die sie brauchen, beginnen zu scheitern. Die Konfigurationsdatei bleibt unberührt; die Konfiguration erneut auszuwählen stellt sie wieder her.Nutzen Sie diese Seite, um die Konfiguration zu lesen und eine vollständig selbst eingetippte Änderung anzuwenden. Zum Bearbeiten der Datei selbst dient der Editor in den Apps.
Logs (Protokoll)
Ein Live-Mitlauf des Kernel-Protokolls, nach Stufe eingefärbt, mit Pause (Pausieren) zum Lesen. Die Ausführlichkeit bestimmt loglevel, nicht diese Seite — fehlen die Zeilen, die Sie brauchen, erhöhen Sie ihn und reproduzieren Sie erneut.
Was die Konsole herausgeben kann
Behandeln Sie Zugriff auf die Konsole wie Zugriff auf alles, was der Lauf gesehen hat. Sie kann Verbindungsaufzeichnungen mit URLs, Headern und Prozessnamen ausliefern, die aufgezeichneten Anfrage- und Antwort-Bodies, die Konfiguration und das Protokoll. Deshalb ist eine unauthentifizierte Steuerungsschnittstelle nicht die Voreinstellung, und deshalb verlangt eine Bindung außerhalb von Loopback ein Secret, das Sie selbst setzen — siehe external-http-secret.
Diese Seite ist eine Übersetzung der englischen Version. Bei Abweichungen ist die englische Version maßgeblich.