Clash 규칙을 직접 작성할 때 가장 큰 고통은 유지보수입니다. 규칙 목록이 늘어날수록 설정 파일이 방대해지고, 서비스의 도메인 목록을 업데이트할 때마다 YAML을 수동으로 편집해야 합니다. Rule Provider는 Clash의 모듈식 규칙 관리 시스템입니다. 규칙 목록은 외부 파일에 저장하고 Clash가 자동으로 가져와 업데이트하며, 설정 파일은 인라인으로 모든 항목을 나열하지 않고 참조만 합니다. 이 글에서는 전체 사용법과 모범 사례를 다룹니다.
Rule Provider 구조
Rule Provider는 두 부분으로 구성됩니다: 규칙 세트 파일(도메인/IP 목록)과 설정 파일의 선언. 규칙 세트 파일은 두 가지 형식을 지원합니다:
- YAML 형식: 각 규칙이
DOMAIN,example.com또는IP-CIDR,8.8.8.8/32와 같이 명시적인 타입 접두사와 함께 각 줄에 작성됩니다. 복잡한 혼합 규칙 세트에 적합합니다. - 텍스트 형식: 각 줄은 도메인 또는 IP만 포함(타입 접두사 없음). Clash가
behavior필드로 타입을 추론합니다. 더 단순하고 간결하며, 순수 도메인 또는 IP 목록에 이상적입니다.
payload: - DOMAIN,google.com - DOMAIN-SUFFIX,youtube.com - DOMAIN-SUFFIX,github.com - DOMAIN-KEYWORD,openai - IP-CIDR,8.8.8.8/32,no-resolve
설정에서 Rule Provider 선언
rule-providers 필드로 규칙 세트 소스를 선언합니다. http(원격 URL)와 file(로컬 경로) 타입 모두 지원됩니다.
rule-providers: proxy-list: type: http behavior: classical # 규칙 형식: classical / domain / ipcidr url: https://raw.githubusercontent.com/yourrepo/rules/proxy.yaml path: ./ruleset/proxy-list.yaml interval: 86400 # 자동 업데이트 간격(초): 24시간 direct-list: type: http behavior: domain url: https://raw.githubusercontent.com/yourrepo/rules/direct.txt path: ./ruleset/direct-list.txt interval: 86400
behavior 필드 설명
behavior는 Clash가 규칙 세트를 어떻게 파싱하고 인덱싱할지 알려주며, 매칭 성능에 직접적인 영향을 미칩니다:
- classical: 각 항목에 완전한 타입 접두사(예:
DOMAIN-SUFFIX,google.com). 다양한 규칙 타입 혼합 가능. 유연하지만 매칭이 약간 느림. - domain: 각 줄은 도메인 이름만. Clash가 와일드카드 매칭(예:
+.google.com)을 지원하는 도메인 트라이(접두사 트리)를 구성. 순수 도메인 목록에 최고의 성능. - ipcidr: 각 줄은 CIDR IP 범위. Clash가 매우 빠른 조회를 위한 기수 트리 인덱스를 구성. 대규모 IP 기반 라우팅 결정에 이상적.
domain behavior, IP 규칙에는 ipcidr behavior를 사용하세요. 모든 것에 classical을 사용하는 것은 피하세요. 전문화된 behavior는 해당 타입에 최적화된 데이터 구조를 사용하여 몇 배 더 빠른 조회가 가능합니다.rules에서 Rule Provider 참조
rule-providers를 선언한 후, rules 섹션에서 RULE-SET 키워드로 참조합니다:
rules: - RULE-SET,direct-list,DIRECT # 직접 연결 도메인 → DIRECT - RULE-SET,proxy-list,Proxy # 프록시 도메인 → 프록시 그룹 - RULE-SET,private-ip,DIRECT # 사설/LAN IP → DIRECT - GEOIP,KR,DIRECT # 국내 IP → DIRECT (국가 코드 조정) - MATCH,Proxy # 캐치올 → 프록시
규칙 우선순위와 순서
Clash는 rules를 위에서 아래로 평가하고 첫 번째 매칭에서 멈춥니다. 규칙 순서가 매우 중요합니다. 권장 순서:
- LAN/로컬 도메인 먼저(
DOMAIN-SUFFIX,.local,IP-CIDR,192.168.0.0/16) — 내부 트래픽이 실수로 프록시되는 것을 방지합니다. - 알려진 직접 연결 도메인(내부 서비스, 로컬 리소스)
- 알려진 프록시 도메인(프록시를 통해 라우팅할 외부 서비스)
- GEOIP,<국가 코드>,DIRECT: 국내 IP의 캐치올
- MATCH: 최종 캐치올 — 일반적으로 매칭되지 않은 트래픽을 프록시로
MATCH,DIRECT를 사용하지 마세요. 이렇게 하면 인식되지 않은 모든 트래픽이 직접 전송되어, 명시적으로 나열하지 않은 외부 서비스가 프록시를 완전히 우회하게 됩니다.file 타입: 오프라인 규칙 세트
오프라인 접근이나 커스텀 규칙이 필요한 경우, 로컬 파일을 가리키는 type: file을 사용합니다. 경로는 Clash 홈 디렉토리(일반적으로 ~/.config/clash/ 또는 ~/.local/share/mihomo/)에 상대적입니다.
rule-providers: my-custom-rules: type: file behavior: domain path: ./ruleset/my-custom.txt