Verschiedene Optionen

[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

Allgemeine Optionen

Vollständige IPv6-Unterstützung aktivieren (Standard: true)

ipv6 = true

loglevel (Standard: warning)

loglevel = notify

Einer von none, fatal, warning, notify, info oder verbose. Es wird nicht empfohlen, verbose im täglichen Gebrauch zu aktivieren, da dies die Leistung erheblich verlangsamt.

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

In der iOS-Version zwingt diese Option Verbindungen zu diesen Domain-/IP-Bereichen, von Chute TUN anstelle von Chute Proxy verarbeitet zu werden. In der macOS-Version werden diese Einstellungen auf das System angewendet, wenn "Als Systemproxy festlegen" aktiviert ist. Diese Option wird verwendet, um Kompatibilitätsprobleme mit einigen Apps zu beheben.

  • Um eine einzelne Domain anzugeben, geben Sie den Domainnamen ein - zum Beispiel apple.com.
  • Um alle Websites auf einer Domain anzugeben, verwenden Sie ein Sternchen vor dem Domainnamen - zum Beispiel *apple.com.
  • Um einen bestimmten Teil einer Domain anzugeben, geben Sie jeden Teil an - zum Beispiel store.apple.com.
  • Um Hosts oder Netzwerke nach IP-Adressen anzugeben, geben Sie eine bestimmte IP-Adresse wie 192.168.2.11 oder einen Adressbereich wie 192.168.2.* oder 192.168.2.0/24 ein.

Hinweis: Wenn Sie eine IP-Adresse oder einen Adressbereich eingeben, können Sie den Proxy nur umgehen, wenn Sie über diese Adresse eine Verbindung zu diesem Host herstellen, nicht wenn Sie über einen Domainnamen eine Verbindung herstellen, der zu dieser Adresse aufgelöst wird.


Proxy-Server-Listening

interface = 127.0.0.1
port = 8118
socks-interface = 127.0.0.1
socks-port = 8119

interface / port steuern die Lauschadresse und den Port des HTTP-Proxyservers (Standard 127.0.0.1:8118). socks-interface / socks-port steuern den SOCKS5-Proxyserver (Standard 127.0.0.1:8119).

Kompatibilitäts-Aliase: doh-server wird als Alias von doh akzeptiert; http-listen / socks5-listen (z.B. 0.0.0.0:6152, [::]:6153 oder ein bloßer Port) werden auf die obigen interface/port-Einstellungen abgebildet. Ein Wildcard-Listen-Host (0.0.0.0, :: oder *) setzt außerdem allow-wifi-access = true.


Eingehende Proxy-Authentifizierung

http-auth = username:password

Erfordert, dass sich Clients authentifizieren, bevor sie die HTTP- und SOCKS5-Proxyserver von Chute verwenden. Die Zeile kann wiederholt werden, um mehrere Anmeldedaten zu erlauben.


Systemanfragen umgehen

bypass-system = true

Wenn aktiviert, umgehen Anfragen von Systemprozessen die Chute-Verarbeitung.

Standard: true.


Immer echte IP

always-real-ip = *.example.com, tracker.example.org

Wenn Chute gefälschte IP-Adressen für gekaperte DNS-Abfragen bereitstellt (siehe hijack-dns), werden Hostnamen, die dieser durch Kommas getrennten Liste entsprechen, immer mit ihren echten aufgelösten IP-Adressen beantwortet. Wildcards werden unterstützt.


Bestehende Verbindungen unterbrechen

interrupt-exist-connections = true

Wenn aktiviert, werden beim Ändern der ausgewählten Richtlinie in einer beliebigen Richtliniengruppe (über URL-Test, Fallback, Load Balance, SSID oder manuelle Auswahl) bestehende Verbindungen, die die alte Richtlinie verwendeten, ordnungsgemäß beendet. Dies stellt sicher, dass Verbindungen sofort den neu ausgewählten Proxy verwenden, anstatt auf dem alten zu verweilen.

Jede betroffene Verbindung wird ordnungsgemäß mit einer 3-Sekunden-Zeitüberschreitung geschlossen, bevor sie zwangsweise getrennt wird.

Standard: false. Dies ist eine globale Einstellung — sie betrifft alle Richtliniengruppen.


Network Framework (macOS / tvOS)

network-framework = true

Aktiviert Apple Network.framework für ausgehende Verbindungen. Die Verwendung von Network.framework kann eine bessere Leistung und moderne TLS-Stack-Integration auf unterstützten Plattformen bieten.

Standard: true auf macOS, false auf iOS und tvOS.


Einfache Hostnamen ausschließen

exclude-simple-hostnames = true

Wenn aktiviert, umgehen Anfragen an einfache Hostnamen (einzelne Bezeichnungen ohne Punkt, z.B. localhost) die Proxy-Regeln und werden lokal aufgelöst. Dies hilft, unnötige DNS-Abfragen für lokale Netzwerknamen zu vermeiden.

Auf Chute Mac aktiviert eine einmalige Migration diese Option beim ersten Start standardmäßig; eine explizite Aus-Einstellung des Benutzers wird respektiert.

Standard: false.


Datenbankaufzeichnung deaktivieren

disable-db-record = true

Wenn aktiviert, stoppt Chute das Schreiben von Verkehrsaufzeichnungen in die lokale Datenbank. Dies kann die Leistung verbessern und die Speichernutzung reduzieren, jedoch ist der Verkehrsverlauf dann im Chute Dashboard nicht verfügbar.

Standard: false.


menu-bar-show-speed = true

Wenn aktiviert, zeigt Chute Mac die aktuelle Upload- und Download-Geschwindigkeit in der Menüleiste an.

Standard: false.


Andere DNS-Server kapern

hijack-dns = 8.8.8.8:53

Standardmäßig gibt Chute nur gefälschte IP-Adressen für DNS-Abfragen zurück, die an die Chute-DNS-Adresse (198.18.0.2) gesendet werden. Abfragen, die an Standard-DNS gesendet werden, werden einfach weitergeleitet.

Einige Geräte oder Software verwenden immer einen fest codierten DNS-Server. (Zum Beispiel verwenden Google Speakers immer 8.8.8.8). Sie können diese Option verwenden, um die Abfrage zu kapern und eine gefälschte Adresse zu erhalten.

Sie können hijack-dns = *:53 verwenden, um alle DNS-Abfragen zu kapern.


Ausgeschlossene Routen

tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12

Chute VIF kann nur TCP- und UDP-Protokolle verarbeiten. Verwenden Sie diese Option, um bestimmte IP-Bereiche zu umgehen, damit der gesamte Verkehr durchgelassen wird.

Hinweis: Diese Option funktioniert nur für den VIF (utun)-Typ des Erweiterten Modus — sie hat keine Auswirkung bei Verwendung des PacketTunnel VPN-Typs. Anfragen, die vom Chute Proxy Server verarbeitet werden, sind nicht betroffen. Kombinieren Sie 'skip-proxy' und 'tun-excluded-routes', um sicherzustellen, dass bestimmter HTTP-Verkehr Chute umgeht.

Diese Option könnte einen Systemfehler ENOMEM (Cannot allocate memory) verursachen. Es scheint ein Fehler im iOS-System zu sein. Bitte verwenden Sie diese Option nach Möglichkeit nicht.


Eingeschlossene Routen

tun-included-routes = 192.168.1.12/32

Standardmäßig deklariert sich die Chute-VIF-Schnittstelle als Standardroute. Da die Wi-Fi-Schnittstelle jedoch eine kleinere Route hat, kann ein Teil des Verkehrs möglicherweise nicht über die Chute-VIF-Schnittstelle laufen. Verwenden Sie diese Option, um eine kleinere Route hinzuzufügen.

Hinweis: Diese Option funktioniert nur für den VIF (utun)-Typ des Erweiterten Modus — sie hat keine Auswirkung bei Verwendung des PacketTunnel VPN-Typs.


Protokollerkennung

sniffing-enabled = true
sniffing-timeout = 100

Chute kann das tatsächliche Protokoll einer Verbindung erkennen, indem es die ersten Bytes untersucht. Dies ermöglicht, dass Regeln wie PROTOCOL,TLS,Proxy auch für Nicht-HTTP-eingehende Verbindungen korrekt funktionieren.

sniffing-enabled (Standard: false)

sniffing-enabled = true

Aktiviert die Protokollerkennung für TCP-Verbindungen.

sniffing-timeout (Standard: 100ms)

sniffing-timeout = 200

Maximale Zeit in Millisekunden, um auf die ersten Daten zur Protokollbestimmung zu warten. Erhöhen Sie diesen Wert, wenn die Protokollerkennung bei langsamen Verbindungen fehlschlägt.


QUIC blockieren

block-quic = auto

Steuert, ob Chute erkannten QUIC-Datenverkehr einschließlich HTTP/3 abweist. QUIC läuft über UDP und kann durch Chutes HTTP-MitM nicht entschlüsselt werden. Das Abweisen von QUIC kann kompatible Clients dazu veranlassen, die Verbindung über TCP erneut aufzubauen. Dadurch können die TCP-basierte Proxy-Verarbeitung und, sofern konfiguriert, die HTTPS-Entschlüsselung angewendet werden.

Wert Verhalten
off Keine globale QUIC-Blockierung anwenden (Standard). Erkannter QUIC-Datenverkehr folgt den normalen Routing-Regeln.
on Jeden erkannten QUIC-Datenstrom abweisen, einschließlich des zu DIRECT gerouteten Datenverkehrs.
auto Erkanntes QUIC nur abweisen, wenn die endgültige ausgehende Richtlinie ein Proxy ist. Zu DIRECT gerouteter Datenverkehr wird zugelassen; zu REJECT gerouteter Datenverkehr bleibt durch diese Regel abgewiesen.

Bei über TUN eingehendem Datenverkehr antwortet Chute auf einen abgewiesenen QUIC-Datenstrom mit einer ICMP/ICMPv6-Port-Unreachable-Meldung. Kompatible Clients können dadurch auf TCP zurückfallen, ohne auf einen QUIC-Timeout zu warten.

Die QUIC-Erkennung für block-quic erfolgt automatisch und benötigt sniffing-enabled nicht. sniffing-enabled steuert die TCP-Protokollerkennung. Verwenden Sie eine Regel vom Typ PROTOCOL,QUIC,..., um einzelne QUIC-Datenströme regelbasiert zu behandeln.


Bypass TUN

bypass-tun = 192.168.0.0/16, 10.0.0.0/8

Ähnlich wie skip-proxy, arbeitet jedoch auf der TUN/VIF-Routing-Ebene. Verbindungen zu diesen IP-Bereichen umgehen die TUN-Schnittstelle vollständig und gehen direkt durch den Systemnetzwerkstack.

Hinweis: Diese Option funktioniert nur für den VIF (utun)-Typ des Erweiterten Modus. Sie hat keine Auswirkung bei Verwendung des PacketTunnel VPN-Typs.


Fehlerseite für Ablehnung anzeigen

show-error-page-for-reject = true

Wenn aktiviert, gibt Chute eine benutzerfreundliche Fehlerseite für abgelehnte Anfragen zurück, anstatt die Verbindung einfach zu trennen.


Optimistisches DNS

optimistic-dns = false

Wenn aktiviert, gibt Chute das zwischengespeicherte DNS-Ergebnis sofort zurück, während der Eintrag im Hintergrund aktualisiert wird. Dies reduziert die Verbindungslatenz auf Kosten möglicherweise veralteter DNS-Einträge.

Standard: true. Setzen Sie optimistic-dns = false zum Deaktivieren.


Wi-Fi-Zugriff erlauben

allow-wifi-access = true

Erlaubt anderen Geräten im selben Netzwerk den Zugriff auf Chutes HTTP- und SOCKS5-Proxy-Ports, indem beide Listener auf 0.0.0.0 erweitert werden. Konfigurationen im Surge-Stil — und die allow-lan-Zuordnung des sing-box-Imports — führen nur dieses Flag und belassen interface beim Standard 127.0.0.1; deshalb muss das Flag die Bind-Adresse selbst erweitern.

Das Flag und ein ausdrückliches Wildcard-interface sind zwei Schreibweisen derselben Absicht, und Chute bildet die Vereinigung: Eine Konfiguration, die bereits 0.0.0.0 schreibt, verhält sich unverändert. Eine Änderung des Flags bindet beide Listener neu, ein Entzug des Zugriffs wirkt also beim Neuladen statt erst beim nächsten Start.

Dies sind die Proxy-Ports, und sie haben keine Authentifizierung, solange http-auth nicht gesetzt ist. Setzen Sie in einem fremden Netzwerk zusätzlich Zugangsdaten.


Verwaltete Konfiguration

#!MANAGED-CONFIG https://example.com/config.conf interval=86400 strict=false

Eine Konfiguration, deren erste Zeile ein #!MANAGED-CONFIG-Header ist, wird automatisch von der URL neu abgerufen. Die Header-Parameter und das Aktualisierungsverhalten sind unter Verwaltete Konfiguration dokumentiert.


Replikat / Verkehrsaufzeichnung

replica = true

Der Schlüssel replica in [General] (replica = true) aktiviert die Verkehrsaufzeichnung; der Abschnitt [Replica] filtert, was das Chute Dashboard anzeigt — seine Schlüssel sind unter Replica dokumentiert.


Externer Controller-Zugriff (Chute Dashboard)

external-controller-access = password@0.0.0.0:6155

Startet den Fernsteuerungsserver, der von Chute Dashboard verwendet wird. Der Wert ist password@host:port; ein Benutzername kann optional dem Passwort vorangestellt werden (user:password@host:port). Auf iOS wird ein begleitender USB-Kanal auf port + 1 geöffnet (nicht auf macOS). Wie Sie es verbinden, steht auf der Seite Chute Dashboard.


HTTP Control API und 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 bietet eine eingebettete HTTP-Steuerungs-API und eine webbasierte Verwaltungsoberfläche, ähnlich wie Clash- und Surge-Dashboards. Die API stellt Kernel-Status, Verkehr, Verbindungen, DNS, Richtliniensteuerungen und Konfigurationsverwaltung über REST-Endpunkte bereit.

external-http-controller (Standard: deaktiviert)

external-http-controller = 127.0.0.1:9090

Adresse und Port des HTTP-Steuerservers. Für rein lokalen Zugriff 127.0.0.1 verwenden. Eine Bindung an eine Adresse außerhalb von Loopback (etwa 192.168.1.5:9090) verlangt ein ausdrückliches external-http-secret — ohne dieses verweigert der Server den Start und protokolliert, was fehlt.

Eine Wildcard-Adresse (0.0.0.0, ::, *) gilt bei dieser Prüfung als nicht-Loopback: Sie lauscht auf allen Schnittstellen, also dem Gegenteil von „nur lokal“. Akzeptierte Schreibweisen sind 0.0.0.0:9090, *:9090 (dasselbe) und für IPv6 [::]:9090 — ein nacktes :::9090 wird automatisch eingeklammert; eine Adresse, die sich nicht parsen lässt, wird als Konfigurationsfehler gemeldet, statt den Controller stillschweigend auszulassen. Als Loopback gilt der gesamte Bereich 127.0.0.0/8, nicht nur 127.0.0.1.

external-http-secret (Standard: ein generiertes Token)

external-http-secret = your-secret-token

Das Bearer-Token für die API-Authentifizierung. Anfragen müssen den Header Authorization: Bearer <secret> enthalten — das Token wird nur in diesem Header angenommen, nie als Query-Parameter, und in konstanter Zeit verglichen. Fehlgeschlagene Authentifizierung liefert 401 mit {"ok": false, "error": {"code": "unauthorized", "message": "missing or invalid token"}}. Geschützt sind nur /api/* und die Clash-kompatiblen Aliase; die statischen Dateien der Web-UI brauchen kein Token (mit external-http-ui = false gibt es sie gar nicht — die Seite ist ein 404).

Fehlt der Schlüssel, erzeugt Chute ein Token, statt ohne Authentifizierung auszuliefern. Das erzeugte Token wird in eine Datei control-token in Chutes Share-Ordner geschrieben — nicht neben die Konfiguration: der App-Group-Container auf iOS und tvOS, das private Datenverzeichnis der App auf Android —, lesbar nur für den Eigentümer, über Neustarts hinweg weiterverwendet, und die Apps zeigen es an — siehe Web-Konsole öffnen. Die Control-API kann die Verbindungsdatenbank herausgeben, deren Einträge jede URL, jeden Header und jeden Prozessnamen dieses Laufs enthalten; eine offene Steuerungsschnittstelle ist keine vertretbare Voreinstellung.

Wenn Sie trotzdem ohne Authentifizierung ausliefern wollen, sagen Sie es in der Konfiguration:

external-http-secret = none

Das wird nur bei einer Loopback-Bindung akzeptiert. Außerhalb von Loopback genügt weder none noch ein fehlender Schlüssel: Der Steuerserver verweigert den Start und nennt, was er braucht.

Beim Upgrade: Wenn Sie sich darauf verlassen haben, dass ein fehlendes external-http-secret „keine Authentifizierung“ bedeutet, erhalten lokale Skripte künftig 401. Lesen Sie entweder das erzeugte Token in der App aus, oder schreiben Sie external-http-secret = none, um das alte Verhalten bewusst beizubehalten.

external-http-ui (Standard: true)

external-http-ui = true

Wenn aktiviert, stellt Chute eine eingebettete Web-UI unter der Controller-Adresse bereit. Die Web-UI bietet ein Übersichts-Dashboard, Verbindungsverwaltung, DNS-Inspektion, Verkehrsüberwachung, Richtliniensteuerungen und Konfigurationsbearbeitung. Setzen Sie auf false, um die API aktiviert zu lassen, während die UI deaktiviert wird.

Die Web-Konsole öffnen

Die Konsole wird unter der Adresse des Steuerservers ausgeliefert, und jede App kann Ihnen Adresse und Token übergeben — auch das generierte Token, das Sie sonst gar nicht lesen könnten:

  • Chute Mac: Menüleiste → Web-Konsole öffnen und Web-Konsolen-Token kopieren. Das Detailfenster einer Verbindung hat zusätzlich Anfragen & Verlauf, das ebenfalls die Konsole öffnet — ihre Startseite, nicht diese Verbindung.
  • Chute iOS: Kontrollzentrum → Zeile „Web UI“ → Öffnen, Adresse kopieren oder Zugriffstoken kopieren.
  • Chute tvOS: Das Kontrollfeld hat unter dem Web-UI-Schalter eine eigene Zeile Web-UI-Adresse, die Host und Port zeigt. Sie auszuwählen zeigt einen QR-Code, wenn der Listener von anderen Geräten erreichbar ist — das Anmelde-Token steckt im Code, nicht auf dem Bildschirm —, und, wenn der Controller an Loopback gebunden ist, stattdessen eine Erklärung, weil sich eine Loopback-Konsole nicht vom Telefon aus öffnen lässt.
  • Chute Android: Das Kontrollfeld zeigt die Adresse als Untertitel des HTTP-API-Schalters und eine eigene Zeile Generiertes Zugriffstoken, die beim Antippen kopiert — diese Zeile erscheint nur, wenn der Kernel das Token erzeugt hat; ein selbst konfiguriertes Secret wird nie angezeigt.

Die so erzeugte Adresse trägt das Token als Query-Parameter. Die Seite verbraucht es beim Laden und entfernt es aus der Adresszeile, sodass das Öffnen des Links eine vollständige Anmeldung ist und niemand 32 Hex-Zeichen abtippen muss.


external-http-cors (Standard: false)

external-http-cors = true

Aktiviert CORS (Cross-Origin Resource Sharing)-Header auf API-Antworten. Nützlich, wenn die Web-UI oder Drittanbieter-Tools von einer anderen Herkunft auf die API zugreifen müssen.

API-Endpunkte:

Methode Endpunkt Beschreibung
GET /api/status Laufzeitstatus, Ports, Betriebszeit
GET /api/traffic Globale und richtlinienbezogene Verkehrszähler
GET /api/connections Aktuell aktive Verbindungen
DELETE /api/connections/:id Eine Verbindung schließen
GET /api/connections/history Historische Verbindungsaufzeichnungen
GET /api/connections/processes Verbindungsstatistik pro Prozess
GET /api/connections/:id/request Erfasste Anfragedaten einer Verbindung
GET /api/connections/:id/response Erfasste Antwortdaten einer Verbindung
GET /api/dns DNS-Cache-Einträge
DELETE /api/dns/cache DNS-Cache leeren
DELETE /api/dns/records/:domain Einen einzelnen DNS-Eintrag entfernen
GET /api/config Aktuelle Konfiguration
PUT /api/config Konfiguration neu laden
POST /api/config/validate Eine Konfiguration parsen und ihre Fehler melden, ohne sie zu laden
GET /api/policies Richtliniengruppen und aktuelle Auswahl
PUT /api/policies/:group Richtliniengruppenauswahl ändern
PUT /api/mode Ausgehenden Modus festlegen
GET /api/features Status der Funktionsschalter
PUT /api/features/mitm MitM umschalten
PUT /api/features/record-traffic Verkehrsaufzeichnung umschalten
GET /api/rules Geladene Regeln und welche Rewrite-Regeln gegriffen haben
POST /api/rules/match Wohin eine Anfrage geroutet würde, ohne sie zu stellen
GET /api/logs Aktuelle Protokolleinträge
GET /api/loglevel Aktuelle Protokollstufe und die geschriebenen Abschnitte
PUT /api/loglevel Protokollstufe oder Abschnitte ohne Neustart ändern
GET /api/health Zustand der Engine: Ablehnungen, Generationen, Speicherbedarf, letztes Ende
GET /api/events Bemerkenswerte Momente dieses Laufs
GET /api/tailscale Aktueller Zustand der Tailscale-Engine
POST /api/diagnostics/ping Erreichbarkeitstest per ICMP oder TCP
POST /api/diagnostics/dns-query Eine Domain über den laufenden Resolver auflösen
POST /api/diagnostics/egress-probe Aktuelle Ausgangs-IP ermitteln
POST /api/diagnostics/url-test/:policy Latenztest einer Policy ausführen
POST /api/diagnostics/bundle Ein bereinigtes Diagnosearchiv erstellen
GET /api/connections/export Verbindungen als HAR 1.2 exportieren
GET /api/rewrites Alle Rewrite-/Mock-Familien und die MitM-Hostliste
GET /api/rewrites/:family Die Regeln einer Familie
POST /api/rewrites/:family Eine Regel hinzufügen
DELETE /api/rewrites/:family/:id Eine Regel entfernen
DELETE /api/rewrites/:family Eine Familie leeren
GET /api/mitm/hosts Derzeit entschlüsselte Hosts
POST /api/mitm/hosts Einen Host hinzufügen
DELETE /api/mitm/hosts/:host Einen Host entfernen
DELETE /api/mitm/hosts Die Liste leeren

Endpunkt-Hinweise:

  • GET /api/connections akzeptiert limit (positive Ganzzahl, Standard und Maximum 1000) und cursor (liefert nur Verbindungen mit einer id größer als der Cursor). Das Antwortfeld data enthält connections, total, page_size, has_more und — wenn weitere Seiten existieren — next_cursor.
  • GET /api/connections/history akzeptiert limit (Standard 100, Maximum 1000) und cursor/before (Synonyme; beide zugleich zu übergeben wird abgelehnt).
  • GET /api/connections/:id/request und .../response liefern {"connection_id": <id>, "data": "<base64>"}. Mitschnitte größer als 2 MiB liefern 413.
  • GET /api/config liefert die Konfiguration mit sensiblen Werten (http-auth, external-http-secret, ca-p12, ca-passphrase, WireGuard-Schlüssel und ähnliche) ersetzt durch <redacted> — geben Sie das Ergebnis nicht unverändert an PUT /api/config zurück, sonst werden die Platzhalter wörtlich in die Konfiguration geschrieben.
  • PUT /api/config akzeptiert entweder JSON {"configuration": "<full text>"} oder den rohen Konfigurationstext als Request-Body (Limit 1 MB). Bei Erfolg lädt der Kernel neu — oder startet, falls er nicht lief.
  • PUT /api/policies/:group übernimmt die Auswahl aus dem ersten vorhandenen der Body-Schlüssel policy, name, selected, select; der Wert kann ein Richtlinienname oder ein numerischer Index als String sein. Der spezielle Gruppenname GLOBAL setzt die global ausgewählte Richtlinie.
  • PUT /api/mode erfordert eine JSON-Zahl: {"mode": 0}0 Regel, 1 direkt, 2 Proxy.
  • PUT /api/features/mitm und PUT /api/features/record-traffic nehmen {"enabled": true} entgegen.
  • GET /api/logs akzeptiert since (Unix-Sekunden); der In-Memory-Puffer behält die letzten 1000 Einträge, jeder als {timestamp, level, section, message}.
  • GET /api/health meldet, was die Engine gerade hält und warum sie zuletzt etwas abgewiesen hat, sowie wie der vorherige Lauf endete (clean, unclean oder suspected_memory — siehe Fehlerbehebung).
  • GET /api/events liefert den Ringpuffer im Speicher; ?persisted=1 liest stattdessen den gespeicherten Verlauf dieses Laufs und antwortet mit available: false, wenn die Aufzeichnung aus ist.
  • Ohne [Tailscale]-Abschnitt antwortet GET /api/tailscale mit state: "idle" — das ist eine normale Antwort, kein Fehler.
  • Die Prüfungen unter POST /api/diagnostics/* nehmen ihre Argumente aus der Query oder einem JSON-Body, sind auf zehn Sekunden begrenzt und antworten genau einmal. url-test/:policy weist einen nicht definierten Policy-Namen zurück, statt REJECT zu messen.
  • POST /api/rules/match beantwortet, wohin eine Anfrage ginge, ohne eine Verbindung zu öffnen. Es nimmt host (oder eine url, aus der Host und Port stammen), port (Standard 443) sowie optional ip, protocol, process, process_path, src_ip, src_port, in_port, in_type, in_user, in_name, network, ssid, bssid, from_tun, user_agent — ein unbekanntes Feld wird mitsamt der Liste der zulässigen zurückgewiesen statt ignoriert. Die Antwort trägt die matched-Regel (ihre Zeile, ihren Typ, die von ihr benannte Richtlinie und die resolved_policy, auf die eine Gruppe gerade zeigt), die policy, need_resolve sowie rule_count und match_generation, gegen die gerechnet wurde. Da eine Domain zweimal abgeglichen wird — einmal über den Namen und noch einmal, sobald eine Adresse bekannt ist —, enthält passes einen Eintrag je Durchgang; ohne ip gibt es nur den Durchgang vor der Auflösung, und die Antwort sagt das in note. Mit explain=true kommen die Kandidatenregeln dazu, die ebenfalls hätten passen können, bis zu 50, mitsamt der Zahl der nicht aufgeklappten Regelsätze.
  • POST /api/config/validate parst eine Konfiguration und wirft sie weg: Der laufende Kernel übernimmt nichts davon. Schicken Sie sie als {"configuration": "<full text>"} oder als rohen Text. Die Antwort besteht aus valid, error_count, advisory_count, rule_count, policy_count und einer errors-Liste aus {line, severity, content, error}severity trennt eine abgelehnte Zeile von einer mit Vorbehalt akzeptierten, und content ist die beanstandete Zeile in geschwärzter Form, denn eine fehlerhafte [Proxy]-Zeile trägt meist genau das Passwort, das sie fehlerhaft gemacht hat. Nehmen Sie es vor PUT /api/config, das den Lauf neu startet, den Sie gerade untersuchen.
  • GET /api/loglevel meldet das aktuelle level, das nslog_level, die in die Datei geschriebenen sections sowie die available_levels / available_sections, die Sie setzen dürfen. PUT (oder PATCH) nimmt level, sections oder beides: sections ist ein Array von Abschnittsnamen oder die Zeichenkette "all", ein leeres Array wird abgelehnt — zum Abschalten der Protokollierung nehmen Sie level mit none. Die Stufe auf diesem Weg zu ändern startet den Lauf nicht neu, und genau darum geht es: loglevel = verbose in der Datei braucht ein Neuladen, und ein Neuladen verliert das, was Sie sehen wollten.
  • GET /api/rules meldet zusätzlich rewrite_hits: jede Rewrite- oder Mock-Regel, die in diesem Lauf gegriffen hat, mit Zähler. Eine Regel, die dort nicht auftaucht, hat nie gepasst — das ist die übliche Erklärung für ein Rewrite, das scheinbar nichts tut. Die Tabelle verfolgt bis zu 512 verschiedene Regeln und meldet alles darüber hinaus als rewrite_hit_dropped_rules.
  • POST /api/rewrites/:family nimmt {"rule": "<configuration line>"} — genau den Text, den Sie in die Datei schreiben würden. Eine Zeile, die sich nicht parsen lässt, wird mit 400 abgewiesen statt als Regel gespeichert, die nie passen kann. :family ist eines von url-rewrite, header-rewrite, body-rewrite, mock. So hinzugefügte Regeln leben nur im laufenden Kernel und werden nicht in die Konfigurationsdatei zurückgeschrieben.
  • GET /api/connections/export?format=har liefert ein HAR-1.2-Dokument, POST /api/diagnostics/bundle ein ZIP — beides sind Dateien und werden deshalb, anders als jeder andere Endpunkt, nicht in {"ok": ..., "data": ...} verpackt. export akzeptiert source (current als Standard oder history), limit (Standard 100, höchstens 300), ids sowie bodies=1, um die aufgezeichneten Nutzdaten mitzugeben. Jeder Eintrag trägt ein _kl-Objekt mit dem, wofür HAR kein Feld hat: gewählte Policy, passende Regel und die Rewrites, die gegriffen haben.

Beispiel — den Status lesen, dann eine Richtliniengruppe umschalten:

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":[...], ...}}

Beispiel — fragen, wohin eine Anfrage ginge, bevor man sie stellt:

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", ...}, ...}}

Das Protokoll beim Reproduzieren auf ein Teilsystem eingrenzen, ohne den Lauf neu zu starten:

curl -X PUT -H "Authorization: Bearer your-secret-token" \
     -d '{"level": "verbose", "sections": ["MitM", "DNS"]}' \
     http://127.0.0.1:9090/api/loglevel

Hinweis: Diese Funktion ist standardmäßig deaktiviert. Jede Antwort verwendet den Umschlag {"ok": true, "data": {...}} bei Erfolg und {"ok": false, "error": {"code": "...", "message": "..."}} bei Fehlern; Request-Bodys sind auf 1 MB begrenzt.

PUT-Endpunkte akzeptieren auch PATCH. Für Dashboards von Drittanbietern stehen Clash-kompatible Alias-Pfade zur Verfügung: /version, /traffic, /connections, /configs, /proxies, /rules — die Pfade sind erreichbar, aber die Antworten verwenden Chutes Umschlag und Feldnamen statt des Clash-Schemas (/version liefert nur {"name", "run_id"}), Clash-Dashboards funktionieren daher nicht ohne Weiteres.


Client-Fingerabdruck

global-client-fingerprint = chrome

Legt den TLS-Client-Fingerabdruck für jede Richtlinie fest, die keinen eigenen fingerprint trägt. Der Wert der Richtlinie hat immer Vorrang; dies ist also eine Vorgabe und keine Übersteuerung.

Unterstützte Werte sind chrome, firefox, safari und ios sowie edge, 360, qq, android und random, die alle als Chrome behandelt werden. Ein unbekannter Wert wird ignoriert und der TLS-Stack der Plattform verwendet.

Standard: leer, also der TLS-Stack der Plattform. Nur Trojan-, VMess-, VLESS- und ShadowTLS-Richtlinien lesen ihn.

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-05 00:51:18

Diese Seite ist eine Übersetzung der englischen Version. Bei Abweichungen ist die englische Version maßgeblich.

results matching ""

    No results matching ""