Группа политик
Группа политик может содержать несколько политик. Это может быть прокси-сервер, другая группа политик или встроенная политика (DIRECT, REJECT с вариантами или PROXY).
Существует семь типов групп: select, url-test, fallback, load-balance, random, relay и ssid (также записывается как subnet). Раздел [Proxy Group] объявляет группу политик. Тип smart также принимается и обрабатывается как url-test. Группа любого другого типа — external из Surge или неизвестный Chute тип — сохраняет участников и работает как группа select, с уведомлением в журнале, а не отклоняется.
Группа select (ручной выбор)
Выбор политики, которая будет использоваться, через пользовательский интерфейс.
SelectGroup = select, ProxyHTTP, ProxyHTTPS, DIRECT, REJECT
Необязательные параметры: default= (участник, выбранный изначально, — его имя или индекс, считая с 0; select= и policy-select-name= из Shadowrocket означают то же самое), policy-provider:Name (импорт участников из провайдера прокси), filter= / exclude-filter= (регулярные выражения, применяемые к участникам, поставляемым провайдером) и HIDDEN=true. Все типы групп, кроме ssid, также принимают параметры подписки и состава.
В версии iOS виджет Today переключает политику первых трёх не скрытых групп
select; сколько из них он показывает, задаётся параметром Использовать виджет Today для выбора группы в приложении. В версии macOS вы можете переключать политику в меню строки меню.
Группа url-test
Автоматический выбор политики путём измерения задержки доступа к URL.
AutoTestGroup = url-test, ProxySOCKS5, ProxySOCKS5TLS, url = http://www.google.com/generate_204
Параметры
url: Необязательно
Chute отправляет обычный HTTP GET-запрос на этот URL через каждую политику, на порт 80 хоста из URL: схема https:// или порт в URL игнорируются, поэтому используйте URL http://, обслуживаемый на порту 80. Тест проверяет только получение данных ответа, даже если ответ является ошибкой HTTP. Участник группы со своим test-url= проверяется вместо этого по указанному в нём URL. Если параметр опущен, используется URL проверки по умолчанию http://www.gstatic.com/generate_204. proxy-test-url в [General] заменяет это значение по умолчанию для каждой группы, в которой url не указан.
interval: Необязательно, с (По умолчанию: 600 с).
Как часто политики тестируются повторно. Глобальный таймер с шагом в одну секунду запускает автоматическое повторное тестирование каждые interval секунд независимо от того, используется группа политик или нет. Есть два исключения: группа с lazy=true не начинает тестирование до первого использования, а тестирование приостанавливается, пока группа простаивает дольше, чем idle-timeout. 0 равносильно отсутствию параметра.
tolerance: Необязательно, мс (По умолчанию: 100 мс).
Каждый раунд тестирует всех участников группы одновременно. Если первым ответил не тот участник, который сейчас используется, Chute ждёт ответа от используемого участника ещё до tolerance миллисекунд — никогда не выходя за timeout раунда: если он отвечает в пределах этого окна, то сохраняет своё место, иначе группа переключается на участника, ответившего первым. Пока ни один раунд ещё не выбрал участника, первый ответивший берётся сразу; раунд, в котором не ответил ни один участник, ничего не меняет. 0 равносильно отсутствию параметра.
timeout: Необязательно, с (По умолчанию: 5 с).
Отказаться от политики, если тест не завершён в течение тайм-аута. Если timeout не указан или равен 0, применяется test-timeout из [General], если он задан.
lazy: Необязательно (true/false, По умолчанию: false).
Если включено, политики тестируются только при первом использовании, а не при запуске.
max-failed-times: Необязательно (По умолчанию: 0, отключено).
Количество последовательных сбоев теста, после которого политика считается неработоспособной. Эта опция действует только для группы load-balance, где неработоспособные политики исключаются из выбора. Для групп url-test и fallback количество сбоев отслеживается, но не влияет на выбор. Если не задано (0), сбои теста никогда не исключают политику.
expected-status: Необязательно (По умолчанию: пусто).
expected-status=204
Успехом считается только ответ с ожидаемым статусом: один код (204), диапазон (200-299) или список из них через / (200/204/300-399). Политика, ответившая другим статусом, выбывает из раунда, что засчитывается как неудача. Значение другого вида игнорируется с предупреждением, и тогда принимается любой ответ. Действует в группах url-test.
idle-timeout: Необязательно, с.
idle-timeout = 120
Когда группа политик не использовалась (ни одно новое соединение не выбрало из неё политику) дольше этого времени, периодические тесты URL приостанавливаются. Тестирование возобновляется, как только группа снова используется. Эта опция никогда не закрывает соединения.
Также поддерживаются: HIDDEN=true, filter=, exclude-filter=, policy-provider:Name.
Группа fallback
Выбор доступной политики по приоритету. Доступность проверяется доступом к URL, как в группе url-test. Политика, определённая первой, имеет высокий приоритет. Каждый раунд тестирует всех участников группы одновременно, и группа использует первого в порядке записи участника, ответившего в последнем раунде. Пока не завершился ни один раунд, а также после раунда, в котором не ответил ни один участник, она использует первого участника. Результаты раунда вступают в силу, когда раунд завершён, — как только ответили все участники, а иначе по истечении его timeout, — поэтому группа никогда не меняет участника посреди раунда. Переключение происходит только тогда, когда раунд меняет используемого участника: уведомление Основная политика группы политик изменена называет участника, используемого до и после переключения, а interrupt-exist-connections закрывает соединения прежнего участника.
FallbackGroup = fallback, ProxySOCKS5, ProxySOCKS5TLS, url = http://www.google.com/generate_204
Параметры
url: Необязательно
Указывает, какой URL будет тестироваться; как и в группе url-test, проверка — это обычный HTTP GET-запрос на порт 80 хоста из URL, а участник группы со своим test-url= проверяется вместо этого по указанному в нём URL. Если параметр опущен, используется URL проверки по умолчанию http://www.gstatic.com/generate_204. proxy-test-url в [General] заменяет это значение по умолчанию для каждой группы, в которой url не указан.
interval: Необязательно, с (По умолчанию: 600 с).
Как часто политики тестируются повторно. Семантика та же, что и у группы url-test, за исключением того, что idle-timeout — как и expected-status — существует только для url-test: у группы fallback нет паузы при простое, и она продолжает тестировать по интервалу.
timeout: Необязательно, с (По умолчанию: 5 с).
Отказаться от политики, если тест не завершён до тайм-аута. Если timeout не указан или равен 0, применяется test-timeout из [General], если он задан.
lazy / max-failed-times: Необязательно.
Аналогично группе url-test. Также поддерживаются: HIDDEN=true, filter=, exclude-filter=, policy-provider:Name.
Группа ssid
Выбирает политику в зависимости от текущей сети — имени Wi-Fi, точки доступа, типа интерфейса или маршрутизатора. Тип также можно записать как subnet, как он называется в современном Surge.
SSIDGroup = subnet, default = ProxyHTTP, cellular = ProxyHTTP, "Home WiFi" = DIRECT, SSID:Office* = ProxySOCKS5, TYPE:WIRED = DIRECT, ROUTER:192.168.1.1 = DIRECT
Параметры
default: Обязательно.
Политика, когда не найдено совпадающей опции SSID.
cellular: Необязательно.
Политика в сотовой сети. Если не указана, используется политика по умолчанию. Точнее, она используется, когда устройство не в Wi-Fi и ни один участник не подошёл.
defaultобязателен. Участники — пары<селектор> = <политика>, проверяемые по порядку; побеждает первое совпадение. Селектор — это имя сети (в кавычках, если в нём есть пробелы или двоеточие),SSID:<имя>,BSSID:<адрес>,TYPE:WIFI/TYPE:CELLULAR/TYPE:WIREDилиROUTER:<адрес шлюза>; в именах можно использовать шаблоны*и?.MCCMNC:принимается, но никогда не совпадает. На Apple TV группа всегда используетdefault.
Группа load-balance
Распределение запросов между несколькими прокси с использованием стратегии балансировки нагрузки.
LBGroup = load-balance, ProxySOCKS5, ProxyHTTPS, url = http://www.google.com/generate_204, strategy = round-robin
Параметры
strategy: Необязательно (По умолчанию: round-robin)
Указывает стратегию балансировки нагрузки:
| Стратегия | Описание |
|---|---|
round-robin |
Равномерное распределение запросов между всеми прокси по очереди |
consistent-hashing |
Маршрутизация одного и того же имени хоста последовательно на один и тот же прокси |
sticky-sessions |
Повторное использование последнего выбранного прокси для всех соединений; закреплённый выбор является глобальным (не для каждого клиента) и истекает через 600 секунд после того, как был сделан |
url: Необязательно
url = http://www.google.com/generate_204
Для проверки доступности прокси Chute отправляет обычный HTTP GET-запрос на порт 80 хоста из URL. Если параметр опущен, используется URL проверки по умолчанию http://www.gstatic.com/generate_204. Результаты тестов влияют на выбор только тогда, когда max-failed-times больше 0; при значении по умолчанию 0 неработоспособные прокси не исключаются. proxy-test-url в [General] заменяет это значение по умолчанию для каждой группы, в которой url не указан.
interval: Необязательно, с (По умолчанию: 600 с).
interval = 300
Как часто повторно тестировать доступность прокси. 0 равносильно отсутствию параметра.
timeout: Необязательно, с (По умолчанию: 5 с).
timeout = 3
Тайм-аут для запроса проверки доступности. Если timeout не указан или равен 0, применяется test-timeout из [General], если он задан.
lazy: Необязательно (true/false, По умолчанию: false).
Аналогично группе url-test: тестирование не начинается, пока группа не будет использована в первый раз.
max-failed-times: Необязательно (По умолчанию: 0, отключено).
max-failed-times = 3
Количество последовательных сбоев теста, после которого прокси помечается как неработоспособный и исключается из балансировки нагрузки. При значении по умолчанию 0 результаты тестов никогда не исключают прокси. Если неработоспособны все прокси, снова используются все прокси.
HIDDEN: Необязательно (true/false, По умолчанию: false).
HIDDEN = true
Если включено, приложения не показывают группу политик в своих списках: её нет ни в меню строки меню Chute Mac и на вкладке Прокси его главного окна, ни в Chute iOS и его виджете Today, ни в Chute tvOS, ни в Chute Android, ни в Chute Dashboard, ни в веб-консоли. Правила и другие группы используют её как обычно. Скрытая группа, выбранная в данный момент, — например, политика, которую использует глобальный режим, — всё равно показывается и отмечена галочкой, чтобы было видно, что используется. Когда HTTP API управления направляет глобальный режим на группу select, глобальные списки приложений, где групп select обычно нет, тоже показывают эту группу и отмечают её галочкой. HTTP API управления по-прежнему возвращает все группы, каждую с "hidden": true или false.
По соглашению ключ записывается в верхнем регистре, но сопоставляется без учёта регистра, поэтому hidden=true тоже работает. Также доступен для групп select, url-test, fallback и ssid.
Примечание: Параметр
interrupt-exist-connectionsтеперь является глобальной настройкой[General]. См. Прочие параметры.
Группа random
Группа random из Shadowrocket: каждое новое соединение выбирает участника случайно.
RandomGroup = random, ProxyA, ProxyB, ProxyC
Каждое соединение выбирает среди участников с равной вероятностью, независимо от предыдущих соединений. UDP выбирает только среди участников, которые передают UDP; если таких нет, группа не передаёт UDP и действует udp-policy-not-supported-behaviour. Участники записываются так же, как в группе select, включая ссылки policy-provider:, и участник сохраняет собственный underlying-proxy. Менять здесь нечего: веб-консоль и HTTP API управления показывают её участников, но отклоняют смену выбора, а default= ни на что не влияет. HIDDEN=true скрывает её, как и другие группы.
Группа relay
Соединяет участников в один путь в порядке записи. К первому участнику подключение идёт напрямую (или через его собственный underlying-proxy), каждый следующий достигается через участников перед ним, а последний подключается к цели — тот же порядок, что в Clash и mihomo.
RelayGroup = relay, Entry, Exit
Соединение через RelayGroup идёт от устройства к Entry, от Entry к Exit и от Exit к цели; цель видит его приходящим от Exit.
Группе Relay нужны как минимум два участника, записанные так же, как в группе select; участником может быть политика или другая группа. Первый участник может использовать любой протокол. Каждый следующий подключается к своему серверу через участников перед ним, поэтому должен поддерживать цепочку — см. underlying-proxy; если участник (или текущий выбор группы-участника) её не поддерживает, соединение отклоняется и записывается в журнал, но никогда не отправляется напрямую. Внутри группы Relay собственный underlying-proxy следующего участника игнорируется: его путь — участники перед ним. Группа Relay среди участников разворачивается на своём месте в собственных участников, всего не более 8 переходов; если текущий выбор группы-участника — другая группа Relay, её переходы нельзя встроить в момент установления соединения, поэтому соединение отклоняется и записывается в журнал. Участники после первого достижимы только через тех, кто стоит перед ними, и Chute не пингует их напрямую. WireGuard, AmneziaWG и SSH держат одно соединение через собственный вышестоящий узел, поэтому могут быть первым участником, но не последующим. Группа Relay передаёт UDP, когда UDP её последнего участника может пройти через участников перед ним, по правилам underlying-proxy: выход VMess, VLESS, Trojan или AnyTLS — через любых участников, выход Shadowsocks, SOCKS5, Hysteria2, TUIC или MASQUE — только если участники перед ним передают UDP. Иначе отправленный в неё UDP обрабатывается по udp-policy-not-supported-behaviour. У неё нет проверки работоспособности и нечего выбирать.
Параметры подписки и состава
Эти параметры работают в группах select, url-test, fallback и load-balance (underlying-proxy — во всех группах, кроме групп SSID):
[Proxy Group]
Airport = select, policy-path=https://example.com/nodes.list, update-interval=86400, policy-regex-filter="^(HK|JP) \d{1,2}$"
Everything = url-test, include-all-proxies=true
Streaming = fallback, HK-Node, include-other-group=Airport, policy-regex-filter="^HK"
policy-path=<URL>(Surge) заполняет группу из подписки: Chute превращает его в скрытого провайдера прокси сformat=auto, у которогоintervalравенupdate-intervalгруппы (по умолчанию 86400).policy-regex-filter=оставляет только узлы, чьи имена совпадают. Скрытый провайдер не появляется ни в одном списке провайдеров и не записывается в файл; строка группы сохраняется так, как вы её написали.include-all-proxies=trueдобавляет все политики раздела[Proxy], аinclude-other-group=<группа>(можно повторять) рекурсивно добавляет участников другой группы. Оба параметра раскрываются после чтения всей конфигурации; цикл обрывается, а неизвестное имя группы вызывает только уведомление. Сохраняются те участники, которых вы перечислили сами.include-other-groupпереносит участников и провайдеров другой группы, но не её фильтры: узлы, которые даёт провайдер, фильтруются собственнымиfilter=,policy-regex-filter=иexclude-type=включающей группы, поэтому Streaming выше и задаёт такой фильтр — без него Streaming взяла бы все узлы подписки Airport.exclude-type=Shadowsocks|Vmessне пускает целые протоколы в состав участников, которых даёт провайдер, — обычная причина в том, что клиент не может передавать по ним UDP. Имена разделяются|, сравниваются без учёта регистра и по псевдонимам, так чтоssиShadowsocks— это один и тот же тип. Участников, перечисленных вами самими, параметр не трогает и записывается обратно при сохранении конфигурации.underlying-proxy=<политика>(Surge Mac 6.9 / iOS 5.22) направляет прокси-участников группы через один вышестоящий узел: каждая прокси-политика, перечисленная напрямую или добавленная черезpolicy-path,include-all-proxiesилиinclude-other-group, появляется в группе как производная политика вида «Участник (через Вышестоящий)», которая подключается через этот вышестоящий узел вместо собственногоunderlying-proxyучастника. Во всех остальных местах исходная политика используется как прежде. Участники, которые сами являются группами политик, не затрагиваются (они могут задать собственныйunderlying-proxy), аDIRECTиREJECTостаются как есть. Если группа включена в цепочку через саму себя, соединения через неё отклоняются и записываются в журнал.external-policy-modifier="ключ=значение,…"(Surge) переопределяет эти параметры у каждой политики, импортированной черезpolicy-path, напримерexternal-policy-modifier="test-url=http://apple.com/,tfo=true". Он затрагивает только политики из подписки; чтобы направить через вышестоящий узел всю группу, используйтеunderlying-proxyвыше.- Параметры разделяются по запятым вне кавычек, поэтому регулярное выражение с запятой — как в примере выше — нужно заключать в кавычки.
- Параметры, которых Chute не знает, например
evaluate-before-use,no-alert,icon-urlилиpersistent, сохраняются и записываются обратно, но ни на что не влияют.
Провайдер прокси
Провайдеры прокси позволяют импортировать списки прокси из внешних источников (файлов или URL). Определяются в разделе [Proxy Provider]:
[Proxy Provider]
MyProvider = url=https://example.com/proxies.yaml, interval=3600
Параметры
| Параметр | Обязательно | Описание |
|---|---|---|
type |
Нет | http (по умолчанию) или file. У набора правил есть ещё форма inline — раздел [Ruleset <имя>]; у провайдера прокси формы внутри конфигурации нет, и написанный здесь type=inline не даёт ни одного участника |
url |
Да для type=http |
URL для получения списка прокси |
path |
Да для type=file |
Локальный путь к файлу списка прокси |
interval |
Нет | Возраст копии в секундах, после которого она обновляется (По умолчанию: 86400). Каждый раз при загрузке политик — при запуске движка и при перезагрузке конфигурации — кэшированная копия старше этого значения загружается заново в фоне; пока движок работает, ничего не обновляется. 0 никогда не обновляет кэшированную копию, но первоначальная загрузка всё равно происходит, если кэша нет; при отрицательном значении загрузки не происходит вовсе, и провайдер остаётся неактивным, если только нет последнего удачного кэша |
format |
Нет | Формат полезной нагрузки: native или surge читает список строк в стиле [Proxy]; auto или отсутствие значения выбирает по содержимому; mihomo-yaml читает документ YAML и переходит к списку строк, если нагрузка явно им является |
filter |
Нет | Регулярное выражение для включения только совпадающих имён прокси |
exclude-filter |
Нет | Регулярное выражение для исключения совпадающих имён прокси |
underlying-proxy |
Нет | Каждый узел провайдера подключается через эту политику или группу (override: dialer-proxy в mihomo) вместо собственного вышестоящего узла. См. underlying-proxy |
policy |
Нет | Политика или группа, через которую загружается список (proxy: в mihomo); для группы используется её выбор на момент начала загрузки. Без него или с DIRECT список загружается напрямую; неопределённое имя отклоняет загрузку, а не загружает напрямую |
Полезная нагрузка YAML — это документ в стиле mihomo со списком
proxies:(илиpayload:); полезная нагрузка в виде списка строк содержит по одной строке в стиле[Proxy]на политику, напримерName = trojan, example.com, 443, password=….
Провайдеры прокси указываются в группах политик с префиксом policy-provider::
[Proxy Group]
MyGroup = select, policy-provider:MyProvider
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.