Regel
Chute kann Anfragen an einen anderen Proxy-Server weiterleiten oder direkt mit dem Host verbinden, abhängig von benutzerdefinierten Regeln.
Priorität
Regeln werden von der ersten bis zur letzten in der Reihenfolge abgeglichen, in der sie in der Konfigurationsdatei erscheinen. Mit anderen Worten, Regeln am Anfang der Liste haben eine höhere Priorität als spätere. Regeln aus Modulen stehen in der Ladereihenfolge der Module vor den eigenen Regeln der Konfiguration, und die Regeln, die Chute zur Laufzeit für Tailscale einfügt, stehen vor beiden.
Aufbau
Jede Regel besteht aus 3 Teilen: Regeltyp, einem Abgleichwert für den Verkehr (außer bei der FINAL-Regel) und einer Richtlinie: TYPE, VALUE, POLICY. Beispiel: DOMAIN-SUFFIX,apple.com,DIRECT IP-CIDR,192.168.0.0/16,ProxyA
Die Richtlinie muss der Name eines Proxy-Servers, einer Richtliniengruppe oder einer integrierten Richtlinie wie DIRECT, REJECT (oder einer ihrer Varianten) oder PROXY sein. Regeln sollten mit einer FINAL-Regel enden, um das Standardverhalten zu definieren. Wenn die Konfiguration keine FINAL-Regel enthält, verhält sich Chute so, als wäre FINAL,DIRECT angehängt.
Beispiel:
[Rule]
DOMAIN-SUFFIX,company.com,ProxyA
DOMAIN-KEYWORD,google,DIRECT
GEOIP,US,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL,ProxyB
Regeltypen
Domain-basierte Regeln
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| DOMAIN | DOMAIN,www.apple.com,Proxy |
Exakte Domain-Übereinstimmung |
| DOMAIN-SUFFIX | DOMAIN-SUFFIX,apple.com,Proxy |
Domain-Suffix-Übereinstimmung |
| DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,Proxy |
Domain enthält Schlüsselwort |
| DOMAIN-WILDCARD | DOMAIN-WILDCARD,*.apple.com,Proxy |
Wildcard-Domain-Übereinstimmung |
| DOMAIN-REGEX | DOMAIN-REGEX,^mail\..+\.com$,Proxy |
Domain-Regex-Übereinstimmung |
| DOMAIN-SET | DOMAIN-SET,https://example.com/domains.txt,DIRECT |
Von einer URL heruntergeladene Domain-Menge |
IP-basierte Regeln
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT |
IP-Adresse im CIDR-Bereich |
| IP-CIDR6 | IP-CIDR6,2001:db8::/32,DIRECT |
IPv6-Adresse im CIDR-Bereich |
| GEOIP | GEOIP,US,DIRECT |
Ländercode aus GeoIP-Datenbank |
| IP-ASN | IP-ASN,13335,DIRECT |
IP-Adresse gehört zu ASN |
Regeln auf HTTP-Ebene
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| USER-AGENT | USER-AGENT,Instagram*,DIRECT |
User-Agent-Header |
| URL-REGEX | URL-REGEX,^http://google\.com.*,DIRECT |
Vollständige URL einer unverschlüsselten HTTP-Anfrage stimmt mit Regex überein |
| PROTOCOL | PROTOCOL,TLS,Proxy |
Erkanntes Protokoll (HTTP/TLS/QUIC/usw.) |
Prozessregeln (macOS und Android)
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| PROCESS-NAME | PROCESS-NAME,Telegram,Proxy |
Prozessname (Wildcard-Abgleich) |
| PROCESS-PATH | PROCESS-PATH,/Applications/Safari.app,Proxy |
Vollständiger Prozesspfad (Wildcard-Abgleich) |
| PROCESS-NAME-REGEX | PROCESS-NAME-REGEX,^Safari$,DIRECT |
Prozessname (Regex-Abgleich) |
Port- & Quell-Regeln
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| DEST-PORT | DEST-PORT,80,DIRECT |
Zielport |
| SRC-IP | SRC-IP,192.168.20.100,DIRECT |
Quell-IP-Adresse (einzelne IP oder CIDR) |
| SRC-PORT | SRC-PORT,52345,DIRECT |
Quellport |
| IN-PORT | IN-PORT,6152,DIRECT |
Eingehender Proxy-Port auf Chute |
Erweiterte Abgleichregeln
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| SUBNET | SUBNET,TYPE:WIFI,Proxy |
Netzwerk-Subnetz-Attribute (TYPE, BSSID, SSID, ROUTER) |
| HOSTNAME-TYPE | HOSTNAME-TYPE,AAAA,Proxy |
DNS-Eintragstyp (A/AAAA/usw.) |
| IN-TYPE | IN-TYPE,SOCKS5,Proxy |
Eingehender Verbindungstyp (HTTP/SOCKS5/TUN) |
| IN-USER | IN-USER,user1,Proxy |
Benutzername der eingehenden Authentifizierung |
| IN-NAME | IN-NAME,my-proxy,Proxy |
Name des eingehenden Proxy-Servers |
Hinweis: SUBNET und HOSTNAME-TYPE greifen auf laufenden Verkehr — SUBNET auf das Netzwerk, in dem sich das Gerät gerade befindet (Apple TV hat keine Netzwerkidentität, dort greift SUBNET nie). Auch IN-TYPE und IN-USER greifen auf laufenden Verkehr: IN-TYPE benennt den Eingang, über den eine Verbindung eintraf (
HTTP,SOCKS5oderTUN), und IN-USER den Benutzernamen, den dieser Eingang gegenhttp-authgeprüft hat — ohne konfigurierte Zugangsdaten gibt es nichts zu prüfen, IN-USER greift dann nie. IN-NAME wird akzeptiert, damit ein Surge-Profil lädt, aber Chute betreibt genau einen unbenannten HTTP- und einen unbenannten SOCKS5-Listener; es gibt also keinen Eingangsnamen zum Abgleichen und die Regel greift nie. Verwenden Sie stattdessen IN-TYPE oder IN-PORT.
Logische Kombinationsregeln
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| AND | AND,((DOMAIN,example.com),(DEST-PORT,443)),Proxy |
Alle Unterregeln stimmen überein |
| OR | OR,((DOMAIN,example.com),(DOMAIN,test.com)),Proxy |
Beliebige Unterregel stimmt überein |
| NOT | NOT,((DOMAIN,example.com)),Proxy |
Unterregel stimmt NICHT überein |
Spezielle Regeln
| Typ | Syntax | Übereinstimmung |
|---|---|---|
| RULE-SET | RULE-SET,SYSTEM,DIRECT |
Regelbündel aus einer URL, einem Regel-Provider oder integrierten Sätzen |
| SCRIPT | SCRIPT,MyRuleScript,PROXY |
JavaScript-basierter benutzerdefinierter Regelabgleich |
| FINAL | FINAL,ProxyB |
Standard, wenn keine andere Regel passt (muss die letzte sein) |
Optionen
no-resolve
Bei einer Anfrage, deren Hostname eine Domain ist, wertet Chute die Regelliste in zwei Durchläufen aus. Im ersten Durchlauf werden IP-basierte Regeln (GEOIP, IP-CIDR, IP-ASN) übersprungen. Wenn keine andere Regel greift, löst Chute die Domain per DNS auf und wertet die Regeln erneut mit der aufgelösten IP-Adresse aus. Fügen Sie die Option no-resolve hinzu, damit eine IP-basierte Regel auch im zweiten Durchlauf übersprungen bleibt und somit nur auf Anfragen greift, die bereits eine IP-Adresse tragen.
GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
In einer RULE-SET-Zeile gilt no-resolve für jede IP-basierte Regel des Satzes, als trüge jede sie selbst: RULE-SET,https://example.com/cn-ip.list,DIRECT,no-resolve. Die integrierten Sätze SYSTEM und LAN werden in einzelne Regeln entpackt und nehmen es nicht an.
Hinweis: Aufgrund der zweistufigen Auswertung kann bei einer Anfrage mit Domain-Hostname eine spätere Nicht-IP-Regel vor einer früheren IP-basierten Regel greifen. Wenn die DNS-Auflösung fehlschlägt, greifen IP-basierte Regeln einfach nie und die FINAL-Regel kommt zur Anwendung; die Regelauswertung wird nicht abgebrochen.
force-remote-dns
Erzwingt die DNS-Auflösung über den entfernten Proxy-Server anstelle des lokalen DNS.
DOMAIN-SUFFIX,google.com,Proxy,force-remote-dns
Hinweis: Diese Option wird derzeit nur aus Kompatibilitätsgründen geparst und hat in den aktuellen Versionen keine Wirkung.
extended-matching
Erweitert den domain-basierten Regelabgleich, um zusätzlich zum Verbindungshostnamen auch den HTTP-Host-Header zu prüfen. Der Header stammt aus der ersten Anfrage einer Client-Verbindung zum HTTP-Proxy-Listener — bei HTTPS aus dem eigenen Host-Header der CONNECT-Anfrage —, die Option hilft also, wenn ein Client eine Anfrage an eine IP-Adresse richtet oder an einen anderen Namen als den, den sein Host-Header trägt. Verbindungen über TUN oder SOCKS5 tragen keinen Host-Header, und die Option ändert für sie nichts.
DOMAIN-SUFFIX,example.com,Proxy,extended-matching
requires-resolve
Bei SCRIPT-Regeln wird diese Option vom Parser akzeptiert, verzögert die Skriptauswertung jedoch nicht. $request.dnsResult ist im Skript nur verfügbar, wenn die Sitzung bereits aufgelöst wurde (zum Beispiel bei Anfragen direkt an eine IP-Adresse oder im zweiten Abgleichdurchlauf nach der DNS-Auflösung).
SCRIPT,MyRuleScript,PROXY,requires-resolve
pre-matching
Nur gültig bei Regeln, deren Richtlinie REJECT oder eine ihrer Varianten ist (REJECT-DROP, REJECT-TINYGIF, …). Pre-Matching-Regeln werden in einem separaten Durchlauf vor dem Regelergebnis-Cache und der normalen Regeltabelle ausgewertet, sodass ein passendes REJECT bereits im ersten Durchlauf greift — vor jeder DNS-Auflösung, die die Regeltabelle auslösen würde. Eine RULE-SET- oder DOMAIN-SET-Zeile nimmt pre-matching an und behält es bei, der Satz wird aber nicht in diesem frühen Durchlauf abgeglichen: Er nimmt weiterhin an seiner eigenen Position in der Regelliste teil.
DOMAIN-SUFFIX,tracker.example.com,REJECT,pre-matching
dns-failed
Nur bei der FINAL-Regel gültig. Braucht die Entscheidung für eine Anfrage eine lokale DNS-Auflösung und schlägt diese fehl, wird die Anfrage an die FINAL-Richtlinie übergeben, statt zu scheitern — siehe Finale Regel.
FINAL,Proxy,dns-failed
notification-text
Sendet eine Systembenachrichtigung, wenn die Regel greift. Der Titel ist der Text, der Inhalt nennt Ziel und Richtlinie (host:port → policy; auf Android host:port · policy · process). notification-interval legt fest, wie viele Sekunden vergehen müssen, bevor dieselbe Regel erneut benachrichtigt (Standard 300). Jede Regel kann diese Optionen tragen, auch FINAL. Eine RULE-SET- oder DOMAIN-SET-Zeile nimmt sie an und behält sie bei, doch ein Treffer innerhalb des Satzes sendet nie eine Benachrichtigung.
DOMAIN-SUFFIX,bank.example,DIRECT,notification-text="Bank site opened",notification-interval=60
FINAL,Proxy,notification-text=Fell%20to%20FINAL
Setzen Sie einen Text mit Leerzeichen in Anführungszeichen oder schreiben Sie jedes Leerzeichen als %20; ein Komma schreiben Sie als %2C. Chute sendet die Benachrichtigung selbst und folgt dem Schalter der App dafür — Benachrichtigung erlauben auf dem iPhone, Ereignisbericht-Benachrichtigungen anzeigen auf dem Mac, die Benachrichtigungsberechtigung des Systems für Chute auf Android —, sodass nichts angezeigt wird, wenn er aus ist, und Apple TV zeigt nie eine an. Jeder Treffer wird außerdem als Regelbenachrichtigungs-Ereignis erfasst — siehe Benachrichtigungsberichte.
Aliase
DOMAIN-MATCHwird als Alias vonDOMAIN-KEYWORDakzeptiert.NETWORKwird als Alias vonPROTOCOLakzeptiert.DST-PORTwird als Alias vonDEST-PORTakzeptiert.
Domain-Menge
Chute unterstützt das Laden von Domain-Mengen von einer externen URL mit dem Regeltyp DOMAIN-SET. Das erste Feld nach dem Typ muss eine http(s)-URL sein. Der optionale Parameter update-interval gibt an, wie alt die heruntergeladene Kopie in Sekunden werden darf, bevor sie erneut abgerufen wird; einen Timer gibt es nicht — siehe Externer Regelsatz.
DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400
Die Domain-Mengen-Datei enthält bloße Domains, eine pro Zeile: example.com passt auf die exakte Domain; .example.com oder +.example.com passt auf die Domain und alle ihre Subdomains. Zeilen, die mit # oder // beginnen, sind Kommentare.
Diese Seite ist eine Übersetzung der englischen Version. Bei Abweichungen ist die englische Version maßgeblich.