Правила
Chute может перенаправлять запросы на другой прокси-сервер или подключаться к хосту напрямую, в зависимости от пользовательских правил.
Приоритет
Правила сопоставляются от первого к последнему в порядке их появления в файле конфигурации. Другими словами, правила в начале списка имеют более высокий приоритет, чем последующие. Правила, добавленные модулями, размещаются перед собственными правилами конфигурации в порядке загрузки модулей, а правила, которые Chute вставляет во время работы для Tailscale, идут раньше и тех, и других.
Состав
Каждое правило состоит из 3 частей: тип правила, сопоставитель трафика (кроме правила FINAL) и политика: TYPE, VALUE, POLICY. Например: DOMAIN-SUFFIX,apple.com,DIRECT IP-CIDR,192.168.0.0/16,ProxyA
Политика должна быть именем прокси-сервера, группы политик или встроенной политики, например DIRECT, REJECT (или одной из его разновидностей) или PROXY. Список правил должен заканчиваться правилом FINAL, определяющим поведение по умолчанию. Если конфигурация не содержит правила FINAL, Chute ведёт себя так, как если бы в конец было добавлено FINAL,DIRECT.
Пример:
[Rule]
DOMAIN-SUFFIX,company.com,ProxyA
DOMAIN-KEYWORD,google,DIRECT
GEOIP,US,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL,ProxyB
Типы правил
Правила на основе доменов
| Тип | Синтаксис | Совпадение |
|---|---|---|
| DOMAIN | DOMAIN,www.apple.com,Proxy |
Точное совпадение домена |
| DOMAIN-SUFFIX | DOMAIN-SUFFIX,apple.com,Proxy |
Совпадение суффикса домена |
| DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,Proxy |
Домен содержит ключевое слово |
| DOMAIN-WILDCARD | DOMAIN-WILDCARD,*.apple.com,Proxy |
Совпадение с подстановочным знаком |
| DOMAIN-REGEX | DOMAIN-REGEX,^mail\..+\.com$,Proxy |
Совпадение домена по регулярному выражению |
| DOMAIN-SET | DOMAIN-SET,https://example.com/domains.txt,DIRECT |
Набор доменов, загружаемый с URL |
Правила на основе IP
| Тип | Синтаксис | Совпадение |
|---|---|---|
| IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT |
IP-адрес в диапазоне CIDR |
| IP-CIDR6 | IP-CIDR6,2001:db8::/32,DIRECT |
IPv6-адрес в диапазоне CIDR |
| GEOIP | GEOIP,US,DIRECT |
Код страны из базы GeoIP |
| IP-ASN | IP-ASN,13335,DIRECT |
IP-адрес принадлежит ASN |
Правила уровня HTTP
| Тип | Синтаксис | Совпадение |
|---|---|---|
| USER-AGENT | USER-AGENT,Instagram*,DIRECT |
Заголовок User-Agent |
| URL-REGEX | URL-REGEX,^http://google\.com.*,DIRECT |
Полный URL обычного HTTP-запроса совпадает с регулярным выражением |
| PROTOCOL | PROTOCOL,TLS,Proxy |
Распознанный протокол (HTTP/TLS/QUIC и др.) |
Правила процессов (macOS и Android)
| Тип | Синтаксис | Совпадение |
|---|---|---|
| PROCESS-NAME | PROCESS-NAME,Telegram,Proxy |
Имя процесса (сопоставление с подстановочными знаками) |
| PROCESS-PATH | PROCESS-PATH,/Applications/Safari.app,Proxy |
Полный путь процесса (сопоставление с подстановочными знаками) |
| PROCESS-NAME-REGEX | PROCESS-NAME-REGEX,^Safari$,DIRECT |
Имя процесса (сопоставление по регулярному выражению) |
Правила портов и источников
| Тип | Синтаксис | Совпадение |
|---|---|---|
| DEST-PORT | DEST-PORT,80,DIRECT |
Порт назначения |
| SRC-IP | SRC-IP,192.168.20.100,DIRECT |
IP-адрес источника (один IP или CIDR) |
| SRC-PORT | SRC-PORT,52345,DIRECT |
Порт источника |
| IN-PORT | IN-PORT,6152,DIRECT |
Входящий порт прокси на Chute |
Правила расширенного сопоставления
| Тип | Синтаксис | Совпадение |
|---|---|---|
| SUBNET | SUBNET,TYPE:WIFI,Proxy |
Атрибуты сетевой подсети (TYPE, BSSID, SSID, ROUTER) |
| HOSTNAME-TYPE | HOSTNAME-TYPE,AAAA,Proxy |
Тип DNS-записи (A/AAAA и др.) |
| IN-TYPE | IN-TYPE,SOCKS5,Proxy |
Тип входящего соединения (HTTP/SOCKS5/TUN) |
| IN-USER | IN-USER,user1,Proxy |
Имя пользователя входящей аутентификации |
| IN-NAME | IN-NAME,my-proxy,Proxy |
Имя входящего прокси-сервера |
Внимание: SUBNET и HOSTNAME-TYPE сопоставляются с реальным трафиком — SUBNET по сети, к которой устройство подключено сейчас (у Apple TV нет сетевой идентичности, поэтому там SUBNET никогда не совпадает). IN-TYPE и IN-USER тоже сопоставляются с реальным трафиком: IN-TYPE называет входящий интерфейс, через который пришло соединение (
HTTP,SOCKS5илиTUN), а IN-USER — имя пользователя, которое этот входящий интерфейс проверил поhttp-auth; без настроенных учётных данных проверять нечего, и IN-USER не совпадает ни с чем. IN-NAME принимается для того, чтобы профиль Surge загрузился, но Chute запускает один безымянный HTTP-слушатель и один безымянный SOCKS5-слушатель, так что имени входящего интерфейса для сопоставления нет и правило не срабатывает никогда; используйте вместо него IN-TYPE или IN-PORT.
Логические правила
| Тип | Синтаксис | Совпадение |
|---|---|---|
| AND | AND,((DOMAIN,example.com),(DEST-PORT,443)),Proxy |
Все подправила совпадают |
| OR | OR,((DOMAIN,example.com),(DOMAIN,test.com)),Proxy |
Любое подправило совпадает |
| NOT | NOT,((DOMAIN,example.com)),Proxy |
Подправило НЕ совпадает |
Специальные правила
| Тип | Синтаксис | Совпадение |
|---|---|---|
| RULE-SET | RULE-SET,SYSTEM,DIRECT |
Набор правил из URL, провайдера правил или встроенных наборов |
| SCRIPT | SCRIPT,MyRuleScript,PROXY |
Пользовательское сопоставление на основе JavaScript |
| FINAL | FINAL,ProxyB |
По умолчанию, когда ни одно другое правило не совпало (должно быть последним) |
Опции
no-resolve
Для запроса, имя хоста которого является доменом, Chute оценивает список правил в два прохода. На первом проходе правила на основе IP (GEOIP, IP-CIDR, IP-ASN) пропускаются. Если ни одно другое правило не совпало, Chute разрешает домен через DNS и оценивает правила снова с разрешённым IP-адресом. Добавьте опцию no-resolve, чтобы правило на основе IP пропускалось и на втором проходе — тогда оно будет совпадать только с запросами, которые уже содержат IP-адрес.
GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
В строке RULE-SET опция no-resolve распространяется на каждое правило на основе IP в наборе, как если бы она была указана у каждого из них: RULE-SET,https://example.com/cn-ip.list,DIRECT,no-resolve. Встроенные наборы SYSTEM и LAN разворачиваются в отдельные правила и её не принимают.
Внимание: Из-за двухпроходной оценки для запроса с доменным именем хоста более позднее правило не на основе IP может совпасть раньше, чем более раннее правило на основе IP. Если разрешение DNS завершается сбоем, правила на основе IP просто никогда не совпадают и применяется правило FINAL; оценка правил не прерывается.
force-remote-dns
Принудительное разрешение DNS через удалённый прокси-сервер вместо локального DNS.
DOMAIN-SUFFIX,google.com,Proxy,force-remote-dns
Внимание: Эта опция в настоящее время разбирается только для совместимости и не имеет эффекта в текущих релизах.
extended-matching
Расширяет сопоставление правил на основе доменов: помимо имени хоста соединения проверяется и заголовок HTTP Host. Заголовок берётся из первого запроса клиентского соединения со слушателем HTTP-прокси — для HTTPS это собственный заголовок Host запроса CONNECT, — поэтому опция помогает, когда клиент адресует запрос IP-адресу или имени, отличному от указанного в его заголовке Host. Соединения через TUN или SOCKS5 не несут заголовка Host, и для них опция ничего не меняет.
DOMAIN-SUFFIX,example.com,Proxy,extended-matching
requires-resolve
Для правил SCRIPT эта опция принимается парсером, но не откладывает выполнение скрипта. $request.dnsResult доступен в скрипте только когда сессия уже разрешена (например, запросы, отправленные напрямую на IP-адрес, или второй проход сопоставления после разрешения DNS).
SCRIPT,MyRuleScript,PROXY,requires-resolve
pre-matching
Допустимо только для правил, политика которых — REJECT или одна из его разновидностей (REJECT-DROP, REJECT-TINYGIF и т. д.). Правила pre-matching оцениваются в отдельном проходе перед кэшем результатов правил и основной таблицей правил, поэтому совпавший REJECT применяется на первом проходе — до любого разрешения DNS, которое инициировала бы таблица правил. Строка RULE-SET или DOMAIN-SET принимает pre-matching и сохраняет его, но набор в этом раннем проходе не сопоставляется: он по-прежнему участвует на своём месте в списке правил.
DOMAIN-SUFFIX,tracker.example.com,REJECT,pre-matching
dns-failed
Допустимо только для правила FINAL. Если для решения по запросу нужно локальное разрешение DNS и оно не удаётся, запрос передаётся политике FINAL, а не завершается ошибкой — см. Финальное правило.
FINAL,Proxy,dns-failed
notification-text
Отправляет системное уведомление при срабатывании правила. Заголовок — этот текст, в теле указаны назначение и политика (host:port → policy; на Android host:port · policy · process). notification-interval задаёт, сколько секунд должно пройти, прежде чем то же правило уведомит снова (по умолчанию 300). Эти опции можно указать у любого правила, включая FINAL. Строка RULE-SET или DOMAIN-SET принимает их и сохраняет, но совпадение внутри набора никогда не отправляет уведомление.
DOMAIN-SUFFIX,bank.example,DIRECT,notification-text="Bank site opened",notification-interval=60
FINAL,Proxy,notification-text=Fell%20to%20FINAL
Текст с пробелами заключите в кавычки или запишите каждый пробел как %20; запятую пишите как %2C. Chute отправляет уведомление сам и подчиняется соответствующему переключателю приложения — Разрешить уведомления на iPhone, Показывать уведомления о событиях на Mac, системное разрешение на уведомления для Chute на Android, — поэтому при выключенном переключателе ничего не показывается, а Apple TV не показывает их никогда. Каждое срабатывание также записывается как событие уведомления правила — см. Отчеты об уведомлениях.
Псевдонимы
DOMAIN-MATCHпринимается как псевдонимDOMAIN-KEYWORD.NETWORKпринимается как псевдонимPROTOCOL.DST-PORTпринимается как псевдонимDEST-PORT.
Набор доменов
Chute поддерживает загрузку наборов доменов с внешнего URL с помощью типа правила DOMAIN-SET. Первое поле после типа должно быть http(s) URL. Необязательный параметр update-interval задаёт в секундах, насколько старой может стать загруженная копия, прежде чем её скачают снова; таймера нет — см. Внешние наборы правил.
DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400
Файл набора доменов содержит только доменные имена (без типа правила), по одному в строке: example.com соответствует точному домену; .example.com или +.example.com соответствует домену и всем его поддоменам. Строки, начинающиеся с # или //, являются комментариями.
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.