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-serverwird als Alias vondohakzeptiert;http-listen/socks5-listen(z.B.0.0.0.0:6152,[::]:6153oder ein bloßer Port) werden auf die obigen interface/port-Einstellungen abgebildet. Ein Wildcard-Listen-Host (0.0.0.0,::oder*) setzt außerdemallow-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:
trueauf macOS,falseauf 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.
Geschwindigkeitsanzeige in der Menüleiste (Nur Mac)
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-quicerfolgt automatisch und benötigtsniffing-enablednicht.sniffing-enabledsteuert die TCP-Protokollerkennung. Verwenden Sie eine Regel vom TypPROTOCOL,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 Sieoptimistic-dns = falsezum 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-
interfacesind zwei Schreibweisen derselben Absicht, und Chute bildet die Vereinigung: Eine Konfiguration, die bereits0.0.0.0schreibt, 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-authnicht 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ünftig401. Lesen Sie entweder das erzeugte Token in der App aus, oder schreiben Sieexternal-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/connectionsakzeptiertlimit(positive Ganzzahl, Standard und Maximum 1000) undcursor(liefert nur Verbindungen mit eineridgrößer als der Cursor). Das Antwortfelddataenthältconnections,total,page_size,has_moreund — wenn weitere Seiten existieren —next_cursor.GET /api/connections/historyakzeptiertlimit(Standard 100, Maximum 1000) undcursor/before(Synonyme; beide zugleich zu übergeben wird abgelehnt).GET /api/connections/:id/requestund.../responseliefern{"connection_id": <id>, "data": "<base64>"}. Mitschnitte größer als 2 MiB liefern413.GET /api/configliefert 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 anPUT /api/configzurück, sonst werden die Platzhalter wörtlich in die Konfiguration geschrieben.PUT /api/configakzeptiert 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üsselpolicy,name,selected,select; der Wert kann ein Richtlinienname oder ein numerischer Index als String sein. Der spezielle GruppennameGLOBALsetzt die global ausgewählte Richtlinie.PUT /api/modeerfordert eine JSON-Zahl:{"mode": 0}—0Regel,1direkt,2Proxy.PUT /api/features/mitmundPUT /api/features/record-trafficnehmen{"enabled": true}entgegen.GET /api/logsakzeptiertsince(Unix-Sekunden); der In-Memory-Puffer behält die letzten 1000 Einträge, jeder als{timestamp, level, section, message}.GET /api/healthmeldet, was die Engine gerade hält und warum sie zuletzt etwas abgewiesen hat, sowie wie der vorherige Lauf endete (clean,uncleanodersuspected_memory— siehe Fehlerbehebung).GET /api/eventsliefert den Ringpuffer im Speicher;?persisted=1liest stattdessen den gespeicherten Verlauf dieses Laufs und antwortet mitavailable: false, wenn die Aufzeichnung aus ist.- Ohne
[Tailscale]-Abschnitt antwortetGET /api/tailscalemitstate: "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/:policyweist einen nicht definierten Policy-Namen zurück, stattREJECTzu messen. POST /api/rules/matchbeantwortet, wohin eine Anfrage ginge, ohne eine Verbindung zu öffnen. Es nimmthost(oder eineurl, aus der Host und Port stammen),port(Standard 443) sowie optionalip,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 diematched-Regel (ihre Zeile, ihren Typ, die von ihr benannte Richtlinie und dieresolved_policy, auf die eine Gruppe gerade zeigt), diepolicy,need_resolvesowierule_countundmatch_generation, gegen die gerechnet wurde. Da eine Domain zweimal abgeglichen wird — einmal über den Namen und noch einmal, sobald eine Adresse bekannt ist —, enthältpasseseinen Eintrag je Durchgang; ohneipgibt es nur den Durchgang vor der Auflösung, und die Antwort sagt das innote. Mitexplain=truekommen die Kandidatenregeln dazu, die ebenfalls hätten passen können, bis zu 50, mitsamt der Zahl der nicht aufgeklappten Regelsätze.POST /api/config/validateparst 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 ausvalid,error_count,advisory_count,rule_count,policy_countund einererrors-Liste aus{line, severity, content, error}—severitytrennt eine abgelehnte Zeile von einer mit Vorbehalt akzeptierten, undcontentist 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 vorPUT /api/config, das den Lauf neu startet, den Sie gerade untersuchen.GET /api/loglevelmeldet das aktuellelevel, dasnslog_level, die in die Datei geschriebenensectionssowie dieavailable_levels/available_sections, die Sie setzen dürfen.PUT(oderPATCH) nimmtlevel,sectionsoder beides:sectionsist ein Array von Abschnittsnamen oder die Zeichenkette"all", ein leeres Array wird abgelehnt — zum Abschalten der Protokollierung nehmen Sielevelmitnone. Die Stufe auf diesem Weg zu ändern startet den Lauf nicht neu, und genau darum geht es:loglevel = verbosein der Datei braucht ein Neuladen, und ein Neuladen verliert das, was Sie sehen wollten.GET /api/rulesmeldet zusätzlichrewrite_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 alsrewrite_hit_dropped_rules.POST /api/rewrites/:familynimmt{"rule": "<configuration line>"}— genau den Text, den Sie in die Datei schreiben würden. Eine Zeile, die sich nicht parsen lässt, wird mit400abgewiesen statt als Regel gespeichert, die nie passen kann.:familyist eines vonurl-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=harliefert ein HAR-1.2-Dokument,POST /api/diagnostics/bundleein ZIP — beides sind Dateien und werden deshalb, anders als jeder andere Endpunkt, nicht in{"ok": ..., "data": ...}verpackt.exportakzeptiertsource(currentals Standard oderhistory),limit(Standard 100, höchstens 300),idssowiebodies=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 auchPATCH. 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 (/versionliefert 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.
Diese Seite ist eine Übersetzung der englischen Version. Bei Abweichungen ist die englische Version maßgeblich.