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

16 KiB
Raw Permalink Blame History

date tags aliases
2026-07-25
clash
mihomo
маршрутизация
правила
новичкам
Правила Clash
Маршрутизация mihomo
rules Clash
Рецепты правил

🧭 Правила маршрутизации: рецепты и отладка

[!info] О чём заметка Практическая часть про блок rules в конфиге Clash/02-mihomo: как читаются правила, как заставить конкретный сайт, приложение или устройство ходить нужным путём, откуда брать готовые списки и как понять, какое правило сработало. Устройство конфига целиком — в Clash/01-clash-core, полный перечень типов правил в современном ядре — в Clash/06-features-protocols.

TL;DR

  • Правила читаются сверху вниз до первого совпадения, поэтому порядок важнее содержания: частное — выше, общее — ниже, MATCH — всегда последним.
  • Формат строки: ТИП,ЗНАЧЕНИЕ,ЦЕЛЬ. Цель — это DIRECT (напрямую), REJECT (оборвать) или имя группы из proxy-groups.
  • Ссылайтесь в правилах на группы, а не на конкретные узлы — иначе при смене серверов придётся переписывать весь список.
  • Для больших списков (реклама, категории сайтов) используйте готовые наборы правил через rule-providers, а не тысячу строк в конфиге.
  • Самый быстрый способ понять, что происходит, — вкладка соединений в клиенте: там видно, какое правило сработало для каждого соединения.
  • Типовая ошибка новичка — правило GEOIP выше доменных: оно требует разрешения имени в адрес и перехватывает больше, чем задумано.

Как читается список правил

Каждая строка — это условие и действие. Ядро берёт новое соединение и идёт по списку сверху вниз: первое подошедшее правило определяет судьбу соединения, остальные не проверяются.

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 к этому добавлены GEOSITE (категории доменов), IP-ASN (по номеру автономной системы), DOMAIN-REGEX, логические AND/OR/NOT и правила по типу входящего соединения — их перечень с пояснениями собран в Clash/06-features-protocols.

[!note] Что делает no-resolve Правила по IP-адресу требуют знать адрес, а в начале соединения ядро часто видит только домен. Без флага no-resolve оно сходит в DNS, чтобы проверить правило, — и это и задержка, и лишний запрос наружу. Флаг говорит: «если адреса ещё нет, просто пропусти это правило». Ставьте его на все IP-CIDR и GEOIP, которые стоят выше доменных правил.

Рецепты

Ниже — готовые фрагменты под частые задачи. Вставляются в блок rules вашего конфига; если конфиг приходит из подписки, ищите в клиенте раздел вроде «переопределения», «override» или «слияние профиля» — он позволяет дописать свои правила поверх присланных, не теряя их при обновлении.

Российские сайты напрямую, остальное через туннель. Базовая раскладка, с которой начинают почти все.

rules:
  - DOMAIN-SUFFIX,ru,DIRECT
  - DOMAIN-SUFFIX,su,DIRECT
  - DOMAIN-SUFFIX,рф,DIRECT
  - GEOIP,RU,DIRECT,no-resolve
  - MATCH,PROXY

Локальная сеть и роутер — всегда напрямую. Иначе домашние устройства и веб-интерфейс роутера уедут в туннель и перестанут открываться.

  - 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

Реклама и трекеры — в обрыв. Точечно это делается доменами, но по-настоящему удобно — набором правил (см. следующий раздел).

  - DOMAIN-SUFFIX,doubleclick.net,REJECT
  - DOMAIN-KEYWORD,adservice,REJECT

Конкретное приложение через туннель. Работает на десктопе, где ядро видит имя процесса.

  - PROCESS-NAME,Telegram.exe,PROXY
  - PROCESS-NAME,discord.exe,PROXY

Одно устройство в доме через туннель, остальные напрямую. Пригодится, когда mihomo стоит шлюзом для всей квартиры.

  - SRC-IP-CIDR,192.168.1.50/32,PROXY
  - MATCH,DIRECT

Торренты мимо туннеля. Многие продавцы не разрешают P2P, да и скорость через прокси обычно хуже.

  - PROCESS-NAME,qbittorrent.exe,DIRECT

Разные страны для разных сервисов. Если в подписке есть группы по регионам, правило может указывать на конкретную группу.

  - DOMAIN-SUFFIX,netflix.com,Streaming-NL
  - DOMAIN-SUFFIX,openai.com,US-Nodes

[!tip] Ссылайтесь на группы, а не на узлы Правило DOMAIN-SUFFIX,openai.com,US-Nodes переживёт смену серверов: сменились узлы в подписке — группа наполнилась новыми, правило работает. Правило, указывающее на конкретный узел «США-3», сломается в тот день, когда продавец переименует сервер.

Готовые наборы правил

Списки рекламных доменов, категорий сайтов и подсетей исчисляются десятками тысяч строк — держать их в конфиге бессмысленно. Для этого есть rule-providers: набор загружается по URL, обновляется по расписанию и подключается одной строкой.

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 — как правила связаны с группами, DNS и режимом fake-ip.
  • Clash/06-features-protocols — расширенные типы правил, GEOSITE, IP-ASN, логические условия и формат .mrs.
  • Clash/05-troubleshooting — что делать, когда правило вроде верное, а результат не тот.
  • xray/routing — как та же задача решается в соседней экосистеме.
  • Clash/09-glossary — расшифровка встреченных понятий.

[!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: исходник этой заметки · весь репозиторий.