ClashX: приоритет правил на практике — DOMAIN‑SUFFIX, GEOIP, MATCH без конфликтов

Часто проблема в правилах, а не в узлах. ClashX сопоставляет сверху вниз и останавливается на первом совпадении, поэтому порядок — часть логики.

Почему кажется, что правила «случайно» не работают

Широкие правила (MATCH, GEOIP, DOMAIN‑SUFFIX с большим охватом) перекрывают точные, если стоят выше.

💡
first match wins

Срабатывает только первая совпавшая строка. Всё, что ниже, игнорируется.

Симптомы

  • Поведение «то работает, то нет»
  • В логах сплошные GEOIP или MATCH
  • Главная открывается, а API/видео ломаются
  • Изменения одной строки ломают другой сценарий
⚠️
Антипаттерн

MATCH выше конца списка делает последующие правила мёртвыми.

Модель приоритета

Думайте как о «воронке»: чем точнее — тем выше. Рекомендуемый порядок: DOMAINDOMAIN‑SUFFIXDOMAIN‑KEYWORDIP‑CIDRGEOIPMATCH.

  • Критичные домены — раньше всех
  • Суффиксы — для целых зон
  • Ключевые слова — как временная мера
  • GEOIP и MATCH — только внизу как «корзины»
ТипПриоритетНазначениеРиск
DOMAIN1Ключевые сервисыТребует поддержки списка
DOMAIN‑SUFFIX2Целые доменные зоныРиск «широкого захвата»
DOMAIN‑KEYWORD3Промежуточные решенияЛожные совпадения
IP‑CIDR4Сети/подсетиНе забыть no-resolve
GEOIP5Страна/регионОтклонения из-за CDN
MATCH6Финальная корзинаТолько в самом конце
📌
Разделение ролей

Точные домены — попадание «в цель», GEOIP/MATCH — только для остатка.

Типовые конфликты и исправления

Сценарий 1: офисные системы уходят не туда из‑за раннего GEOIP,CN,DIRECT. Поднимите SSO и API выше GEOIP.

rules:
  - DOMAIN,sso.corp-auth.com,PROXY
  - DOMAIN,api.corp.example.com,DIRECT
  - DOMAIN-SUFFIX,corp.example.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

Сценарий 2: стриминг не распознаётся из‑за DOMAIN-KEYWORD. Разнесите API/медиа/основной домен.

rules:
  - DOMAIN,api.netflix.com,PROXY_STREAM
  - DOMAIN-SUFFIX,nflxvideo.net,PROXY_STREAM
  - DOMAIN-SUFFIX,netflix.com,PROXY_STREAM
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

Готовые шаблоны

rules:
  - DOMAIN,api.example.com,ProxyA
  - DOMAIN-SUFFIX,example.com,ProxyA
  - DOMAIN-KEYWORD,office,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,ProxyB

Базовый

rules:
  - DOMAIN,login.company.com,PROXY
  - DOMAIN-SUFFIX,company.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

С rule-providers

rule-providers:
  direct:
    type: http
    behavior: classical
    url: https://example.org/rules/direct.yaml
    path: ./ruleset/direct.yaml
    interval: 86400

rules:
  - RULE-SET,direct,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

Стриминг

rules:
  - DOMAIN-SUFFIX,netflix.com,PROXY_STREAM
  - DOMAIN-SUFFIX,nflxvideo.net,PROXY_STREAM
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

Отладка за 5 минут

  1. Включите логи и воспроизведите запрос
  2. Посмотрите, какая строка сработала
  3. Проверьте, нет ли над ней «широких» правил
  4. Сверьте версии правил и время обновления
  5. Сделайте регрессию: целевой домен + любимые сайты + критичный бизнес
tail -f ~/Library/Logs/ClashX/clashx.log
grep "api.example.com" ~/Library/Logs/ClashX/clashx.log
grep -E "MATCH|GEOIP|DOMAIN" ~/Library/Logs/ClashX/clashx.log | tail -n 50
📍
Где логи

Обычно: ~/Library/Logs/ClashX/.

Командная работа и версии

Разделите правила на слои: бизнес‑белый список, системные сервисы, география, финальный MATCH. В коммитах фиксируйте цель, охват и откат.

config/
  base.yaml
  rules/
    10-business.yaml
    20-services.yaml
    30-geo.yaml
    99-fallback.yaml
feat(rule): add explicit routing for corp SSO callbacks
fix(rule): move MATCH to last line and reduce keyword shadowing
chore(ruleset): bump streaming provider to 2026-02-10

FAQ

Q1: Что такое no-resolve?

A: Не пытается резолвить IP дополнительно — подходит для внутренних сетей.

Q2: Где ставить MATCH?

A: В самом конце и только один раз.

Q3: Что делать при конфликте rule‑provider и локальных правил?

A: Смотрите итоговый порядок — кто выше, тот и победил.

Q4: Почему один сервис то работает, то нет?

A: Разные поддомены попадают под разные правила — разделите их.

Q5: DOMAIN‑SUFFIX или KEYWORD?

A: Сначала SUFFIX; KEYWORD — временно и точечно.

Q6: Можно ли поднимать GEOIP?

A: Не рекомендуется — перекроет точные бизнес‑правила.

Приложение: лаборатория правил (воспроизводимые эксперименты)

Ниже приведены три небольших воспроизводимых эксперимента, которые помогают быстро понять: «порядок определяет поведение».

Эксперимент 1: эффект раннего MATCH

rules:
  - DOMAIN,api.example.com,PROXY
  - MATCH,DIRECT
  - DOMAIN-SUFFIX,example.com,PROXY
🧪
Ожидаемый результат

DOMAIN-SUFFIX,example.com,PROXY никогда не сработает, потому что MATCH преждевременно завершает сопоставление.

Эксперимент 2: слишком широкое покрытие по ключевому слову

rules:
  - DOMAIN-KEYWORD,cdn,PROXY
  - DOMAIN-SUFFIX,assets.example.cn,DIRECT
  - MATCH,DIRECT
🧪
Ожидаемый результат

Если доменное имя запроса содержит cdn, сначала сработает правило по ключевому слову, и последующий DIRECT не выполнится.

Эксперимент 3: выгода от выноса точных правил вверх

rules:
  - DOMAIN,auth.example.com,PROXY
  - DOMAIN-SUFFIX,example.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

Вынеся домен аутентификации вверх, вы разделяете логин‑цепочку и бизнес‑трафик, избегая конфликтов стратегий.

Ключевой пункт 1
Проверка «терминатора»
Ключевой пункт 2
Проверка покрытия
Ключевой пункт 3
Проверка выгоды от предшествования

Чек‑лист перед выпуском правил (для команд)

Исправить правила — лишь первый шаг; важно обеспечить стабильность при командной работе и последующих обновлениях.

4 обязательные проверки перед релизом

  1. Убедитесь, что MATCH в единственном экземпляре и строго в конце.
  2. Приоритетные бизнес‑домены расположены выше GEOIP/широких правил.
  3. Зафиксированы «цель изменения + область влияния + план отката».
  4. Проведены три вида регрессии: целевой сервис, популярные сайты, внутренние сервисы.

Рекомендуемый шаблон сообщения коммита

feat(rule): add explicit routing for auth callback domains
impact: login flow + payment callback only
rollback: revert rules/10-business.yaml to previous commit
🔗
Советы по сопряжённой диагностике

Если после изменения правил соединение стало нестабильным, дополнительно проверьте устранение таймаутов соединения и проверку утечек DNS.

Итог

Сначала — порядок и точность правил, затем — скорость и количество узлов. Перед релизом проверьте: ключевые домены, MATCH в конце, короткий регресс.