todo/Clash/04-rules.md
loop-uh 08b4491545
Some checks failed
Published content check / validate (push) Failing after 3s
Завершить переезд базы знаний на Forgejo
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
2026-08-07 08:27:28 +03:00

189 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-07-25
tags:
- clash
- mihomo
- маршрутизация
- правила
- новичкам
aliases:
- Правила Clash
- Маршрутизация mihomo
- rules Clash
- Рецепты правил
---
# 🧭 Правила маршрутизации: рецепты и отладка
> [!info] О чём заметка
> Практическая часть про блок `rules` в конфиге [[Clash/02-mihomo|mihomo]]: как читаются правила, как заставить конкретный сайт, приложение или устройство ходить нужным путём, откуда брать готовые списки и как понять, какое правило сработало. Устройство конфига целиком — в [[Clash/01-clash-core|Ядре Clash]], полный перечень типов правил в современном ядре — в [[Clash/06-features-protocols|возможностях mihomo]].
## TL;DR
- Правила читаются **сверху вниз до первого совпадения**, поэтому порядок важнее содержания: частное — выше, общее — ниже, `MATCH` — всегда последним.
- Формат строки: `ТИП,ЗНАЧЕНИЕ,ЦЕЛЬ`. Цель — это `DIRECT` (напрямую), `REJECT` (оборвать) или имя группы из `proxy-groups`.
- Ссылайтесь в правилах **на группы, а не на конкретные узлы** — иначе при смене серверов придётся переписывать весь список.
- Для больших списков (реклама, категории сайтов) используйте **готовые наборы правил** через `rule-providers`, а не тысячу строк в конфиге.
- Самый быстрый способ понять, что происходит, — вкладка **соединений** в клиенте: там видно, какое правило сработало для каждого соединения.
- Типовая ошибка новичка — правило `GEOIP` выше доменных: оно требует разрешения имени в адрес и перехватывает больше, чем задумано.
## Как читается список правил
Каждая строка — это условие и действие. Ядро берёт новое соединение и идёт по списку сверху вниз: первое подошедшее правило определяет судьбу соединения, остальные не проверяются.
```yaml
rules:
- DOMAIN-SUFFIX,gosuslugi.ru,DIRECT
- DOMAIN-KEYWORD,youtube,PROXY
- DOMAIN-SUFFIX,doubleclick.net,REJECT
- GEOIP,RU,DIRECT
- MATCH,PROXY
```
Читается это так: всё на домене `gosuslugi.ru` — напрямую; всё, где в имени встречается `youtube`, — через группу `PROXY`; рекламный домен — оборвать; всё, что ведёт на российские адреса, — напрямую; всё остальное — через `PROXY`.
**Три специальные цели** нужно запомнить сразу: `DIRECT` — соединение идёт мимо туннеля, `REJECT` — обрывается (так блокируют рекламу и трекеры), имя группы — уходит в туннель через выбранный в этой группе узел.
Проще говоря: список правил — это анкета, которую ядро заполняет за вас на каждое соединение, а `MATCH` в конце — ответ «во всех остальных случаях».
## Основные типы правил
| Тип | По чему сравнивает | Пример |
|---|---|---|
| `DOMAIN` | Точное имя хоста | `DOMAIN,example.com,PROXY` |
| `DOMAIN-SUFFIX` | Домен и все поддомены | `DOMAIN-SUFFIX,ya.ru,DIRECT` |
| `DOMAIN-KEYWORD` | Подстрока в имени | `DOMAIN-KEYWORD,google,PROXY` |
| `IP-CIDR` / `IP-CIDR6` | Подсеть назначения | `IP-CIDR,10.0.0.0/8,DIRECT,no-resolve` |
| `GEOIP` | Страна адреса назначения | `GEOIP,RU,DIRECT` |
| `SRC-IP-CIDR` | Адрес источника (кто в вашей сети) | `SRC-IP-CIDR,192.168.1.50/32,PROXY` |
| `DST-PORT` | Порт назначения | `DST-PORT,25,REJECT` |
| `PROCESS-NAME` | Имя приложения | `PROCESS-NAME,Telegram.exe,PROXY` |
| `RULE-SET` | Готовый набор правил из провайдера | `RULE-SET,ads,REJECT` |
| `MATCH` | Всё остальное | `MATCH,PROXY` |
В [[Clash/02-mihomo|mihomo]] к этому добавлены `GEOSITE` (категории доменов), `IP-ASN` (по номеру автономной системы), `DOMAIN-REGEX`, логические `AND`/`OR`/`NOT` и правила по типу входящего соединения — их перечень с пояснениями собран в [[Clash/06-features-protocols|возможностях ядра]].
> [!note] Что делает `no-resolve`
> Правила по IP-адресу требуют знать адрес, а в начале соединения ядро часто видит только домен. Без флага `no-resolve` оно сходит в DNS, чтобы проверить правило, — и это и задержка, и лишний запрос наружу. Флаг говорит: «если адреса ещё нет, просто пропусти это правило». Ставьте его на все `IP-CIDR` и `GEOIP`, которые стоят выше доменных правил.
## Рецепты
Ниже — готовые фрагменты под частые задачи. Вставляются в блок `rules` вашего конфига; если конфиг приходит из подписки, ищите в клиенте раздел вроде «переопределения», «override» или «слияние профиля» — он позволяет дописать свои правила поверх присланных, не теряя их при обновлении.
**Российские сайты напрямую, остальное через туннель.** Базовая раскладка, с которой начинают почти все.
```yaml
rules:
- DOMAIN-SUFFIX,ru,DIRECT
- DOMAIN-SUFFIX,su,DIRECT
- DOMAIN-SUFFIX,рф,DIRECT
- GEOIP,RU,DIRECT,no-resolve
- MATCH,PROXY
```
**Локальная сеть и роутер — всегда напрямую.** Иначе домашние устройства и веб-интерфейс роутера уедут в туннель и перестанут открываться.
```yaml
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
```
**Реклама и трекеры — в обрыв.** Точечно это делается доменами, но по-настоящему удобно — набором правил (см. следующий раздел).
```yaml
- DOMAIN-SUFFIX,doubleclick.net,REJECT
- DOMAIN-KEYWORD,adservice,REJECT
```
**Конкретное приложение через туннель.** Работает на десктопе, где ядро видит имя процесса.
```yaml
- PROCESS-NAME,Telegram.exe,PROXY
- PROCESS-NAME,discord.exe,PROXY
```
**Одно устройство в доме через туннель, остальные напрямую.** Пригодится, когда mihomo стоит шлюзом для всей квартиры.
```yaml
- SRC-IP-CIDR,192.168.1.50/32,PROXY
- MATCH,DIRECT
```
**Торренты мимо туннеля.** Многие продавцы не разрешают P2P, да и скорость через прокси обычно хуже.
```yaml
- PROCESS-NAME,qbittorrent.exe,DIRECT
```
**Разные страны для разных сервисов.** Если в подписке есть группы по регионам, правило может указывать на конкретную группу.
```yaml
- DOMAIN-SUFFIX,netflix.com,Streaming-NL
- DOMAIN-SUFFIX,openai.com,US-Nodes
```
> [!tip] Ссылайтесь на группы, а не на узлы
> Правило `DOMAIN-SUFFIX,openai.com,US-Nodes` переживёт смену серверов: сменились узлы в подписке — группа наполнилась новыми, правило работает. Правило, указывающее на конкретный узел «США-3», сломается в тот день, когда продавец переименует сервер.
## Готовые наборы правил
Списки рекламных доменов, категорий сайтов и подсетей исчисляются десятками тысяч строк — держать их в конфиге бессмысленно. Для этого есть **`rule-providers`**: набор загружается по URL, обновляется по расписанию и подключается одной строкой.
```yaml
rule-providers:
ads:
type: http
behavior: domain
url: "https://example.com/ads.yaml"
path: ./ruleset/ads.yaml
interval: 86400
rules:
- RULE-SET,ads,REJECT
- MATCH,PROXY
```
Ключевые поля: **`behavior`** — какого вида список (`domain` — только домены, `ipcidr` — подсети, `classical` — полноценные правила любых типов), **`interval`** — как часто обновлять (в секундах), **`path`** — где хранить локальную копию.
Формат файла задаётся полем `format`: `yaml`, `text` или **`mrs`** — компактный бинарный формат mihomo, который экономит память на больших списках. Готовые наборы и геоданные команда MetaCubeX публикует в репозитории **meta-rules-dat** (подробнее — в [[Clash/06-features-protocols|возможностях ядра]]).
> [!warning] Чужой набор правил — это доверие
> Подключая список по чужому URL, вы отдаёте его автору право решать, какие домены у вас блокируются, а какие идут напрямую. Испорченный или враждебно изменённый набор может, например, направить банковский домен в туннель или заблокировать нужный сервис. Берите наборы из репозиториев с историей и не подключайте десяток списков «на всякий случай».
## Как понять, какое правило сработало
Здесь начинается отладка, и она проще, чем кажется.
**Вкладка соединений.** В любом клиенте на ядре mihomo есть список активных соединений (в веб-дашбордах — Connections). Для каждого показано: хост назначения, сработавшее правило, выбранный узел, объём трафика. Открыли проблемный сайт — увидели, какое правило его перехватило. Это отвечает на 90 % вопросов «почему оно идёт не туда».
**Логи.** Уровень `info` показывает основные события, `debug` — подробности разрешения имён и выбора маршрута. Держать `debug` постоянно не стоит: он шумный и пишет в файл историю ваших соединений.
**Приём «сравни с Global».** Если в режиме `Global` сайт открывается, а в `Rule` нет — виноваты правила, и надо смотреть, какое из них перехватывает соединение. Если не открывается и в `Global` — дело не в правилах, а в узле, протоколе или блокировке (см. [[Clash/05-troubleshooting|диагностику проблем]]).
## Частые ошибки
**`GEOIP` слишком высоко.** Правило по стране требует адреса, поэтому оно тянет за собой разрешение имени и перехватывает соединения раньше доменных правил. Держите его ниже доменных и с флагом `no-resolve`.
**Забытый `MATCH`.** Без завершающего правила поведение для «всего остального» определяется настройкой `final`, и она может оказаться не той, что вы ожидаете. Проще явно поставить `MATCH` последней строкой.
**Правила выше, чем локальная сеть.** Если `MATCH,PROXY` стоит раньше исключений для `192.168.0.0/16`, веб-интерфейс роутера и сетевые принтеры уедут в туннель.
**Дубли и противоречия.** Два правила на один домен с разными целями — не ошибка синтаксиса: просто сработает верхнее. Если поведение непонятно, ищите первое совпадение сверху, а не последнее.
**Правки поверх подписки затираются.** Если конфиг приходит из подписки, ваши правки при обновлении исчезнут — используйте механизм переопределений в клиенте, а не редактирование скачанного файла.
## 📚 См. также
- [[Clash/03-first-run|Первый запуск]] — если клиент ещё не настроен.
- [[Clash/01-clash-core|Ядро Clash]] — как правила связаны с группами, DNS и режимом fake-ip.
- [[Clash/06-features-protocols|Возможности и протоколы mihomo]] — расширенные типы правил, `GEOSITE`, `IP-ASN`, логические условия и формат `.mrs`.
- [[Clash/05-troubleshooting|Типичные проблемы]] — что делать, когда правило вроде верное, а результат не тот.
- [[xray/routing|Маршрутизация в Xray]] — как та же задача решается в соседней экосистеме.
- [[Clash/09-glossary|Словарь терминов]] — расшифровка встреченных понятий.
---
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Clash/04-rules.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).