Часто проблема в правилах, а не в узлах. ClashX сопоставляет сверху вниз и останавливается на первом совпадении, поэтому порядок — часть логики.
Почему кажется, что правила «случайно» не работают
Широкие правила (MATCH, GEOIP, DOMAIN‑SUFFIX с большим охватом) перекрывают точные, если стоят выше.
Срабатывает только первая совпавшая строка. Всё, что ниже, игнорируется.
Симптомы
- Поведение «то работает, то нет»
- В логах сплошные GEOIP или MATCH
- Главная открывается, а API/видео ломаются
- Изменения одной строки ломают другой сценарий
MATCH выше конца списка делает последующие правила мёртвыми.
Модель приоритета
Думайте как о «воронке»: чем точнее — тем выше. Рекомендуемый порядок: DOMAIN → DOMAIN‑SUFFIX → DOMAIN‑KEYWORD → IP‑CIDR → GEOIP → MATCH.
- Критичные домены — раньше всех
- Суффиксы — для целых зон
- Ключевые слова — как временная мера
- GEOIP и MATCH — только внизу как «корзины»
| Тип | Приоритет | Назначение | Риск |
|---|---|---|---|
DOMAIN | 1 | Ключевые сервисы | Требует поддержки списка |
DOMAIN‑SUFFIX | 2 | Целые доменные зоны | Риск «широкого захвата» |
DOMAIN‑KEYWORD | 3 | Промежуточные решения | Ложные совпадения |
IP‑CIDR | 4 | Сети/подсети | Не забыть no-resolve |
GEOIP | 5 | Страна/регион | Отклонения из-за CDN |
MATCH | 6 | Финальная корзина | Только в самом конце |
Точные домены — попадание «в цель», 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 минут
- Включите логи и воспроизведите запрос
- Посмотрите, какая строка сработала
- Проверьте, нет ли над ней «широких» правил
- Сверьте версии правил и время обновления
- Сделайте регрессию: целевой домен + любимые сайты + критичный бизнес
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
Вынеся домен аутентификации вверх, вы разделяете логин‑цепочку и бизнес‑трафик, избегая конфликтов стратегий.
Чек‑лист перед выпуском правил (для команд)
Исправить правила — лишь первый шаг; важно обеспечить стабильность при командной работе и последующих обновлениях.
4 обязательные проверки перед релизом
- Убедитесь, что MATCH в единственном экземпляре и строго в конце.
- Приоритетные бизнес‑домены расположены выше GEOIP/широких правил.
- Зафиксированы «цель изменения + область влияния + план отката».
- Проведены три вида регрессии: целевой сервис, популярные сайты, внутренние сервисы.
Рекомендуемый шаблон сообщения коммита
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 в конце, короткий регресс.